From 25171b9d4eec02f3729d8b4afa547a6015faea8d Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@91ce42f0-d328-0410-95d8-f526ca767f89> Date: Wed, 29 Mar 2006 09:52:39 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create tag 'Release-1.38.6'. git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/tags/Release-1.38.6@2872 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/ChangeLog | 224 +- bacula/Makefile.in | 6 + bacula/ReleaseNotes | 270 +- bacula/autoconf/config.h.in | 6 - bacula/autoconf/configure.in | 23 +- bacula/configure | 75 +- bacula/examples/recover.pl | 2886 +++ bacula/kernstodo | 63 +- bacula/kes-1.38 | 149 + bacula/kes-1.39 | 398 - bacula/nb-1.37 | 93 + bacula/nb-1.38 | 6 - bacula/platforms/mandrake/bacula.spec.in | 9 +- bacula/platforms/redhat/bacula.spec.in | 9 +- bacula/platforms/suse/bacula.spec.in | 9 +- bacula/po/POTFILES.in | 849 +- bacula/po/bacula.pot | 15587 ++++++++------- bacula/po/de.gmo | Bin 479 -> 479 bytes bacula/po/de.po | 15587 ++++++++------- bacula/po/fr.gmo | Bin 786 -> 786 bytes bacula/po/fr.po | 15596 ++++++++-------- bacula/po/it.gmo | Bin 470 -> 470 bytes bacula/po/it.po | 15587 ++++++++------- bacula/scripts/.cvsignore | 3 + bacula/scripts/Makefile.in | 9 + bacula/scripts/bacula-ctl-dir.in | 237 + bacula/scripts/bacula-ctl-fd.in | 237 + bacula/scripts/bacula-ctl-sd.in | 237 + bacula/scripts/bacula.in | 254 +- bacula/src/baconfig.h | 32 +- bacula/src/bacula.h | 2 - bacula/src/cats/bdb_update.c | 2 +- bacula/src/cats/cats.h | 41 +- bacula/src/cats/create_postgresql_database.in | 12 +- bacula/src/cats/make_mysql_tables.in | 20 - bacula/src/cats/make_postgresql_tables.in | 20 - bacula/src/cats/make_sqlite3_tables.in | 21 +- bacula/src/cats/make_sqlite_tables.in | 20 - bacula/src/cats/mysql.c | 16 +- bacula/src/cats/postgresql.c | 4 +- bacula/src/cats/protos.h | 25 +- bacula/src/cats/sql_create.c | 84 +- bacula/src/cats/sql_find.c | 29 +- bacula/src/cats/sql_get.c | 78 +- bacula/src/cats/sql_update.c | 2 +- bacula/src/cats/update_mysql_tables.in | 97 +- bacula/src/cats/update_postgresql_tables.in | 142 +- bacula/src/cats/update_sqlite3_tables.in | 260 +- bacula/src/cats/update_sqlite_tables.in | 260 +- bacula/src/cl | 21 +- bacula/src/console/Makefile.in | 2 +- bacula/src/console/conio.c | 6 +- bacula/src/console/console.c | 6 +- bacula/src/console/console_conf.c | 8 +- bacula/src/dird/autoprune.c | 4 +- bacula/src/dird/backup.c | 66 +- bacula/src/dird/bsr.c | 49 +- bacula/src/dird/catreq.c | 87 +- bacula/src/dird/dird.c | 15 +- bacula/src/dird/dird_conf.c | 131 +- bacula/src/dird/dird_conf.h | 84 +- bacula/src/dird/fd_cmds.c | 59 +- bacula/src/dird/getmsg.c | 4 +- bacula/src/dird/inc_conf.c | 10 +- bacula/src/dird/job.c | 155 +- bacula/src/dird/jobq.c | 49 +- bacula/src/dird/mac.c | 351 +- bacula/src/dird/msgchan.c | 127 +- bacula/src/dird/newvol.c | 2 +- bacula/src/dird/protos.h | 9 +- bacula/src/dird/restore.c | 4 +- bacula/src/dird/sql_cmds.c | 6 +- bacula/src/dird/ua_cmds.c | 10 +- bacula/src/dird/ua_dotcmds.c | 40 +- bacula/src/dird/ua_output.c | 26 +- bacula/src/dird/ua_prune.c | 28 +- bacula/src/dird/ua_purge.c | 33 +- bacula/src/dird/ua_restore.c | 20 +- bacula/src/dird/ua_run.c | 70 +- bacula/src/dird/ua_select.c | 6 +- bacula/src/dird/ua_status.c | 11 +- bacula/src/dird/verify.c | 94 +- bacula/src/filed/Makefile.in | 4 +- bacula/src/filed/backup.c | 344 +- bacula/src/filed/bacula-fd.conf.in | 2 +- bacula/src/filed/chksum.c | 84 + bacula/src/filed/chksum.h | 52 + bacula/src/filed/filed.c | 128 +- bacula/src/filed/filed.h | 1 + bacula/src/filed/filed_conf.c | 62 +- bacula/src/filed/filed_conf.h | 8 - bacula/src/filed/job.c | 48 +- bacula/src/filed/protos.h | 5 +- bacula/src/filed/restore.c | 356 +- bacula/src/filed/status.c | 4 +- bacula/src/filed/verify.c | 214 +- bacula/src/filed/verify_vol.c | 205 +- bacula/src/filed/win32/winbacula.h | 2 +- bacula/src/findlib/attribs.c | 79 +- bacula/src/findlib/bfile.c | 284 +- bacula/src/findlib/bfile.h | 45 +- bacula/src/findlib/create_file.c | 67 +- bacula/src/findlib/find.h | 19 +- bacula/src/gnome2-console/.cvsignore | 1 - bacula/src/gnome2-console/Makefile.in | 12 +- bacula/src/gnome2-console/callbacks.c | 142 +- bacula/src/gnome2-console/console.c | 6 +- bacula/src/gnome2-console/console_conf.c | 10 +- .../gnome2-console/test-gnome-console.conf | 2 +- bacula/src/jcr.h | 49 +- bacula/src/lib/Makefile.in | 31 +- bacula/src/lib/alist.h | 9 +- bacula/src/lib/attr.c | 6 +- bacula/src/lib/bnet_pkt.c | 153 + bacula/src/lib/bpipe.c | 9 +- bacula/src/lib/bsnprintf.c | 913 - bacula/src/lib/btree.c | 477 - bacula/src/lib/btree.h | 94 - bacula/src/lib/crypto.c | 1620 -- bacula/src/lib/crypto.h | 22 +- bacula/src/lib/dlist.h | 9 +- bacula/src/lib/jcr.c | 48 +- bacula/src/lib/lib.h | 4 +- bacula/src/lib/openssl.c | 232 - bacula/src/lib/openssl.h | 47 - bacula/src/lib/parse_conf.c | 51 +- bacula/src/lib/parse_conf.h | 33 +- bacula/src/lib/protos.h | 61 +- bacula/src/lib/rwlock.c | 17 +- bacula/src/lib/rwlock.h | 17 +- bacula/src/lib/scan.c | 10 + bacula/src/lib/tls.c | 280 +- bacula/src/lib/tls.h | 3 + bacula/src/lib/util.c | 2 +- bacula/src/lib/winapi.h | 2 +- bacula/src/stored/Makefile.in | 30 +- bacula/src/stored/acquire.c | 147 +- bacula/src/stored/append.c | 22 +- bacula/src/stored/askdir.c | 19 +- bacula/src/stored/autochanger.c | 24 +- bacula/src/stored/bcopy.c | 16 +- bacula/src/stored/bextract.c | 7 +- bacula/src/stored/block.c | 33 +- bacula/src/stored/bls.c | 7 +- bacula/src/stored/bscan.c | 63 +- bacula/src/stored/btape.c | 130 +- bacula/src/stored/butil.c | 6 +- bacula/src/stored/dev.c | 726 +- bacula/src/stored/dev.h | 39 +- bacula/src/stored/device.c | 27 +- bacula/src/stored/dircmd.c | 120 +- bacula/src/stored/dvd.c | 188 +- bacula/src/stored/fd_cmds.c | 27 +- bacula/src/stored/job.c | 25 +- bacula/src/stored/label.c | 33 +- bacula/src/stored/mac.c | 209 - bacula/src/stored/mount.c | 181 +- bacula/src/stored/protos.h | 23 +- bacula/src/stored/read.c | 4 +- bacula/src/stored/read_record.c | 19 +- bacula/src/stored/record.c | 24 - bacula/src/stored/reserve.c | 198 +- bacula/src/stored/scan.c | 148 - bacula/src/stored/spool.c | 2 +- bacula/src/stored/status.c | 2 +- bacula/src/stored/stored.c | 10 +- bacula/src/stored/stored_conf.c | 63 +- bacula/src/stored/stored_conf.h | 2 +- bacula/src/stored/wait.c | 4 +- bacula/src/tools/Makefile.in | 7 +- bacula/src/tools/bsmtp.c | 36 +- bacula/src/tools/regex.c | 137 + bacula/src/tray-monitor/tray_conf.c | 72 +- bacula/src/version.h | 8 +- bacula/src/win32/baculafd/baculafd.mak | 45 +- bacula/src/win32/compat/compat.cpp | 228 +- bacula/src/win32/compat/vss.cpp | 29 - bacula/src/win32/compat/vss.h | 3 +- bacula/src/win32/compat/vss_generic.cpp | 6 +- bacula/src/win32/console/console.mak | 11 - bacula/src/win32/filed/chksum.cpp | 1 + bacula/src/win32/lib/crypto.cpp | 1 - bacula/src/win32/wx-console/filelist | 1 - bacula/src/win32/wx-console/wx-console.mak | 25 - bacula/src/wx-console/Makefile.in | 2 +- bacula/src/wx-console/console_conf.c | 8 +- gui/.cvsignore | 6 - gui/Makefile | 140 - gui/Makefile.in | 98 - gui/README | 50 - gui/autoconf/.cvsignore | 3 - gui/autoconf/Make.common.in | 42 - gui/autoconf/acconfig.h | 24 - gui/autoconf/aclocal.m4 | 196 - gui/autoconf/config.guess | 1447 -- gui/autoconf/config.h.in | 32 - gui/autoconf/config.sub | 1555 -- gui/autoconf/configure.in | 288 - gui/autoconf/install-sh | 251 - gui/autoconf/install.sh | 235 - gui/autoconf/mkinstalldirs | 99 - gui/bacula-web/.cvsignore | 1 - gui/bacula-web/CONTACT | 2 - gui/bacula-web/COPYING | 280 - gui/bacula-web/ChangeLog | 40 - gui/bacula-web/README | 64 - gui/bacula-web/TODO | 17 - gui/bacula-web/array_fill.func.php | 14 - gui/bacula-web/classes.inc | 503 - gui/bacula-web/configs/.htaccess | 1 - gui/bacula-web/configs/bacula.conf | 87 - .../external_packages/phplot/ChangeLog | 1610 -- .../external_packages/phplot/LICENSE.GPL | 340 - .../external_packages/phplot/LICENSE.PHP_3_0 | 68 - .../external_packages/phplot/README | 45 - .../phplot/doc/imgs/graph1.png | Bin 35562 -> 0 bytes .../phplot/doc/imgs/graph2.png | Bin 16749 -> 0 bytes .../phplot/doc/imgs/graph3.png | Bin 11392 -> 0 bytes .../phplot/doc/imgs/phplot-dia.png | Bin 47604 -> 0 bytes .../phplot/doc/imgs/qstart_fig1.png | Bin 1800 -> 0 bytes .../phplot/doc/imgs/qstart_fig2.png | Bin 2023 -> 0 bytes .../phplot/doc/imgs/qstart_fig3.png | Bin 2630 -> 0 bytes .../phplot/doc/imgs/qstart_fig4.png | Bin 2602 -> 0 bytes .../external_packages/phplot/doc/index.php | 152 - .../phplot/doc/internal_functions.html | 269 - .../phplot/doc/quickstart.html | 455 - .../external_packages/phplot/doc/schema.html | 35 - .../external_packages/phplot/doc/style.css | 42 - .../phplot/doc/user_functions.html | 316 - .../phplot/doc/user_internal_functions.html | 62 - .../phplot/examples/benjamingothic.ttf | Bin 19093 -> 0 bytes .../phplot/examples/create_chart.php | 167 - .../phplot/examples/data.php | 27 - .../phplot/examples/data_date.php | 267 - .../phplot/examples/data_date2.php | 267 - .../phplot/examples/data_sample1.php | 58 - .../phplot/examples/data_sample2.php | 52 - .../phplot/examples/data_sample3.php | 58 - .../phplot/examples/data_sample4.php | 24 - .../phplot/examples/data_sample5.php | 31 - .../phplot/examples/example1.php | 16 - .../phplot/examples/example2.php | 22 - .../phplot/examples/example3.php | 32 - .../phplot/examples/example4.php | 80 - .../phplot/examples/example6.php | 19 - .../phplot/examples/example7.php | 33 - .../phplot/examples/example8.php | 61 - .../phplot/examples/example9.php | 35 - .../phplot/examples/format_chart.php | 345 - .../phplot/examples/inline_image.php | 28 - .../phplot/examples/test_setup.php | 67 - .../external_packages/phplot/phplot.php | 4448 ----- .../external_packages/phplot/phplot_data.php | 258 - .../external_packages/phplot/rgb.inc.php | 744 - .../external_packages/smarty/COPYING.lib | 458 - .../smarty/Config_File.class.php | 389 - .../external_packages/smarty/Smarty.class.php | 1934 -- .../smarty/Smarty_Compiler.class.php | 2311 --- .../external_packages/smarty/debug.tpl | 64 - .../core.assemble_plugin_filepath.php | 67 - .../core.assign_smarty_interface.php | 43 - .../internals/core.create_dir_structure.php | 79 - .../internals/core.display_debug_console.php | 61 - .../internals/core.get_include_path.php | 44 - .../smarty/internals/core.get_microtime.php | 23 - .../internals/core.get_php_resource.php | 80 - .../smarty/internals/core.is_secure.php | 59 - .../smarty/internals/core.is_trusted.php | 47 - .../smarty/internals/core.load_plugins.php | 125 - .../internals/core.load_resource_plugin.php | 74 - .../internals/core.process_cached_inserts.php | 71 - .../core.process_compiled_include.php | 37 - .../smarty/internals/core.read_cache_file.php | 101 - .../smarty/internals/core.rm_auto.php | 71 - .../smarty/internals/core.rmdir.php | 54 - .../internals/core.run_insert_handler.php | 71 - .../internals/core.smarty_include_php.php | 50 - .../internals/core.write_cache_file.php | 96 - .../internals/core.write_compiled_include.php | 91 - .../core.write_compiled_resource.php | 35 - .../smarty/internals/core.write_file.php | 54 - .../smarty/plugins/block.textformat.php | 102 - .../smarty/plugins/compiler.assign.php | 38 - .../plugins/function.assign_debug_info.php | 39 - .../smarty/plugins/function.config_load.php | 140 - .../smarty/plugins/function.counter.php | 79 - .../smarty/plugins/function.cycle.php | 102 - .../smarty/plugins/function.debug.php | 35 - .../smarty/plugins/function.eval.php | 48 - .../smarty/plugins/function.fetch.php | 220 - .../plugins/function.html_checkboxes.php | 143 - .../smarty/plugins/function.html_image.php | 139 - .../smarty/plugins/function.html_options.php | 121 - .../smarty/plugins/function.html_radios.php | 156 - .../plugins/function.html_select_date.php | 322 - .../plugins/function.html_select_time.php | 192 - .../smarty/plugins/function.html_table.php | 137 - .../smarty/plugins/function.mailto.php | 163 - .../smarty/plugins/function.math.php | 83 - .../smarty/plugins/function.popup.php | 117 - .../smarty/plugins/function.popup_init.php | 39 - .../smarty/plugins/modifier.capitalize.php | 42 - .../smarty/plugins/modifier.cat.php | 33 - .../plugins/modifier.count_characters.php | 31 - .../plugins/modifier.count_paragraphs.php | 28 - .../plugins/modifier.count_sentences.php | 28 - .../smarty/plugins/modifier.count_words.php | 32 - .../smarty/plugins/modifier.date_format.php | 48 - .../plugins/modifier.debug_print_var.php | 56 - .../smarty/plugins/modifier.default.php | 31 - .../smarty/plugins/modifier.escape.php | 89 - .../smarty/plugins/modifier.fsize_format.php | 58 - .../smarty/plugins/modifier.indent.php | 27 - .../smarty/plugins/modifier.lower.php | 25 - .../smarty/plugins/modifier.nl2br.php | 35 - .../smarty/plugins/modifier.regex_replace.php | 33 - .../smarty/plugins/modifier.replace.php | 29 - .../smarty/plugins/modifier.spacify.php | 29 - .../smarty/plugins/modifier.string_format.php | 28 - .../smarty/plugins/modifier.strip.php | 33 - .../smarty/plugins/modifier.strip_tags.php | 31 - .../smarty/plugins/modifier.truncate.php | 49 - .../smarty/plugins/modifier.upper.php | 25 - .../smarty/plugins/modifier.wordwrap.php | 28 - .../plugins/outputfilter.trimwhitespace.php | 75 - .../plugins/shared.escape_special_chars.php | 30 - .../smarty/plugins/shared.make_timestamp.php | 45 - .../smarty_gettext-0.9/COPYING | 458 - .../smarty_gettext-0.9/ChangeLog | 9 - .../smarty_gettext-0.9/README | 91 - .../smarty_gettext-0.9/smarty_gettext.php | 115 - .../smarty_gettext-0.9/tsmarty2c.php | 114 - gui/bacula-web/images/backlast.gif | Bin 1099 -> 0 bytes gui/bacula-web/images/backlastred.gif | Bin 1099 -> 0 bytes gui/bacula-web/images/bg1.png | Bin 338 -> 0 bytes gui/bacula-web/images/bg2.png | Bin 444 -> 0 bytes gui/bacula-web/images/bg3.png | Bin 324 -> 0 bytes gui/bacula-web/images/bg4.png | Bin 476 -> 0 bytes gui/bacula-web/images/bg5.png | Bin 229 -> 0 bytes gui/bacula-web/images/bg6.png | Bin 250 -> 0 bytes gui/bacula-web/images/bg7.gif | Bin 101 -> 0 bytes gui/bacula-web/images/bg8.png | Bin 372 -> 0 bytes gui/bacula-web/images/empty.png | Bin 124 -> 0 bytes gui/bacula-web/images/end2.png | Bin 1576 -> 0 bytes gui/bacula-web/images/end4.png | Bin 1766 -> 0 bytes gui/bacula-web/images/refresh.gif | Bin 934 -> 0 bytes gui/bacula-web/images/s_error.gif | Bin 868 -> 0 bytes gui/bacula-web/images/s_ok.gif | Bin 855 -> 0 bytes gui/bacula-web/index.php | 164 - gui/bacula-web/js/mini/overlib_anchor_mini.js | 146 - .../js/mini/overlib_crossframe_mini.js | 44 - .../js/mini/overlib_cssstyle_mini.js | 44 - .../js/mini/overlib_exclusive_mini.js | 33 - .../js/mini/overlib_followscroll_mini.js | 64 - .../js/mini/overlib_hideform_mini.js | 40 - gui/bacula-web/js/mini/overlib_mini.js | 328 - gui/bacula-web/js/mini/overlib_shadow_mini.js | 55 - gui/bacula-web/js/overlib.js | 1315 -- gui/bacula-web/js/overlib_anchor.js | 437 - gui/bacula-web/js/overlib_crossframe.js | 125 - gui/bacula-web/js/overlib_cssstyle.js | 180 - gui/bacula-web/js/overlib_exclusive.js | 122 - gui/bacula-web/js/overlib_followscroll.js | 265 - gui/bacula-web/js/overlib_hideform.js | 133 - gui/bacula-web/js/overlib_shadow.js | 250 - gui/bacula-web/lang.php | 38 - .../locale/de/LC_MESSAGES/messages.mo | Bin 3133 -> 0 bytes .../locale/de/LC_MESSAGES/messages_de.po | 239 - .../locale/en/LC_MESSAGES/messages.mo | Bin 77 -> 0 bytes .../locale/en/LC_MESSAGES/messages.po | 239 - .../locale/es/LC_MESSAGES/messages.mo | Bin 2622 -> 0 bytes .../locale/es/LC_MESSAGES/messages.po | 238 - .../locale/fr/LC_MESSAGES/messages.mo | Bin 2841 -> 0 bytes .../locale/fr/LC_MESSAGES/messages.po.fr | 239 - .../locale/it/LC_MESSAGES/messages.mo | Bin 3229 -> 0 bytes .../locale/it/LC_MESSAGES/messages_it.po | 241 - gui/bacula-web/messages.po | 253 - gui/bacula-web/paths.php | 14 - gui/bacula-web/report.php | 78 - gui/bacula-web/stats.php | 63 - gui/bacula-web/templates/css.tpl | 48 - gui/bacula-web/templates/footer.tpl | 2 - gui/bacula-web/templates/full_popup.tpl | 14 - gui/bacula-web/templates/generaldata.tpl | 55 - gui/bacula-web/templates/header.tpl | 39 - gui/bacula-web/templates/index.tpl | 32 - gui/bacula-web/templates/last_run_report.tpl | 195 - gui/bacula-web/templates/report.tpl | 101 - gui/bacula-web/templates/report_select.tpl | 63 - gui/bacula-web/templates/volumes.tpl | 58 - gui/bacula-web/templates_c/blank | 1 - gui/bacula-web/test.php | 51 - gui/bacula-web/tsmarty2c.php | 114 - gui/bimagemgr/.cvsignore | 2 - gui/bimagemgr/Makefile.in | 35 - gui/bimagemgr/README | 63 - gui/bimagemgr/bacula-bimagemgr.spec.in | 133 - gui/bimagemgr/bimagemgr.gif | Bin 30069 -> 0 bytes gui/bimagemgr/bimagemgr.pl | 582 - gui/bimagemgr/cdrom_spins.gif | Bin 3486 -> 0 bytes gui/bimagemgr/clearpixel.gif | Bin 43 -> 0 bytes gui/bimagemgr/create_cdimage_table.pl | 85 - gui/bimagemgr/temp.html | 0 gui/configure | 3534 ---- regress/.cvsignore | 12 - regress/Makefile.in | 72 - regress/README | 107 - regress/all-non-root-2tape-tests | 12 - regress/all-non-root-tape-tests | 28 - regress/all-non-root-tests | 42 - regress/all-root-tests | 11 - regress/all-tape-and-file-tests | 7 - regress/all-tests | 8 - regress/config | 9 - regress/do_all | 11 - regress/do_all_tapes | 3 - regress/do_file | 6 - regress/endtime | 12 - regress/file | 2 - regress/freebsd.conf | 31 - regress/kern.conf | 33 - regress/misc-tests | 2 - regress/prototype.conf | 51 - regress/run | 3 - regress/scripts/.cvsignore | 24 - regress/scripts/bacula-dir-tape.conf.in | 198 - regress/scripts/bacula-dir-win32-tape.conf.in | 145 - regress/scripts/bacula-sd-2disk-drive.conf | 75 - regress/scripts/bacula-sd-2disk-drive.conf.in | 75 - regress/scripts/bacula-sd-2disk.conf | 61 - regress/scripts/bacula-sd-2disk.conf.in | 61 - regress/scripts/bacula-sd-2drive.conf.in | 75 - regress/scripts/bacula-sd-2tape.conf.in | 61 - regress/scripts/bacula-sd-tape.conf.in | 54 - regress/scripts/bacula-sd.conf.in | 74 - regress/scripts/check_for_zombie_jobs | 51 - regress/scripts/cleanup | 19 - regress/scripts/cleanup-2drive.in | 44 - regress/scripts/cleanup-2tape.in | 30 - regress/scripts/cleanup-tape.in | 8 - regress/scripts/copy-2disk-confs | 10 - regress/scripts/copy-2disk-drive-confs | 10 - regress/scripts/copy-2drive-confs | 15 - regress/scripts/copy-2tape-confs | 15 - regress/scripts/copy-confs | 11 - regress/scripts/copy-crypto-confs | 6 - regress/scripts/copy-tape-confs | 11 - regress/scripts/copy-test-confs | 11 - regress/scripts/copy-testa-confs | 11 - regress/scripts/copy-win32-confs | 11 - regress/scripts/crypto-bacula-fd.conf.in | 36 - regress/scripts/cryptokeypair.pem | 53 - regress/scripts/do_sed | 71 - regress/scripts/exclude-dev-test | 5 - regress/scripts/exclude-etc-test | 1 - regress/scripts/exclude-lib-test | 5 - regress/scripts/flist | 22 - regress/scripts/freebsd_tape_options | 8 - regress/scripts/linux_osst_tape_options | 7 - regress/scripts/linux_tape_options | 1 - regress/scripts/new-test-bacula-dir.conf.in | 312 - regress/scripts/prepare-two-disks | 6 - regress/scripts/prepare-two-tapes.in | 13 - regress/scripts/regress-config | 24 - regress/scripts/setup | 44 - regress/scripts/test-bacula-dir.conf.in | 313 - regress/scripts/test-bacula-fd.conf.in | 33 - regress/scripts/test-bacula-sd.conf.in | 107 - regress/scripts/test-console.conf.in | 10 - regress/scripts/testa-bacula-dir.conf.in | 149 - regress/scripts/win32-bacula-dir-tape.conf.in | 160 - regress/scripts/win32-bacula-fd.conf | 33 - regress/scripts/win32-bacula-sd-tape.conf | 54 - regress/starttime | 6 - regress/tape | 2 - regress/tests/.cvsignore | 2 - regress/tests/2drive-incremental-2disk | 135 - regress/tests/2drive-incremental-2tape | 139 - regress/tests/auto-label-test | 97 - regress/tests/backup-bacula-tape | 145 - regress/tests/backup-bacula-test | 94 - regress/tests/backup-win32-tape | 56 - regress/tests/bextract-test | 80 - regress/tests/bscan-tape | 178 - regress/tests/bscan-test | 123 - regress/tests/bsr-opt-test | 96 - regress/tests/btape-fill-full-tape | 34 - regress/tests/btape-fill-tape | 39 - regress/tests/compressed-test | 67 - regress/tests/concurrent-jobs-test | 83 - regress/tests/dev-test-root | 85 - regress/tests/differential-test | 128 - regress/tests/eot-fail-tape | 62 - regress/tests/etc-test-root | 70 - regress/tests/filed-crypto-test | 79 - regress/tests/fixed-block-size-tape | 84 - regress/tests/four-concurrent-jobs-tape | 82 - regress/tests/four-concurrent-jobs-test | 96 - regress/tests/four-jobs-tape | 175 - regress/tests/four-jobs-test | 176 - regress/tests/incremental-2disk | 111 - regress/tests/incremental-2tape | 110 - regress/tests/incremental-tape | 82 - regress/tests/incremental-test | 165 - regress/tests/lib-tape-root | 67 - regress/tests/lib-test-root | 76 - regress/tests/query-test | 130 - regress/tests/recycle-test | 98 - regress/tests/relabel-tape | 122 - regress/tests/restore-by-file-tape | 120 - regress/tests/restore-by-file-test | 87 - regress/tests/restore-disk-seek-test | 109 - regress/tests/restore2-by-file-test | 65 - regress/tests/scratch-pool-test | 95 - regress/tests/six-vol-test | 72 - regress/tests/small-file-size-tape | 61 - regress/tests/span-vol-test | 88 - regress/tests/sparse-compressed-test | 62 - regress/tests/sparse-test | 64 - regress/tests/test0 | 3 - regress/tests/truncate-bug-tape | 87 - regress/tests/two-jobs-test | 93 - regress/tests/two-pool-tape | 107 - regress/tests/two-pool-test | 106 - regress/tests/two-vol-test | 78 - regress/tests/two-volume-tape | 85 - regress/tests/two-volume-test | 87 - regress/tests/usr-tape-root | 62 - regress/tests/verify-vol-test | 76 - regress/tests/weird-files-test | 95 - regress/tests/weird-files2-test | 112 - regress/tests/win32-backup-tape | 72 - regress/tests/win32-to-linux-tape | 72 - regress/weird-files.tar.gz | Bin 1699 -> 0 bytes 534 files changed, 38472 insertions(+), 88098 deletions(-) create mode 100755 bacula/examples/recover.pl delete mode 100644 bacula/kes-1.39 create mode 100644 bacula/nb-1.37 delete mode 100644 bacula/nb-1.38 create mode 100644 bacula/scripts/bacula-ctl-dir.in create mode 100644 bacula/scripts/bacula-ctl-fd.in create mode 100644 bacula/scripts/bacula-ctl-sd.in create mode 100644 bacula/src/filed/chksum.c create mode 100644 bacula/src/filed/chksum.h create mode 100644 bacula/src/lib/bnet_pkt.c delete mode 100644 bacula/src/lib/bsnprintf.c delete mode 100644 bacula/src/lib/btree.c delete mode 100644 bacula/src/lib/btree.h delete mode 100644 bacula/src/lib/crypto.c delete mode 100644 bacula/src/lib/openssl.c delete mode 100644 bacula/src/lib/openssl.h delete mode 100644 bacula/src/stored/mac.c delete mode 100644 bacula/src/stored/scan.c create mode 100644 bacula/src/tools/regex.c create mode 100644 bacula/src/win32/filed/chksum.cpp delete mode 100644 bacula/src/win32/lib/crypto.cpp delete mode 100644 gui/.cvsignore delete mode 100644 gui/Makefile delete mode 100755 gui/Makefile.in delete mode 100644 gui/README delete mode 100644 gui/autoconf/.cvsignore delete mode 100644 gui/autoconf/Make.common.in delete mode 100644 gui/autoconf/acconfig.h delete mode 100644 gui/autoconf/aclocal.m4 delete mode 100755 gui/autoconf/config.guess delete mode 100644 gui/autoconf/config.h.in delete mode 100755 gui/autoconf/config.sub delete mode 100644 gui/autoconf/configure.in delete mode 100755 gui/autoconf/install-sh delete mode 100755 gui/autoconf/install.sh delete mode 100755 gui/autoconf/mkinstalldirs delete mode 100644 gui/bacula-web/.cvsignore delete mode 100644 gui/bacula-web/CONTACT delete mode 100644 gui/bacula-web/COPYING delete mode 100644 gui/bacula-web/ChangeLog delete mode 100644 gui/bacula-web/README delete mode 100644 gui/bacula-web/TODO delete mode 100644 gui/bacula-web/array_fill.func.php delete mode 100644 gui/bacula-web/classes.inc delete mode 100644 gui/bacula-web/configs/.htaccess delete mode 100644 gui/bacula-web/configs/bacula.conf delete mode 100644 gui/bacula-web/external_packages/phplot/ChangeLog delete mode 100644 gui/bacula-web/external_packages/phplot/LICENSE.GPL delete mode 100644 gui/bacula-web/external_packages/phplot/LICENSE.PHP_3_0 delete mode 100644 gui/bacula-web/external_packages/phplot/README delete mode 100644 gui/bacula-web/external_packages/phplot/doc/imgs/graph1.png delete mode 100644 gui/bacula-web/external_packages/phplot/doc/imgs/graph2.png delete mode 100644 gui/bacula-web/external_packages/phplot/doc/imgs/graph3.png delete mode 100644 gui/bacula-web/external_packages/phplot/doc/imgs/phplot-dia.png delete mode 100644 gui/bacula-web/external_packages/phplot/doc/imgs/qstart_fig1.png delete mode 100644 gui/bacula-web/external_packages/phplot/doc/imgs/qstart_fig2.png delete mode 100644 gui/bacula-web/external_packages/phplot/doc/imgs/qstart_fig3.png delete mode 100644 gui/bacula-web/external_packages/phplot/doc/imgs/qstart_fig4.png delete mode 100644 gui/bacula-web/external_packages/phplot/doc/index.php delete mode 100644 gui/bacula-web/external_packages/phplot/doc/internal_functions.html delete mode 100644 gui/bacula-web/external_packages/phplot/doc/quickstart.html delete mode 100644 gui/bacula-web/external_packages/phplot/doc/schema.html delete mode 100644 gui/bacula-web/external_packages/phplot/doc/style.css delete mode 100644 gui/bacula-web/external_packages/phplot/doc/user_functions.html delete mode 100644 gui/bacula-web/external_packages/phplot/doc/user_internal_functions.html delete mode 100644 gui/bacula-web/external_packages/phplot/examples/benjamingothic.ttf delete mode 100644 gui/bacula-web/external_packages/phplot/examples/create_chart.php delete mode 100644 gui/bacula-web/external_packages/phplot/examples/data.php delete mode 100644 gui/bacula-web/external_packages/phplot/examples/data_date.php delete mode 100644 gui/bacula-web/external_packages/phplot/examples/data_date2.php delete mode 100644 gui/bacula-web/external_packages/phplot/examples/data_sample1.php delete mode 100644 gui/bacula-web/external_packages/phplot/examples/data_sample2.php delete mode 100644 gui/bacula-web/external_packages/phplot/examples/data_sample3.php delete mode 100644 gui/bacula-web/external_packages/phplot/examples/data_sample4.php delete mode 100644 gui/bacula-web/external_packages/phplot/examples/data_sample5.php delete mode 100644 gui/bacula-web/external_packages/phplot/examples/example1.php delete mode 100644 gui/bacula-web/external_packages/phplot/examples/example2.php delete mode 100644 gui/bacula-web/external_packages/phplot/examples/example3.php delete mode 100644 gui/bacula-web/external_packages/phplot/examples/example4.php delete mode 100644 gui/bacula-web/external_packages/phplot/examples/example6.php delete mode 100644 gui/bacula-web/external_packages/phplot/examples/example7.php delete mode 100644 gui/bacula-web/external_packages/phplot/examples/example8.php delete mode 100644 gui/bacula-web/external_packages/phplot/examples/example9.php delete mode 100644 gui/bacula-web/external_packages/phplot/examples/format_chart.php delete mode 100644 gui/bacula-web/external_packages/phplot/examples/inline_image.php delete mode 100644 gui/bacula-web/external_packages/phplot/examples/test_setup.php delete mode 100644 gui/bacula-web/external_packages/phplot/phplot.php delete mode 100644 gui/bacula-web/external_packages/phplot/phplot_data.php delete mode 100644 gui/bacula-web/external_packages/phplot/rgb.inc.php delete mode 100644 gui/bacula-web/external_packages/smarty/COPYING.lib delete mode 100644 gui/bacula-web/external_packages/smarty/Config_File.class.php delete mode 100644 gui/bacula-web/external_packages/smarty/Smarty.class.php delete mode 100644 gui/bacula-web/external_packages/smarty/Smarty_Compiler.class.php delete mode 100644 gui/bacula-web/external_packages/smarty/debug.tpl delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.assemble_plugin_filepath.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.assign_smarty_interface.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.create_dir_structure.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.display_debug_console.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.get_include_path.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.get_microtime.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.get_php_resource.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.is_secure.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.is_trusted.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.load_plugins.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.load_resource_plugin.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.process_cached_inserts.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.process_compiled_include.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.read_cache_file.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.rm_auto.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.rmdir.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.run_insert_handler.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.smarty_include_php.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.write_cache_file.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.write_compiled_include.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.write_compiled_resource.php delete mode 100644 gui/bacula-web/external_packages/smarty/internals/core.write_file.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/block.textformat.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/compiler.assign.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/function.assign_debug_info.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/function.config_load.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/function.counter.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/function.cycle.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/function.debug.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/function.eval.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/function.fetch.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/function.html_checkboxes.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/function.html_image.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/function.html_options.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/function.html_radios.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/function.html_select_date.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/function.html_select_time.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/function.html_table.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/function.mailto.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/function.math.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/function.popup.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/function.popup_init.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.capitalize.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.cat.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.count_characters.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.count_paragraphs.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.count_sentences.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.count_words.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.date_format.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.debug_print_var.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.default.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.escape.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.fsize_format.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.indent.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.lower.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.nl2br.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.regex_replace.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.replace.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.spacify.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.string_format.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.strip.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.strip_tags.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.truncate.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.upper.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/modifier.wordwrap.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/outputfilter.trimwhitespace.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/shared.escape_special_chars.php delete mode 100644 gui/bacula-web/external_packages/smarty/plugins/shared.make_timestamp.php delete mode 100644 gui/bacula-web/external_packages/smarty_gettext-0.9/COPYING delete mode 100644 gui/bacula-web/external_packages/smarty_gettext-0.9/ChangeLog delete mode 100644 gui/bacula-web/external_packages/smarty_gettext-0.9/README delete mode 100644 gui/bacula-web/external_packages/smarty_gettext-0.9/smarty_gettext.php delete mode 100644 gui/bacula-web/external_packages/smarty_gettext-0.9/tsmarty2c.php delete mode 100644 gui/bacula-web/images/backlast.gif delete mode 100644 gui/bacula-web/images/backlastred.gif delete mode 100644 gui/bacula-web/images/bg1.png delete mode 100644 gui/bacula-web/images/bg2.png delete mode 100644 gui/bacula-web/images/bg3.png delete mode 100644 gui/bacula-web/images/bg4.png delete mode 100644 gui/bacula-web/images/bg5.png delete mode 100644 gui/bacula-web/images/bg6.png delete mode 100644 gui/bacula-web/images/bg7.gif delete mode 100644 gui/bacula-web/images/bg8.png delete mode 100644 gui/bacula-web/images/empty.png delete mode 100644 gui/bacula-web/images/end2.png delete mode 100644 gui/bacula-web/images/end4.png delete mode 100644 gui/bacula-web/images/refresh.gif delete mode 100644 gui/bacula-web/images/s_error.gif delete mode 100644 gui/bacula-web/images/s_ok.gif delete mode 100644 gui/bacula-web/index.php delete mode 100644 gui/bacula-web/js/mini/overlib_anchor_mini.js delete mode 100644 gui/bacula-web/js/mini/overlib_crossframe_mini.js delete mode 100644 gui/bacula-web/js/mini/overlib_cssstyle_mini.js delete mode 100644 gui/bacula-web/js/mini/overlib_exclusive_mini.js delete mode 100644 gui/bacula-web/js/mini/overlib_followscroll_mini.js delete mode 100644 gui/bacula-web/js/mini/overlib_hideform_mini.js delete mode 100644 gui/bacula-web/js/mini/overlib_mini.js delete mode 100644 gui/bacula-web/js/mini/overlib_shadow_mini.js delete mode 100644 gui/bacula-web/js/overlib.js delete mode 100644 gui/bacula-web/js/overlib_anchor.js delete mode 100644 gui/bacula-web/js/overlib_crossframe.js delete mode 100644 gui/bacula-web/js/overlib_cssstyle.js delete mode 100644 gui/bacula-web/js/overlib_exclusive.js delete mode 100644 gui/bacula-web/js/overlib_followscroll.js delete mode 100644 gui/bacula-web/js/overlib_hideform.js delete mode 100644 gui/bacula-web/js/overlib_shadow.js delete mode 100644 gui/bacula-web/lang.php delete mode 100644 gui/bacula-web/locale/de/LC_MESSAGES/messages.mo delete mode 100644 gui/bacula-web/locale/de/LC_MESSAGES/messages_de.po delete mode 100644 gui/bacula-web/locale/en/LC_MESSAGES/messages.mo delete mode 100644 gui/bacula-web/locale/en/LC_MESSAGES/messages.po delete mode 100644 gui/bacula-web/locale/es/LC_MESSAGES/messages.mo delete mode 100644 gui/bacula-web/locale/es/LC_MESSAGES/messages.po delete mode 100644 gui/bacula-web/locale/fr/LC_MESSAGES/messages.mo delete mode 100644 gui/bacula-web/locale/fr/LC_MESSAGES/messages.po.fr delete mode 100644 gui/bacula-web/locale/it/LC_MESSAGES/messages.mo delete mode 100644 gui/bacula-web/locale/it/LC_MESSAGES/messages_it.po delete mode 100644 gui/bacula-web/messages.po delete mode 100644 gui/bacula-web/paths.php delete mode 100644 gui/bacula-web/report.php delete mode 100644 gui/bacula-web/stats.php delete mode 100644 gui/bacula-web/templates/css.tpl delete mode 100644 gui/bacula-web/templates/footer.tpl delete mode 100644 gui/bacula-web/templates/full_popup.tpl delete mode 100644 gui/bacula-web/templates/generaldata.tpl delete mode 100644 gui/bacula-web/templates/header.tpl delete mode 100644 gui/bacula-web/templates/index.tpl delete mode 100644 gui/bacula-web/templates/last_run_report.tpl delete mode 100644 gui/bacula-web/templates/report.tpl delete mode 100644 gui/bacula-web/templates/report_select.tpl delete mode 100644 gui/bacula-web/templates/volumes.tpl delete mode 100644 gui/bacula-web/templates_c/blank delete mode 100644 gui/bacula-web/test.php delete mode 100755 gui/bacula-web/tsmarty2c.php delete mode 100644 gui/bimagemgr/.cvsignore delete mode 100644 gui/bimagemgr/Makefile.in delete mode 100644 gui/bimagemgr/README delete mode 100644 gui/bimagemgr/bacula-bimagemgr.spec.in delete mode 100644 gui/bimagemgr/bimagemgr.gif delete mode 100755 gui/bimagemgr/bimagemgr.pl delete mode 100644 gui/bimagemgr/cdrom_spins.gif delete mode 100644 gui/bimagemgr/clearpixel.gif delete mode 100755 gui/bimagemgr/create_cdimage_table.pl delete mode 100644 gui/bimagemgr/temp.html delete mode 100755 gui/configure delete mode 100644 regress/.cvsignore delete mode 100644 regress/Makefile.in delete mode 100644 regress/README delete mode 100755 regress/all-non-root-2tape-tests delete mode 100755 regress/all-non-root-tape-tests delete mode 100755 regress/all-non-root-tests delete mode 100755 regress/all-root-tests delete mode 100755 regress/all-tape-and-file-tests delete mode 100755 regress/all-tests delete mode 100755 regress/config delete mode 100755 regress/do_all delete mode 100755 regress/do_all_tapes delete mode 100755 regress/do_file delete mode 100755 regress/endtime delete mode 100755 regress/file delete mode 100644 regress/freebsd.conf delete mode 100644 regress/kern.conf delete mode 100644 regress/misc-tests delete mode 100644 regress/prototype.conf delete mode 100755 regress/run delete mode 100644 regress/scripts/.cvsignore delete mode 100644 regress/scripts/bacula-dir-tape.conf.in delete mode 100644 regress/scripts/bacula-dir-win32-tape.conf.in delete mode 100644 regress/scripts/bacula-sd-2disk-drive.conf delete mode 100644 regress/scripts/bacula-sd-2disk-drive.conf.in delete mode 100644 regress/scripts/bacula-sd-2disk.conf delete mode 100644 regress/scripts/bacula-sd-2disk.conf.in delete mode 100644 regress/scripts/bacula-sd-2drive.conf.in delete mode 100644 regress/scripts/bacula-sd-2tape.conf.in delete mode 100644 regress/scripts/bacula-sd-tape.conf.in delete mode 100644 regress/scripts/bacula-sd.conf.in delete mode 100755 regress/scripts/check_for_zombie_jobs delete mode 100755 regress/scripts/cleanup delete mode 100755 regress/scripts/cleanup-2drive.in delete mode 100755 regress/scripts/cleanup-2tape.in delete mode 100755 regress/scripts/cleanup-tape.in delete mode 100755 regress/scripts/copy-2disk-confs delete mode 100755 regress/scripts/copy-2disk-drive-confs delete mode 100755 regress/scripts/copy-2drive-confs delete mode 100755 regress/scripts/copy-2tape-confs delete mode 100755 regress/scripts/copy-confs delete mode 100755 regress/scripts/copy-crypto-confs delete mode 100755 regress/scripts/copy-tape-confs delete mode 100755 regress/scripts/copy-test-confs delete mode 100755 regress/scripts/copy-testa-confs delete mode 100755 regress/scripts/copy-win32-confs delete mode 100644 regress/scripts/crypto-bacula-fd.conf.in delete mode 100644 regress/scripts/cryptokeypair.pem delete mode 100755 regress/scripts/do_sed delete mode 100644 regress/scripts/exclude-dev-test delete mode 100644 regress/scripts/exclude-etc-test delete mode 100644 regress/scripts/exclude-lib-test delete mode 100644 regress/scripts/flist delete mode 100644 regress/scripts/freebsd_tape_options delete mode 100644 regress/scripts/linux_osst_tape_options delete mode 100644 regress/scripts/linux_tape_options delete mode 100644 regress/scripts/new-test-bacula-dir.conf.in delete mode 100755 regress/scripts/prepare-two-disks delete mode 100755 regress/scripts/prepare-two-tapes.in delete mode 100755 regress/scripts/regress-config delete mode 100755 regress/scripts/setup delete mode 100644 regress/scripts/test-bacula-dir.conf.in delete mode 100644 regress/scripts/test-bacula-fd.conf.in delete mode 100644 regress/scripts/test-bacula-sd.conf.in delete mode 100644 regress/scripts/test-console.conf.in delete mode 100644 regress/scripts/testa-bacula-dir.conf.in delete mode 100644 regress/scripts/win32-bacula-dir-tape.conf.in delete mode 100644 regress/scripts/win32-bacula-fd.conf delete mode 100644 regress/scripts/win32-bacula-sd-tape.conf delete mode 100755 regress/starttime delete mode 100755 regress/tape delete mode 100644 regress/tests/.cvsignore delete mode 100755 regress/tests/2drive-incremental-2disk delete mode 100755 regress/tests/2drive-incremental-2tape delete mode 100755 regress/tests/auto-label-test delete mode 100755 regress/tests/backup-bacula-tape delete mode 100755 regress/tests/backup-bacula-test delete mode 100755 regress/tests/backup-win32-tape delete mode 100755 regress/tests/bextract-test delete mode 100755 regress/tests/bscan-tape delete mode 100755 regress/tests/bscan-test delete mode 100755 regress/tests/bsr-opt-test delete mode 100755 regress/tests/btape-fill-full-tape delete mode 100755 regress/tests/btape-fill-tape delete mode 100755 regress/tests/compressed-test delete mode 100755 regress/tests/concurrent-jobs-test delete mode 100755 regress/tests/dev-test-root delete mode 100755 regress/tests/differential-test delete mode 100755 regress/tests/eot-fail-tape delete mode 100755 regress/tests/etc-test-root delete mode 100755 regress/tests/filed-crypto-test delete mode 100755 regress/tests/fixed-block-size-tape delete mode 100755 regress/tests/four-concurrent-jobs-tape delete mode 100755 regress/tests/four-concurrent-jobs-test delete mode 100755 regress/tests/four-jobs-tape delete mode 100755 regress/tests/four-jobs-test delete mode 100755 regress/tests/incremental-2disk delete mode 100755 regress/tests/incremental-2tape delete mode 100755 regress/tests/incremental-tape delete mode 100755 regress/tests/incremental-test delete mode 100755 regress/tests/lib-tape-root delete mode 100755 regress/tests/lib-test-root delete mode 100755 regress/tests/query-test delete mode 100755 regress/tests/recycle-test delete mode 100755 regress/tests/relabel-tape delete mode 100755 regress/tests/restore-by-file-tape delete mode 100755 regress/tests/restore-by-file-test delete mode 100755 regress/tests/restore-disk-seek-test delete mode 100755 regress/tests/restore2-by-file-test delete mode 100755 regress/tests/scratch-pool-test delete mode 100755 regress/tests/six-vol-test delete mode 100755 regress/tests/small-file-size-tape delete mode 100755 regress/tests/span-vol-test delete mode 100755 regress/tests/sparse-compressed-test delete mode 100755 regress/tests/sparse-test delete mode 100755 regress/tests/test0 delete mode 100755 regress/tests/truncate-bug-tape delete mode 100755 regress/tests/two-jobs-test delete mode 100755 regress/tests/two-pool-tape delete mode 100755 regress/tests/two-pool-test delete mode 100755 regress/tests/two-vol-test delete mode 100755 regress/tests/two-volume-tape delete mode 100755 regress/tests/two-volume-test delete mode 100755 regress/tests/usr-tape-root delete mode 100755 regress/tests/verify-vol-test delete mode 100755 regress/tests/weird-files-test delete mode 100755 regress/tests/weird-files2-test delete mode 100755 regress/tests/win32-backup-tape delete mode 100755 regress/tests/win32-to-linux-tape delete mode 100644 regress/weird-files.tar.gz diff --git a/bacula/ChangeLog b/bacula/ChangeLog index 5825c672d3..ccb15454ed 100644 --- a/bacula/ChangeLog +++ b/bacula/ChangeLog @@ -1,5 +1,155 @@ -Release 1.38.4 16Jan06 released 17 Jan 06: +Release 1.38.6 (28Mar06) released 29Mar06 +28Mar06 +- Back port from 1.39 fixes to lib/jcr.c to use foreach_jcr() + and new jcr chain locking. +26Mar06 +- Fix a long standing bug in the bacula start/stop scripts. +- Attempt to add the new bacula-ctl-* files to the rpm. +- Switch to using typeof() for list traversing to avoid + as many FC5 g++ compiler warnings as possible. +25Mar06 +- Split the bacula start/start script into four files: + bacula -- starts and stops calling other scripts + bacula-ctl-dir -- starts/stops the director + bacula-ctl-fd -- starts/stops the File daemon + bacula-ctl-sd -- starts/stops the Storage daemon +24Mar06 +- Create datestyle fix for PostgreSQL. Fixes bug #574. +- Correct editing of JobId from int to int64 in fd_cmds.c +- Eliminate FileSet name race with bash_spaces() and multiple + threads by bashing in a local. +- Fix error return from 'use storage' to print a correct error + message rather than nothing. +- Correct false re-read last block error message when two jobs + are simultaneously writing at the end of a tape. +- Simplify exit conditions in the reserve.c code to avoid + possible non-release of reservation_lock(). +- Suffle lock order in reserve to avoid deadlock between + reservation lock and device mutex. +- Add Thorsten's VSS timeout code to 1.38 branch. +21Mar06 +- Initialize jcr mutex before first use. Thanks to Thorsten for + tracking this down for me !!!! as it broke the Win32 build. +20Mar06 +- Integrate addition of line count limitation to bsmtp -l from + Sebastian Stark +17Mar06 +- Implement regex test program in tools directory. +- Attempt to fix time problem with bsmtp with foreign langs. +- Add strip_trailing_newline() submitted by user. + +Release 1.38.6 beta6 +16Mar06 +- Fix bug #537 to allow arbitrary time to mount a volume for + restore, if polling is turned on. +- Disallow multiple storage specifications for a job. Should fix Arno's + problem. +- Add back a missing store of poolid in jr.poolid. +- If dir_user or dir-group is specified in ./configure apply it to + the working-dir. Fixes bug #533. +- If rescheduling a job cancel the previous incarnation with the SD. + Fixes bugs #566 and 557. +- Fix bug #567 do_message() definition type conflict. + +Release 1.38.6 beta5 +14Mar06 +- Add more jcr methods and make mutex and use_count private. +- Create lock/unlock methods for jcr. +- Fix PostgreSQL bug doing sql_data_seeek() by explicitly reading + records to get to seek position. +- Integrate patch from bug #561 to correct conio.c signal definitions. +- Fix Rescheduling failed Jobs. Ensure that SD message thread + terminates correctly by doing pthread_kill(). Do not destroy + SD cond wait variable between executions of the job. Use local + mutex for cond variable to avoid blocking jcr chain. Fix poor + use of jcr use count in jobq.c for restarted jobs. +- Fix obsolete usage of foreach_dlist() to use foreach_jcr() in + lib/jcr.c -- prevents locking the jcr chaing. +- Apply patch from bug #564, which corrects listing volumes with + multiple autochangers. Apply same fix to next volume list. +- Fix bug #562 where restore bootstrap file is not unique. +- Use new routine lock_reservations() to lock the reservations + system, and call it while looking for a volume in askdir.c. + This could possibly fix bug #543. +- Stop SD command loop if job is canceled. + +Beta4 attached to a bug report but not distributed. +04Mar06 +- Fix new sql_use_result() code to properly release the + buffers in all cases. +- Convert to using new Python class definitons with (object). +- Use the keyword ujobid to mean the unique job id; job or jobname + to mean the Job name given on the Name directive, and jobid to + be the numeric (non-unique) job id. +- Allow listing by any of the above. +- Add the user friendly job report code for reporting job elapsed time + and rates with suffexes. +- Add Priority and JobLevel as Python settable items. +- Use TEMPORARY table creation where the table is created by + Bacula. +- Add new code submitted by Eric for waiting on specific jobid. +- Add ACL checking for the dot commands. +- Fix restore of writable FIFOs. +- Fix a bug in bpipe where the string was freed too early. + +26Feb06 +- Fix bug reported by Arno listing blocks with bls +- Update the po files at Eric's request. + +Release 1.38.6-beta2 25Feb06 +25Feb06 +- Add sql_use_result() define. + +Release 1.38.6 beta1 24Feb06 +24Feb06 +- Don't open default catalog if not in ACL. +22Feb06 +- Add virtual disk autochanger code. +- Add user supplied bug fix to make two autochangers work + correctly using StorageId with InChanger checks. +- Correct new/old_jcr confusion in copy_storage(). +- Remove & from Job during scan in msgchan.c -- probably + trashed the stack. +- When getting the next Volume if no Volume in Append mode + exists and we are dealing with an Autochanger, search + for a Scratch Volume. +- Check for missing value in dot commands -- bug fix. +- Fix bug in update barcodes command line scanning. +- Make sure Pool Max Vols is respected. +- Check that user supplied a value before referencing + it in restore -- pointed out by Karl Hakimian. +- Add Karl Hakimian's table insert code. +- Don't ask user to select a specific Volume when + updating all volumes in a Pool. +- Remove reservation if set for read when removing dcr. +- Lock code that requests next appendable volume so that + two jobs to get the same Volume at the same time. +- Add new Device Type = xxx code. Values are file, tape, + dvd, and fifo. +- Preserve certain modes (ST_LABEL|ST_APPEND|ST_READ) across + a re-open to change read/write permission on a device. +- Correct a misplaced double quote in certain autochanger + scripts. +- Make make_catalog_backup.in a bit more portable. +- Implement Karl Hakimian's sql_use_result(), which speeds + up restore tree building and reduces the memory load. +- Correct a number of minor bugs in getting a Volume from + the Scratch Pool. +- Implement additional command line options for update Volume. +- Don't require user to enter a Volume name when updating + all Volumes in a pool. + +Release 1.38.5 released 19Jan06: +19Jan06 +- Apply label barcodes fix supplied by Rudolf Cejka. +18Jan06 +- Modify standard rpm installation to set SD group to disk + so that SD will by default have access to tape drives. +- Allow users to specify user/group and start options + for each daemon in /etc/sysconf/bacula file. + +Release 1.38.4 14Jan06 released 17 Jan 06: 16Jan06 - Add two new queries to query.sql provided by Arno. One list volumes known to the Storage device, and the other @@ -71,7 +221,7 @@ Beta release 23Dec05: volume so that it can handle multiple returns from the wait code. - Modify the wait code to permit multiple returns. -- Return a zero when "autochanger drives" is called and +- Return a zero when 'autochanger drives' is called and it is not an autochanger. - Make rewind_dev() a method taking a DCR as an argument. This permits closing and reopening the drive if the @@ -183,9 +333,9 @@ Beta release 20Dec05: 04Dec05 - Apply days keyword patch from Alexander.Bergolth at wu-wien.ac.at If this patch is applied, the number of days can be specified with - "list nextvol days=xx" + 'list nextvol days=xx' or - "status dir days=xx" + 'status dir days=xx' My use case is to be able to preview the next scheduled job (and the next tape to be used) on fridays if there are no scheduled jobs during the weekend. @@ -237,7 +387,7 @@ Changes to 1.38.1: 15 November 2005 the user. - Add Solaris ACL detection in configure.in as supplied by Attila Fulop. -- Implement "autochanger drives" protocol so that Dir knows +- Implement 'autochanger drives' protocol so that Dir knows how many drives an autochanger has. - Do not request drive number in label, ... if only one drive. - Turn off debug code. @@ -411,7 +561,7 @@ Changes to 1.37.39: - Make new_volume walk through all Vols looking for dev to release. 16Sep05 -- Make "quit" command in console always allowed. +- Make 'quit' command in console always allowed. - Remove the storage list between each console command to keep Dir from remembering a previously selected SD. - Add code to reservation VOLRES subroutines to try to ensure @@ -422,7 +572,7 @@ Changes to 1.37.39: - Apply Nicolas' dvd-freespace.in patch. - Make sure SQL table names are not translated. - Eliminate incorrect message saying barcodes not - found in "label barcodes" -- fixes bug report. + found in 'label barcodes' -- fixes bug report. Changes to 1.37.38: 07Sep05 @@ -447,7 +597,7 @@ Changes to 1.37.37: - Correct ssize_t problem in build of Win32 - Add code to llprint pools and volumes to debug next item. - From bug report, fix resetting Pool defaults in Volume. It - was a typo "Max" was missing in several places. + was a typo 'Max' was missing in several places. - Don't allow translation of database Volume Status values. Changes to 1.37.37 released 26 Aug 05 @@ -484,7 +634,7 @@ Changes to 1.37.36 released 22 Aug 05 other searches. - Fix picking up drive in Dir so that it is not done in the status command. -- Eliminate double check on "loaded" for autochanger. +- Eliminate double check on 'loaded' for autochanger. 17Aug05 - Start coding better reservation algorithm - Always look for slot for label command. @@ -543,7 +693,7 @@ Changes to 1.37.34: search to avoid two threads competing for the same resource. - Correct a return code in find_suitable_device_for_job() - Possibly cause of "busy writing to another volume". + Possibly cause of 'busy writing to another volume'. 03Aug05 - Modify open() for tape so nonblocking really works. - Use fcntl() to reset blocking status rather than close() @@ -672,7 +822,7 @@ Changes to 1.37.31: been adapted. - Remove set_exit_on_error function 07Apr05 - - Fix "unknown device type" problem with DVD devices. + - Fix 'unknown device type' problem with DVD devices. - Fix crash when there is no media in the DVD drive. 09Jan05 - Update the documentation and ReleaseNotes. @@ -705,12 +855,12 @@ Changes to 1.37.31: 29Dec04 - Add VolParts field in Media table - Add MaximumPartSize directive in Device (SD configuration file) - - File Volumes can now be splitted in multiple files ("parts") - - Fix SQL error in sql_list while doing "llist jobmedia" + - File Volumes can now be splitted in multiple files ('parts') + - Fix SQL error in sql_list while doing 'llist jobmedia' Changes to 1.37.30 released 16 July 2005: 14Jul05 -- Fix "dir" command scanning field misalignment in +- Fix 'dir' command scanning field misalignment in wx-console. - Switch to using the wxWidgets Unicode library. - Include msvcr71.dll in distribution. @@ -790,7 +940,7 @@ Changes to 1.37.28: file sizes for restore and dir of catalog, otherwise GB sizes are truncated -- fixes bug report. - Modify wx-console to know about 10 character widths. -- Allow decending into top level directory if "recurse=no" +- Allow decending into top level directory if 'recurse=no' is set. Fixes a bug report. - Install pthreadVCE.dll when installing console or wx-console on Win32 systems. Fixes bug report. @@ -808,12 +958,12 @@ Changes to 1.37.28: 30Jun05 - Detect device mounted for DVD and suppress be sure to mount message after label. -- Set Cleaning tape status to "Cleaning" and force no +- Set Cleaning tape status to 'Cleaning' and force no MediaType. - Get DVD writing working with new standard Bacula open() code. - Rename get_filename() to make more sense. -- Detect "is already mounted on" on mount command so to avoid +- Detect 'is already mounted on' on mount command so to avoid error if device is already mounted. - Eliminated guess_name() code. It may be necessary to add it back later. @@ -904,7 +1054,7 @@ Changes from Nicolas Boichat: been adapted. - Remove set_exit_on_error function 07Apr05 - - Fix "unknown device type" problem with DVD devices. + - Fix 'unknown device type' problem with DVD devices. - Fix crash when there is no media in the DVD drive. 09Jan05 - Update the documentation and ReleaseNotes. @@ -937,8 +1087,8 @@ Changes from Nicolas Boichat: 29Dec04 - Add VolParts field in Media table - Add MaximumPartSize directive in Device (SD configuration file) - - File Volumes can now be splitted in multiple files ("parts") - - Fix SQL error in sql_list while doing "llist jobmedia" + - File Volumes can now be splitted in multiple files ('parts') + - Fix SQL error in sql_list while doing 'llist jobmedia' Changes to 1.37.23: - Renamed to make unique version for open_next_part() @@ -1038,7 +1188,7 @@ Changes to 1.37.19: - Make restore.bsr have unique name. - Allow user to define bsr filename on restore command line with bootstrap=xxx.bsr -- Add limit=nnn to "list jobs" command. +- Add limit=nnn to 'list jobs' command. - Remove old restore code that did not use .bsr file. - unlink automatically generated bsr file. - Cleanup heartbeat code so that duped fd is almost sure @@ -1178,7 +1328,7 @@ Changes to 1.37.14: by a user. 26Apr05 - Apply Tru64 patch supplied by Pascal Pederiva -- Apply Unicode fixes for Win32 from "Thorsten Engel" +- Apply Unicode fixes for Win32 from 'Thorsten Engel' - More work on Python read feature in FD. 22Apr05 @@ -1346,21 +1496,21 @@ Changes to 1.37.6: - Fix scanf of PoolId in catreq to handle 64 bit Ids. 10Mar05 - Add new ua_update.c file and move update_cmd there. -- Modify "update slots" to obtain actual number of slots. +- Modify 'update slots' to obtain actual number of slots. - Tweak autochanger code to handle new slots request. - Modify autochanger code to lock/unlock around slots and update slots code. 09Mar05 - Patch the FD so that it does not issue an error message if it attempts to restore the permissions on a Win32 drive. -- Edit "Resource-name" (physical-name) for the device name +- Edit 'Resource-name' (physical-name) for the device name everywhere in the SD. - Remove .linked.tex files in preparation for cutover to using .tex in place of .wml. 08Mar05 - Copy latest config.sub and config.guess from autoconf. - Try new way of identifying drives with: - "resource-name" (physical-name) + 'resource-name' (physical-name) More work need to a complete conversion. 07Mar05 - Rework some of the autochanger data so that the DIR has @@ -1375,7 +1525,7 @@ Changes to 1.37.6: - Force all the Media Type records of all devices in an Autochanger to be the same. 06Mar05 -- Add new "run" command to Job resource in DIR. This permits +- Add new 'run' command to Job resource in DIR. This permits cloning a job as many times as you want. - Pass PoolId to SD on Query request. It is now used in the Find_media catalog request. @@ -1441,7 +1591,7 @@ Changes to 1.37.4: attempt to fix a bug report. 23Feb05 - Corrected SunOs to SunOS in btraceback (user submitted). -- Applied patch from Roger Haa¥kansson +- Applied patch from Roger Haakansson to warn the user of defective AWKs during ./configure. 20Feb05 - Add some changes submitted by a user for HP client build. @@ -1496,7 +1646,7 @@ Changes to 1.37.3: 15Feb05 - Fix Media LabelDate and FirstWritten to be correctly set. - Fix deadlock in multiple simultaneous jobs. -- Fix tape "truncation"/"number of files" after restore bug. +- Fix tape 'truncation'/'number of files' after restore bug. 10Feb05 - Ensure that correct error messages are returned when reading an ANSI label. @@ -1552,7 +1702,7 @@ Changes to 1.37.3: boot correctly. - Implement ANSI labels -- not yet tested. This required changes to DB format. No upgrade script yet. - Note, more work needed to modify "update" command to handle + Note, more work needed to modify 'update' command to handle changing label types, also must restrict volume name lengths to 6 characters. - Add new Device, Storage, and MediaType records to DB. No @@ -1568,7 +1718,7 @@ Changes to 1.37.3: a single alist, and imply sending data to each Storage daemon simultaneously. - Implement Device query command between DIR and SD. -- Allow DIR to "reserve" a Device. It will then be acquired +- Allow DIR to 'reserve' a Device. It will then be acquired when the FD connects to the SD. - Turn all DIR resources into classes, and implement a few class methods -- more to come. @@ -1698,7 +1848,7 @@ Changes to 1.37.2: - Remove duplicate code from chksum.h (mentioned by Preben). 13Dec04 - Integrate Tim Oberfoell patch to ACLs - to handle both the "standard" and "default" ACLs. + to handle both the 'standard' and 'default' ACLs. 12Dec04 - Integrated Preben 'Peppe' Guldberg three cleanup patches (btest, verify, find). @@ -1751,7 +1901,7 @@ Changes to 1.37.2: - Add python 2.3 to config search list (user submitted patch) - Add JobStatus to Python variables. 28Nov04 -- Add "python restart" command in Console. +- Add 'python restart' command in Console. - Make built-in variables table driven. - First cut of Python Events for Bacula. Director only. StartJob, EndJob, NewVolume events. @@ -1768,7 +1918,7 @@ Changes to 1.37.*: 19Oct05 - configure: add check for dd, remove check for df - block.c:do_dvd_size_checks: Check we are writing to a dvd before doing tests - (reported by David Raine on the list, "[Bacula-users] LTO drive - End Of Volume error"). + (reported by David Raine on the list, '[Bacula-users] LTO drive - End Of Volume error'). - Update bacula-sd.conf.in to use dvd-handler correctly. - dvd.c:dvd_write_part: Increase timeout when writing the first part (see the code for more details). @@ -1782,7 +1932,7 @@ Changes to 1.37.*: 16Oct05 - Remove scripts/dvd-freespace and scripts/dvd-writepart, as they are now merged into scripts/dvd-handler. Note: Documentation needs to be updated. - - scripts/dvd-handler: "zero" brand-new DVD+/-RW to fix a problem with some + - scripts/dvd-handler: 'zero' brand-new DVD+/-RW to fix a problem with some DVD-writers, thanks to Arno Lehmann for reporting this, and providing the way to fix it. - new scripts/dvd-handler. Note: it also needs a patched version of dvd+rw-tools. @@ -1815,7 +1965,7 @@ Changes to 1.37.*: been adapted. - Remove set_exit_on_error function 07Apr05 - - Fix "unknown device type" problem with DVD devices. + - Fix 'unknown device type' problem with DVD devices. - Fix crash when there is no media in the DVD drive. 09Jan05 - Update the documentation and ReleaseNotes. @@ -1848,5 +1998,5 @@ Changes to 1.37.*: 29Dec04 - Add VolParts field in Media table - Add MaximumPartSize directive in Device (SD configuration file) - - File Volumes can now be splitted in multiple files ("parts") - - Fix SQL error in sql_list while doing "llist jobmedia" + - File Volumes can now be splitted in multiple files ('parts') + - Fix SQL error in sql_list while doing 'llist jobmedia' diff --git a/bacula/Makefile.in b/bacula/Makefile.in index 64042e8390..d4d60707d0 100755 --- a/bacula/Makefile.in +++ b/bacula/Makefile.in @@ -4,6 +4,8 @@ @MCOMMON@ working_dir=@working_dir@ +dir_group=@dir_group@ +dir_user=@dir_user@ srcdir = @srcdir@ VPATH = @srcdir@ @@ -88,6 +90,10 @@ installdirs: $(MKDIR) $(DESTDIR)$(sysconfdir) $(MKDIR) $(DESTDIR)$(scriptdir) $(MKDIR) $(DESTDIR)$(working_dir) + if test "x$(dir_user)" != "x" ; then \ + chown -f $(dir_user) $(DESTDIR)$(working_dir); fi + if test "x$(dir_group)" != "x" ; then \ + chown -f :$(dir_group) $(DESTDIR)$(working_dir); fi # $(MKDIR) $(DESTDIR)$(mandir) gnomedirs: diff --git a/bacula/ReleaseNotes b/bacula/ReleaseNotes index e4346a291a..276a83018e 100644 --- a/bacula/ReleaseNotes +++ b/bacula/ReleaseNotes @@ -1,10 +1,250 @@ - Release Notes for Bacula 1.38.3 + Release Notes for Bacula 1.38.6 - Bacula code: Total files = 424 Total lines = 140,955 (*.h *.c *.in) + Bacula code: Total files = 419 Total lines = 137,078 (*.h *.c *.in) 20,440 additional lines of code since version 1.36.3 -Changes to 1.38.3: +!!!! Important !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + If you are compiling for a 64 bit machine, you need to ensure + that the code is compiled with the -O0 (- oh zero) option otherwise + the SD will crash on most all operations -- apparently due to + a compiler bug in gcc's 64 bit code generation. +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +New features: +- For autochanger get Scratch tape if in autochanger if + no appendable Volumes are available. +- New virtual disk autochanger. See scripts/disk-changer for + documentation. +- New optional Device resource directive in SD. 'Device Type =', + which may have types: File, DVD, Tape, or FIFO. This can + be useful for writing DVDs on FreeBSD where Bacula cannot + correctly detect the DVD. +- Faster restore tree building and uses less memory. +- The command line keyword job (or jobname) now refers to the + name of the job specified in the Job resource; jobid refers + as before to the non-unique numeric jobid; and ujobid refers + to the unique job identification that Bacula creates for each + job. +- The job report for Backups has a few more user friendly ways + of displaying the information. +- The wait command can now be made to wait for jobids. +- New command line keywords are permitted in update volume. They + are Inchanger=yes/no, slot=nn. +- Add two new console commands: enable job= and + disable job=. When a job is disabled, it will not + be started by the scheduler. If you disable a job and restart + Bacula or reload the .conf file, the job will be re-enabled. +- Add a new Job resource directive "enable = yes|no". + +Major bug fixes: +- Fix race condition in multiple-drive autochangers where + both drives want the same Volume. +- Do not allow opening default catalog for restricted console + if it is not in ACL. +- Writable FIFOs now work for restore. +- ACLs are now checked in all dot commands. +- Multiple drive autochangers and multiple different autochangers + should now work correctly (no race conditions for Volume names, + update slots use correct StorageId). +- Fix bug where drive was always reserved if a restore job failed + while in the reservation process. + + +Minor bug fixes: +- See below: + +Release 1.38.6 (28Mar06) released 29Mar06 +28Mar06 +- Back port from 1.39 fixes to lib/jcr.c to use foreach_jcr() + and new jcr chain locking. +26Mar06 +- Fix a long standing bug in the bacula start/stop scripts. +- Attempt to add the new bacula-ctl-* files to the rpm. +- Switch to using typeof() for list traversing to avoid + as many FC5 g++ compiler warnings as possible. +25Mar06 +- Split the bacula start/start script into four files: + bacula -- starts and stops calling other scripts + bacula-ctl-dir -- starts/stops the director + bacula-ctl-fd -- starts/stops the File daemon + bacula-ctl-sd -- starts/stops the Storage daemon +- Create datestyle fix for PostgreSQL. Fixes bug #574. +- Correct editing of JobId from int to int64 in fd_cmds.c +- Eliminate FileSet name race with bash_spaces() and multiple + threads by bashing in a local. +- Fix error return from 'use storage' to print a correct error + message rather than nothing. +- Correct false re-read last block error message when two jobs + are simultaneously writing at the end of a tape. +- Simplify exit conditions in the reserve.c code to avoid + possible non-release of reservation_lock(). +- Suffle lock order in reserve to avoid deadlock between + reservation lock and device mutex. +- Add Thorsten's VSS timeout code to 1.38 branch. +- Initialize jcr mutex before first use. Thanks to Thorsten for + tracking this down for me !!!! as it broke the Win32 build. +- Integrate addition of line count limitation to bsmtp -l from + Sebastian Stark +- Implement regex test program in tools directory. +- Attempt to fix time problem with bsmtp with foreign langs. +- Add strip_trailing_newline() submitted by user. + +Release 1.38.6 beta6 16Mar06 +- Fix bug #537 to allow arbitrary time to mount a volume for + restore, if polling is turned on. +- Disallow multiple storage specifications for a job. Should fix Arno's + problem. +- Add back a missing store of poolid in jr.poolid. +- If dir_user or dir-group is specified in ./configure apply it to + the working-dir. Fixes bug #533. +- If rescheduling a job cancel the previous incarnation with the SD. + Fixes bugs #566 and 557. +- Fix bug #567 do_message() definition type conflict. + +Release 1.38.6 beta5 14Mar06 +- Add more jcr methods and make mutex and use_count private. +- Create lock/unlock methods for jcr. +- Fix PostgreSQL bug doing sql_data_seeek() by explicitly reading + records to get to seek position. +- Integrate patch from bug #561 to correct conio.c signal definitions. +- Fix Rescheduling failed Jobs. Ensure that SD message thread + terminates correctly by doing pthread_kill(). Do not destroy + SD cond wait variable between executions of the job. Use local + mutex for cond variable to avoid blocking jcr chain. Fix poor + use of jcr use count in jobq.c for restarted jobs. +- Fix obsolete usage of foreach_dlist() to use foreach_jcr() in + lib/jcr.c -- prevents locking the jcr chaing. +- Apply patch from bug #564, which corrects listing volumes with + multiple autochangers. Apply same fix to next volume list. +- Fix bug #562 where restore bootstrap file is not unique. +- Use new routine lock_reservations() to lock the reservations + system, and call it while looking for a volume in askdir.c. + This could possibly fix bug #543. +- Stop SD command loop if job is canceled. + +Release 1.38.6 beta3 4Mar06 +04Mar06 +- The po files should now be current. +- Fix new sql_use_result() code to properly release the + buffers in all cases. +- Convert to using new Python class definitons with (object). +- Use the keyword ujobid to mean the unique job id; job or jobname + to mean the Job name given on the Name directive, and jobid to + be the numeric (non-unique) job id. +- Allow listing by any of the above. +- Add the user friendly job report code for reporting job elapsed time + and rates with suffexes. +- Add Priority and JobLevel as Python settable items. +- Use TEMPORARY table creation where the table is created by + Bacula. +- Add new code submitted by Eric for waiting on specific jobid. +- Add ACL checking for the dot commands. +- Fix restore of writable FIFOs. +- Fix a bug in bpipe where the string was freed too early. + +26Feb06 +- Fix bug reported by Arno listing blocks with bls +- Update the po files at Eric's request. + +Release 1.38.6-beta2 25Feb06 +25Feb06 +- Add sql_use_result() define. + +Changes to 1.38.6-beta1 +- Don't open default catalog if not in ACL. +- Add virtual disk autochanger code. +- Add user supplied bug fix to make two autochangers work + correctly using StorageId with InChanger checks. +- Correct new/old_jcr confusion in copy_storage(). +- Remove & from Job during scan in msgchan.c -- probably + trashed the stack. +- When getting the next Volume if no Volume in Append mode + exists and we are dealing with an Autochanger, search + for a Scratch Volume. +- Check for missing value in dot commands -- bug fix. +- Fix bug in update barcodes command line scanning. +- Make sure Pool Max Vols is respected. +- Check that user supplied a value before referencing + it in restore -- pointed out by Karl Hakimian. +- Add Karl Hakimian's table insert code. +- Don't ask user to select a specific Volume when + updating all volumes in a Pool. +- Remove reservation if set for read when removing dcr. +- Lock code that requests next appendable volume so that + two jobs to get the same Volume at the same time. +- Add new Device Type = xxx code. Values are file, tape, + dvd, and fifo. +- Preserve certain modes (ST_LABEL|ST_APPEND|ST_READ) across + a re-open to change read/write permission on a device. +- Correct a misplaced double quote in certain autochanger + scripts. +- Make make_catalog_backup.in a bit more portable. +- Implement Karl Hakimian's sql_use_result(), which speeds + up restore tree building and reduces the memory load. +- Correct a number of minor bugs in getting a Volume from + the Scratch Pool. +- Implement additional command line options for update Volume. +- Don't require user to enter a Volume name when updating + all Volumes in a pool. + +Release 1.38.5 released 19Jan06: +- Apply label barcodes fix supplied by Rudolf Cejka. +- Modify standard rpm installation to set SD group to disk + so that SD will by default have access to tape drives. +- Allow users to specify user/group and start options + for each daemon in /etc/sysconf/bacula file. + +Changes to 1.38.4 released 17Jan06: +- The main changes are to the Director and the Storage daemon, + thus there is no need to update your File daemons. Just the + same, I do recommend running with the release 1.38.3 Win32 + FD or later. +- Add two new queries to query.sql provided by Arno. One + list volumes known to the Storage device, and the other + lists volumes possibly needing replacement (error, ...). +- Add periodic (every 24 hours) garbage collection of memory + pool by releasing free buffers. +- Correct bug counting sized (for display only) in smartall.c +- Print FD mempool stats if debug > 0 rather than 5. +- Correct bug in alist.c that re-allocated the list if the + number of items goes to zero. +- Move the reservation system thread locking to the top level + so that one job at a time tries all possible drives before + waiting. +- Implement a reservation 'fail' message queue that is built + and destroyed on each pass through the reservation system. + These messages are displayed in a 'Jobs waiting to reserve + a drive' list during a 'status storage='. Note, multiple + messages will generally print for each JobId because they + represent the different problems with either the same drive + or different drives. If this output proves too confusing + of voluminous, I will display it only when debug level 1 + or greater is enabled in the SD. +- Add enable/disable job=. This command prevents + the specified job from being scheduled. Even when disabled, + the job can be manually started from the console. +- During 'update slots' clear all InChanger flags where the + StorageId is zero (old Media records). +- Fix autochanger code to strip leading spaces from returned + slots number. Remove bc from chio-changer. +- Back port a bit of 1.39 crypto code to reduce diffs. +- Fix first call to autochanger that missed close()ing the + drive. Put close() just before each run_program(). Fixes + Arno's changer bug. +- Add PoolId to Job record when updating it at job start time. +- Pull in more code from 1.39 so that there are fewer file + differences (the new ua_dotcmds.c, base64.h, crypto.h + hmac.c jcr.c (dird and lib) lib.h md5.h parse_conf.c + util.c. Aside from ua_dotcmds.c these are mostly crypto + upgrades. +- Implement new method of walking the jcr chain. The + incr/dec of the use_count is done within the walking + routines. This should prevent a jcr from being freed + from under the walk routines. + + +Changes to 1.38.3 released 05Jan06: - This is mainly a bug release fix. In addition, the multiple drive reservation algorithm has been rewritten. - In addition, the method of handling waiting for tapes to be @@ -13,7 +253,7 @@ Changes to 1.38.3: - Simplify code in askdir.c that waits for creating an appendable volume so that it can handle multiple returns from the wait code. - Modify the wait code to permit multiple returns. -- Return a zero when "autochanger drives" is called and +- Return a zero when 'autochanger drives' is called and it is not an autochanger. - Make rewind_dev() a method taking a DCR as an argument. This permits closing and reopening the drive if the @@ -88,9 +328,9 @@ Changes to 1.38.3: at the same time. - Apply days keyword patch from Alexander.Bergolth at wu-wien.ac.at If this patch is applied, the number of days can be specified with - "list nextvol days=xx" + 'list nextvol days=xx' or - "status dir days=xx" + 'status dir days=xx' My use case is to be able to preview the next scheduled job (and the next tape to be used) on fridays if there are no scheduled jobs during the weekend. @@ -183,7 +423,7 @@ Major Changes in 1.38: - Volume Shadow Copy support for Win32 thus the capability to backup exclusively opened files (thanks to Thorsten Engel). A VSS enabled Win32 FD is available. You must explicitly - turn on VSS with "Enable VSS = yes" in your FileSet resource. + turn on VSS with 'Enable VSS = yes' in your FileSet resource. - New manual format with an index (thanks to Karl Cunningham). - New Web site format (thanks to Michael Scherer). - SQLite3 support. @@ -194,13 +434,13 @@ Major Changes in 1.38: in native languages. Thanks to Nicolas Boichat. New Directives: -- New Job directive "Prefer Mounted Volumes = yes|no" causes the +- New Job directive 'Prefer Mounted Volumes = yes|no' causes the SD to select either an Autochanger or a drive with a valid Volume already mounted in preference. If none is available, it will select the first available drive. - New Run directive in Job resource of DIR. It permits cloning of jobs. To clone a copy of the current job, use - Run = "job-name level=%l since=\"%s\"" + Run = 'job-name level=%l since=\'%s\'' Note, job-name is normally the same name as the job that is running but there is no restriction on what you put. If you want to start the job by hand and use job overrides such as @@ -288,7 +528,7 @@ New Directives: of the manual. New Commands: -- "python restart" restarts the Python interpreter. Rather brutal, make +- 'python restart' restarts the Python interpreter. Rather brutal, make sure no Python scripts are running. This permits you to change a Python script and get Bacula to use the new script. @@ -302,11 +542,11 @@ Items to note!!! - The Storage daemon now keeps track of what tapes it is using (was not the case in 1.36.x). This means that you must be much more careful when removing tapes and putting up a new one. In - general, you should always do a "unmount" prior to removing a - tape, and a "mount" after putting a new one into the drive. + general, you should always do a 'unmount' prior to removing a + tape, and a 'mount' after putting a new one into the drive. - If you use an Autochanger, you MUST update your SD conf file to use the new Autochanger resource. Otherwise, certain commands - such as "update slots" may not work. + such as 'update slots' may not work. - You must add --with-python=[DIR] to the configure command line if you want Python support. Python 2.2, 2.3 and 2.4 should be automatically detected if in the standard place. @@ -340,7 +580,7 @@ Items to note!!! compiling. -Other Items: +Other Items Fixed: - Security fixes for temp files created in mtx-changer, during ./configure, and during making of Rescue disk. - A new script, dvd-handler, in the scripts directory, @@ -351,7 +591,7 @@ Other Items: /patches/dvd+rw-tools-5.21.4.10.8.bacula.patch You must have Python installed to run the scripts. - Part files support: File volumes can now be split into multiple - files, called "parts". + files, called 'parts'. - For the details of the Python scripting support, please see the new Python Scripting chapter in the manual. - The default user/group for the Director and Storage daemon installed diff --git a/bacula/autoconf/config.h.in b/bacula/autoconf/config.h.in index 87af24d6af..89a173a392 100644 --- a/bacula/autoconf/config.h.in +++ b/bacula/autoconf/config.h.in @@ -271,9 +271,6 @@ /* 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 @@ -513,9 +510,6 @@ /* Define to 1 if you have the `setsid' function. */ #undef HAVE_SETSID -/* 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 diff --git a/bacula/autoconf/configure.in b/bacula/autoconf/configure.in index 984b356e95..4a0ca2197b 100644 --- a/bacula/autoconf/configure.in +++ b/bacula/autoconf/configure.in @@ -193,7 +193,6 @@ support_conio=yes support_gnome=no support_wx_console=no support_tls=no -support_crypto=no gnome_version= wx_version= support_static_tools=no @@ -752,34 +751,19 @@ if test "x$with_openssl_directory" != "x"; then AC_TRY_LINK([ #include ], [ CRYPTO_set_id_callback(NULL); ], - [ - support_tls="yes" - support_crypto="yes" - ], + [ support_tls="yes" ], [ support_tls="no" ] ) - AC_TRY_LINK([ #include ], - [ EVP_sha512(); ], - [ ac_cv_openssl_sha2="yes" ], - [ ac_cv_openssl_sha2="no" ] - ) - LIBS="$saved_LIBS" CFLAGS="$saved_CFLAGS" if test "$support_tls" = "yes"; then AC_DEFINE(HAVE_OPENSSL, 1, [Define if OpenSSL library is available]) AC_DEFINE(HAVE_TLS, 1, [Define if TLS support should be enabled]) - AC_DEFINE(HAVE_CRYPTO, 1, [Define if encryption support should be enabled]) - fi - - if test "$ac_cv_openssl_sha2" = "yes"; then - AC_DEFINE(HAVE_SHA2, 1, [Define if the SHA-2 family of digest algorithms is available]) fi else support_tls="no" - support_crypto="no" OPENSSL_LIBS="" OPENSSL_INC="" fi @@ -1921,6 +1905,9 @@ AC_OUTPUT([autoconf/Make.common \ scripts/bconsole \ scripts/gconsole \ scripts/bacula \ + scripts/bacula-ctl-dir \ + scripts/bacula-ctl-fd \ + scripts/bacula-ctl-sd \ scripts/devel_bacula \ scripts/Makefile \ scripts/logrotate \ @@ -1997,7 +1984,6 @@ AC_OUTPUT([autoconf/Make.common \ src/cats/drop_bacula_tables \ src/cats/drop_bacula_database \ src/findlib/Makefile \ - src/pygtk-console/Makefile \ src/tools/Makefile \ src/win32/winbacula.nsi \ src/win32/baculafd/bacula-fd.conf \ @@ -2132,7 +2118,6 @@ Configuration on `date`: readline support: ${got_readline} ${PRTREADLINE_SRC} TCP Wrappers support: ${TCPW_MSG} ${WRAPLIBS} TLS support: ${support_tls} - Encryption support: ${support_crypto} ZLIB support: ${have_zlib} enable-smartalloc: ${support_smartalloc} enable-gnome: ${support_gnome} ${gnome_version} diff --git a/bacula/configure b/bacula/configure index 6adc9896de..68d7f60b06 100755 --- a/bacula/configure +++ b/bacula/configure @@ -12770,7 +12770,6 @@ support_conio=yes support_gnome=no support_wx_console=no support_tls=no -support_crypto=no gnome_version= wx_version= support_static_tools=no @@ -15881,64 +15880,13 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - - support_tls="yes" - support_crypto="yes" - + support_tls="yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 support_tls="no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - #include -int -main () -{ - EVP_sha512(); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_openssl_sha2="yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_openssl_sha2="no" - fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext @@ -15957,23 +15905,9 @@ cat >>confdefs.h <<\_ACEOF #define HAVE_TLS 1 _ACEOF - -cat >>confdefs.h <<\_ACEOF -#define HAVE_CRYPTO 1 -_ACEOF - - fi - - if test "$ac_cv_openssl_sha2" = "yes"; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_SHA2 1 -_ACEOF - fi else support_tls="no" - support_crypto="no" OPENSSL_LIBS="" OPENSSL_INC="" fi @@ -29834,7 +29768,7 @@ if test "x${subsysdir}" = "x${sbindir}" ; then exit 1 fi - ac_config_files="$ac_config_files autoconf/Make.common Makefile scripts/startmysql scripts/stopmysql scripts/btraceback scripts/startit scripts/stopit scripts/bconsole scripts/gconsole scripts/bacula 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/gnome-console.console_apps scripts/mtx-changer scripts/disk-changer scripts/dvd-handler scripts/bacula-tray-monitor.desktop scripts/logwatch/Makefile scripts/logwatch/logfile.bacula.conf src/Makefile src/host.h src/console/Makefile src/console/bconsole.conf src/gnome2-console/Makefile src/gnome2-console/gnome-console.conf src/wx-console/Makefile src/wx-console/wx-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/filed/win32/Makefile src/cats/Makefile 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_sqlite_database src/cats/update_sqlite_tables src/cats/make_sqlite_tables src/cats/grant_sqlite_privileges src/cats/drop_sqlite_tables src/cats/drop_sqlite_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_bdb_database src/cats/update_bdb_tables src/cats/make_bdb_tables src/cats/grant_bdb_privileges src/cats/drop_bdb_tables src/cats/drop_bdb_database 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/findlib/Makefile src/pygtk-console/Makefile src/tools/Makefile src/win32/winbacula.nsi src/win32/baculafd/bacula-fd.conf src/win32/Makefile src/win32/console/bconsole.conf src/win32/wx-console/wx-console.conf src/win32/pebuilder/Makefile po/Makefile.in $PFILES" + ac_config_files="$ac_config_files autoconf/Make.common Makefile scripts/startmysql scripts/stopmysql scripts/btraceback scripts/startit scripts/stopit scripts/bconsole scripts/gconsole 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/gnome-console.console_apps scripts/mtx-changer scripts/disk-changer scripts/dvd-handler scripts/bacula-tray-monitor.desktop scripts/logwatch/Makefile scripts/logwatch/logfile.bacula.conf src/Makefile src/host.h src/console/Makefile src/console/bconsole.conf src/gnome2-console/Makefile src/gnome2-console/gnome-console.conf src/wx-console/Makefile src/wx-console/wx-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/filed/win32/Makefile src/cats/Makefile 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_sqlite_database src/cats/update_sqlite_tables src/cats/make_sqlite_tables src/cats/grant_sqlite_privileges src/cats/drop_sqlite_tables src/cats/drop_sqlite_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_bdb_database src/cats/update_bdb_tables src/cats/make_bdb_tables src/cats/grant_bdb_privileges src/cats/drop_bdb_tables src/cats/drop_bdb_database 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/findlib/Makefile src/tools/Makefile src/win32/winbacula.nsi src/win32/baculafd/bacula-fd.conf src/win32/Makefile src/win32/console/bconsole.conf src/win32/wx-console/wx-console.conf src/win32/pebuilder/Makefile po/Makefile.in $PFILES" ac_config_commands="$ac_config_commands default" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -30387,6 +30321,9 @@ do "scripts/bconsole" ) CONFIG_FILES="$CONFIG_FILES scripts/bconsole" ;; "scripts/gconsole" ) CONFIG_FILES="$CONFIG_FILES scripts/gconsole" ;; "scripts/bacula" ) CONFIG_FILES="$CONFIG_FILES scripts/bacula" ;; + "scripts/bacula-ctl-dir" ) CONFIG_FILES="$CONFIG_FILES scripts/bacula-ctl-dir" ;; + "scripts/bacula-ctl-fd" ) CONFIG_FILES="$CONFIG_FILES scripts/bacula-ctl-fd" ;; + "scripts/bacula-ctl-sd" ) CONFIG_FILES="$CONFIG_FILES scripts/bacula-ctl-sd" ;; "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" ;; @@ -30463,7 +30400,6 @@ do "src/cats/drop_bacula_tables" ) CONFIG_FILES="$CONFIG_FILES src/cats/drop_bacula_tables" ;; "src/cats/drop_bacula_database" ) CONFIG_FILES="$CONFIG_FILES src/cats/drop_bacula_database" ;; "src/findlib/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/findlib/Makefile" ;; - "src/pygtk-console/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/pygtk-console/Makefile" ;; "src/tools/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/tools/Makefile" ;; "src/win32/winbacula.nsi" ) CONFIG_FILES="$CONFIG_FILES src/win32/winbacula.nsi" ;; "src/win32/baculafd/bacula-fd.conf" ) CONFIG_FILES="$CONFIG_FILES src/win32/baculafd/bacula-fd.conf" ;; @@ -31606,7 +31542,6 @@ Configuration on `date`: readline support: ${got_readline} ${PRTREADLINE_SRC} TCP Wrappers support: ${TCPW_MSG} ${WRAPLIBS} TLS support: ${support_tls} - Encryption support: ${support_crypto} ZLIB support: ${have_zlib} enable-smartalloc: ${support_smartalloc} enable-gnome: ${support_gnome} ${gnome_version} diff --git a/bacula/examples/recover.pl b/bacula/examples/recover.pl new file mode 100755 index 0000000000..fe6e946743 --- /dev/null +++ b/bacula/examples/recover.pl @@ -0,0 +1,2886 @@ +#!/usr/bin/perl -w + +=head1 NAME + +recover.pl - a script to provide an interface for restore files similar +to Legatto Networker's recover program. + +=cut + +use strict; +use Getopt::Std; +use DBI; +use Term::ReadKey; +use Term::ReadLine; +use Fcntl ':mode'; +use Time::ParseDate; +use Date::Format; +use Text::ParseWords; + +# Location of config file. +my $CONF_FILE = "$ENV{HOME}/.recoverrc"; +my $HIST_FILE = "$ENV{HOME}/.recover.hist"; + +######################################################################## +### Queries needed to gather files from directory. +######################################################################## + +my %queries = ( + 'postgres' => { + 'dir' => + "( + select + distinct on (name) + Filename.name, + Path.path, + File.lstat, + File.fileid, + File.fileindex, + Job.jobtdate - ? as visible, + Job.jobid + from + Path, + File, + Filename, + Job + where + clientid = ? and + Job.name = ? and + Job.jobtdate <= ? and + Path.path = ? and + File.pathid = Path.pathid and + Filename.filenameid = File.filenameid and + Filename.name != '' and + File.jobid = Job.jobid + order by + name, + jobid desc + ) + union + ( + select + distinct on (name) + substring(Path.path from ? + 1) as name, + substring(Path.path from 1 for ?) as path, + File.lstat, + File.fileid, + File.fileindex, + Job.jobtdate - ? as visible, + Job.jobid + from + Path, + File, + Filename, + Job + where + clientid = ? and + Job.name = ? and + Job.jobtdate <= ? and + File.jobid = Job.jobid and + Filename.name = '' and + Filename.filenameid = File.filenameid and + File.pathid = Path.pathid and + Path.path ~ ('^' || ? || '[^/]*/\$') + order by + name, + jobid desc + ) + order by + name + ", + 'sel' => + "( + select + distinct on (name) + Path.path || Filename.name as name, + File.fileid, + File.lstat, + File.fileindex, + Job.jobid + from + Path, + File, + Filename, + Job + where + clientid = ? and + Job.name = ? and + Job.jobtdate <= ? and + Job.jobtdate >= ? and + Path.path like ? || '%' and + File.pathid = Path.pathid and + Filename.filenameid = File.filenameid and + Filename.name != '' and + File.jobid = Job.jobid + order by + name, jobid desc + ) + union + ( + select + distinct on (name) + Path.path as name, + File.fileid, + File.lstat, + File.fileindex, + Job.jobid + from + Path, + File, + Filename, + Job + where + clientid = ? and + Job.name = ? and + Job.jobtdate <= ? and + Job.jobtdate >= ? and + File.jobid = Job.jobid and + Filename.name = '' and + Filename.filenameid = File.filenameid and + File.pathid = Path.pathid and + Path.path like ? || '%' + order by + name, jobid desc + ) + ", + 'cache' => + "select + distinct on (path, name) + Path.path, + Filename.name, + File.fileid, + File.lstat, + File.fileindex, + Job.jobtdate - ? as visible, + Job.jobid + from + Path, + File, + Filename, + Job + where + clientid = ? and + Job.name = ? and + Job.jobtdate <= ? and + Job.jobtdate >= ? and + File.pathid = Path.pathid and + File.filenameid = Filename.filenameid and + File.jobid = Job.jobid + order by + path, name, jobid desc + ", + 'ver' => + "select + Path.path, + Filename.name, + File.fileid, + File.fileindex, + File.lstat, + Job.jobtdate, + Job.jobid, + Job.jobtdate - ? as visible, + Media.volumename + from + Job, Path, Filename, File, JobMedia, Media + where + File.pathid = Path.pathid and + File.filenameid = Filename.filenameid and + File.jobid = Job.jobid and + File.Jobid = JobMedia.jobid and + File.fileindex >= JobMedia.firstindex and + File.fileindex <= JobMedia.lastindex and + Job.jobtdate <= ? and + JobMedia.mediaid = Media.mediaid and + Path.path = ? and + Filename.name = ? and + Job.clientid = ? and + Job.name = ? + order by job + " + }, + 'mysql' => { + 'dir' => + " + ( + select + distinct(Filename.name), + Path.path, + File.lstat, + File.fileid, + File.fileindex, + Job.jobtdate - ? as visible, + Job.jobid + from + Path, + File, + Filename, + Job + where + clientid = ? and + Job.name = ? and + Job.jobtdate <= ? and + Path.path = ? and + File.pathid = Path.pathid and + Filename.filenameid = File.filenameid and + Filename.name != '' and + File.jobid = Job.jobid + group by + name + order by + name, + jobid desc + ) + union + ( + select + distinct(substring(Path.path from ? + 1)) as name, + substring(Path.path from 1 for ?) as path, + File.lstat, + File.fileid, + File.fileindex, + Job.jobtdate - ? as visible, + Job.jobid + from + Path, + File, + Filename, + Job + where + clientid = ? and + Job.name = ? and + Job.jobtdate <= ? and + File.jobid = Job.jobid and + Filename.name = '' and + Filename.filenameid = File.filenameid and + File.pathid = Path.pathid and + Path.path rlike concat('^', ?, '[^/]*/\$') + group by + name + order by + name, + jobid desc + ) + order by + name + ", + 'sel' => + " + ( + select + distinct(concat(Path.path, Filename.name)) as name, + File.fileid, + File.lstat, + File.fileindex, + Job.jobid + from + Path, + File, + Filename, + Job + where + Job.clientid = ? and + Job.name = ? and + Job.jobtdate <= ? and + Job.jobtdate >= ? and + Path.path like concat(?, '%') and + File.pathid = Path.pathid and + Filename.filenameid = File.filenameid and + Filename.name != '' and + File.jobid = Job.jobid + group by + path, name + order by + name, + jobid desc + ) + union + ( + select + distinct(Path.path) as name, + File.fileid, + File.lstat, + File.fileindex, + Job.jobid + from + Path, + File, + Filename, + Job + where + Job.clientid = ? and + Job.name = ? and + Job.jobtdate <= ? and + Job.jobtdate >= ? and + File.jobid = Job.jobid and + Filename.name = '' and + Filename.filenameid = File.filenameid and + File.pathid = Path.pathid and + Path.path like concat(?, '%') + group by + path + order by + name, + jobid desc + ) + ", + 'cache' => + "select + distinct path, + Filename.name, + File.fileid, + File.lstat, + File.fileindex, + Job.jobtdate - ? as visible, + Job.jobid + from + Path, + File, + Filename, + Job + where + clientid = ? and + Job.name = ? and + Job.jobtdate <= ? and + Job.jobtdate >= ? and + File.pathid = Path.pathid and + File.filenameid = Filename.filenameid and + File.jobid = Job.jobid + group by + path, name + order by + path, name, jobid desc + ", + 'ver' => + "select + Path.path, + Filename.name, + File.fileid, + File.fileindex, + File.lstat, + Job.jobtdate, + Job.jobid, + Job.jobtdate - ? as visible, + Media.volumename + from + Job, Path, Filename, File, JobMedia, Media + where + File.pathid = Path.pathid and + File.filenameid = Filename.filenameid and + File.jobid = Job.jobid and + File.Jobid = JobMedia.jobid and + File.fileindex >= JobMedia.firstindex and + File.fileindex <= JobMedia.lastindex and + Job.jobtdate <= ? and + JobMedia.mediaid = Media.mediaid and + Path.path = ? and + Filename.name = ? and + Job.clientid = ? and + Job.name = ? + order by job + " + } +); + +############################################################################ +### Command lists for help and file completion +############################################################################ + +my %COMMANDS = ( + 'add' => '(add files) - Add files recursively to restore list', + 'bootstrap' => 'print bootstrap file', + 'cd' => '(cd dir) - Change working directory', + 'changetime', '(changetime date/time) - Change database view to date', + 'client' => '(client client-name) - change client to view', + 'debug' => 'toggle debug flag', + 'delete' => 'Remove files from restore list.', + 'help' => 'Display this list', + 'history', 'Print command history', + 'info', '(info files) - Print stat and tape information about files', + 'ls' => '(ls [opts] files) - List files in current directory', + 'pwd' => 'Print current working directory', + 'quit' => 'Exit program', + 'recover', 'Create table for bconsole to use in recover', + 'relocate', '(relocate dir) - specify new location for recovered files', + 'show', '(show item) - Display information about item', + 'verbose' => 'toggle verbose flag', + 'versions', '(versions files) - Show all versions of file on tape', + 'volumes', 'Show volumes needed for restore.' +); + +my %SHOW = ( + 'cache' => 'Display cached directories', + 'catalog' => 'Display name of current catalog from config file', + 'client' => 'Display current client', + 'clients' => 'Display clients available in this catalog', + 'restore' => 'Display information about pending restore', + 'volumes' => 'Show volumes needed for restore.' +); + +############################################################################## +### Read config and command line. +############################################################################## + +my %catalogs; +my $catalog; # Current catalog + +## Globals + +my %restore; +my $rnum = 0; +my $rbytes = 0; +my $debug = 0; +my $verbose = 0; +my $rtime; +my $cwd; +my $lwd; +my $files; +my $restore_to = '/'; +my $start_dir; +my $preload; +my $dircache = {}; +my $usecache = 1; + +=head1 SYNTAX + +B [B<-b> I] [B<-c> I B<-j> I] +[B<-i> I] [B<-p>] [B<-t> I] + +B [B<-h>] + +Most of the command line arguments can be specified in the init file +B<$HOME/.recoverrc> (see CONFIG FILE FORMAT below). The command +line arguments will override the options in the init file. If no +I is specified, the first one found in the init file will +be used. + +=head1 DESCRIPTION + +B will read the specified catalog and provide a shell like +environment from which a time based view of the specified client/jobname +and be exampled and selected for restoration. + +The command line option B<-b> specified the DBI compatible connect +script to use when connecting to the catalog database. The B<-c> and +B<-j> options specify the client and jobname respectively to view from +the catalog database. The B<-i> option will set the initial directory +you are viewing to the specified directory. if B<-i> is not specified, +it will default to /. You can set the initial time to view the catalog +from using the B<-t> option. + +The B<-p> option will pre-load the entire catalog into memory. This +could take a lot of memory, so use it with caution. + +The B<-d> option turns on debugging and the B<-v> option turns on +verbose output. + +By specifying a I, the default options for connecting to +the catalog database will be taken from the section of the inti file +specified by that name. + +The B<-h> option will display this document. + +In order for this program to have a chance of not being painfully slow, +the following indexs should be added to your database. + +B + +B + +=cut + +my $vars = {}; +getopts("c:b:hi:j:pt:vd", $vars) || die "Usage: bad arguments\n"; + +if ($vars->{'h'}) { + system("perldoc $0"); + exit; +} + +$preload = $vars->{'p'} if ($vars->{'p'}); +$debug = $vars->{'d'} if ($vars->{'d'}); +$verbose = $vars->{'v'} if ($vars->{'v'}); + +# Set initial time to view the catalog + +if ($vars->{'t'}) { + $rtime = parsedate($vars->{'t'}, FUZZY => 1, PREFER_PAST => 1); +} +else { + $rtime = time(); +} + +my $dbconnect; +my $username = ""; +my $password = ""; +my $db; +my $client; +my $jobname; +my $jobs; +my $ftime; + +my $cstr; + +# Read config file (if available). + +&read_config($CONF_FILE); + +# Set defaults + +$catalog = $ARGV[0] if (@ARGV); + +if ($catalog) { + $cstr = ${catalogs{$catalog}}->{'client'} + if (${catalogs{$catalog}}->{'client'}); + + $jobname = $catalogs{$catalog}->{'jobname'} + if ($catalogs{$catalog}->{'jobname'}); + + $dbconnect = $catalogs{$catalog}->{'dbconnect'} + if ($catalogs{$catalog}->{'dbconnect'}); + + $username = $catalogs{$catalog}->{'username'} + if ($catalogs{$catalog}->{'username'}); + + $password = $catalogs{$catalog}->{'password'} + if ($catalogs{$catalog}->{'password'}); + + $start_dir = $catalogs{$catalog}->{'cd'} + if ($catalogs{$catalog}->{'cd'}); + + $preload = $catalogs{$catalog}->{'preload'} + if ($catalogs{$catalog}->{'preload'} && !defined($vars->{'p'})); + + $verbose = $catalogs{$catalog}->{'verbose'} + if ($catalogs{$catalog}->{'verbose'} && !defined($vars->{'v'})); + + $debug = $catalogs{$catalog}->{'debug'} + if ($catalogs{$catalog}->{'debug'} && !defined($vars->{'d'})); +} + +#### Command line overries config file + +$start_dir = $vars->{'i'} if ($vars->{'i'}); +$start_dir = '/' if (!$start_dir); + +$start_dir .= '/' if (substr($start_dir, length($start_dir) - 1, 1) ne '/'); + +if ($vars->{'b'}) { + $dbconnect = $vars->{'b'}; +} + +die "You must supply a db connect string.\n" if (!defined($dbconnect)); + +if ($dbconnect =~ /^dbi:Pg/) { + $db = 'postgres'; +} +elsif ($dbconnect =~ /^dbi:mysql/) { + $db = 'mysql'; +} +else { + die "Unknown database type specified in $dbconnect\n"; +} + +# Initialize database connection + +print STDERR "DBG: Connect using: $dbconnect\n" if ($debug); + +my $dbh = DBI->connect($dbconnect, $username, $password) || + die "Can't open bacula database\nDatabase connect string '$dbconnect'"; + +die "Client id required.\n" if (!($cstr || $vars->{'c'})); + +$cstr = $vars->{'c'} if ($vars->{'c'}); +$client = &lookup_client($cstr); + +# Set job information +$jobname = $vars->{'j'} if ($vars->{'j'}); + +die "You need to specify a job name.\n" if (!$jobname); + +&setjob; + +die "Failed to set client\n" if (!$client); + +# Prepare our query +my $dir_sth = $dbh->prepare($queries{$db}->{'dir'}) + || die "Can't prepare $queries{$db}->{'dir'}\n"; + +my $sel_sth = $dbh->prepare($queries{$db}->{'sel'}) + || die "Can't prepare $queries{$db}->{'sel'}\n"; + +my $ver_sth = $dbh->prepare($queries{$db}->{'ver'}) + || die "Can't prepare $queries{$db}->{'ver'}\n"; + +my $clients; + +# Initialize readline. +my $term = new Term::ReadLine('Bacula Recover'); +$term->ornaments(0); + +my $readline = $term->ReadLine; +my $tty_attribs = $term->Attribs; + +# Needed for base64 decode + +my @base64_digits = ( + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', + 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' +); +my @base64_map = (0) x 128; + +for (my $i=0; $i<64; $i++) { + $base64_map[ord($base64_digits[$i])] = $i; +} + +############################################################################## +### Support routines +############################################################################## + +=head1 FILES + +B<$HOME/.recoverrc> Configuration file for B. + +=head1 CONFIG FILE FORMAT + +The config file will allow you to specify the defaults for your +catalog(s). Each catalog definition starts with B<[>IB<]>. +Blank lines and lines starting with # are ignored. + +The first catalog specified will be used as the default catalog. + +All values are specified in I B<=> I format. You can +specify the following Is for each catalog. + +=cut + +sub read_config { + my $conf_file = shift; + my $c; + + # No nothing if config file can't be read. + + if (-r $conf_file) { + open(CONF, "<$conf_file") || die "$!: Can't open $conf_file\n"; + + while () { + chomp; + # Skip comments and blank links + next if (/^\s*#/); + next if (/^\s*$/); + + if (/^\[(\w+)\]$/) { + $c = $1; + $catalog = $c if (!$catalog); + + if ($catalogs{$c}) { + die "Duplicate catalog definition in $conf_file\n"; + } + + $catalogs{$c} = {}; + } + elsif (!$c) { + die "Conf file must start with catalog definition [catname]\n"; + } + else { + + if (/^(\w+)\s*=\s*(.*)/) { + my $item = $1; + my $value = $2; + +=head2 client + +The name of the default client to view when connecting to this +catalog. This can be changed later with the B command. + +=cut + + if ($item eq 'client') { + $catalogs{$c}->{'client'} = $value; + } + +=head2 dbconnect + +The DBI compatible database string to use to connect to this catalog. + +=over 4 + +=item B + +dbi:Pg:dbname=bacula;host=backuphost + +=back + +=cut + elsif ($item eq 'dbconnect') { + $catalogs{$c}->{'dbconnect'} = $value; + } + +=head2 jobname + +The name of the default job to view when connecting to the catalog. This +can be changed later with the B command. + +=cut + elsif ($item eq 'jobname') { + $catalogs{$c}->{'jobname'} = $value; + } + +=head2 password + +The password to use when connecing to the catalog database. + +=cut + elsif ($item eq 'password') { + $catalogs{$c}->{'password'} = $value; + } + +=head2 preload + +Set the preload flag. A preload flag of 1 or on will load the entire +catalog when recover.pl is start. This is a memory hog, so use with +caution. + +=cut + elsif ($item eq 'preload') { + + if ($value =~ /^(1|on)$/i) { + $catalogs{$c}->{'preload'} = 1; + } + elsif ($value =~ /^(0|off)$/i) { + $catalogs{$c}->{'preload'} = 0; + } + else { + die "$value: Unknown value for preload.\n"; + } + + } + +=head2 username + +The username to use when connecing to the catalog database. + +=cut + elsif ($item eq 'username') { + $catalogs{$c}->{'username'} = $value; + } + else { + die "Unknown opton $item in $conf_file.\n"; + } + + } + else { + die "Bad line $_ in $conf_file.\n"; + } + + } + + } + + close(CONF); + } + +} + +sub create_file_entry { + my $name = shift; + my $fileid = shift; + my $fileindex = shift; + my $jobid = shift; + my $visible = shift; + my $lstat = shift; + + print STDERR "DBG: name = $name\n" if ($debug); + print STDERR "DBG: fileid = $fileid\n" if ($debug); + print STDERR "DBG: fileindex = $fileindex\n" if ($debug); + print STDERR "DBG: jobid = $jobid\n" if ($debug); + print STDERR "DBG: visible = $visible\n" if ($debug); + print STDERR "DBG: lstat = $lstat\n" if ($debug); + + my $data = { + fileid => $fileid, + fileindex => $fileindex, + jobid => $jobid, + visible => ($visible >= 0) ? 1 : 0 + }; + + # decode file stat + my @stat = (); + + foreach my $s (split(' ', $lstat)) { + print STDERR "DBG: Add $s to stat array.\n" if ($debug); + push(@stat, from_base64($s)); + } + + $data->{'lstat'} = { + 'st_dev' => $stat[0], + 'st_ino' => $stat[1], + 'st_mode' => $stat[2], + 'st_nlink' => $stat[3], + 'st_uid' => $stat[4], + 'st_gid' => $stat[5], + 'st_rdev' => $stat[6], + 'st_size' => $stat[7], + 'st_blksize' => $stat[8], + 'st_blocks' => $stat[9], + 'st_atime' => $stat[10], + 'st_mtime' => $stat[11], + 'st_ctime' => $stat[12], + 'LinkFI' => $stat[13], + 'st_flags' => $stat[14], + 'data_stream' => $stat[15] + }; + + # Create mode string. + my $sstr = &mode2str($stat[2]); + $data->{'lstat'}->{'statstr'} = $sstr; + return $data; +} +# Read directory data, return hash reference. + +sub fetch_dir { + my $dir = shift; + + return $dircache->{$dir} if ($dircache->{$dir}); + + print "$dir not cached, fetching from database.\n" if ($verbose); + my $data = {}; + my $fmax = 0; + + my $dl = length($dir); + + print STDERR "? - 1: ftime = $ftime\n" if ($debug); + print STDERR "? - 2: client = $client\n" if ($debug); + print STDERR "? - 3: jobname = $jobname\n" if ($debug); + print STDERR "? - 4: rtime = $rtime\n" if ($debug); + print STDERR "? - 5: dir = $dir\n" if ($debug); + print STDERR "? - 6, 7: dl = $dl, $dl\n" if ($debug); + print STDERR "? - 8: ftime = $ftime\n" if ($debug); + print STDERR "? - 9: client = $client\n" if ($debug); + print STDERR "? - 10: jobname = $jobname\n" if ($debug); + print STDERR "? - 11: rtime = $rtime\n" if ($debug); + print STDERR "? - 12: dir = $dir\n" if ($debug); + + print STDERR "DBG: Execute - $queries{$db}->{'dir'}\n" if ($debug); + $dir_sth->execute( + $ftime, + $client, + $jobname, + $rtime, + $dir, + $dl, $dl, + $ftime, + $client, + $jobname, + $rtime, + $dir + ) || die "Can't execute $queries{$db}->{'dir'}\n"; + + while (my $ref = $dir_sth->fetchrow_hashref) { + my $file = $$ref{name}; + print STDERR "DBG: File $file found in database.\n" if ($debug); + my $l = length($file); + $fmax = $l if ($l > $fmax); + + $data->{$file} = &create_file_entry( + $file, + $ref->{'fileid'}, + $ref->{'fileindex'}, + $ref->{'jobid'}, + $ref->{'visible'}, + $ref->{'lstat'} + ); + } + + return undef if (!$fmax); + + $dircache->{$dir} = $data if ($usecache); + return $data; +} + +sub cache_catalog { + print "Loading entire catalog, please wait...\n"; + my $sth = $dbh->prepare($queries{$db}->{'cache'}) + || die "Can't prepare $queries{$db}->{'cache'}\n"; + print STDERR "DBG: Execute - $queries{$db}->{'cache'}\n" if ($debug); + $sth->execute($ftime, $client, $jobname, $rtime, $ftime) + || die "Can't execute $queries{$db}->{'cache'}\n"; + + print "Query complete, building catalog cache...\n" if ($verbose); + + while (my $ref = $sth->fetchrow_hashref) { + my $dir = $ref->{path}; + my $file = $ref->{name}; + print STDERR "DBG: File $dir$file found in database.\n" if ($debug); + + next if ($dir eq '/' and $file eq ''); # Skip data for / + + # Rearrange directory + + if ($file eq '' and $dir =~ m|(.*/)([^/]+/)$|) { + $dir = $1; + $file = $2; + } + + my $data = &create_file_entry( + $file, + $ref->{'fileid'}, + $ref->{'fileindex'}, + $ref->{'jobid'}, + $ref->{'visible'}, + $ref->{'lstat'} + ); + + $dircache->{$dir} = {} if (!$dircache->{$dir}); + $dircache->{$dir}->{$file} = $data; + } + + $sth->finish(); +} + +# Break a path up into dir and file. + +sub path_parts { + my $path = shift; + my $fqdir; + my $dir; + my $file; + + if (substr($path, 0, 1) eq '/') { + + # Find dir vs. file + if ($path =~ m|^(/.*/)([^/]*$)|) { + $fqdir = $dir = $1; + $file = $2; + } + else { # Must be in / + $fqdir = $dir = '/'; + $file = substr($path, 1); + } + + print STDERR "DBG: / Dir - $dir; file = $file\n" if ($debug); + } + # relative path + elsif ($path =~ m|^(.*/)([^/]*)$|) { + $fqdir = "$cwd$1"; + $dir = $1; + $file = $2; + print STDERR "DBG: Dir - $dir; file = $file\n" if ($debug); + } + # File is in our current directory. + else { + $fqdir = $cwd; + $dir = ''; + $file = $path; + print STDERR "DBG: Set dir to $dir\n" if ($debug); + } + + return ($fqdir, $dir, $file); +} + +sub lookup_client { + my $c = shift; + + if (!$clients) { + $clients = {}; + my $query = "select clientid, name from Client"; + my $sth = $dbh->prepare($query) || die "Can't prepare $query\n"; + $sth->execute || die "Can't execute $query\n"; + + while (my $ref = $sth->fetchrow_hashref) { + $clients->{$ref->{'name'}} = $ref->{'clientid'}; + } + + $sth->finish; + } + + if ($c !~ /^\d+$/) { + + if ($clients->{$c}) { + $c = $clients->{$c}; + } + else { + warn "Could not find client $c\n"; + $c = $client; + } + + } + + return $c; +} + +sub setjob { + + if (!$jobs) { + $jobs = {}; + my $query = "select distinct name from Job order by name"; + my $sth = $dbh->prepare($query) || die "Can't prepare $query\n"; + $sth->execute || die "Can't execute $query\n"; + + while (my $ref = $sth->fetchrow_hashref) { + $jobs->{$$ref{'name'}} = $$ref{'name'}; + } + + $sth->finish; + } + + my $query = "select + jobtdate + from + Job + where + jobtdate <= $rtime and + name = '$jobname' and + level = 'F' + order by jobtdate desc + limit 1 + "; + + my $sth = $dbh->prepare($query) || die "Can't prepare $query\n"; + $sth->execute || die "Can't execute $query\n"; + + if ($sth->rows == 1) { + my $ref = $sth->fetchrow_hashref; + $ftime = $$ref{jobtdate}; + } + else { + warn "Could not find full backup. Setting full time to 0.\n"; + $ftime = 0; + } + + $sth->finish; +} + +sub select_files { + my $mark = shift; + my $opts = shift; + my $dir = shift; + my @flist = @_; + + if (!@flist) { + + if ($cwd eq '/') { + my $finfo = &fetch_dir('/'); + @flist = keys %$finfo; + } + else { + @flist = ($cwd); + } + + } + + foreach my $f (@flist) { + $f =~ s|/+$||; + my $path = (substr($f, 0, 1) eq '/') ? $f : "$dir$f"; + my ($fqdir, $dir, $file) = &path_parts($path); + my $finfo = &fetch_dir($fqdir); + + if (!$finfo->{$file}) { + + if (!$finfo->{"$file/"}) { + warn "$f: File not found.\n"; + next; + } + + $file .= '/'; + } + + my $info = $finfo->{$file}; + + my $fid = $info->{'fileid'}; + my $fidx = $info->{'fileindex'}; + my $jid = $info->{'jobid'}; + my $size = $info->{'lstat'}->{'st_size'}; + + if ($opts->{'all'} || $info->{'visible'}) { + print STDERR "DBG: $file - $size bytes\n" + if ($debug); + + if ($mark) { + + if (!$restore{$fid}) { + print "Adding $fqdir$file\n" if (!$opts->{'quiet'}); + $restore{$fid} = [$jid, $fidx]; + $rnum++; + $rbytes += $size; + } + + } + else { + + if ($restore{$fid}) { + print "Removing $fqdir$file\n" if (!$opts->{'quiet'}); + delete $restore{$fid}; + $rnum--; + $rbytes -= $size; + } + + } + + if ($file =~ m|/$|) { + + # Use preloaded files if we already retrieved them. + if ($preload) { + my $newdir = "$dir$file"; + my $finfo = &fetch_dir($newdir); + &select_files($mark, $opts, $newdir, keys %$finfo); + next; + } + else { + my $newdir = "$fqdir$file"; + my $begin = ($opts->{'all'}) ? 0 : $ftime; + + print STDERR "DBG: Execute - $queries{$db}->{'sel'}\n" + if ($debug); + + $sel_sth->execute( + $client, + $jobname, + $rtime, + $begin, + $newdir, + $client, + $jobname, + $rtime, + $begin, + $newdir + ) || die "Can't execute $queries{$db}->{'sel'}\n"; + + while (my $ref = $sel_sth->fetchrow_hashref) { + my $file = $$ref{'name'}; + my $fid = $$ref{'fileid'}; + my $fidx = $$ref{'fileindex'}; + my $jid = $$ref{'jobid'}; + my @stat_enc = split(' ', $$ref{'lstat'}); + my $size = &from_base64($stat_enc[7]); + + if ($mark) { + + if (!$restore{$fid}) { + print "Adding $file\n" if (!$opts->{'quiet'}); + $restore{$fid} = [$jid, $fidx]; + $rnum++; + $rbytes += $size; + } + + } + else { + + if ($restore{$fid}) { + print "Removing $file\n" if (!$opts->{'quiet'}); + delete $restore{$fid}; + $rnum--; + $rbytes -= $size; + } + + } + + } + + } + + } + + } + + } + +} + +# Expand shell wildcards + +sub expand_files { + my $path = shift; + my ($fqdir, $dir, $file) = &path_parts($path); + my $finfo = &fetch_dir($fqdir); + return ($path) if (!$finfo); + + my $pat = "^$file\$"; + + # Add / for dir match + my $dpat = $file; + $dpat =~ s|/+$||; + $dpat = "^$dpat/\$"; + + my @match; + + $pat =~ s/\./\\./g; + $dpat =~ s/\./\\./g; + $pat =~ s/\?/./g; + $dpat =~ s/\?/./g; + $pat =~ s/\*/.*/g; + $dpat =~ s/\*/.*/g; + + foreach my $f (sort keys %$finfo) { + + if ($f =~ /$pat/) { + push (@match, ($fqdir eq $cwd) ? $f : "$fqdir$f"); + } + elsif ($f =~ /$dpat/) { + push (@match, ($fqdir eq $cwd) ? $f : "$fqdir$f"); + } + + } + + return ($path) if (!@match); + return @match; +} + +sub expand_dirs { + my $path = shift; + my ($fqdir, $dir, $file) = &path_parts($path, 1); + + print STDERR "Expand $path\n" if ($debug); + + my $finfo = &fetch_dir($fqdir); + return ($path) if (!$finfo); + + $file =~ s|/+$||; + + my $pat = "^$file/\$"; + my @match; + + $pat =~ s/\./\\./g; + $pat =~ s/\?/./g; + $pat =~ s/\*/.*/g; + + foreach my $f (sort keys %$finfo) { + print STDERR "Match $f to $pat\n" if ($debug); + push (@match, ($fqdir eq $cwd) ? $f : "$fqdir$f") if ($f =~ /$pat/); + } + + return ($path) if (!@match); + return @match; +} + +sub mode2str { + my $mode = shift; + my $sstr = ''; + + if (S_ISDIR($mode)) { + $sstr = 'd'; + } + elsif (S_ISCHR($mode)) { + $sstr = 'c'; + } + elsif (S_ISBLK($mode)) { + $sstr = 'b'; + } + elsif (S_ISREG($mode)) { + $sstr = '-'; + } + elsif (S_ISFIFO($mode)) { + $sstr = 'f'; + } + elsif (S_ISLNK($mode)) { + $sstr = 'l'; + } + elsif (S_ISSOCK($mode)) { + $sstr = 's'; + } + else { + $sstr = '?'; + } + + $sstr .= ($mode&S_IRUSR) ? 'r' : '-'; + $sstr .= ($mode&S_IWUSR) ? 'w' : '-'; + $sstr .= ($mode&S_IXUSR) ? + (($mode&S_ISUID) ? 's' : 'x') : + (($mode&S_ISUID) ? 'S' : '-'); + $sstr .= ($mode&S_IRGRP) ? 'r' : '-'; + $sstr .= ($mode&S_IWGRP) ? 'w' : '-'; + $sstr .= ($mode&S_IXGRP) ? + (($mode&S_ISGID) ? 's' : 'x') : + (($mode&S_ISGID) ? 'S' : '-'); + $sstr .= ($mode&S_IROTH) ? 'r' : '-'; + $sstr .= ($mode&S_IWOTH) ? 'w' : '-'; + $sstr .= ($mode&S_IXOTH) ? + (($mode&S_ISVTX) ? 't' : 'x') : + (($mode&S_ISVTX) ? 'T' : '-'); + + return $sstr; +} + +# Base 64 decoder +# Algorithm copied from bacula source + +sub from_base64 { + my $where = shift; + my $val = 0; + my $i = 0; + my $neg = 0; + + if (substr($where, 0, 1) eq '-') { + $neg = 1; + $where = substr($where, 1); + } + + while ($where ne '') { + $val <<= 6; + my $d = substr($where, 0, 1); + #print STDERR "\n$d - " . ord($d) . " - " . $base64_map[ord($d)] . "\n"; + $val += $base64_map[ord(substr($where, 0, 1))]; + $where = substr($where, 1); + } + + return $val; +} + +### Command completion code + +sub get_match { + my @m = @_; + my $r = ''; + + for (my $i = 0, my $matched = 1; $i < length($m[0]) && $matched; $i++) { + my $c = substr($m[0], $i, 1); + + for (my $j = 1; $j < @m; $j++) { + + if ($c ne substr($m[$j], $i, 1)) { + $matched = 0; + last; + } + + } + + $r .= $c if ($matched); + } + + return $r; +} + +sub complete { + my $text = shift; + my $line = shift; + my $start = shift; + my $end = shift; + + $tty_attribs->{'completion_append_character'} = ' '; + $tty_attribs->{completion_entry_function} = \&nocomplete; + print STDERR "\nDBG: text - $text; line - $line; start - $start; end = $end\n" + if ($debug); + + # Complete command if we are at start of line. + + if ($start == 0 || substr($line, 0, $start) =~ /^\s*$/) { + my @list = grep (/^$text/, sort keys %COMMANDS); + return () if (!@list); + my $match = (@list > 1) ? &get_match(@list) : ''; + return $match, @list; + } + else { + # Count arguments + my $cstr = $line; + $cstr =~ s/^\s+//; # Remove leading spaces + + my ($cmd, @args) = shellwords($cstr); + return () if (!defined($cmd)); + + # Complete dirs for cd + if ($cmd eq 'cd') { + return () if (@args > 1); + return &complete_files($text, 1); + } + # Complete files/dirs for info and ls + elsif ($cmd =~ /^(add|delete|info|ls|mark|unmark|versions)$/) { + return &complete_files($text, 0); + } + # Complete clients for client + elsif ($cmd eq 'client') { + return () if (@args > 2); + my $pat = $text; + $pat =~ s/\./\\./g; + my @flist; + + print STDERR "DBG: " . (@args) . " arguments found.\n" if ($debug); + + if (@args < 1 || (@args == 1 and $line =~ /[^\s]$/)) { + @flist = grep (/^$pat/, sort keys %$clients); + } + else { + @flist = grep (/^$pat/, sort keys %$jobs); + } + + return () if (!@flist); + my $match = (@flist > 1) ? &get_match(@flist) : ''; + + #return $match, map {s/ /\\ /g; $_} @flist; + return $match, @flist; + } + # Complete show options for show + elsif ($cmd eq 'show') { + return () if (@args > 1); + # attempt to suggest match. + my @list = grep (/^$text/, sort keys %SHOW); + return () if (!@list); + my $match = (@list > 1) ? &get_match(@list) : ''; + return $match, @list; + } + elsif ($cmd =~ /^(bsr|bootstrap|relocate)$/) { + $tty_attribs->{completion_entry_function} = + $tty_attribs->{filename_completion_function}; + } + + } + + return (); +} + +sub complete_files { + my $path = shift; + my $dironly = shift; + my $finfo; + my @flist; + + my ($fqdir, $dir, $pat) = &path_parts($path, 1); + + $pat =~ s/([.\[\]\\])/\\$1/g; + # First check for absolute name. + + $finfo = &fetch_dir($fqdir); + print STDERR "DBG: " . join(', ', keys %$finfo) . "\n" if ($debug); + return () if (!$finfo); # Nothing if dir not found. + + if ($dironly) { + @flist = grep (m|^$pat.*/$|, sort keys %$finfo); + } + else { + @flist = grep (/^$pat/, sort keys %$finfo); + } + + return undef if (!@flist); + + print STDERR "DBG: Files found\n" if ($debug); + + if (@flist == 1 && $flist[0] =~ m|/$|) { + $tty_attribs->{'completion_append_character'} = ''; + } + + @flist = map {s/ /\\ /g; ($fqdir eq $cwd) ? $_ : "$dir$_"} @flist; + my $match = (@flist > 1) ? &get_match(@flist) : ''; + + print STDERR "DBG: Dir - $dir; cwd - $cwd\n" if ($debug); + # Fill in dir if necessary. + return $match, @flist; +} + +sub nocomplete { + return (); +} + +# subroutine to create printf format for long listing of ls + +sub long_fmt { + my $flist = shift; + my $fmax = 0; + my $lmax = 0; + my $umax = 0; + my $gmax = 0; + my $smax = 0; + + foreach my $f (@$flist) { + my $file = $f->[0]; + my $info = $f->[1]; + my $lstat = $info->{'lstat'}; + + my $l = length($file); + $fmax = $l if ($l > $fmax); + + $l = length($lstat->{'st_nlink'}); + $lmax = $l if ($l > $lmax); + $l = length($lstat->{'st_uid'}); + $umax = $l if ($l > $umax); + $l = length($lstat->{'st_gid'}); + $gmax = $l if ($l > $gmax); + $l = length($lstat->{'st_size'}); + $smax = $l if ($l > $smax); + } + + return "%s %${lmax}d %${umax}d %${gmax}d %${smax}d %s %s\n"; +} + +sub print_by_cols { + my @list = @_; + my $l = @list; + my $w = $term->get_screen_size; + my @wds = (1); + my $m = $w/3 + 1; + my $max_cols = ($m < @list) ? $w : @list; + my $fpc = 1; + my $cols = 1; + + print STDERR "Need to print $l files\n" if ($debug); + + while($max_cols > 1) { + my $used = 0; + + # Initialize array of widths + @wds = 0 x $max_cols; + + for ($cols = 0; $cols < $max_cols && $used < $w; $cols++) { + my $cw = 0; + + for (my $j = $cols*$fpc; $j < ($cols + 1)*$fpc && $j < $l; $j++ ) { + my $fl = length($list[$j]->[0]); + $cw = $fl if ($fl > $cw); + } + + $wds[$cols] = $cw; + $used += $cw; + print STDERR "DBG: Total so far is $used\n" if ($debug); + + if ($used >= $w) { + $cols++; + last; + } + + $used += 3; + } + + print STDERR "DBG: $cols of $max_cols columns uses $used space.\n" + if ($debug); + + print STDERR "DBG: Print $fpc files per column\n" + if ($debug); + + last if ($used <= $w && $cols == $max_cols); + $fpc = int($l/$cols); + $fpc++ if ($l % $cols); + $max_cols = $cols - 1; + } + + if ($max_cols == 1) { + $cols = 1; + $fpc = $l; + } + + print STDERR "Print out $fpc rows with $cols columns\n" + if ($debug); + + for (my $i = 0; $i < $fpc; $i++) { + + for (my $j = $i; $j < $fpc*$cols; $j += $fpc) { + my $cw = $wds[($j - $i)/$fpc]; + my $fmt = "%s%-${cw}s"; + my $file; + my $r; + + if ($j < @list) { + $file = $list[$j]->[0]; + my $fdata = $list[$j]->[1]; + $r = ($restore{$fdata->{'fileid'}}) ? '+' : ' '; + } + else { + $file = ''; + $r = ' '; + } + + print ' ' if ($i != $j); + printf $fmt, $r, $file; + } + + print "\n"; + } + +} + +sub ls_date { + my $seconds = shift; + my $date; + + if (abs(time() - $seconds) > 15724800) { + $date = time2str('%b %e %Y', $seconds); + } + else { + $date = time2str('%b %e %R', $seconds); + } + + return $date; +} + +# subroutine to load entire bacula database. +=head1 SHELL + +Once running, B will present the user with a shell like +environment where file can be exampled and selected for recover. The +shell will provide command history and editing and if you have the +Gnu readline module installed on your system, it will also provide +command completion. When interacting with files, wildcards should work +as expected. + +The following commands are understood. + +=cut + +sub parse_command { + my $cstr = shift; + my @command; + my $cmd; + my @args; + + # Nop on blank or commented lines + return ('nop') if ($cstr =~ /^\s*$/); + return ('nop') if ($cstr =~ /^\s*#/); + + # Get rid of leading white space to make shellwords work better + $cstr =~ s/^\s*//; + + ($cmd, @args) = shellwords($cstr); + + if (!defined($cmd)) { + warn "Could not warse $cstr\n"; + return ('nop'); + } + +=head2 add [I] + +Mark I for recovery. If I is not specified, mark all +files in the current directory. B is an alias for this command. + +=cut + elsif ($cmd eq 'add' || $cmd eq 'mark') { + my $options = {}; + @ARGV = @args; + + # Parse ls options + my $vars = {}; + getopts("aq", $vars) || return ('error', 'Add: Usage add [-q|-a] files'); + $options->{'all'} = $vars->{'a'}; + $options->{'quiet'} =$vars->{'q'}; + + + @command = ('add', $options); + + foreach my $a (@ARGV) { + push(@command, &expand_files($a)); + } + + } + +=head2 bootstrap I + +Create a bootstrap file suitable for use with the bacula B +command. B is an alias for this command. + +=cut + elsif ($cmd eq 'bootstrap' || $cmd eq 'bsr') { + return ('error', 'bootstrap takes single argument (file to write to)') + if (@args != 1); + @command = ('bootstrap', $args[0]); + } + +=head2 cd I + +Allows you to set your current directory. This command understands . for +the current directory and .. for the parent. Also, cd - will change you +back to the previous directory you were in. + +=cut + elsif ($cmd eq 'cd') { + # Cd with no args goes to / + @args = ('/') if (!@args); + + if (@args != 1) { + return ('error', 'Bad cd. cd requires 1 and only 1 argument.'); + } + + my $todir = $args[0]; + + # cd - should cd to previous directory. It is handled later. + return ('cd', '-') if ($todir eq '-'); + + # Expand wilecards + my @e = expand_dirs($todir); + + if (@e > 1) { + return ('error', 'Bad cd. Wildcard expands to more than 1 dir.'); + } + + $todir = $e[0]; + + print STDERR "Initial target is $todir\n" if ($debug); + + # remove prepended . + + while ($todir =~ m|^\./(.*)|) { + $todir = $1; + $todir = '.' if (!$todir); + } + + # If only . is left, replace with current directory. + $todir = $cwd if ($todir eq '.'); + print STDERR "target after . processing is $todir\n" if ($debug); + + # Now deal with .. + my $prefix = $cwd; + + while ($todir =~ m|^\.\./(.*)|) { + $todir = $1; + print STDERR "DBG: ../ found, new todir - $todir\n" if ($debug); + $prefix =~ s|/[^/]*/$|/|; + } + + if ($todir eq '..') { + $prefix =~ s|/[^/]*/$|/|; + $todir = ''; + } + + print STDERR "target after .. processing is $todir\n" if ($debug); + print STDERR "DBG: Final prefix - $prefix\n" if ($debug); + + $todir = "$prefix$todir" if ($prefix ne $cwd); + + print STDERR "DBG: todir after .. handling - $todir\n" if ($debug); + + # Turn relative directories into absolute directories. + + if (substr($todir, 0, 1) ne '/') { + print STDERR "DBG: $todir has no leading /, prepend $cwd\n" if ($debug); + $todir = "$cwd$todir"; + } + + # Make sure we have a trailing / + + if (substr($todir, length($todir) - 1) ne '/') { + print STDERR "DBG: No trailing /, append /\n" if ($debug); + $todir .= '/'; + } + + @command = ('cd', $todir); + } + +=head2 changetime I + +This command changes the time used in generating the view of the +filesystem. Files that were backed up before the specified time +(optionally until the next full backup) will be the only files seen. + +The time can be specifed in almost any reasonable way. Here are a few +examples: + +=over 4 + +=item 1/1/2006 + +=item yesterday + +=item sunday + +=item 5 days ago + +=item last month + +=back + +=cut + elsif ($cmd eq 'changetime') { + @command = ($cmd, join(' ', @args)); + } + +=head2 client I I + +Specify the client and jobname to view. + +=cut + elsif ($cmd eq 'client') { + + if (@args != 2) { + return ('error', 'client takes a two arguments client-name job-name'); + } + + @command = ('client', @args); + } + +=head2 debug + +Toggle debug flag. + +=cut + elsif ($cmd eq 'debug') { + @command = ('debug'); + } + +=head2 delete [I] + +Un-mark file that were previous marked for recovery. If I is +not specified, mark all files in the current directory. B is an +alias for this command. + +=cut + elsif ($cmd eq 'delete' || $cmd eq 'unmark') { + @command = ('delete'); + + foreach my $a (@args) { + push(@command, &expand_files($a)); + } + + } + +=head2 help + +Show list of command with brief description of what they do. + +=cut + elsif ($cmd eq 'help') { + @command = ('help'); + } + +=head2 history + +Display command line history. B is an alias for this command. + +=cut + elsif ($cmd eq 'h' || $cmd eq 'history') { + @command = ('history'); + } + +=head2 info [I] + +Display information about the specified files. The format of the +information provided is reminiscent of the bootstrap file. + +=cut + elsif ($cmd eq 'info') { + push(@command, 'info'); + + foreach my $a (@args) { + push(@command, &expand_files($a)); + } + + } + +=head2 ls [I] + +This command will list the specified files (defaults to all files in +the current directory). Files are sorted alphabetically be default. It +understand the following options. + +=over 4 + +=item -a + +Causes ls to list files even if they are only on backups preceding the +closest full backup to the currently selected date/time. + +=item -l + +List files in long format (like unix ls command). + +=item -r + +reverse direction of sort. + +=item -S + +Sort files by size. + +=item -t + +Sort files by time + +=back + +=cut + elsif ($cmd eq 'ls' || $cmd eq 'dir' || $cmd eq 'll') { + my $options = {}; + @ARGV = @args; + + # Parse ls options + my $vars = {}; + getopts("altSr", $vars) || return ('error', 'Bad ls usage.'); + $options->{'all'} = $vars->{'a'}; + $options->{'long'} = $vars->{'l'}; + $options->{'long'} = 1 if ($cmd eq 'dir' || $cmd eq 'll'); + + $options->{'sort'} = 'time' if ($vars->{'t'}); + + return ('error', 'Only one sort at a time allowed.') + if ($options->{'sort'} && ($vars->{'S'})); + + $options->{'sort'} = 'size' if ($vars->{'S'}); + $options->{'sort'} = 'alpha' if (!$options->{'sort'}); + + $options->{'sort'} = 'r' . $options->{'sort'} if ($vars->{'r'}); + + @command = ('ls', $options); + + foreach my $a (@ARGV) { + push(@command, &expand_files($a)); + } + + } + +=head2 pwd + +Show current directory. + +=cut + elsif ($cmd eq 'pwd') { + @command = ('pwd'); + } + +=head2 quit + +Exit program. + +B, B and B are all aliases for this command. + +=cut + elsif ($cmd eq 'quit' || $cmd eq 'q' || $cmd eq 'exit' || $cmd eq 'x') { + @command = ('quit'); + } + +=head2 recover + +This command creates a table in the bacula catalog that case be used to +restore the selected files. It will also display the command to enter +into bconsole to start the restore. + +=cut + elsif ($cmd eq 'recover') { + @command = ('recover'); + } + +=head2 relocate I + +Specify the directory to restore files to. Defaults to /. + +=cut + elsif ($cmd eq 'relocate') { + return ('error', 'relocate required a single directory to relocate to') + if (@args != 1); + + my $todir = $args[0]; + $todir = `pwd` . $todir if (substr($todir, 0, 1) ne '/'); + @command = ('relocate', $todir); + } + +=head2 show I + +Show various information about B. The following items can be specified. + +=over 4 + +=item cache + +Display's a list of cached directories. + +=item catalog + +Displays the name of the catalog we are talking to. + +=item client + +Display current client and job named that are being viewed. + +=item restore + +Display the number of files and size to be restored. + +=item volumes + +Display the volumes that will be required to perform a restore on the +selected files. + +=back + +=cut + elsif ($cmd eq 'show') { + return ('error', 'show takes a single argument') if (@args != 1); + @command = ('show', $args[0]); + } + +=head2 verbose + +Toggle verbose flag. + +=cut + elsif ($cmd eq 'verbose') { + @command = ('verbose'); + } + +=head2 versions [I] + +View all version of specified files available from the current +time. B is an alias for this command. + +=cut + elsif ($cmd eq 'versions' || $cmd eq 'ver') { + push(@command, 'versions'); + + foreach my $a (@args) { + push(@command, &expand_files($a)); + } + + } + +=head2 volumes + +Display the volumes that will be required to perform a restore on the +selected files. + +=cut + elsif ($cmd eq 'volumes') { + @command = ('volumes'); + } + else { + @command = ('error', "$cmd: Unknown command"); + } + + return @command; +} + +############################################################################## +### Command processing +############################################################################## + +# Add files to restore list. + +sub cmd_add { + my $opts = shift; + my @flist = @_; + + my $save_rnum = $rnum; + &select_files(1, $opts, $cwd, @flist); + print "" . ($rnum - $save_rnum) . " files marked for restore\n"; +} + +sub cmd_bootstrap { + my $bsrfile = shift; + my %jobs; + my @media; + my %bootstrap; + + # Get list of job ids to restore from. + + foreach my $fid (keys %restore) { + $jobs{$restore{$fid}->[0]} = 1; + } + + my $jlist = join(', ', sort keys %jobs); + + if (!$jlist) { + print "Nothing to restore.\n"; + return; + } + + # Read in media info + + my $query = "select + Job.jobid, + volumename, + mediatype, + volsessionid, + volsessiontime, + firstindex, + lastindex, + startfile as volfile, + JobMedia.startblock, + JobMedia.endblock, + volindex + from + Job, + Media, + JobMedia + where + Job.jobid in ($jlist) and + Job.jobid = JobMedia.jobid and + JobMedia.mediaid = Media.mediaid + order by + volumename, + volsessionid, + volindex + "; + + my $sth = $dbh->prepare($query) || die "Can't prepare $query\n"; + $sth->execute || die "Can't execute $query\n"; + + while (my $ref = $sth->fetchrow_hashref) { + push(@media, { + 'jobid' => $ref->{'jobid'}, + 'volumename' => $ref->{'volumename'}, + 'mediatype' => $ref->{'mediatype'}, + 'volsessionid' => $ref->{'volsessionid'}, + 'volsessiontime' => $ref->{'volsessiontime'}, + 'firstindex' => $ref->{'firstindex'}, + 'lastindex' => $ref->{'lastindex'}, + 'volfile' => $ref->{'volfile'}, + 'startblock' => $ref->{'startblock'}, + 'endblock' => $ref->{'endblock'}, + 'volindex' => $ref->{'volindex'} + }); + } + +# Gather bootstrap info +# +# key - jobid.volumename.volumesession.volindex +# job +# name +# type +# session +# time +# file +# startblock +# endblock +# array of file indexes. + + for my $info (values %restore) { + my $jobid = $info->[0]; + my $fidx = $info->[1]; + + foreach my $m (@media) { + + if ($jobid == $m->{'jobid'} && $fidx >= $m->{'firstindex'} && $fidx <= $m->{'lastindex'}) { + my $key = "$jobid."; + $key .= "$m->{volumename}.$m->{volsessionid}.$m->{volindex}"; + + $bootstrap{$key} = { + 'job' => $jobid, + 'name' => $m->{'volumename'}, + 'type' => $m->{'mediatype'}, + 'session' => $m->{'volsessionid'}, + 'index' => $m->{'volindex'}, + 'time' => $m->{'volsessiontime'}, + 'file' => $m->{'volfile'}, + 'startblock' => $m->{'startblock'}, + 'endblock' => $m->{'endblock'} + } + if (!$bootstrap{$key}); + + $bootstrap{$key}->{'files'} = [] + if (!$bootstrap{$key}->{'files'}); + push(@{$bootstrap{$key}->{'files'}}, $fidx); + } + + } + + } + + # print bootstrap + + print STDERR "DBG: Keys = " . join(', ', keys %bootstrap) . "\n" + if ($debug); + + my @keys = sort { + return $bootstrap{$a}->{'time'} <=> $bootstrap{$b}->{'time'} + if ($bootstrap{$a}->{'time'} != $bootstrap{$b}->{'time'}); + return $bootstrap{$a}->{'name'} cmp $bootstrap{$b}->{'name'} + if ($bootstrap{$a}->{'name'} ne $bootstrap{$b}->{'name'}); + return $bootstrap{$a}->{'session'} <=> $bootstrap{$b}->{'session'} + if ($bootstrap{$a}->{'session'} != $bootstrap{$b}->{'session'}); + return $bootstrap{$a}->{'index'} <=> $bootstrap{$b}->{'index'}; + } keys %bootstrap; + + if (!open(BSR, ">$bsrfile")) { + warn "$bsrfile: $|\n"; + return; + } + + foreach my $key (@keys) { + my $info = $bootstrap{$key}; + print BSR "Volume=\"$info->{name}\"\n"; + print BSR "MediaType=\"$info->{type}\"\n"; + print BSR "VolSessionId=$info->{session}\n"; + print BSR "VolSessionTime=$info->{time}\n"; + print BSR "VolFile=$info->{file}\n"; + print BSR "VolBlock=$info->{startblock}-$info->{endblock}\n"; + + my @fids = sort { $a <=> $b} @{$bootstrap{$key}->{'files'}}; + my $first; + my $prev; + + for (my $i = 0; $i < @fids; $i++) { + $first = $fids[$i] if (!$first); + + if ($prev) { + + if ($fids[$i] != $prev + 1) { + print BSR "FileIndex=$first"; + print BSR "-$prev" if ($first != $prev); + print BSR "\n"; + $first = $fids[$i]; + } + + } + + $prev = $fids[$i]; + } + + print BSR "FileIndex=$first"; + print BSR "-$prev" if ($first != $prev); + print BSR "\n"; + print BSR "Count=" . (@fids) . "\n"; + } + + close(BSR); +} + +# Change directory + +sub cmd_cd { + my $dir = shift; + + my $save = $files; + + $dir = $lwd if ($dir eq '-' && defined($lwd)); + + if ($dir ne '-') { + $files = &fetch_dir($dir); + } + else { + warn "Previous director not defined.\n"; + } + + if ($files) { + $lwd = $cwd; + $cwd = $dir; + } + else { + print STDERR "Could not locate directory $dir\n"; + $files = $save; + } + + $cwd = '/' if (!$cwd); +} + +sub cmd_changetime { + my $tstr = shift; + + if (!$tstr) { + print "Time currently set to " . localtime($rtime) . "\n"; + return; + } + + my $newtime = parsedate($tstr, FUZZY => 1, PREFER_PAST => 1); + + if (defined($newtime)) { + print STDERR "Time evaluated to $newtime\n" if ($debug); + $rtime = $newtime; + print "Setting date/time to " . localtime($rtime) . "\n"; + &setjob; + + # Clean cache. + $dircache = {}; + &cache_catalog if ($preload); + + # Get directory based on new time. + $files = &fetch_dir($cwd); + } + else { + print STDERR "Could not parse $tstr as date/time\n"; + } + +} + +# Change client + +sub cmd_client { + my $c = shift; + $jobname = shift; # Set global job name + + # Lookup client id. + $client = &lookup_client($c); + + # Clear cache, we changed machines/jobs + $dircache = {}; + &cache_catalog if ($preload); + + # Find last full backup time. + &setjob; + + # Get current directory on new client. + $files = &fetch_dir($cwd); + + # Clear restore info + $rnum = 0; + $rbytes = 0; + %restore = (); +} + +sub cmd_debug { + $debug = 1 - $debug; +} + +sub cmd_delete { + my @flist = @_; + my $opts = {quiet=>1}; + + my $save_rnum = $rnum; + &select_files(0, $opts, $cwd, @flist); + print "" . ($save_rnum - $rnum) . " files un-marked for restore\n"; +} + +sub cmd_help { + + foreach my $h (sort keys %COMMANDS) { + printf "%-12s %s\n", $h, $COMMANDS{$h}; + } + +} + +sub cmd_history { + + foreach my $h ($term->GetHistory) { + print "$h\n"; + } + +} + +# Print catalog/tape info about files + +sub cmd_info { + my @flist = @_; + @flist = ($cwd) if (!@flist); + + foreach my $f (@flist) { + $f =~ s|/+$||; + my ($fqdir, $dir, $file) = &path_parts($f); + my $finfo = &fetch_dir($fqdir); + + if (!$finfo->{$file}) { + + if (!$finfo->{"$file/"}) { + warn "$f: File not found.\n"; + next; + } + + $file .= '/'; + } + + my $fileid = $finfo->{$file}->{fileid}; + my $fileindex = $finfo->{$file}->{fileindex}; + my $jobid = $finfo->{$file}->{jobid}; + + print "#$f -\n"; + print "#FileID : $finfo->{$file}->{fileid}\n"; + print "#JobID : $jobid\n"; + print "#Visible : $finfo->{$file}->{visible}\n"; + + my $query = "select + volumename, + mediatype, + volsessionid, + volsessiontime, + startfile, + JobMedia.startblock, + JobMedia.endblock + from + Job, + Media, + JobMedia + where + Job.jobid = $jobid and + Job.jobid = JobMedia.jobid and + $fileindex >= firstindex and + $fileindex <= lastindex and + JobMedia.mediaid = Media.mediaid + "; + + my $sth = $dbh->prepare($query) || die "Can't prepare $query\n"; + $sth->execute || die "Can't execute $query\n"; + + while (my $ref = $sth->fetchrow_hashref) { + print "Volume=\"$ref->{volumename}\"\n"; + print "MediaType=\"$ref->{mediatype}\"\n"; + print "VolSessionId=$ref->{volsessionid}\n"; + print "VolSessionTime=$ref->{volsessiontime}\n"; + print "VolFile=$ref->{startfile}\n"; + print "VolBlock=$ref->{startblock}-$ref->{endblock}\n"; + print "FileIndex=$finfo->{$file}->{fileindex}\n"; + print "Count=1\n"; + } + + $sth->finish; + } + +} + +# List files. + +sub cmd_ls { + my $opts = shift; + my @flist = @_; + my @keys; + + print STDERR "DBG: " . (@flist) . " files to list.\n" if ($debug); + + if (!@flist) { + @flist = keys %$files; + } + + # Sort files as specified. + + if ($opts->{sort} eq 'alpha') { + print STDERR "DBG: Sort by alpha\n" if ($debug); + @keys = sort @flist; + } + elsif ($opts->{sort} eq 'ralpha') { + print STDERR "DBG: Sort by reverse alpha\n" if ($debug); + @keys = sort {$b cmp $a} @flist; + } + elsif ($opts->{sort} eq 'time') { + print STDERR "DBG: Sort by time\n" if ($debug); + @keys = sort { + return $a cmp $b + if ($files->{$b}->{'lstat'}->{'st_mtime'} == + $files->{$a}->{'lstat'}->{'st_mtime'}); + $files->{$b}->{'lstat'}->{'st_mtime'} <=> + $files->{$a}->{'lstat'}->{'st_mtime'} + } @flist; + } + elsif ($opts->{sort} eq 'rtime') { + print STDERR "DBG: Sort by reverse time\n" if ($debug); + @keys = sort { + return $b cmp $a + if ($files->{$a}->{'lstat'}->{'st_mtime'} == + $files->{$b}->{'lstat'}->{'st_mtime'}); + $files->{$a}->{'lstat'}->{'st_mtime'} <=> + $files->{$b}->{'lstat'}->{'st_mtime'} + } @flist; + } + elsif ($opts->{sort} eq 'size') { + print STDERR "DBG: Sort by size\n" if ($debug); + @keys = sort { + return $a cmp $b + if ($files->{$a}->{'lstat'}->{'st_size'} == + $files->{$b}->{'lstat'}->{'st_size'}); + $files->{$b}->{'lstat'}->{'st_size'} <=> + $files->{$a}->{'lstat'}->{'st_size'} + } @flist; + } + elsif ($opts->{sort} eq 'rsize') { + print STDERR "DBG: Sort by reverse size\n" if ($debug); + @keys = sort { + return $b cmp $a + if ($files->{$a}->{'lstat'}->{'st_size'} == + $files->{$b}->{'lstat'}->{'st_size'}); + $files->{$a}->{'lstat'}->{'st_size'} <=> + $files->{$b}->{'lstat'}->{'st_size'} + } @flist; + } + else { + print STDERR "DBG: $opts->{sort}, no sort\n" if ($debug); + @keys = @flist; + } + + @flist = (); + + foreach my $f (@keys) { + print STDERR "DBG: list $f\n" if ($debug); + $f =~ s|/+$||; + my ($fqdir, $dir, $file) = &path_parts($f); + my $finfo = &fetch_dir($fqdir); + + if (!$finfo->{$file}) { + + if (!$finfo->{"$file/"}) { + warn "$f: File not found.\n"; + next; + } + + $file .= '/'; + } + + my $fdata = $finfo->{$file}; + + if ($opts->{'all'} || $fdata->{'visible'}) { + push(@flist, ["$dir$file", $fdata]); + } + + } + + if ($opts->{'long'}) { + my $lfmt = &long_fmt(\@flist) if ($opts->{'long'}); + + foreach my $f (@flist) { + my $file = $f->[0]; + my $fdata = $f->[1]; + my $r = ($restore{$fdata->{'fileid'}}) ? '+' : ' '; + my $lstat = $fdata->{'lstat'}; + + printf $lfmt, $lstat->{'statstr'}, $lstat->{'st_nlink'}, + $lstat->{'st_uid'}, $lstat->{'st_gid'}, $lstat->{'st_size'}, + ls_date($lstat->{'st_mtime'}), "$r$file"; + } + } + else { + &print_by_cols(@flist); + } + +} + +sub cmd_pwd { + print "$cwd\n"; +} + +# Create restore data for bconsole + +sub cmd_recover { + my $query = "create table recover (jobid int, fileindex int)"; + + $dbh->do($query) + || warn "Could not create recover table. Hope it's already there.\n"; + + if ($db eq 'postgres') { + $query = "COPY recover FROM STDIN"; + + $dbh->do($query) || die "Can't execute $query\n"; + + foreach my $finfo (values %restore) { + $dbh->pg_putline("$finfo->[0]\t$finfo->[1]\n"); + } + + $dbh->pg_endcopy; + } + else { + + foreach my $finfo (values %restore) { + $query = "insert into recover ( + 'jobid', 'fileindex' + ) + values ( + $finfo->[0], $finfo->[1] + )"; + $dbh->do($query) || die "Can't execute $query\n"; + } + + } + + $query = "GRANT all on recover to bacula"; + $dbh->do($query) || die "Can't execute $query\n"; + + $query = "select name from Client where clientid = $client"; + my $sth = $dbh->prepare($query) || die "Can't prepare $query\n"; + $sth->execute || die "Can't execute $query\n"; + + my $ref = $sth->fetchrow_hashref; + print "Restore prepared. Run bconsole and enter the following command\n"; + print "restore client=$$ref{name} where=$restore_to file=\?recover\n"; + $sth->finish; +} + +sub cmd_relocate { + $restore_to = shift; +} + +# Display information about recover's state + +sub cmd_show { + my $what = shift; + + if ($what eq 'clients') { + + foreach my $c (sort keys %$clients) { + print "$c\n"; + } + + } + elsif ($what eq 'catalog') { + print "$catalog\n"; + } + elsif ($what eq 'client') { + my $query = "select name from Client where clientid = $client"; + my $sth = $dbh->prepare($query) || die "Can't prepare $query\n"; + $sth->execute || die "Can't execute $query\n"; + + my $ref = $sth->fetchrow_hashref; + print "$$ref{name}; $jobname\n"; + $sth->finish; + } + elsif ($what eq 'cache') { + print "The following directories are cached\n"; + + foreach my $d (sort keys %$dircache) { + print "$d\n"; + } + + } + elsif ($what eq 'restore') { + print "There are $rnum files marked for restore.\n"; + + print STDERR "DBG: Bytes = $rbytes\n" if ($debug); + + if ($rbytes < 1024) { + print "The restore will require $rbytes bytes.\n"; + } + elsif ($rbytes < 1024*1024) { + my $rk = $rbytes/1024; + printf "The restore will require %.2f KB.\n", $rk; + } + elsif ($rbytes < 1024*1024*1024) { + my $rm = $rbytes/1024/1024; + printf "The restore will require %.2f MB.\n", $rm; + } + else { + my $rg = $rbytes/1024/1024/1024; + printf "The restore will require %.2f GB.\n", $rg; + } + + print "Restores will be placed in $restore_to\n"; + } + elsif ($what eq 'volumes') { + &cmd_volumes; + } + elsif ($what eq 'qinfo') { + my $dl = length($cwd); + print "? - 1: ftime = $ftime\n"; + print "? - 2: client = $client\n"; + print "? - 3: jobname = $jobname\n"; + print "? - 4: rtime = $rtime\n"; + print "? - 5: dir = $cwd\n"; + print "? - 6, 7: dl = $dl\n"; + print "? - 8: ftime = $ftime\n"; + print "? - 9: client = $client\n"; + print "? - 10: jobname = $jobname\n"; + print "? - 11: rtime = $rtime\n"; + print "? - 12: dir = $cwd\n"; + } + else { + warn "Don't know how to show $what\n"; + } + +} + +sub cmd_verbose { + $verbose = 1 - $verbose; +} + +sub cmd_versions { + my @flist = @_; + + @flist = ($cwd) if (!@flist); + + foreach my $f (@flist) { + my $path; + my $data = {}; + + print STDERR "DBG: Get versions for $f\n" if ($debug); + + $f =~ s|/+$||; + my ($fqdir, $dir, $file) = &path_parts($f); + my $finfo = &fetch_dir($fqdir); + + if (!$finfo->{$file}) { + + if (!$finfo->{"$file/"}) { + warn "$f: File not found.\n"; + next; + } + + $file .= '/'; + } + + if ($file =~ m|/$|) { + $path = "$fqdir$file"; + $file = ''; + } + else { + $path = $fqdir; + } + + print STDERR "DBG: Use $ftime, $path, $file, $client, $jobname\n" + if ($debug); + + $ver_sth->execute($ftime, $rtime, $path, $file, $client, $jobname) + || die "Can't execute $queries{$db}->{'ver'}\n"; + + # Gather stats + + while (my $ref = $ver_sth->fetchrow_hashref) { + my $f = "$ref->{name};$ref->{jobtdate}"; + $data->{$f} = &create_file_entry( + $f, + $ref->{'fileid'}, + $ref->{'fileindex'}, + $ref->{'jobid'}, + $ref->{'visible'}, + $ref->{'lstat'} + ); + + $data->{$f}->{'jobtdate'} = $ref->{'jobtdate'}; + $data->{$f}->{'volume'} = $ref->{'volumename'}; + } + + my @keys = sort { + $data->{$a}->{'jobtdate'} <=> + $data->{$b}->{'jobtdate'} + } keys %$data; + + my @list = (); + + foreach my $f (@keys) { + push(@list, [$file, $data->{$f}]); + } + + my $lfmt = &long_fmt(\@list); + print "\nVersions of \`$path$file' earlier than "; + print localtime($rtime) . ":\n\n"; + + foreach my $f (@keys) { + my $lstat = $data->{$f}->{'lstat'}; + printf $lfmt, $lstat->{'statstr'}, $lstat->{'st_nlink'}, + $lstat->{'st_uid'}, $lstat->{'st_gid'}, $lstat->{'st_size'}, + time2str('%c', $lstat->{'st_mtime'}), $file; + print "save time: " . localtime($data->{$f}->{'jobtdate'}) . "\n"; + print " location: $data->{$f}->{volume}\n\n"; + } + + } + +} + +# List volumes needed for restore. + +sub cmd_volumes { + my %media; + my @jobmedia; + my %volumes; + + # Get media. + my $query = "select mediaid, volumename from Media"; + my $sth = $dbh->prepare($query) || die "Can't prepare $query\n"; + + $sth->execute || die "Can't execute $query\n"; + + while (my $ref = $sth->fetchrow_hashref) { + $media{$$ref{'mediaid'}} = $$ref{'volumename'}; + } + + $sth->finish(); + + # Get media usage. + $query = "select mediaid, jobid, firstindex, lastindex from JobMedia"; + $sth = $dbh->prepare($query) || die "Can't prepare $query\n"; + + $sth->execute || die "Can't execute $query\n"; + + while (my $ref = $sth->fetchrow_hashref) { + push(@jobmedia, { + 'mediaid' => $$ref{'mediaid'}, + 'jobid' => $$ref{'jobid'}, + 'firstindex' => $$ref{'firstindex'}, + 'lastindex' => $$ref{'lastindex'} + }); + } + + $sth->finish(); + + # Find needed volumes + + foreach my $fileid (keys %restore) { + my ($jobid, $idx) = @{$restore{$fileid}}; + + foreach my $jm (@jobmedia) { + next if ($jm->{'jobid'}) != $jobid; + + if ($idx >= $jm->{'firstindex'} && $idx <= $jm->{'lastindex'}) { + $volumes{$media{$jm->{'mediaid'}}} = 1; + } + + } + + } + + print "The following volumes are needed for restore.\n"; + + foreach my $v (sort keys %volumes) { + print "$v\n"; + } + +} + +sub cmd_error { + my $msg = shift; + print STDERR "$msg\n"; +} + +############################################################################## +### Start of program +############################################################################## + +&cache_catalog if ($preload); + +print "Using $readline for command processing\n" if ($verbose); + +# Initialize command completion + +# Add binding for Perl readline. Issue warning. +if ($readline eq 'Term::ReadLine::Gnu') { + $term->ReadHistory($HIST_FILE); + print STDERR "DBG: FCD - $tty_attribs->{filename_completion_desired}\n" + if ($debug); + $tty_attribs->{attempted_completion_function} = \&complete; + $tty_attribs->{attempted_completion_function} = \&complete; + print STDERR "DBG: Quote chars = '$tty_attribs->{filename_quote_characters}'\n" if ($debug); +} +elsif ($readline eq 'Term::ReadLine::Perl') { + readline::rl_bind('TAB', 'ViComplete'); + warn "Command completion disabled. $readline is seriously broken\n"; +} +else { + warn "Can't deal with $readline, Command completion disabled.\n"; +} + +&cmd_cd($start_dir); + +while (defined($cstr = $term->readline('recover> '))) { + print "\n" if ($readline eq 'Term::ReadLine::Perl'); + my @command = parse_command($cstr); + last if ($command[0] eq 'quit'); + next if ($command[0] eq 'nop'); + + print STDERR "Execute $command[0] command.\n" if ($debug); + + my $cmd = \&{"cmd_$command[0]"}; + + # The following line will call the subroutine named cmd_ prepended to + # the name of the command returned by parse_command. + + &$cmd(@command[1..$#command]); +}; + +$dir_sth->finish(); +$sel_sth->finish(); +$ver_sth->finish(); +$dbh->disconnect(); + +print "\n" if (!defined($cstr)); + +$term->WriteHistory($HIST_FILE) if ($readline eq 'Term::ReadLine::Gnu'); + +=head1 DEPENDENCIES + +The following CPAN modules are required to run this program. + +DBI, Term::ReadKey, Time::ParseDate, Date::Format, Text::ParseWords + +Additionally, you will only get command line completion if you also have + +Term::ReadLine::Gnu + +=head1 AUTHOR + +Karl Hakimian + +=head1 LICENSE + +Copyright (C) 2006 Karl Hakimian + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +=cut diff --git a/bacula/kernstodo b/bacula/kernstodo index 0493eebda2..a857ee2233 100644 --- a/bacula/kernstodo +++ b/bacula/kernstodo @@ -1,5 +1,5 @@ Kern's ToDo List - 22 February 2006 + 11 January 2006 Major development: Project Developer @@ -15,16 +15,19 @@ Document: - %d and %v only valid on Director, not for ClientRunBefore/After. Priority: +- Implement a way to disable a drive (so you can use the second + drive of an autochanger, and the first one will not be used or + even defined). +- Implement code that makes the Dir aware that a drive is an + autochanger (so the user doesn't need to use the Autochanger = yes + directive). For 1.39: -- Job retention period in a Pool (and hence Volume). The job would - then be migrated. -- Detect resource deadlock in Migrate when same job wants to read - and write the same device. - Make hardlink code at line 240 of find_one.c use binary search. - Queue warning/error messages during restore so that they are reported at the end of the report rather than being hidden in the file listing ... +- Fix Maximum Changer Wait (and others) to accept qualifiers. - Look at -D_FORTIFY_SOURCE=2 - Add Win32 FileSet definition somewhere - Look at fixing restore status stats in SD. @@ -47,6 +50,7 @@ For 1.39: running of that Job (i.e. lets any previous invocation finish before doing Interval testing). - Look at simplifying File exclusions. +- Fix store_yesno to be store_bitmask. - New directive "Delete purged Volumes" - new pool XXX with ScratchPoolId = MyScratchPool's PoolId and let it fill itself, and RecyclePoolId = XXX's PoolId so I can @@ -54,7 +58,8 @@ For 1.39: MyScratchPool - If I want to remove this pool, I set RecyclePoolId = MyScratchPool's PoolId, and when it is empty remove it. -- Figure out how to recycle Scratch volumes back to the Scratch Pool. +- Figure out how to recycle Scratch volumes back to the Scratch + Pool. - Add Volume=SCRTCH - Allow Check Labels to be used with Bacula labels. - "Resuming" a failed backup (lost line for example) by using the @@ -64,6 +69,17 @@ For 1.39: days before it needs changing. - Command to show next tape that will be used for a job even if the job is not scheduled. +--- create_file.c.orig Fri Jul 8 12:13:05 2005 ++++ create_file.c Fri Jul 8 12:13:07 2005 +@@ -195,6 +195,8 @@ + attr->ofname, be.strerror()); + return CF_ERROR; + } ++ } else if(S_ISSOCK(attr->statp.st_mode)) { ++ Dmsg1(200, "Skipping socket: %s\n", attr->ofname); + } else { + Dmsg1(200, "Restore node: %s\n", attr->ofname); + if (mknod(attr->ofname, attr->statp.st_mode, attr->statp.st_rdev) != 0 && errno != EEXIST) { - From: Arunav Mandal 1. When jobs are running and bacula for some reason crashes or if I do a restart it remembers and jobs it was running before it crashed or restarted @@ -88,6 +104,12 @@ For 1.39: - Fix bpipe.c so that it does not modify results pointer. ***FIXME*** calling sequence should be changed. +1.xx Major Projects: +#3 Migration (Move, Copy, Archive Jobs) +#7 Single Job Writing to Multiple Storage Devices +- Reserve blocks other restore jobs when first cannot connect + to SD. +- Add true/false to conf same as yes/no - For Windows disaster recovery see http://unattended.sf.net/ - regardless of the retention period, Bacula will not prune the last Full, Diff, or Inc File data until a month after the @@ -1254,32 +1276,3 @@ Block Position: 0 integers. - Implement status that shows why a job is being held in reserve, or rather why none of the drives are suitable. -- Implement a way to disable a drive (so you can use the second - drive of an autochanger, and the first one will not be used or - even defined). -- Make sure Maximum Volumes is respected in Pools when adding - Volumes (e.g. when pulling a Scratch volume). -- Keep same dcr when switching device ... -- Implement code that makes the Dir aware that a drive is an - autochanger (so the user doesn't need to use the Autochanger = yes - directive). -- Make catalog respect ACL. -- Add recycle count to Media record. -- Add initial write date to Media record. -- Fix store_yesno to be store_bitmask. ---- create_file.c.orig Fri Jul 8 12:13:05 2005 -+++ create_file.c Fri Jul 8 12:13:07 2005 -@@ -195,6 +195,8 @@ - attr->ofname, be.strerror()); - return CF_ERROR; - } -+ } else if(S_ISSOCK(attr->statp.st_mode)) { -+ Dmsg1(200, "Skipping socket: %s\n", attr->ofname); - } else { - Dmsg1(200, "Restore node: %s\n", attr->ofname); - if (mknod(attr->ofname, attr->statp.st_mode, attr->statp.st_rdev) != 0 && errno != EEXIST) { -- Add true/false to conf same as yes/no -- Reserve blocks other restore jobs when first cannot connect to SD. -- Fix Maximum Changer Wait, Maximum Open Wait, Maximum Rewind Wait to - accept time qualifiers. - diff --git a/bacula/kes-1.38 b/bacula/kes-1.38 index 2de8cb1522..f9970d6c27 100644 --- a/bacula/kes-1.38 +++ b/bacula/kes-1.38 @@ -2,6 +2,155 @@ Kern Sibbald General: +Release 1.38.6 (28Mar06) released 29Mar06 +28Mar06 +- Back port from 1.39 fixes to lib/jcr.c to use foreach_jcr() + and new jcr chain locking. +26Mar06 +- Fix a long standing bug in the bacula start/stop scripts. +- Attempt to add the new bacula-ctl-* files to the rpm. +- Switch to using typeof() for list traversing to avoid + as many FC5 g++ compiler warnings as possible. +25Mar06 +- Split the bacula start/start script into four files: + bacula -- starts and stops calling other scripts + bacula-ctl-dir -- starts/stops the director + bacula-ctl-fd -- starts/stops the File daemon + bacula-ctl-sd -- starts/stops the Storage daemon +24Mar06 +- Create datestyle fix for PostgreSQL. Fixes bug #574. +- Correct editing of JobId from int to int64 in fd_cmds.c +- Eliminate FileSet name race with bash_spaces() and multiple + threads by bashing in a local. +- Fix error return from 'use storage' to print a correct error + message rather than nothing. +- Correct false re-read last block error message when two jobs + are simultaneously writing at the end of a tape. +- Simplify exit conditions in the reserve.c code to avoid + possible non-release of reservation_lock(). +- Suffle lock order in reserve to avoid deadlock between + reservation lock and device mutex. +- Add Thorsten's VSS timeout code to 1.38 branch. +21Mar06 +- Initialize jcr mutex before first use. Thanks to Thorsten for + tracking this down for me !!!! as it broke the Win32 build. +20Mar06 +- Integrate addition of line count limitation to bsmtp -l from + Sebastian Stark +17Mar06 +- Implement regex test program in tools directory. +- Attempt to fix time problem with bsmtp with foreign langs. +- Add strip_trailing_newline() submitted by user. + +16Mar06 +- Fix bug #537 to allow arbitrary time to mount a volume for + restore, if polling is turned on. +- Disallow multiple storage specifications for a job. Should fix Arno's + problem. +- Add back a missing store of poolid in jr.poolid. +- If dir_user or dir-group is specified in ./configure apply it to + the working-dir. Fixes bug #533. +- If rescheduling a job cancel the previous incarnation with the SD. + Fixes bugs #566 and 557. +- Fix bug #567 do_message() definition type conflict. + + +14Mar06 +- Add more jcr methods and make mutex and use_count private. +- Create lock/unlock methods for jcr. +- Fix PostgreSQL bug doing sql_data_seeek() by explicitly reading + records to get to seek position. +- Integrate patch from bug #561 to correct conio.c signal definitions. +- Fix Rescheduling failed Jobs. Ensure that SD message thread + terminates correctly by doing pthread_kill(). Do not destroy + SD cond wait variable between executions of the job. Use local + mutex for cond variable to avoid blocking jcr chain. Fix poor + use of jcr use count in jobq.c for restarted jobs. +- Fix obsolete usage of foreach_dlist() to use foreach_jcr() in + lib/jcr.c -- prevents locking the jcr chaing. +- Apply patch from bug #564, which corrects listing volumes with + multiple autochangers. Apply same fix to next volume list. +- Fix bug #562 where restore bootstrap file is not unique. +- Use new routine lock_reservations() to lock the reservations + system, and call it while looking for a volume in askdir.c. + This could possibly fix bug #543. +- Stop SD command loop if job is canceled. + +09Mar06 +- Use John Kodis' edit_with_suffix code to edit VolBytes. +- Backport some fixes for acquire.c. Most importantly, to explicitly + have a reserved_device flag for acquire_for_read(). Hopefully + this will correct the remaining issues with failed restores holding + a drive. +- Add a job_canceled() check in SD command loop. + +Release 1.38.6 beta3 4Mar06 +04Mar06 +- The po files should now be current. +- Fix new sql_use_result() code to properly release the + buffers in all cases. +- Convert to using new Python class definitons with (object). +- Use the keyword ujobid to mean the unique job id; job or jobname + to mean the Job name given on the Name directive, and jobid to + be the numeric (non-unique) job id. +- Allow listing by any of the above. +- Add the user friendly job report code for reporting job elapsed time + and rates with suffexes from John Kodis . +- Add Priority and JobLevel as Python settable items. +- Use TEMPORARY table creation where the table is created by + Bacula. +- Add new code submitted by Eric for waiting on specific jobid. +- Add ACL checking for the dot commands. +- Fix restore of writable FIFOs. +- Fix a bug in bpipe where the string was freed too early. + +26Feb06 +- Fix bug reported by Arno listing blocks with bls +- Update the po files at Eric's request. + +Release 1.38.6-beta2 25Feb06 +25Feb06 +- Add sql_use_result() define. + +Release 1.38.6 beta1 24Feb06 +24Feb06 +- Don't open default catalog if not in ACL. + +22Feb06 +- Add virtual disk autochanger code. +- Add user supplied bug fix to make two autochangers work + correctly using StorageId with InChanger checks. +- Correct new/old_jcr confusion in copy_storage(). +- Remove & from Job during scan in msgchan.c -- probably + trashed the stack. +- When getting the next Volume if no Volume in Append mode + exists and we are dealing with an Autochanger, search + for a Scratch Volume. +- Check for missing value in dot commands -- bug fix. +- Fix bug in update barcodes command line scanning. +- Make sure Pool Max Vols is respected. +- Check that user supplied a value before referencing + it in restore -- pointed out by Karl Hakimian. +- Add Karl Hakimian's table insert code. +- Don't ask user to select a specific Volume when + updating all volumes in a Pool. +- Remove reservation if set for read when removing dcr. +- Lock code that requests next appendable volume so that + two jobs to get the same Volume at the same time. +- Add new Device Type = xxx code. Values are file, tape, + dvd, and fifo. +- Preserve certain modes (ST_LABEL|ST_APPEND|ST_READ) across + a re-open to change read/write permission on a device. +- Correct a misplaced double quote in certain autochanger + scripts. +- Make make_catalog_backup.in a bit more portable. +- Implement Karl Hakimian's sql_use_result(), which speeds + up restore tree building and reduces the memory load. +- Correct a number of minor bugs in getting a Volume from + the Scratch Pool. +- Implement additional command line options for update Volume. +- Don't require user to enter a Volume name when updating + all Volumes in a pool. Release 1.38.5 released 19Jan06: 19Jan06 diff --git a/bacula/kes-1.39 b/bacula/kes-1.39 deleted file mode 100644 index 5f3add3503..0000000000 --- a/bacula/kes-1.39 +++ /dev/null @@ -1,398 +0,0 @@ - Technical notes on version 1.39 - Kern Sibbald - -General: - -27Feb06 -- Modify the Python class examples to inherit object -- new way - of defining classes. Patch from Felix Schwartz. -- Implement jobuid to replace old usage of job in keywords as - suggested by Eric Bollengier. -- Apply patch for enhancing wait from Eric Bollengier. On can now: - wait (wait for all jobs to stop) - wait jobid=nn - wait jobuid=unique id - wait job=job-name -- Implement write variables for Python to set Priority (anytime), and - Job Level, only during JobInit event. - -26Feb06 -- Fix the block listing bug pointed out by Arno. -- Update the po files at Eric's request. - -24Feb06 -- Fix Maximum Changer Wait, Maximum Open Wait, Maximum Rewind Wait to - accept time qualifiers. -- Make catalog respect ACL. -- Add recycle count to Media record. - -Changes to 1.39.6-beta1 24Feb04 -23Feb06 -- Add Rudolf Cejka's new rc-chio-changer. -- Implement pulling Volume from Scratch Pool if the - Volume is in the autochanger. -- Implement additional command arguments for update Volume. - -Changes to 1.39.5 -22Feb06 -- Back port changes to 1.38.5 -- Fix recycle SQL for StorageId. -- Fix misplaced quote in mtx-changer script. -20Feb06 -- Note. Your database must be updated, or you must create - a new database. I have not yet incremented the database level. -- Add Location table. -- Add LocationId, DeviceId, and MediaTypeId to Media record. -18Feb06 -- Implement create/get mac record in database for adding extended - Migration data to the job record. -- Add new MAC table to update/make database scripts. -- Return Storage name used when getting VolumeNames for a job. -- Change bsr file keyword Storage to Device, which is more accurate. -- Ensure that Mac records are pruned/purged. -- Tweak SD tools to deal with changing media type. -- Integrate more dev.c subroutines as methods (e.g. strerror, bsr, ...) -- Pass pointer to dcr pointer to acquire_device_for_read() so - that the subroutine can switch devices, and hence dcrs. -- Modify the multiple MediaType read code to re-use the same - dcr when switching devices. This makes the code much more - robust. -- Integrate patch from Karl Hakimian that reads JobIds, FileIndexes - from a table for restore. -- Add Storage name to VolParams, but it really should be Device. -14Feb06 -- Add disk-changer to scripts directory + configure/Makefile -- Eliminate PoolId from jcr -- it is in jcr->jr.PoolId -- Implement store_bit scanner to replace store_yesno. Mostly done. -- Implement new store_bool that stores in a bool. -- Add true/false to yes/no conf directives. -- Make first cut at changing appropriate store_yesno to store_bool. -- Complete implementation of Pool storage devices. -- Move starting clones to job.c -- Move create_restore_bootstrap_file() to job.c -- Make copy_storage() more general to be able to handle - Pool storage. -- Cleanup a lot of migration code for manual running, including - using Pool storage. -- Move getting a scratch Volume into a subroutine. -- Make all places a Volume that is added to a pool to - respect max vols. -- Fix bug in autochanger recycle code (improper edit 64 bit). -- Fix segfault in restore command when no value specified. -- Start adding code to handle multiple MediaTypes in restore. -- Eliminate race condition in getting Volume name for - two drive autochanger. -- More debug code in autochanger. -- Add storage keyword to bootstrap file, add parsing. -- Move slot in bsr file into Volume record as there will be - a different slot for each Volume. -- Create reserve.h -07Feb06 -- Implement Pool storage overrides. -06Feb06 -- Implement first cut of Migration. -- Implement mysql_use_result() from patch by Karl Hakimian. - This reduces significantly the memory consumption during - the restore tree building, and hence runs faster too. -- Implement StorageId patch supplied by user (reggie) in bug - #536. This should permit Bacula to work correctly with two - autochangers. -- Implement Job listing variations suggested by a user. -- Move updating bootstrap code in backup.c to subroutine - update_bootstrap_file(). -- Add new job status elapsed time and bytes written user - friendly job report output patch sent by a user. -- Implement a storage list in Pools. -- Separate out setup_job() code from run_job(). -- Get migration working -- lots of changes in mac.c in both - DIR and SD. -- Apply patch from user (Eric Bollinger I think) that fixes a - DIR crash when no arguments are supplied to a dot command. -- Fix typo (strcpy->strcmp) in ua_prune.c as reported by Martin. -- Fix command arg name->volume in label command of gnome-console. -- Fix SD acquire.c to release correct DCR by explicitly testing - on the dcr address rather than trying to devine if it is a read - or write dcr. This failed in error conditions when the device was - not fully setup. - -30Jan06 -- Apply user supplied patch for more readable rate output - in job report. -- Continue implementing migration. -- Implement support for removable filesystems in SD. -- Ensure that btraceback scripts can be read by anyone. -- Replace dvd-freespace and dvd-writepart by dvd-handler. -- Correct bug where canceling restore before the FD contacts - the SD causes the drive to be left in read mode. -- Move ofline_or_rewind into DEVICE::close(). -- Eliminate close_device. -- Convert several dev subroutines to methods (e.g. bsf, - eod, ...) -- Eliminate force_close_device(). -- Implement Device Type directive in Device resource that - can have values File, Tape, Fifo, DVD, or Prog. -- Add has_cap() method to Device. -Changes to 1.39.4 -17Jan06 -- Add patch from bug #527 to allow RedHat user to specify - options/user/group for starting each daemon in - /etc/sysconf/bacula. -16Jan06 -- Add two new queries to query.sql provided by Arno. One - list volumes known to the Storage device, and the other - lists volumes possibly needing replacement (error, ...). -15Jan06 -- Add periodic (every 24 hours) garbage collection of memory - pool by releasing free buffers. -14Jan06 -- Correct bug counting sized (for display only) in smartall.c -- Print FD mempool stats if debug > 0 rather than 5. -12Jan06 -- Make db_lock() mutex error fail the job rather than abort - Bacula. Canceling the job caused the mutex to fail. -- Correct bug in alist.c that re-allocated the list if the - number of items goes to zero. -- Move the reservation system thread locking to the top level - so that one job at a time tries all possible drives before - waiting. -- Implement a reservation 'fail' message queue that is built - and destroyed on each pass through the reservation system. - These messages are displayed in a 'Jobs waiting to reserve - a drive' list during a 'status storage='. Note, multiple - messages will generally print for each JobId because they - represent the different problems with either the same drive - or different drives. If this output proves too confusing - of voluminous, I will display it only when debug level 1 - or greater is enabled in the SD. -11Jan06 -- Add enable/disable job=. This command prevents - the specified job from being scheduled. Even when disabled, - the job can be manually started from the console. -- During 'update slots' clear all InChanger flags where the - StorageId is zero (old Media records). - -Beta release 1.38.4: -09Jan06 -- Fix autochanger code to strip leading spaces from returned - slots number. Remove bc from chio-changer. -- Back port a bit of 1.39 crypto code to reduce diffs. -- Fix first call to autochanger that missed close()ing the - drive. Put close() just before each run_program(). Fixes - Arno's changer bug. -07Jan06 -- Add PoolId to Job record when updating it at job start time. -06Jan06 -- Pull in more code from 1.39 so that there are fewer file - differences (the new ua_dotcmds.c, base64.h, crypto.h - hmac.c jcr.c (dird and lib) lib.h md5.h parse_conf.c - util.c. Aside from ua_dotcmds.c these are mostly crypto - upgrades. -- Implement new method of walking the jcr chain. The - incr/dec of the use_count is done within the walking - routines. This should prevent a jcr from being freed - from under the walk routines. - - -Changes to 1.39.3: -04Jan06 -- Start implementing Verify list output. -- Move the suitable_drive flag to a better place to prevent - premature termination of the reservation if all drives - are busy -- should fix Arno's diff/inc pool failures. -26Dec05 -- Add mutex to single thread VSS code in Win32. -22Dec05 -- Simplify code in askdir.c that waits for creating an appendable - volume so that it can handle multiple returns from the wait - code. -- Modify the wait code to permit multiple returns. -- Return a zero when "autochanger drives" is called and - it is not an autochanger. -- Make rewind_dev() a method taking a DCR as an argument. - This permits closing and reopening the drive if the - rewind fails as happens if the drive was loaded while the - file descriptor was open. This refreshes the file descriptor. -- Remove the ST_OPENED flag and always rely on fd < 0 for knowing - if the device is open or not. This should eliminate - Arnos problem. -- Return error if reserve cannot find at least one suitable device. -- Make wait_for_sysop() return correct state information. -- Fix Win32 state file problem. write was not using compat - code. This should fix bug #500. -21Dec05 -- Modify gui on command to set only GUI mode and not batch. -- Modify .messages command to always print messages regardless - of the mode. -- If GUI mode is on, suppress automatic printing of - You have messages. -- Delete old bnet packet code. -- Ignore new BNET_START_SELECT and BNET_END_SELECT signals in - wx-console. -- Modify restore command in wx-console to set gui on and to use - only .messages instead of messages. Hopefully this fixes bug - #514. -- Fix seg fault in exit of acquire when canceling a job -- - reported by Wolfgang Denk -- Pull in latest reservation system changes from 1.38 -- Make .messages command always print messages regardless - of the automessages flag. -17Dec05 -- Fix seg fault if user labels a drive directory bug #513 -- Remove quotes around Version as it breaks things. -16Dec05 -- Merge in Aleksandar Milivojevic's mods to the spec file. -- Apply sparse code fix for raw drives and fifos. Bug 506 -- Thorsten fixed Unicode cd problem with wx-console bug 505. -14Dec05 -- Correct reservation system to do a last ditch try - for any mounted volume, then anyone anywhere. -- Add quotes around table Version because of - error in MySQL 4.1.15 -- bug report submitted. -- Correct some minor problems with btape in the fill - command. -- Updates to ssh-tunnel from Joshua Kugler. -- Added a report.pl program from Jonas Bjorklund. -- Simplify the O_NONBLOCK open() code for tape drives, - and always open nonblocking. -- Do not wait for open() if EIO returned (shouldn't happen). -- Eliminate 3 argument to tape open(). -- Correct the slot # edited in the 3995 Bad autochanger unload - message. -- With -S on bscan (show progress) do not divide by zero. -13Dec05 -- Make cancel pthread_cond_signal() pthread_cond_broadcast(). -- When dcr is freed, also broadcast dev->wait_next_vol signal. -- Remove unused code in wait_for_device. -- Make wait_for_device() always return after 60 seconds of wait. - -Changes to 1.39.2: -13Dec05 -- Add stubs for non-crypto build. -12Dec05 -- Use localhost if no network configured -11Dec05 -- Eliminated duplicate MaxVolBytes in cat update -- bug 509. -- Remove debug print. -- Add bail_out in error during state file reading. -10Dec05 -- Merge changes made to 1.38.3 into HEAD -- Add stubs for pygtk-console code -- Create Makefile.in for pygtk-console code -09Dec05 -- Merge updates into 1.38 branch -- Update specs to include mysql4 define. -- Fix when attributes are sent, must be after binit(). -- Stop read_record() if status not ok in second loop. -- Return rec->FileIndex in dcr->VolLastIndex for normal - and partial records in read_record(). This allows bscan - to get FileIndex at EOT correct. -- Fix butil.c to correctly set dcr -- fixes seg fault in bls. -08Dec05 -- Fix Win32 built to work with new crypto code. -- Apply patch supplied by user (slightly modified) to fix - correct detection of holes in block devices and FIFOs. - Bug # 506. -- Apply patch supplied by user (slightly modified) - to fix SD hang with multiple pools and bad client - IP. Fixes bug # 508. -07Dec05 -- Add nagios plugin to the examples directory. Submitted by - Christian Masopust. -- Remove warning message about multiple saves of hardlinked files - from find_one.c as it can generate too many warning messages. -- Modify most restore error messages to be queued so that they - appear at the end of the job rather than mixted with the restore - listing where they could be "lost". -06Dec05 -- Reset timeout values before select() per patch from - Frank Sweetser for problems with non-blocking sockets. -- Unlink the state file if either reading or writing it gets - errors. Hopefully this will fix Win32 exit problems. -- Add sanity check in append.c to ensure that dcr is not NULL. - This can happen if multiple drive autochanger SCSI control - channel and drive indicies do not correspond. -05Dec05 -- Get next volume from Scratch pool before creating a volume. -- Set new Pool defaults in Vol when moved from Scratch Pool. -- Remove argument from create_bacula_database for SQLite as it - caused an error. -- Add back index code so that two drive autochangers can get - a second tape. -- Change a bunch of debug levels to aid debugging autochangers. -- Fix reservation so that mutexes are properly applied. -- Rework reservation algorithm so that two drives can be used - at the same time. -04Dec05 -- Landon merged his data encription changes into the HEAD -- Apply days keyword patch from Alexander.Bergolth at wu-wien.ac.at - If this patch is applied, the number of days can be specified with - "list nextvol days=xx" - or - "status dir days=xx" - My use case is to be able to preview the next scheduled job (and the - next tape to be used) on fridays if there are no scheduled jobs during - the weekend. -Changes to 1.39.1: -03Dec05 -- Fix font code in gnome2 console user patch. Fixes bug #501. -- Fix malformatted bnet error message that caused seg fault - fixes bug 502 -- Applied user patch to improve README.vc8 in src/win32. -29Nov05 -- Add Migrate, Copy, Archive Job types (some where there) -- Correct some more editing of JobId's (for 64 bit compatibility). -- Ensure that StorageId is stored in Media record when ever possible. -- Add Migration Job to Job. -- Add Migration Time, Migration High Bytes, Migration Low Bytes - Next Pool to Pool resource. -- Add more code to mac.c (migration archive copy). -- Change Start Storage daemon job to require read and write storage - pointers. -- Pass read storage data to SD as well as write storage data. -- Remove old code from winservice.cpp -- Break on error in scan. -- Fix typo in signal.c -- Separate read/write DCR in SD. Add jcr->read_dcr. -- Cleanup how find_device() works. -- Add read output to Status in SD. -Changes to 1.39.0: -23Nov05 -- Add red-black btree routines -21Nov05 -- Remove abs() in bfile.c so that it compiles on Solaris. - Bug #491. -20Nov05 -- Fix crash in tray-monitor when daemon disconnects. Bug #479. -- Fix bnet-server bug found on OpenBSD. Bug #486 -- Fix cancel failure bug. Bug #481 -- Fix failure when Pool name has spaces. Bug #487 -- Fix SD crash in autochanger code. Mutex failure. Bug #488 -- Fix a couple of free()s in src/filed/acl.c -- Fix memory overrun in bfile.c in building OS X resource - fork filename. Bug #489 -- Add Pool name to SD status output. -14Nov05 -- Apply SunOS patch for ACLs submitted by David Duchscher. -- Make sure to set storage before trying to set drive. -- Add bacula_mail_summary.sh to examples directory. It makes - a single email summary of any number of jobs. Submitted - by Adrew J. Millar. -- Make sure when we do a mount to unblock the device even - if the drive could not be opened. -13Nov05 -- Remove the USE_WIN32STREAMEXTRACTION #defines (always on) - and correct a few minor problems to make it build on Linux. -10Nov05 -- Remove delete of CVS from all Makefiles -- Fix seg fault when clicking on Add button in wx-console - restore panel. Bug #470. -- Fix copyright date and URL typo -- bug #468. -- Change autostart install for FreeBSD to look for rc.conf - rather than rc.local as suggested fix for bug #466. -- Apply patch supplied by Eric Bollinger to fix PostgreSQL - grant on status. Bug #465 -- Apply patch supplied by Eric Bollinger to fix PostgreSQL - update script. Bug #464 -- Tweak #ifdefing a bit in new Win32 stream code. -- Fix #ifdeffing for FD_NO_SEND_TEST. -- Add documentation of performance #defines diff --git a/bacula/nb-1.37 b/bacula/nb-1.37 new file mode 100644 index 0000000000..b9bcce64f8 --- /dev/null +++ b/bacula/nb-1.37 @@ -0,0 +1,93 @@ + Technical notes on version 1.37 + Nicolas Boichat + +General: + +Changes to 1.37.*: +26Oct05 + - dvd.c: update VolParts when writing the last part. +19Oct05 + - configure: add check for dd, remove check for df + - block.c:do_dvd_size_checks: Check we are writing to a dvd before doing tests + (reported by David Raine on the list, "[Bacula-users] LTO drive - End Of Volume error"). + - Update bacula-sd.conf.in to use dvd-handler correctly. + - dvd.c:dvd_write_part: Increase timeout when writing the first part (see the code for + more details). +18Oct05 + - Modify .backups command to get a fileset parameter (fix bug #444). +17Oct05 + - Fix bug when recycling DVD devices (append flag was removed). + - Add tests for dvd+rw-format in configure script. + - scripts/dvd-handler: Reformat DVD-RW when needed. This needs dvd+rw-format. + - Add patch for dvd+rw-tools in patches dir (this should probably be elsewhere). +16Oct05 + - Remove scripts/dvd-freespace and scripts/dvd-writepart, as they are now + merged into scripts/dvd-handler. Note: Documentation needs to be updated. + - scripts/dvd-handler: "zero" brand-new DVD+/-RW to fix a problem with some + DVD-writers, thanks to Arno Lehmann for reporting this, and providing the + way to fix it. + - new scripts/dvd-handler. Note: it also needs a patched version of dvd+rw-tools. + - new scripts/dvd-freespace. Note: it needs a patched version of dvd+rw-tools. + - dvd.c:dvd_write_part: Don't write empty part. (Fix 4GB crossing bug reported by Arno Lehmann) +14Oct05 + - dvd.c:dvd_write_part: Use part_size and not max_part_size when setting write timeout. + - dvd.c:do_mount_dev: When checking if the DVD is mounted, do not count ., .. and .keep (needed on Gentoo). +15Aug05 + - Convert dvd-writepart to Python. + - Increase delay from 3 seconds to 5 seconds between SIGTERM and SIGKILL when + killing external programs. +13Aug05 + - Add gettext macros in autoconf/gettext-macros. + - Modify how localedir is set in configure.in. + - Remove setlocale check (useless). +10Aug05 + - Mark translatable strings in all source files. +08Aug05 + - Create French and Italian translation files (fr.po, it.po). + - Add support for translation in configure and Makefiles. + - Update autoconf/aclocal.m4 so it is automatically created with aclocal + (Note: autoconf/gnome-macros is not used anymore, it may be removed). +30Jul05 + - Fix src/lib/bpipe.c:run_program and run_program_full_output to detect if the watchdog + killed the program, and return an error if it is the case. +26Apr05 + - Modify parse_config to get a LEX_ERROR_HANDLER as a parameter + - lex_open_file now returns NULL if the file can't be opened. All calling functions have + been adapted. + - Remove set_exit_on_error function +07Apr05 + - Fix "unknown device type" problem with DVD devices. + - Fix crash when there is no media in the DVD drive. +09Jan05 + - Update the documentation and ReleaseNotes. +05Jan05 + - Add FreeSpaceCommand in Device (SD configuration file) and implement it. + - Some modifications (again) on how guessed volume names are handled (now it should work). + - Part files on the hard disk are removed if they are empty. +04Jan05 + - Major fixes on how guessed volume names are handled. + - Minor fix in src/stored/append.c. + - Replace, when possible, POOLMEM by POOL_MEM in the new code of src/stored/dev.c. + - New script, scripts/dvd-freespace, which gets the free space available on a writable DVD. +03Jan05 + - Add WritePartAfterJob directive in Job resource (Director) + - Add WritePartAfterJob directive in Schedule Resource (Director) + - Implement these new directives +02Jan05 + - New function, open_guess_name_dev in src/stored/dev.c, which tries to guess the volume + name of a mounted device, so the label can be read. + - New script, scripts/dvd-writepart, which write parts to DVD+/-R(W). + - Removed WriteFirstPartCommand directive in Device (SD configuration file). + - Use readdir_r instead of readdir (src/stored/dev.c:open_guess_name_dev). +01Jan05 + - Add RequiresMount, MountPoint, MountCommand, UnmountCommand directives in Device (SD configuration file). + - Implement these directives (volumes can now be restored from a manually written DVD). + - Add WriteFirstPartCommand, WritePartCommand directives in Device (SD configuration file). + - Implement these directives (DVD writing now works). + - New function run_program_full_output in src/lib/bpipe.c. + - Lots of bugfixes and cleanups in the new code. +29Dec04 + - Add VolParts field in Media table + - Add MaximumPartSize directive in Device (SD configuration file) + - File Volumes can now be splitted in multiple files ("parts") + - Fix SQL error in sql_list while doing "llist jobmedia" diff --git a/bacula/nb-1.38 b/bacula/nb-1.38 deleted file mode 100644 index b12fa906ad..0000000000 --- a/bacula/nb-1.38 +++ /dev/null @@ -1,6 +0,0 @@ - Technical notes on version 1.38 - Nicolas Boichat - -General: - -Release 1.38.0: 31 October 2005 diff --git a/bacula/platforms/mandrake/bacula.spec.in b/bacula/platforms/mandrake/bacula.spec.in index f6a1730653..932c19eb2b 100644 --- a/bacula/platforms/mandrake/bacula.spec.in +++ b/bacula/platforms/mandrake/bacula.spec.in @@ -613,9 +613,9 @@ export LDFLAGS=-L/usr/lib64/mysql --with-scriptdir=/etc/bacula \ --enable-smartalloc \ --enable-client-only \ - %if %{mdk} - --disable-nls \ - %endif + %if %{mdk} + --disable-nls \ + %endif --enable-static-fd make @@ -851,6 +851,9 @@ chmod 644 $RPM_BUILD_ROOT/etc/bacula/tray-monitor.conf # The rest is DB backend independent %attr(-, root, %{daemon_group}) %dir /etc/bacula %attr(-, root, %{daemon_group}) /etc/bacula/bacula +%attr(-, root, %{daemon_group}) /etc/bacula/bacula-ctl-dir +%attr(-, root, %{daemon_group}) /etc/bacula/bacula-ctl-fd +%attr(-, root, %{daemon_group}) /etc/bacula/bacula-ctl-sd %attr(-, root, %{daemon_group}) /etc/bacula/bconsole %attr(-, root, %{daemon_group}) /etc/bacula/create_bacula_database %attr(-, root, %{daemon_group}) /etc/bacula/drop_bacula_database diff --git a/bacula/platforms/redhat/bacula.spec.in b/bacula/platforms/redhat/bacula.spec.in index f6a1730653..932c19eb2b 100644 --- a/bacula/platforms/redhat/bacula.spec.in +++ b/bacula/platforms/redhat/bacula.spec.in @@ -613,9 +613,9 @@ export LDFLAGS=-L/usr/lib64/mysql --with-scriptdir=/etc/bacula \ --enable-smartalloc \ --enable-client-only \ - %if %{mdk} - --disable-nls \ - %endif + %if %{mdk} + --disable-nls \ + %endif --enable-static-fd make @@ -851,6 +851,9 @@ chmod 644 $RPM_BUILD_ROOT/etc/bacula/tray-monitor.conf # The rest is DB backend independent %attr(-, root, %{daemon_group}) %dir /etc/bacula %attr(-, root, %{daemon_group}) /etc/bacula/bacula +%attr(-, root, %{daemon_group}) /etc/bacula/bacula-ctl-dir +%attr(-, root, %{daemon_group}) /etc/bacula/bacula-ctl-fd +%attr(-, root, %{daemon_group}) /etc/bacula/bacula-ctl-sd %attr(-, root, %{daemon_group}) /etc/bacula/bconsole %attr(-, root, %{daemon_group}) /etc/bacula/create_bacula_database %attr(-, root, %{daemon_group}) /etc/bacula/drop_bacula_database diff --git a/bacula/platforms/suse/bacula.spec.in b/bacula/platforms/suse/bacula.spec.in index f6a1730653..932c19eb2b 100644 --- a/bacula/platforms/suse/bacula.spec.in +++ b/bacula/platforms/suse/bacula.spec.in @@ -613,9 +613,9 @@ export LDFLAGS=-L/usr/lib64/mysql --with-scriptdir=/etc/bacula \ --enable-smartalloc \ --enable-client-only \ - %if %{mdk} - --disable-nls \ - %endif + %if %{mdk} + --disable-nls \ + %endif --enable-static-fd make @@ -851,6 +851,9 @@ chmod 644 $RPM_BUILD_ROOT/etc/bacula/tray-monitor.conf # The rest is DB backend independent %attr(-, root, %{daemon_group}) %dir /etc/bacula %attr(-, root, %{daemon_group}) /etc/bacula/bacula +%attr(-, root, %{daemon_group}) /etc/bacula/bacula-ctl-dir +%attr(-, root, %{daemon_group}) /etc/bacula/bacula-ctl-fd +%attr(-, root, %{daemon_group}) /etc/bacula/bacula-ctl-sd %attr(-, root, %{daemon_group}) /etc/bacula/bconsole %attr(-, root, %{daemon_group}) /etc/bacula/create_bacula_database %attr(-, root, %{daemon_group}) /etc/bacula/drop_bacula_database diff --git a/bacula/po/POTFILES.in b/bacula/po/POTFILES.in index 7689dfb55e..c57fcb0b33 100644 --- a/bacula/po/POTFILES.in +++ b/bacula/po/POTFILES.in @@ -1,545 +1,432 @@ # List of source files containing translatable strings. # To generate this file, type 'make gen-potfiles' -./src/stored/block.c -./src/stored/spool.c -./src/stored/reserve.c -./src/stored/askdir.c -./src/stored/job.c -./src/stored/bls.c -./src/stored/read.c -./src/stored/status.c -./src/stored/stored_conf.c -./src/stored/append.c -./src/stored/ansi_label.c -./src/stored/parse_bsr.c -./src/stored/ebcdic.c -./src/stored/wait.c -./src/stored/acquire.c -./src/stored/bscan.c -./src/stored/authenticate.c -./src/stored/dircmd.c -./src/stored/bextract.c -./src/stored/stored.c -./src/stored/btape.c -./src/stored/autochanger.c -./src/stored/dvd.c -./src/stored/fd_cmds.c -./src/stored/mount.c -./src/stored/label.c -./src/stored/butil.c -./src/stored/dev.c -./src/stored/match_bsr.c -./src/stored/pythonsd.c -./src/stored/bcopy.c -./src/stored/record.c -./src/stored/device.c -./src/stored/read_record.c -./src/stored/scan.c -./src/stored/mac.c -./src/testprogs/list.c -./src/testprogs/range.c -./src/testprogs/scan.c -./src/testprogs/val.c -./src/testprogs/htable.c -./src/testprogs/ssl-examples/client.c -./src/testprogs/ssl-examples/rclient.c -./src/testprogs/ssl-examples/read_write.c -./src/testprogs/ssl-examples/mserver.c -./src/testprogs/ssl-examples/sserver.c -./src/testprogs/ssl-examples/sclient.c -./src/testprogs/ssl-examples/pclient.c -./src/testprogs/ssl-examples/server.c -./src/testprogs/ssl-examples/echo.c -./src/testprogs/ssl-examples/common.c -./src/testprogs/base64.c -./src/testprogs/conio.c -./src/testprogs/cygwin_pthread_bug.c -./src/testprogs/bperl.c -./src/testprogs/overload.c -./src/testprogs/woy.c -./src/testprogs/size.c -./src/testprogs/schedule.c -./src/testprogs/sesskey.c -./src/testprogs/dlist.c -./src/testprogs/split_path.c -./src/testprogs/edit.c -./src/testprogs/libredblack-1.3/example3.c -./src/testprogs/libredblack-1.3/example1.c -./src/testprogs/libredblack-1.3/example.c -./src/testprogs/libredblack-1.3/redblack.c -./src/testprogs/libredblack-1.3/example2.c -./src/testprogs/wpos.c -./src/testprogs/gigaslam.c -./src/testprogs/map.c -./src/testprogs/stat.c -./src/testprogs/testa.c -./src/testprogs/testfind.c -./src/testprogs/berrno.c -./src/testprogs/btreecode.c -./src/testprogs/xgtk_tree.c -./src/testprogs/sslbook/ssl/client.c -./src/testprogs/sslbook/ssl/server2.c -./src/testprogs/sslbook/ssl/client1.c -./src/testprogs/sslbook/ssl/client3.c -./src/testprogs/sslbook/ssl/server1.c -./src/testprogs/sslbook/ssl/reentrant.c -./src/testprogs/sslbook/ssl/server.c -./src/testprogs/sslbook/ssl/common.c -./src/testprogs/sslbook/ssl/client2.c -./src/testprogs/sslbook/ssl/server3.c -./src/testprogs/testfind.map.c -./src/testprogs/run-func.c -./src/testprogs/html2tex.c -./src/testprogs/tapetest.c -./src/testprogs/gtk_tree.c -./src/testprogs/newbase64.c -./src/testprogs/run.c -./src/testprogs/ansitape/ansitape.c -./src/testprogs/ansitape/ebcdic.c -./src/testprogs/ansitape/tables.c -./src/testprogs/xd.c -./src/testprogs/tem-htable.c -./src/testprogs/btree.c -./src/testprogs/utc.c -./src/testprogs/tree.c -./src/testprogs/var.c -./src/testprogs/hash.c -./src/testprogs/testb.c -./src/testprogs/pthread_bug.c -./src/testprogs/window.c -./src/testprogs/alist.c -./src/testprogs/var_play.c -./src/testprogs/keytest.c -./src/cats/sql_list.c -./src/cats/sql.c -./src/cats/mysql.c +./platforms/freebsd/tapetest.c +./src/cats/bdb.c +./src/cats/bdb_create.c ./src/cats/bdb_delete.c ./src/cats/bdb_find.c -./src/cats/postgresql.c -./src/cats/sql_delete.c -./src/cats/sql_create.c -./src/cats/bdb_list.c ./src/cats/bdb_get.c +./src/cats/bdb_list.c ./src/cats/bdb_update.c -./src/cats/sqlite.c +./src/cats/mysql.c +./src/cats/postgresql.c +./src/cats/sql.c +./src/cats/sql_create.c +./src/cats/sql_delete.c ./src/cats/sql_find.c ./src/cats/sql_get.c -./src/cats/bdb_create.c +./src/cats/sql_list.c ./src/cats/sql_update.c -./src/cats/bdb.c -./src/console/conio.c +./src/cats/sqlite.c ./src/console/authenticate.c -./src/console/console_conf.c +./src/console/conio.c ./src/console/console.c -./src/wx-console/authenticate.c -./src/wx-console/console_conf.c -./src/lib/snprintf.c -./src/lib/bshm.c -./src/lib/scan.c -./src/lib/htable.c -./src/lib/lex.c +./src/console/console_conf.c +./src/dird/admin.c +./src/dird/authenticate.c +./src/dird/autoprune.c +./src/dird/backup.c +./src/dird/bsr.c +./src/dird/catreq.c +./src/dird/dird.c +./src/dird/dird_conf.c +./src/dird/expand.c +./src/dird/fd_cmds.c +./src/dird/getmsg.c +./src/dird/inc_conf.c +./src/dird/job.c +./src/dird/jobq.c +./src/dird/mac.c +./src/dird/mountreq.c +./src/dird/msgchan.c +./src/dird/newvol.c +./src/dird/next_vol.c +./src/dird/pythondir.c +./src/dird/recycle.c +./src/dird/restore.c +./src/dird/run_conf.c +./src/dird/scheduler.c +./src/dird/sql_cmds.c +./src/dird/ua_acl.c +./src/dird/ua_cmds.c +./src/dird/ua_dotcmds.c +./src/dird/ua_input.c +./src/dird/ua_label.c +./src/dird/ua_output.c +./src/dird/ua_prune.c +./src/dird/ua_purge.c +./src/dird/ua_query.c +./src/dird/ua_restore.c +./src/dird/ua_run.c +./src/dird/ua_select.c +./src/dird/ua_server.c +./src/dird/ua_status.c +./src/dird/ua_tree.c +./src/dird/ua_update.c +./src/dird/verify.c +./src/filed/win32/popup.c +./src/filed/acl.c +./src/filed/authenticate.c +./src/filed/backup.c +./src/filed/chksum.c +./src/filed/estimate.c +./src/filed/filed.c +./src/filed/filed_conf.c +./src/filed/heartbeat.c +./src/filed/job.c +./src/filed/pythonfd.c +./src/filed/restore.c +./src/filed/status.c +./src/filed/verify.c +./src/filed/verify_vol.c +./src/findlib/attribs.c +./src/findlib/bfile.c +./src/findlib/create_file.c +./src/findlib/enable_priv.c +./src/findlib/find.c +./src/findlib/find_one.c +./src/findlib/fstype.c +./src/findlib/makepath.c +./src/findlib/match.c +./src/findlib/save-cwd.c +./src/gnome2-console/authenticate.c +./src/gnome2-console/callbacks.c +./src/gnome2-console/console.c +./src/gnome2-console/console_conf.c +./src/gnome2-console/interface.c +./src/gnome2-console/restore.c +./src/gnome2-console/support.c ./src/lib/tls.c -./src/lib/serial.c -./src/lib/parse_conf.c +./src/lib/address_conf.c +./src/lib/alist.c +./src/lib/alloc.c +./src/lib/attr.c ./src/lib/base64.c -./src/lib/mem_pool.c -./src/lib/watchdog.c -./src/lib/regex.c +./src/lib/berrno.c +./src/lib/bget_msg.c +./src/lib/bnet.c +./src/lib/bnet_pkt.c +./src/lib/bnet_server.c +./src/lib/bpipe.c +./src/lib/bshm.c +./src/lib/bsys.c +./src/lib/btime.c +./src/lib/btimers.c +./src/lib/cram-md5.c ./src/lib/crc32.c -./src/lib/util.c +./src/lib/daemon.c +./src/lib/dlist.c +./src/lib/edit.c +./src/lib/events.c +./src/lib/fnmatch.c +./src/lib/hmac.c +./src/lib/htable.c ./src/lib/idcache.c -./src/lib/btime.c -./src/lib/bpipe.c -./src/lib/alloc.c -./src/lib/address_conf.c ./src/lib/jcr.c +./src/lib/lex.c +./src/lib/md5.c +./src/lib/mem_pool.c ./src/lib/message.c +./src/lib/parse_conf.c +./src/lib/pythonlib.c ./src/lib/queue.c -./src/lib/fnmatch.c -./src/lib/dlist.c -./src/lib/edit.c -./src/lib/regexpr.c -./src/lib/bnet_server.c -./src/lib/bget_msg.c +./src/lib/regex.c +./src/lib/res.c ./src/lib/rwlock.c -./src/lib/cram-md5.c -./src/lib/smartall.c -./src/lib/bsys.c -./src/lib/berrno.c +./src/lib/scan.c +./src/lib/semlock.c +./src/lib/serial.c ./src/lib/sha1.c -./src/lib/res.c -./src/lib/bnet.c -./src/lib/hmac.c -./src/lib/pythonlib.c -./src/lib/attr.c -./src/lib/daemon.c ./src/lib/signal.c -./src/lib/events.c -./src/lib/md5.c -./src/lib/btimers.c +./src/lib/smartall.c ./src/lib/tree.c +./src/lib/util.c ./src/lib/var.c -./src/lib/workq.c -./src/lib/semlock.c -./src/lib/bsnprintf.c -./src/lib/alist.c +./src/lib/watchdog.c ./src/lib/winapi.c -./src/lib/btree.c -./src/lib/crypto.c -./src/lib/openssl.c -./src/gnome2-console/restore.c -./src/gnome2-console/interface.c -./src/gnome2-console/support.c -./src/gnome2-console/callbacks.c -./src/gnome2-console/authenticate.c -./src/gnome2-console/console_conf.c -./src/gnome2-console/console.c +./src/lib/workq.c +./src/stored/acquire.c +./src/stored/ansi_label.c +./src/stored/append.c +./src/stored/askdir.c +./src/stored/authenticate.c +./src/stored/autochanger.c +./src/stored/bcopy.c +./src/stored/bextract.c +./src/stored/block.c +./src/stored/bls.c +./src/stored/bscan.c +./src/stored/btape.c +./src/stored/butil.c +./src/stored/dev.c +./src/stored/device.c +./src/stored/dircmd.c +./src/stored/dvd.c +./src/stored/ebcdic.c +./src/stored/fd_cmds.c +./src/stored/job.c +./src/stored/label.c +./src/stored/match_bsr.c +./src/stored/mount.c +./src/stored/parse_bsr.c +./src/stored/pythonsd.c +./src/stored/read.c +./src/stored/read_record.c +./src/stored/record.c +./src/stored/reserve.c +./src/stored/spool.c +./src/stored/status.c +./src/stored/stored.c +./src/stored/stored_conf.c +./src/stored/wait.c ./src/tools/bsmtp.c -./src/tools/testls.c -./src/tools/testfind.c -./src/tools/fstype.c ./src/tools/dbcheck.c -./src/python/call.c -./src/python/noddy4.c -./src/python/noddy2.c -./src/python/noddy3.c -./src/findlib/enable_priv.c -./src/findlib/find_one.c -./src/findlib/save-cwd.c -./src/findlib/bfile.c -./src/findlib/create_file.c -./src/findlib/find.c -./src/findlib/makepath.c -./src/findlib/fstype.c -./src/findlib/match.c -./src/findlib/attribs.c -./src/win32/compat/getopt.c -./src/tray-monitor/tray_conf.c -./src/tray-monitor/tray-monitor.c +./src/tools/fstype.c +./src/tools/testfind.c +./src/tools/testls.c ./src/tray-monitor/authenticate.c -./src/tray-monitor/eggtrayicon.c ./src/tray-monitor/eggmarshalers.c ./src/tray-monitor/eggstatusicon.c -./src/filed/restore.c -./src/filed/verify.c -./src/filed/backup.c -./src/filed/job.c -./src/filed/status.c -./src/filed/acl.c -./src/filed/filed.c -./src/filed/estimate.c -./src/filed/authenticate.c -./src/filed/heartbeat.c -./src/filed/win32/popup.c -./src/filed/pythonfd.c -./src/filed/filed_conf.c -./src/filed/verify_vol.c -./src/dird/ua_tree.c -./src/dird/restore.c -./src/dird/scheduler.c -./src/dird/dird_conf.c -./src/dird/msgchan.c -./src/dird/verify.c -./src/dird/ua_cmds.c -./src/dird/ua_run.c -./src/dird/backup.c -./src/dird/job.c -./src/dird/ua_input.c -./src/dird/bsr.c -./src/dird/run_conf.c -./src/dird/pythondir.c -./src/dird/ua_restore.c -./src/dird/jobq.c -./src/dird/ua_prune.c -./src/dird/next_vol.c -./src/dird/ua_acl.c -./src/dird/recycle.c -./src/dird/expand.c -./src/dird/dird.c -./src/dird/ua_label.c -./src/dird/authenticate.c -./src/dird/ua_select.c -./src/dird/catreq.c -./src/dird/getmsg.c -./src/dird/newvol.c -./src/dird/sql_cmds.c -./src/dird/autoprune.c -./src/dird/ua_server.c -./src/dird/inc_conf.c -./src/dird/fd_cmds.c -./src/dird/admin.c -./src/dird/mac.c -./src/dird/mountreq.c -./src/dird/ua_query.c -./src/dird/ua_update.c -./src/dird/ua_dotcmds.c -./src/dird/ua_purge.c -./src/dird/ua_output.c -./src/dird/ua_status.c -./platforms/freebsd/tapetest.c -./src/stored/dev.h -./src/stored/stored_conf.h -./src/stored/protos.h -./src/stored/bsr.h -./src/stored/block.h -./src/stored/record.h -./src/stored/stored.h -./src/stored/reserve.h -./src/testprogs/ssl-examples/server.h -./src/testprogs/ssl-examples/echo.h -./src/testprogs/ssl-examples/read_write.h -./src/testprogs/ssl-examples/common.h -./src/testprogs/ssl-examples/client.h -./src/testprogs/btree.h -./src/testprogs/restore.h -./src/testprogs/val.h -./src/testprogs/libredblack-1.3/redblack.h -./src/testprogs/berrno.h -./src/testprogs/icons.h -./src/testprogs/alist.h -./src/testprogs/var.h -./src/testprogs/dlist.h -./src/testprogs/tree.h -./src/testprogs/sslbook/ssl/reentrant.h -./src/testprogs/sslbook/ssl/common.h -./src/testprogs/symdefs.h -./src/testprogs/ansitape/ansitape.h -./src/testprogs/tem-htable.h -./src/testprogs/htable.h -./src/testprogs/window.h -./src/testprogs/func.h -./src/cats/protos.h +./src/tray-monitor/eggtrayicon.c +./src/tray-monitor/tray-monitor.c +./src/tray-monitor/tray_conf.c +./src/win32/compat/getopt.c +./src/wx-console/authenticate.c +./src/wx-console/console_conf.c +./autoconf/acconfig.h +./autoconf/confdefs.h +./src/baconfig.h +./src/bacula.h +./src/bc_types.h +./src/jcr.h +./src/version.h ./src/cats/bdb.h ./src/cats/cats.h +./src/cats/protos.h ./src/console/conio.h ./src/console/console_conf.h ./src/console/func.h -./src/version.h -./src/wx-console/console_conf.h -./src/wx-console/wxbmainframe.h -./src/wx-console/csprint.h -./src/wx-console/console_thread.h -./src/wx-console/wxbhistorytextctrl.h -./src/wx-console/wxbutils.h -./src/wx-console/wxblistctrl.h -./src/wx-console/wxbtableparser.h -./src/wx-console/wx-console_private.h -./src/wx-console/wxbconfigpanel.h -./src/wx-console/wxbconfigfileeditor.h -./src/wx-console/wxbtreectrl.h -./src/wx-console/wxbrestorepanel.h -./src/lib/workq.h -./src/lib/parse_conf.h -./src/lib/semlock.h +./src/dird/bsr.h +./src/dird/dird.h +./src/dird/dird_conf.h +./src/dird/jobq.h +./src/dird/protos.h +./src/dird/ua.h +./src/filed/win32/winabout.h +./src/filed/win32/winbacula.h +./src/filed/win32/winevents.h +./src/filed/win32/winres.h +./src/filed/win32/winservice.h +./src/filed/win32/winstat.h +./src/filed/win32/wintray.h +./src/filed/acl.h +./src/filed/chksum.h +./src/filed/filed.h +./src/filed/filed_conf.h +./src/filed/protos.h +./src/findlib/bfile.h +./src/findlib/find.h +./src/findlib/protos.h +./src/findlib/save-cwd.h +./src/host.h +./src/gnome2-console/callbacks.h +./src/gnome2-console/console.h +./src/gnome2-console/console_conf.h +./src/gnome2-console/interface.h +./src/gnome2-console/restore.h +./src/gnome2-console/support.h +./src/lib/address_conf.h +./src/lib/alist.h +./src/lib/attr.h +./src/lib/berrno.h +./src/lib/bits.h ./src/lib/bpipe.h -./src/lib/btree.h -./src/lib/rwlock.h -./src/lib/protos.h -./src/lib/watchdog.h -./src/lib/btimers.h ./src/lib/bregex.h -./src/lib/bits.h -./src/lib/berrno.h -./src/lib/tls.h -./src/lib/attr.h -./src/lib/md5.h -./src/lib/alist.h -./src/lib/var.h -./src/lib/sha1.h -./src/lib/winapi.h -./src/lib/dlist.h -./src/lib/tree.h -./src/lib/regexpr.h -./src/lib/waitq.h -./src/lib/fnmatch.h ./src/lib/bsd_queue.h -./src/lib/tcpd.h ./src/lib/bshm.h -./src/lib/mem_pool.h -./src/lib/lex.h -./src/lib/queue.h +./src/lib/bsock.h +./src/lib/btime.h +./src/lib/btimers.h +./src/lib/dlist.h +./src/lib/fnmatch.h ./src/lib/getopt.h -./src/lib/smartall.h ./src/lib/htable.h -./src/lib/address_conf.h -./src/lib/message.h -./src/lib/btime.h +./src/lib/lex.h ./src/lib/lib.h +./src/lib/md5.h +./src/lib/mem_pool.h +./src/lib/message.h +./src/lib/parse_conf.h +./src/lib/protos.h +./src/lib/queue.h +./src/lib/rwlock.h +./src/lib/semlock.h ./src/lib/serial.h -./src/lib/bsock.h -./src/lib/base64.h +./src/lib/sha1.h +./src/lib/smartall.h +./src/lib/tcpd.h ./src/lib/crypto.h -./src/lib/openssl.h -./src/gnome2-console/console_conf.h -./src/gnome2-console/callbacks.h -./src/gnome2-console/restore.h -./src/gnome2-console/console.h -./src/gnome2-console/support.h -./src/gnome2-console/interface.h -./src/findlib/protos.h -./src/findlib/find.h -./src/findlib/bfile.h -./src/findlib/save-cwd.h -./src/win32/console/StdAfx.h -./src/win32/wx-console/w32api.h -./src/win32/compat/compat.h -./src/win32/compat/netinet/in.h -./src/win32/compat/vss.h -./src/win32/compat/strings.h -./src/win32/compat/sched.h -./src/win32/compat/grp.h -./src/win32/compat/stdint.h -./src/win32/compat/unistd.h -./src/win32/compat/mswinver.h -./src/win32/compat/netdb.h +./src/lib/tls.h +./src/lib/tree.h +./src/lib/var.h +./src/lib/waitq.h +./src/lib/watchdog.h +./src/lib/winapi.h +./src/lib/workq.h +./src/lib/base64.h +./src/stored/block.h +./src/stored/bsr.h +./src/stored/dev.h +./src/stored/protos.h +./src/stored/record.h +./src/stored/stored.h +./src/stored/stored_conf.h +./src/tray-monitor/eggmarshalers.h +./src/tray-monitor/eggstatusicon.h +./src/tray-monitor/eggtrayicon.h +./src/tray-monitor/tray-monitor.h +./src/tray-monitor/tray_conf.h +./src/win32/baculafd/StdAfx.h ./src/win32/compat/arpa/inet.h -./src/win32/compat/pwd.h -./src/win32/compat/winsock.h -./src/win32/compat/alloca.h +./src/win32/compat/sys/socket.h +./src/win32/compat/sys/file.h +./src/win32/compat/sys/ioctl.h ./src/win32/compat/sys/stat.h ./src/win32/compat/sys/time.h -./src/win32/compat/sys/file.h ./src/win32/compat/sys/wait.h -./src/win32/compat/sys/socket.h -./src/win32/compat/sys/ioctl.h -./src/win32/compat/getopt.h +./src/win32/compat/alloca.h +./src/win32/compat/compat.h ./src/win32/compat/dirent.h -./src/win32/compat/winhost.h -./src/win32/compat/winconfig.h +./src/win32/compat/getopt.h +./src/win32/compat/grp.h +./src/win32/compat/mswinver.h +./src/win32/compat/netdb.h +./src/win32/compat/pwd.h +./src/win32/compat/sched.h +./src/win32/compat/stdint.h +./src/win32/compat/strings.h ./src/win32/compat/syslog.h -./src/win32/baculafd/StdAfx.h -./src/host.h -./src/baconfig.h -./src/jcr.h -./src/tray-monitor/tray_conf.h -./src/tray-monitor/eggstatusicon.h -./src/tray-monitor/eggtrayicon.h -./src/tray-monitor/tray-monitor.h -./src/tray-monitor/eggmarshalers.h -./src/bacula.h -./src/filed/filed_conf.h -./src/filed/protos.h -./src/filed/filed.h -./src/filed/acl.h -./src/filed/win32/winstat.h -./src/filed/win32/winres.h -./src/filed/win32/winevents.h -./src/filed/win32/winabout.h -./src/filed/win32/wintray.h -./src/filed/win32/winservice.h -./src/filed/win32/winbacula.h -./src/bc_types.h +./src/win32/compat/unistd.h +./src/win32/compat/vss.h +./src/win32/compat/winconfig.h +./src/win32/compat/winhost.h +./src/win32/compat/winsock.h +./src/win32/compat/netinet/in.h +./src/win32/console/StdAfx.h +./src/win32/wx-console/w32api.h +./src/wx-console/console_conf.h +./src/wx-console/console_thread.h +./src/wx-console/csprint.h +./src/wx-console/wx-console_private.h +./src/wx-console/wxbconfigfileeditor.h +./src/wx-console/wxbconfigpanel.h +./src/wx-console/wxbhistorytextctrl.h +./src/wx-console/wxblistctrl.h +./src/wx-console/wxbmainframe.h +./src/wx-console/wxbrestorepanel.h +./src/wx-console/wxbtableparser.h +./src/wx-console/wxbtreectrl.h +./src/wx-console/wxbutils.h ./src/config.h -./src/dird/protos.h -./src/dird/dird_conf.h -./src/dird/bsr.h -./src/dird/ua.h -./src/dird/jobq.h -./src/dird/dird.h -./autoconf/confdefs.h -./autoconf/acconfig.h -./src/wx-console/main.cpp -./src/wx-console/wxbconfigfileeditor.cpp -./src/wx-console/wxbhistorytextctrl.cpp -./src/wx-console/wxbtreectrl.cpp -./src/wx-console/wxbconfigpanel.cpp -./src/wx-console/wxbutils.cpp -./src/wx-console/wxbtableparser.cpp -./src/wx-console/wxbmainframe.cpp -./src/wx-console/wxblistctrl.cpp -./src/wx-console/console_thread.cpp -./src/wx-console/wxbrestorepanel.cpp -./src/pyqt/pconsole.cpp -./src/pyqt/bacula-gui-gtk/pconsole.cpp -./src/pyqt/save/pconsole.cpp +./src/filed/win32/winabout.cpp +./src/filed/win32/winevents.cpp +./src/filed/win32/winmain.cpp +./src/filed/win32/winservice.cpp +./src/filed/win32/winstat.cpp +./src/filed/win32/wintray.cpp +./src/win32/baculafd/StdAfx.cpp +./src/win32/compat/compat.cpp +./src/win32/compat/print.cpp +./src/win32/compat/vss.cpp +./src/win32/compat/vss_W2K3.cpp +./src/win32/compat/vss_XP.cpp +./src/win32/compat/vss_generic.cpp +./src/win32/console/StdAfx.cpp ./src/win32/console/authenticate.cpp ./src/win32/console/console.cpp ./src/win32/console/console_conf.cpp -./src/win32/console/StdAfx.cpp -./src/win32/wx-console/authenticate.cpp -./src/win32/wx-console/console_conf.cpp +./src/win32/filed/authenticate.cpp +./src/win32/filed/backup.cpp +./src/win32/filed/chksum.cpp +./src/win32/filed/estimate.cpp +./src/win32/filed/filed.cpp +./src/win32/filed/filed_conf.cpp +./src/win32/filed/heartbeat.cpp +./src/win32/filed/job.cpp +./src/win32/filed/restore.cpp +./src/win32/filed/status.cpp +./src/win32/filed/verify.cpp +./src/win32/filed/verify_vol.cpp +./src/win32/findlib/attribs.cpp +./src/win32/findlib/bfile.cpp +./src/win32/findlib/create_file.cpp +./src/win32/findlib/enable_priv.cpp +./src/win32/findlib/find.cpp +./src/win32/findlib/find_one.cpp +./src/win32/findlib/fstype.cpp +./src/win32/findlib/makepath.cpp +./src/win32/findlib/match.cpp +./src/win32/findlib/save-cwd.cpp +./src/win32/findlib/winapi.cpp +./src/win32/lib/address_conf.cpp ./src/win32/lib/alist.cpp -./src/win32/lib/winapi.cpp -./src/win32/lib/hmac.cpp -./src/win32/lib/bnet_pkt.cpp -./src/win32/lib/btimers.cpp -./src/win32/lib/btime.cpp +./src/win32/lib/alloc.cpp +./src/win32/lib/attr.cpp +./src/win32/lib/base64.cpp ./src/win32/lib/berrno.cpp -./src/win32/lib/lex.cpp -./src/win32/lib/queue.cpp -./src/win32/lib/signal.cpp +./src/win32/lib/bget_msg.cpp +./src/win32/lib/bnet.cpp +./src/win32/lib/bnet_pkt.cpp +./src/win32/lib/bnet_server.cpp +./src/win32/lib/bpipe.cpp ./src/win32/lib/bshm.cpp +./src/win32/lib/bsys.cpp +./src/win32/lib/btime.cpp +./src/win32/lib/btimers.cpp +./src/win32/lib/cram-md5.cpp +./src/win32/lib/crc32.cpp ./src/win32/lib/daemon.cpp -./src/win32/lib/bnet.cpp -./src/win32/lib/util.cpp -./src/win32/lib/jcr.cpp -./src/win32/lib/smartall.cpp -./src/win32/lib/htable.cpp -./src/win32/lib/var.cpp -./src/win32/lib/parse_conf.cpp -./src/win32/lib/address_conf.cpp -./src/win32/lib/events.cpp ./src/win32/lib/dlist.cpp -./src/win32/lib/semlock.cpp -./src/win32/lib/tree.cpp +./src/win32/lib/edit.cpp +./src/win32/lib/events.cpp ./src/win32/lib/fnmatch.cpp -./src/win32/lib/crc32.cpp -./src/win32/lib/res.cpp -./src/win32/lib/scan.cpp -./src/win32/lib/rwlock.cpp -./src/win32/lib/sha1.cpp -./src/win32/lib/regex.cpp +./src/win32/lib/hmac.cpp +./src/win32/lib/htable.cpp ./src/win32/lib/idcache.cpp -./src/win32/lib/base64.cpp +./src/win32/lib/jcr.cpp +./src/win32/lib/lex.cpp +./src/win32/lib/md5.cpp +./src/win32/lib/mem_pool.cpp ./src/win32/lib/message.cpp +./src/win32/lib/parse_conf.cpp +./src/win32/lib/pythonlib.cpp +./src/win32/lib/queue.cpp +./src/win32/lib/regex.cpp +./src/win32/lib/res.cpp +./src/win32/lib/rwlock.cpp +./src/win32/lib/scan.cpp +./src/win32/lib/semlock.cpp ./src/win32/lib/serial.cpp -./src/win32/lib/bsys.cpp -./src/win32/lib/cram-md5.cpp +./src/win32/lib/sha1.cpp +./src/win32/lib/signal.cpp +./src/win32/lib/smartall.cpp ./src/win32/lib/tls.cpp -./src/win32/lib/attr.cpp -./src/win32/lib/alloc.cpp -./src/win32/lib/mem_pool.cpp -./src/win32/lib/bpipe.cpp -./src/win32/lib/md5.cpp -./src/win32/lib/workq.cpp -./src/win32/lib/bget_msg.cpp -./src/win32/lib/bnet_server.cpp -./src/win32/lib/pythonlib.cpp +./src/win32/lib/tree.cpp +./src/win32/lib/util.cpp +./src/win32/lib/var.cpp ./src/win32/lib/watchdog.cpp -./src/win32/lib/edit.cpp -./src/win32/lib/crypto.cpp -./src/win32/compat/vss_generic.cpp -./src/win32/compat/vss.cpp -./src/win32/compat/vss_XP.cpp -./src/win32/compat/compat.cpp -./src/win32/compat/vss_W2K3.cpp -./src/win32/compat/print.cpp -./src/win32/baculafd/StdAfx.cpp -./src/win32/findlib/winapi.cpp -./src/win32/findlib/find_one.cpp -./src/win32/findlib/find.cpp -./src/win32/findlib/attribs.cpp -./src/win32/findlib/create_file.cpp -./src/win32/findlib/match.cpp -./src/win32/findlib/enable_priv.cpp -./src/win32/findlib/fstype.cpp -./src/win32/findlib/bfile.cpp -./src/win32/findlib/makepath.cpp -./src/win32/findlib/save-cwd.cpp -./src/win32/filed/status.cpp -./src/win32/filed/authenticate.cpp -./src/win32/filed/filed_conf.cpp -./src/win32/filed/filed.cpp -./src/win32/filed/backup.cpp -./src/win32/filed/estimate.cpp -./src/win32/filed/heartbeat.cpp -./src/win32/filed/job.cpp -./src/win32/filed/verify.cpp -./src/win32/filed/verify_vol.cpp -./src/win32/filed/restore.cpp -./src/filed/win32/winstat.cpp -./src/filed/win32/winevents.cpp -./src/filed/win32/winservice.cpp -./src/filed/win32/wintray.cpp -./src/filed/win32/winabout.cpp -./src/filed/win32/winmain.cpp +./src/win32/lib/winapi.cpp +./src/win32/lib/workq.cpp +./src/win32/wx-console/authenticate.cpp +./src/win32/wx-console/console_conf.cpp +./src/wx-console/console_thread.cpp +./src/wx-console/main.cpp +./src/wx-console/wxbconfigfileeditor.cpp +./src/wx-console/wxbconfigpanel.cpp +./src/wx-console/wxbhistorytextctrl.cpp +./src/wx-console/wxblistctrl.cpp +./src/wx-console/wxbmainframe.cpp +./src/wx-console/wxbrestorepanel.cpp +./src/wx-console/wxbtableparser.cpp +./src/wx-console/wxbtreectrl.cpp +./src/wx-console/wxbutils.cpp diff --git a/bacula/po/bacula.pot b/bacula/po/bacula.pot index 48d1e023f8..51ce43ed49 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: 2006-02-26 13:07+0100\n" +"POT-Creation-Date: 2006-02-26 13:10+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,6954 +16,6831 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/stored/block.c:79 -#, c-format -msgid "" -"Dump block %s %x: size=%d BlkNum=%d\n" -" Hdrcksum=%x cksum=%x\n" +#: src/cats/bdb.c:128 +msgid "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" msgstr "" -#: src/stored/block.c:92 -#, c-format -msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d p=%x\n" +#: src/cats/bdb.c:129 +msgid "WARNING!!!! The Internal Database is NOT OPERATIONAL!\n" msgstr "" -#: src/stored/block.c:148 +#: src/cats/bdb.c:130 +msgid "You should use SQLite, PostgreSQL, or MySQL\n" +msgstr "" + +#: src/cats/bdb.c:152 src/cats/mysql.c:124 src/cats/postgresql.c:128 +#: src/cats/sqlite.c:122 #, c-format -msgid "%d block read errors not printed.\n" +msgid "Unable to initialize DB lock. ERR=%s\n" msgstr "" -#: src/stored/block.c:236 src/stored/block.c:252 src/stored/block.c:262 +#: src/cats/bdb.c:162 #, c-format -msgid "" -"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " -"discarded.\n" +msgid "Unable to open Catalog DB control file %s: ERR=%s\n" msgstr "" -#: src/stored/block.c:276 +#: src/cats/bdb.c:217 #, c-format -msgid "" -"Volume data error at %u:%u! Block length %u is insane (too large), probably " -"due to a bad archive.\n" +msgid "Error reading catalog DB control file. ERR=%s\n" msgstr "" -#: src/stored/block.c:302 +#: src/cats/bdb.c:220 #, c-format msgid "" -"Volume data error at %u:%u!\n" -"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" +"Error, catalog DB control file wrong version. Wanted %d, got %d\n" +"Please reinitialize the working directory.\n" msgstr "" -#: src/stored/block.c:354 src/stored/block.c:677 src/stored/block.c:746 -#: src/stored/acquire.c:437 +#: src/cats/bdb_update.c:83 src/cats/bdb_update.c:114 #, c-format -msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" +msgid "Error updating DB Job file. ERR=%s\n" msgstr "" -#: src/stored/block.c:410 -msgid "Cannot write block. Device at EOM.\n" +#: src/cats/bdb_update.c:153 src/cats/bdb_update.c:189 +#, c-format +msgid "Error updating DB Media file. ERR=%s\n" msgstr "" -#: src/stored/block.c:415 -msgid "Attempt to write on read-only Volume.\n" +#: src/cats/mysql.c:60 +msgid "A user name for MySQL must be supplied.\n" msgstr "" -#: src/stored/block.c:467 +#: src/cats/mysql.c:161 #, c-format -msgid "User defined maximum volume capacity %s exceeded on device %s.\n" +msgid "" +"Unable to connect to MySQL server. \n" +"Database=%s User=%s\n" +"It is probably not running or your password is incorrect.\n" msgstr "" -#: src/stored/block.c:482 +#: src/cats/mysql.c:320 src/cats/postgresql.c:264 src/cats/sqlite.c:323 #, c-format -msgid "Unable to write EOF. ERR=%s\n" +msgid "Query failed: %s: ERR=%s\n" msgstr "" -#: src/stored/block.c:508 src/stored/block.c:519 -msgid "Write block header zeroed.\n" +#: src/cats/postgresql.c:62 +msgid "A user name for PostgreSQL must be supplied.\n" msgstr "" -#: src/stored/block.c:537 +#: src/cats/postgresql.c:165 #, c-format -msgid "Write error at %u:%u on device %s. ERR=%s.\n" +msgid "" +"Unable to connect to PostgreSQL server.\n" +"Database=%s User=%s\n" +"It is probably not running or your password is incorrect.\n" msgstr "" -#: src/stored/block.c:544 +#: src/cats/postgresql.c:506 #, c-format -msgid "End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n" +msgid "error fetching currval: %s\n" msgstr "" -#: src/stored/block.c:619 src/stored/block.c:625 +#: src/cats/sql.c:96 #, c-format -msgid "Backspace file at EOT failed. ERR=%s\n" +msgid "" +"query %s failed:\n" +"%s\n" msgstr "" -#: src/stored/block.c:632 +#: src/cats/sql.c:118 #, c-format -msgid "Backspace record at EOT failed. ERR=%s\n" +msgid "" +"insert %s failed:\n" +"%s\n" msgstr "" -#: src/stored/block.c:649 +#: src/cats/sql.c:132 #, c-format -msgid "Re-read last block at EOT failed. ERR=%s" +msgid "Insertion problem: affected_rows=%s\n" msgstr "" -#: src/stored/block.c:653 -msgid "Re-read of last block succeeded.\n" +#: src/cats/sql.c:152 +#, c-format +msgid "" +"update %s failed:\n" +"%s\n" msgstr "" -#: src/stored/block.c:656 +#: src/cats/sql.c:162 #, c-format -msgid "Re-read of last block failed. Last block=%u Current block=%u.\n" +msgid "Update problem: affected_rows=%s\n" msgstr "" -#: src/stored/block.c:685 +#: src/cats/sql.c:183 #, c-format msgid "" -"Error writing final EOF to tape. This Volume may not be readable.\n" -"%s" +"delete %s failed:\n" +"%s\n" msgstr "" -#: src/stored/block.c:795 src/stored/dvd.c:694 +#: src/cats/sql.c:209 src/cats/sql.c:216 src/cats/sql_create.c:773 +#: src/cats/sql_get.c:180 src/cats/sql_get.c:231 src/cats/sql_get.c:564 +#: src/cats/sql_get.c:639 src/cats/sql_get.c:866 #, c-format -msgid "" -"Error while writing, current part number is less than the total number of " -"parts (%d/%d, device=%s)\n" +msgid "error fetching row: %s\n" msgstr "" -#: src/stored/block.c:803 src/stored/block.c:913 +#: src/cats/sql.c:326 src/dird/catreq.c:369 src/dird/catreq.c:401 +#: src/dird/catreq.c:426 #, c-format -msgid "Unable to open device next part %s: ERR=%s\n" +msgid "Attribute create error. %s" msgstr "" -#: src/stored/block.c:821 +#: src/cats/sql.c:407 #, 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 "Path length is zero. File=%s\n" msgstr "" -#: src/stored/block.c:834 -#, c-format -msgid "" -"End of Volume \"%s\" at %u:%u on device %s (part_size=%s, free_space=%s, " -"free_space_errno=%d).\n" +#: src/cats/sql.c:451 +msgid "No results to list.\n" msgstr "" -#: src/stored/block.c:888 +#: src/cats/sql_create.c:86 #, c-format -msgid "Block buffer size looping problem on device %s\n" +msgid "Create DB Job record %s failed. ERR=%s\n" msgstr "" -#: src/stored/block.c:939 +#: src/cats/sql_create.c:132 #, c-format -msgid "Read error at file:blk %u:%u on device %s. ERR=%s.\n" +msgid "Create JobMedia record %s failed: ERR=%s\n" msgstr "" -#: src/stored/block.c:952 +#: src/cats/sql_create.c:141 #, c-format -msgid "Read zero bytes at %u:%u on device %s.\n" +msgid "Update Media record %s failed: ERR=%s\n" msgstr "" -#: src/stored/block.c:965 +#: src/cats/sql_create.c:171 #, c-format -msgid "" -"Volume data error at %u:%u! Very short block of %d bytes on device %s " -"discarded.\n" +msgid "pool record %s already exists\n" msgstr "" -#: src/stored/block.c:990 +#: src/cats/sql_create.c:197 #, c-format -msgid "Block length %u is greater than buffer %u. Attempting recovery.\n" +msgid "Create db Pool record %s failed: ERR=%s\n" msgstr "" -#: src/stored/block.c:1009 +#: src/cats/sql_create.c:228 #, c-format -msgid "Setting block buffer size to %u bytes.\n" +msgid "Device record %s already exists\n" msgstr "" -#: src/stored/block.c:1024 +#: src/cats/sql_create.c:244 #, c-format -msgid "" -"Volume data error at %u:%u! Short block of %d bytes on device %s discarded.\n" +msgid "Create db Device record %s failed: ERR=%s\n" msgstr "" -#: src/stored/spool.c:69 +#: src/cats/sql_create.c:277 #, c-format -msgid "" -"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" +msgid "More than one Storage record!: %d\n" msgstr "" -#: src/stored/spool.c:75 +#: src/cats/sql_create.c:282 #, c-format -msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" +msgid "error fetching Storage row: %s\n" msgstr "" -#: src/stored/spool.c:91 -msgid "Spooling data ...\n" +#: src/cats/sql_create.c:302 +#, c-format +msgid "Create DB Storage record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:117 +#: src/cats/sql_create.c:334 #, c-format -msgid "Bad return from despool WroteVol=%d\n" +msgid "mediatype record %s already exists\n" msgstr "" -#: src/stored/spool.c:150 +#: src/cats/sql_create.c:350 #, c-format -msgid "Open data spool file %s failed: ERR=%s\n" +msgid "Create db mediatype record %s failed: ERR=%s\n" msgstr "" -#: src/stored/spool.c:199 +#: src/cats/sql_create.c:384 #, c-format -msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" +msgid "Volume \"%s\" already exists.\n" msgstr "" -#: src/stored/spool.c:204 +#: src/cats/sql_create.c:422 #, c-format -msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" +msgid "Create DB Media record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:248 src/stored/append.c:207 src/stored/append.c:274 -#: src/stored/mac.c:98 src/stored/mac.c:176 +#: src/cats/sql_create.c:470 #, c-format -msgid "Fatal append error on device %s: ERR=%s\n" +msgid "More than one Client!: %d\n" msgstr "" -#: src/stored/spool.c:258 src/stored/spool.c:432 src/stored/spool.c:470 +#: src/cats/sql_create.c:475 #, c-format -msgid "Ftruncate spool file failed: ERR=%s\n" +msgid "error fetching Client row: %s\n" msgstr "" -#: src/stored/spool.c:260 +#: src/cats/sql_create.c:502 #, c-format -msgid "Bad return from ftruncate. ERR=%s\n" +msgid "Create DB Client record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:309 +#: src/cats/sql_create.c:545 #, c-format -msgid "Spool header read error. ERR=%s\n" +msgid "Create DB Counters record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:312 +#: src/cats/sql_create.c:578 #, c-format -msgid "Spool read error. Wanted %u bytes, got %d\n" +msgid "More than one FileSet!: %d\n" msgstr "" -#: src/stored/spool.c:313 +#: src/cats/sql_create.c:583 #, c-format -msgid "Spool header read error. Wanted %u bytes, got %d\n" +msgid "error fetching FileSet row: ERR=%s\n" msgstr "" -#: src/stored/spool.c:319 src/stored/spool.c:320 +#: src/cats/sql_create.c:613 #, c-format -msgid "Spool block too big. Max %u bytes, got %u\n" +msgid "Create DB FileSet record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:325 src/stored/spool.c:326 +#: src/cats/sql_create.c:670 #, c-format -msgid "Spool data read error. Wanted %u bytes, got %d\n" +msgid "Attempt to put non-attributes into catalog. Stream=%d\n" msgstr "" -#: src/stored/spool.c:383 -msgid "User specified spool size reached.\n" +#: src/cats/sql_create.c:733 +#, c-format +msgid "Create db File record %s failed. ERR=%s" msgstr "" -#: src/stored/spool.c:385 -msgid "Bad return from despool in write_block.\n" +#: src/cats/sql_create.c:766 src/cats/sql_get.c:224 +#, c-format +msgid "More than one Path!: %s for path: %s\n" msgstr "" -#: src/stored/spool.c:393 -msgid "Spooling data again ...\n" +#: src/cats/sql_create.c:797 +#, c-format +msgid "Create db Path record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:424 +#: src/cats/sql_create.c:830 #, c-format -msgid "Error writing header to spool file. ERR=%s\n" +msgid "More than one Filename! %s for file: %s\n" msgstr "" -#: src/stored/spool.c:438 src/stored/spool.c:476 -msgid "Fatal despooling error." +#: src/cats/sql_create.c:836 +#, c-format +msgid "Error fetching row for file=%s: ERR=%s\n" msgstr "" -#: src/stored/spool.c:445 -msgid "Retrying after header spooling error failed.\n" +#: src/cats/sql_create.c:852 +#, c-format +msgid "Create db Filename record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:459 +#: src/cats/sql_delete.c:79 #, c-format -msgid "Error writing data to spool file. ERR=%s\n" +msgid "No pool record %s exists\n" msgstr "" -#: src/stored/spool.c:486 -msgid "Retrying after data spooling error failed.\n" +#: src/cats/sql_delete.c:84 +#, c-format +msgid "Expecting one pool record, got %d\n" msgstr "" -#: src/stored/spool.c:541 src/stored/spool.c:548 +#: src/cats/sql_delete.c:90 #, c-format -msgid "Fseek on attributes file failed: ERR=%s\n" +msgid "Error fetching row %s\n" msgstr "" -#: src/stored/spool.c:558 +#: src/cats/sql_find.c:90 src/cats/sql_find.c:119 #, c-format -msgid "Sending spooled attrs to the Director. Despooling %s bytes ...\n" +msgid "" +"Query error for start time request: ERR=%s\n" +"CMD=%s\n" msgstr "" -#: src/stored/spool.c:585 -#, c-format -msgid "fopen attr spool file %s failed: ERR=%s\n" +#: src/cats/sql_find.c:96 +msgid "No prior Full backup Job record found.\n" msgstr "" -#: src/stored/reserve.c:430 src/stored/reserve.c:442 +#: src/cats/sql_find.c:108 #, c-format -msgid "Failed command: %s\n" +msgid "Unknown level=%d\n" msgstr "" -#: src/stored/reserve.c:432 +#: src/cats/sql_find.c:125 #, c-format msgid "" -"\n" -" Device \"%s\" with MediaType \"%s\" requested by DIR not found in SD " -"Device resources.\n" +"No Job record found: ERR=%s\n" +"CMD=%s\n" msgstr "" -#: src/stored/reserve.c:607 src/stored/dircmd.c:543 +#: src/cats/sql_find.c:224 #, c-format -msgid "" -"\n" -" Device \"%s\" in changer \"%s\" requested by DIR could not be opened or " -"does not exist.\n" +msgid "Unknown Job level=%d\n" msgstr "" -#: src/stored/reserve.c:611 src/stored/dircmd.c:521 +#: src/cats/sql_find.c:234 #, c-format -msgid "" -"\n" -" Device \"%s\" requested by DIR could not be opened or does not exist.\n" +msgid "No Job found for: %s.\n" msgstr "" -#: src/stored/reserve.c:624 +#: src/cats/sql_find.c:245 #, c-format -msgid "3926 Could not get dcr for device: %s\n" +msgid "No Job found for: %s\n" msgstr "" -#: src/stored/reserve.c:686 +#: src/cats/sql_find.c:317 #, c-format -msgid "3601 JobId=%u device %s is BLOCKED due to user unmount.\n" +msgid "Request for Volume item %d greater than max %d\n" msgstr "" -#: src/stored/reserve.c:695 +#: src/cats/sql_find.c:329 #, c-format -msgid "3602 JobId=%u device %s is busy (already reading/writing).\n" +msgid "No Volume record found for item %d.\n" msgstr "" -#: src/stored/reserve.c:742 +#: src/cats/sql_get.c:130 #, c-format -msgid "3603 JobId=%u device %s is busy reading.\n" +msgid "get_file_record want 1 got rows=%d\n" msgstr "" -#: src/stored/reserve.c:751 +#: src/cats/sql_get.c:135 #, c-format -msgid "3604 JobId=%u device %s is BLOCKED due to user unmount.\n" +msgid "Error fetching row: %s\n" msgstr "" -#: src/stored/reserve.c:817 +#: src/cats/sql_get.c:143 #, c-format -msgid "3605 JobId=%u wants free drive but device %s is busy.\n" +msgid "File record for PathId=%s FilenameId=%s not found.\n" msgstr "" -#: src/stored/reserve.c:825 -#, c-format -msgid "3606 JobId=%u wants mounted, but drive %s has no Volume.\n" +#: src/cats/sql_get.c:149 +msgid "File record not found in Catalog.\n" msgstr "" -#: src/stored/reserve.c:835 +#: src/cats/sql_get.c:174 #, c-format -msgid "3607 JobId=%u wants Vol=\"%s\" drive has Vol=\"%s\" on drive %s.\n" +msgid "More than one Filename!: %s for file: %s\n" msgstr "" -#: src/stored/reserve.c:871 +#: src/cats/sql_get.c:184 #, c-format -msgid "3608 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" on drive %s.\n" +msgid "Get DB Filename record %s found bad record: %d\n" msgstr "" -#: src/stored/reserve.c:914 +#: src/cats/sql_get.c:190 #, c-format -msgid "3609 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" on drive %s.\n" -msgstr "" - -#: src/stored/reserve.c:922 src/stored/reserve.c:926 -msgid "Logic error!!!! Should not get here.\n" +msgid "Filename record: %s not found.\n" msgstr "" -#: src/stored/reserve.c:923 +#: src/cats/sql_get.c:194 #, c-format -msgid "3910 JobId=%u Logic error!!!! drive %s Should not get here.\n" +msgid "Filename record: %s not found in Catalog.\n" msgstr "" -#: src/stored/reserve.c:929 +#: src/cats/sql_get.c:235 #, c-format -msgid "3911 JobId=%u failed reserve drive %s.\n" -msgstr "" - -#: src/stored/askdir.c:161 -msgid "Network error on bnet_recv in req_vol_info.\n" +msgid "Get DB path record %s found bad record: %s\n" msgstr "" -#: src/stored/askdir.c:178 +#: src/cats/sql_get.c:248 #, c-format -msgid "Error getting Volume info: %s" -msgstr "" - -#: src/stored/askdir.c:294 src/stored/askdir.c:295 src/stored/append.c:80 -#: src/stored/append.c:89 src/stored/append.c:101 src/stored/append.c:269 -#: src/stored/append.c:281 -msgid "NULL Volume name. This shouldn't happen!!!\n" -msgstr "" - -#: src/stored/askdir.c:299 src/stored/askdir.c:300 -msgid "Attempt to update_volume_info in read mode!!!\n" +msgid "Path record: %s not found.\n" msgstr "" -#: src/stored/askdir.c:328 +#: src/cats/sql_get.c:252 #, c-format -msgid "Didn't get vol info vol=%s: ERR=%s" +msgid "Path record: %s not found in Catalog.\n" msgstr "" -#: src/stored/askdir.c:359 +#: src/cats/sql_get.c:287 #, c-format -msgid "Error creating JobMedia record: ERR=%s\n" +msgid "No Job found for JobId %s\n" msgstr "" -#: src/stored/askdir.c:366 +#: src/cats/sql_get.c:344 src/cats/sql_get.c:399 #, c-format -msgid "Error creating JobMedia record: %s\n" +msgid "No volumes found for JobId=%d\n" msgstr "" -#: src/stored/askdir.c:432 +#: src/cats/sql_get.c:350 src/cats/sql_get.c:408 #, c-format -msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" +msgid "Error fetching row %d: ERR=%s\n" msgstr "" -#: src/stored/askdir.c:445 +#: src/cats/sql_get.c:364 #, c-format -msgid "" -"Job %s waiting. Cannot find any appendable volumes.\n" -"Please use the \"label\" command to create a new Volume for:\n" -" Storage: %s\n" -" Media type: %s\n" -" Pool: %s\n" +msgid "No Volume for JobId %d found in Catalog.\n" msgstr "" -#: src/stored/askdir.c:469 src/stored/askdir.c:551 +#: src/cats/sql_get.c:480 #, c-format -msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" -msgstr "" - -#: src/stored/askdir.c:479 -msgid "pthread error in mount_next_volume.\n" -msgstr "" - -#: src/stored/askdir.c:511 -msgid "Cannot request another volume: no volume name given.\n" +msgid "Pool id select failed: ERR=%s\n" msgstr "" -#: src/stored/askdir.c:517 +#: src/cats/sql_get.c:517 #, c-format -msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" +msgid "Client id select failed: ERR=%s\n" msgstr "" -#: src/stored/askdir.c:532 +#: src/cats/sql_get.c:559 #, c-format -msgid "Please mount Volume \"%s\" on Storage Device %s for Job %s\n" +msgid "More than one Pool!: %s\n" msgstr "" -#: src/stored/askdir.c:561 -msgid "pthread error in mount_volume\n" +#: src/cats/sql_get.c:600 +msgid "Pool record not found in Catalog.\n" msgstr "" -#: src/stored/job.c:80 +#: src/cats/sql_get.c:634 #, c-format -msgid "Bad Job Command from Director: %s\n" +msgid "More than one Client!: %s\n" msgstr "" -#: src/stored/job.c:190 -#, c-format -msgid "Job name not found: %s\n" +#: src/cats/sql_get.c:651 src/cats/sql_get.c:655 +msgid "Client record not found in Catalog.\n" msgstr "" -#: src/stored/job.c:201 +#: src/cats/sql_get.c:680 #, c-format -msgid "Hey!!!! JobId %u Job %s already authenticated.\n" -msgstr "" - -#: src/stored/job.c:212 -msgid "Unable to authenticate File daemon\n" +msgid "More than one Counter!: %d\n" msgstr "" -#: src/stored/job.c:335 -msgid "In free_jcr(), but still attached to device!!!!\n" +#: src/cats/sql_get.c:685 +#, c-format +msgid "error fetching Counter row: %s\n" msgstr "" -#: src/stored/bls.c:68 +#: src/cats/sql_get.c:705 #, c-format -msgid "" -"Copyright (C) 2000-2005 Kern Sibbald.\n" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bls [options] \n" -" -b specify a bootstrap file\n" -" -c specify a config file\n" -" -d specify debug level\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 "Counter record: %s not found in Catalog.\n" msgstr "" -#: src/stored/bls.c:128 src/stored/bextract.c:127 +#: src/cats/sql_get.c:741 #, c-format -msgid "Could not open exclude file: %s, ERR=%s\n" +msgid "Error got %s FileSets but expected only one!\n" msgstr "" -#: src/stored/bls.c:142 src/stored/bextract.c:142 +#: src/cats/sql_get.c:746 #, c-format -msgid "Could not open include file: %s, ERR=%s\n" +msgid "FileSet record \"%s\" not found.\n" msgstr "" -#: src/stored/bls.c:189 -msgid "No archive name specified\n" +#: src/cats/sql_get.c:756 +msgid "FileSet record not found in Catalog.\n" msgstr "" -#: src/stored/bls.c:224 +#: src/cats/sql_get.c:813 #, c-format -msgid "" -"\n" -"Warning, this Volume is a continuation of Volume %s\n" +msgid "Media id select failed: ERR=%s\n" msgstr "" -#: src/stored/bls.c:267 +#: src/cats/sql_get.c:861 #, c-format -msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" +msgid "More than one Volume!: %s\n" msgstr "" -#: src/stored/bls.c:278 +#: src/cats/sql_get.c:906 #, c-format -msgid "Mounted Volume \"%s\".\n" +msgid "Media record MediaId=%s not found.\n" msgstr "" -#: src/stored/bls.c:280 +#: src/cats/sql_get.c:909 #, c-format -msgid "Got EOF at file %u on device %s, Volume \"%s\"\n" +msgid "Media record for Volume \"%s\" not found.\n" msgstr "" -#: src/stored/bls.c:304 +#: src/cats/sql_get.c:916 #, 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" +msgid "Media record for MediaId=%u not found in Catalog.\n" msgstr "" -#: src/stored/bls.c:313 +#: src/cats/sql_get.c:919 #, c-format -msgid "Block: %d size=%d\n" +msgid "Media record for Vol=%s not found in Catalog.\n" msgstr "" -#: src/stored/bls.c:364 src/stored/bscan.c:648 src/stored/bextract.c:285 -msgid "Cannot continue.\n" +#: src/cats/sql_list.c:53 +#, c-format +msgid "Query failed: %s\n" msgstr "" -#: src/stored/bls.c:371 src/stored/bscan.c:652 src/stored/bextract.c:289 -#: src/filed/restore.c:256 src/filed/verify_vol.c:143 +#: src/cats/sqlite.c:136 #, c-format -msgid "Record header file index %ld not equal record index %ld\n" +msgid "Database %s does not exist, please create it.\n" msgstr "" -#: src/stored/bls.c:380 +#: src/cats/sqlite.c:161 #, c-format -msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" +msgid "Unable to open Database=%s. ERR=%s\n" msgstr "" -#: src/stored/bls.c:397 src/stored/read_record.c:327 -msgid "Fresh Volume Label" +#: src/cats/sqlite.c:162 src/lib/bnet_server.c:371 +msgid "unknown" msgstr "" -#: src/stored/bls.c:400 src/stored/read_record.c:330 -msgid "Volume Label" +#: src/cats/sqlite.c:221 +#, c-format +msgid "next_index query error: ERR=%s\n" msgstr "" -#: src/stored/bls.c:404 src/stored/label.c:972 -msgid "Begin Job Session" +#: src/cats/sqlite.c:226 +#, c-format +msgid "Error fetching index: ERR=%s\n" msgstr "" -#: src/stored/bls.c:408 src/stored/label.c:975 -msgid "End Job Session" +#: src/cats/sqlite.c:236 +#, c-format +msgid "next_index update error: ERR=%s\n" msgstr "" -#: src/stored/bls.c:412 -msgid "End of Medium" +#: src/console/authenticate.c:100 src/dird/authenticate.c:106 +#: src/dird/authenticate.c:206 src/filed/authenticate.c:119 +#: src/filed/authenticate.c:215 src/stored/authenticate.c:128 +#: src/stored/authenticate.c:232 src/wx-console/authenticate.c:106 +msgid "" +"Authorization problem: Remote server did not advertise required TLS " +"support.\n" msgstr "" -#: src/stored/bls.c:415 src/stored/label.c:984 -msgid "Unknown" +#: src/console/authenticate.c:107 src/dird/authenticate.c:113 +#: src/dird/authenticate.c:213 src/filed/authenticate.c:127 +#: src/filed/authenticate.c:223 src/stored/authenticate.c:136 +#: src/stored/authenticate.c:240 src/wx-console/authenticate.c:112 +msgid "Authorization problem: Remote server requires TLS.\n" msgstr "" -#: src/stored/bls.c:421 src/stored/read_record.c:348 -#, c-format -msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" +#: src/console/authenticate.c:117 src/wx-console/authenticate.c:121 +msgid "TLS negotiation failed\n" msgstr "" -#: src/stored/bls.c:441 src/stored/bscan.c:1256 src/stored/bextract.c:477 -#: src/stored/btape.c:2684 src/stored/bcopy.c:287 +#: src/console/authenticate.c:129 src/gnome2-console/authenticate.c:85 +#: src/tray-monitor/authenticate.c:87 #, c-format -msgid "Mount Volume \"%s\" on device %s and press return when ready: " +msgid "Bad response to Hello command: ERR=%s\n" msgstr "" -#: src/stored/read.c:55 -msgid "No Volume names found for restore.\n" +#: src/console/authenticate.c:136 src/gnome2-console/authenticate.c:95 +#: src/tray-monitor/authenticate.c:94 src/wx-console/authenticate.c:136 +msgid "Director rejected Hello command\n" msgstr "" -#: src/stored/read.c:109 -#, c-format -msgid ">filed: Error Hdr=%s\n" +#: src/console/authenticate.c:146 src/wx-console/authenticate.c:146 +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 http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " +"help.\n" msgstr "" -#: src/stored/read.c:110 src/stored/read.c:125 +#: src/console/console.c:102 #, c-format -msgid "Error sending to File daemon. ERR=%s\n" +msgid "" +"Copyright (C) 2000-2005 Kern Sibbald\n" +"\n" +"Version: " msgstr "" -#: src/stored/read.c:124 +#: src/console/console.c:103 src/dird/admin.c:108 #, c-format -msgid "Error sending to FD. ERR=%s\n" +msgid " (" msgstr "" -#: src/stored/status.c:67 +#: src/console/console.c:103 #, c-format msgid "" +") %s %s %s\n" +"\n" +"Usage: bconsole [-s] [-c config_file] [-d debug_level]\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" -"%s Version: %s (%s) %s %s %s\n" msgstr "" -#: src/stored/status.c:71 src/dird/ua_status.c:249 -#, c-format -msgid "Daemon started %s, 1 Job run since started.\n" +#: src/console/console.c:150 +msgid "input from file" msgstr "" -#: src/stored/status.c:74 src/dird/ua_status.c:252 -#, c-format -msgid "Daemon started %s, %d Jobs run since started.\n" +#: src/console/console.c:151 +msgid "output to file" msgstr "" -#: src/stored/status.c:78 src/filed/status.c:121 src/dird/ua_status.c:257 -#, c-format -msgid " Heap: bytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" +#: src/console/console.c:152 src/dird/ua_cmds.c:110 +msgid "quit" msgstr "" -#: src/stored/status.c:103 -msgid "" -"\n" -"Device status:\n" +#: src/console/console.c:153 +msgid "output to file and terminal" msgstr "" -#: src/stored/status.c:105 -#, c-format -msgid "Autochanger \"%s\" with devices:\n" +#: src/console/console.c:154 +msgid "sleep specified time" msgstr "" -#: src/stored/status.c:119 -#, c-format -msgid "Device %s is mounted with Volume=\"%s\" Pool=\"%s\"\n" +#: src/console/console.c:155 src/dird/ua_cmds.c:122 +msgid "print current time" msgstr "" -#: src/stored/status.c:123 -#, c-format -msgid "Device %s open but no Bacula volume is mounted.\n" +#: src/console/console.c:156 +msgid "print Console's version" msgstr "" -#: src/stored/status.c:133 -#, c-format -msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" +#: src/console/console.c:157 src/dird/ua_cmds.c:99 +msgid "exit = quit" msgstr "" -#: src/stored/status.c:147 -#, c-format -msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" +#: src/console/console.c:158 +msgid "zed_keys = use zed keys instead of bash keys" msgstr "" -#: src/stored/status.c:152 -#, c-format -msgid " Positioned at File=%s Block=%s\n" +#: src/console/console.c:191 src/dird/ua_dotcmds.c:108 +msgid ": is an illegal command\n" msgstr "" -#: src/stored/status.c:158 -#, c-format -msgid "Device %s is not open.\n" +#: src/console/console.c:400 src/filed/filed.c:183 +#: src/gnome2-console/console.c:271 +msgid "TLS library initialization failed.\n" msgstr "" -#: src/stored/status.c:160 +#: src/console/console.c:404 src/dird/dird.c:200 src/dird/dird.c:410 +#: src/dird/dird.c:413 src/filed/filed.c:188 src/gnome2-console/console.c:275 +#: src/stored/stored.c:193 #, c-format -msgid "Device \"%s\" is not open or does not exist.\n" +msgid "Please correct configuration file: %s\n" msgstr "" -#: src/stored/status.c:165 src/stored/status.c:168 src/stored/status.c:172 -#: src/stored/status.c:174 -msgid "" -"====\n" -"\n" +#: src/console/console.c:421 +msgid "Available Directors:\n" msgstr "" -#: src/stored/status.c:166 -msgid "In Use Volume status:\n" +#: src/console/console.c:425 +#, c-format +msgid "%d %s at %s:%d\n" msgstr "" -#: src/stored/status.c:190 -msgid "" -"No DEVICE structure.\n" -"\n" +#: src/console/console.c:429 +msgid "Select Director: " msgstr "" -#: src/stored/status.c:195 -msgid " Device is BLOCKED. User unmounted.\n" +#: src/console/console.c:435 +#, c-format +msgid "You must enter a number between 1 and %d\n" msgstr "" -#: src/stored/status.c:198 -msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" +#: src/console/console.c:455 src/tray-monitor/tray-monitor.c:858 +#, c-format +msgid "Connecting to Director %s:%d\n" msgstr "" -#: src/stored/status.c:202 +#: src/console/console.c:471 src/gnome2-console/console.c:504 +#: src/wx-console/console_thread.cpp:370 #, c-format -msgid " Device is BLOCKED waiting for mount of volume \"%s\".\n" +msgid "Failed to initialize TLS context for Console \"%s\".\n" msgstr "" -#: src/stored/status.c:205 -msgid " Device is BLOCKED waiting for media.\n" +#: src/console/console.c:492 src/gnome2-console/console.c:526 +#: src/wx-console/console_thread.cpp:391 +#, c-format +msgid "Failed to initialize TLS context for Director \"%s\".\n" msgstr "" -#: src/stored/status.c:209 -msgid " Device is being initialized.\n" +#: src/console/console.c:515 +msgid "Enter a period to cancel a command.\n" msgstr "" -#: src/stored/status.c:212 -msgid " Device is blocked labeling a Volume.\n" +#: src/console/console.c:582 src/console/console.c:611 src/dird/dird.c:496 +#: src/dird/dird.c:711 src/dird/dird.c:777 src/dird/dird.c:829 +#: src/filed/filed.c:302 src/filed/filed.c:348 +#: src/gnome2-console/console.c:140 src/gnome2-console/console.c:169 +#: src/stored/stored.c:309 src/wx-console/console_thread.cpp:94 +#: src/wx-console/console_thread.cpp:120 +msgid "TLS required but not configured in Bacula.\n" msgstr "" -#: src/stored/status.c:220 +#: src/console/console.c:589 src/gnome2-console/console.c:147 #, c-format -msgid " Slot %d is loaded in drive %d.\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.\n" msgstr "" -#: src/stored/status.c:223 +#: src/console/console.c:598 src/gnome2-console/console.c:156 #, c-format -msgid " Drive %d is not loaded.\n" +msgid "" +"No Director resource defined in %s\n" +"Without that I don't how to speak to the Director :-(\n" msgstr "" -#: src/stored/status.c:227 src/stored/btape.c:548 +#: src/console/console.c:618 src/gnome2-console/console.c:176 #, c-format -msgid "Configured device capabilities:\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in %s.\n" msgstr "" -#: src/stored/status.c:242 -msgid "Device state:\n" +#: src/console/console.c:763 +msgid "Too many arguments on input command.\n" msgstr "" -#: src/stored/status.c:256 -#, c-format -msgid "" -"num_writers=%d JobStatus=%c block=%d\n" -"\n" +#: src/console/console.c:767 +msgid "First argument to input command must be a filename.\n" msgstr "" -#: src/stored/status.c:259 src/stored/btape.c:580 +#: src/console/console.c:772 #, c-format -msgid "Device parameters:\n" +msgid "Cannot open file %s for input. ERR=%s\n" msgstr "" -#: src/stored/status.c:260 +#: src/console/console.c:802 +msgid "Too many arguments on output/tee command.\n" +msgstr "" + +#: src/console/console.c:818 #, c-format -msgid "Archive name: %s Device name: %s\n" +msgid "Cannot open file %s for output. ERR=%s\n" msgstr "" -#: src/stored/status.c:262 +#: src/console/console_conf.c:123 src/gnome2-console/console_conf.c:122 +#: src/wx-console/console_conf.c:128 #, c-format -msgid "File=%u block=%u\n" +msgid "No record for %d %s\n" msgstr "" -#: src/stored/status.c:263 +#: src/console/console_conf.c:132 src/wx-console/console_conf.c:137 #, c-format -msgid "Min block=%u Max block=%u\n" +msgid "Console: name=%s rcfile=%s histfile=%s\n" msgstr "" -#: src/stored/status.c:277 src/dird/ua_status.c:508 -msgid "" -"\n" -"Running Jobs:\n" +#: src/console/console_conf.c:136 src/gnome2-console/console_conf.c:131 +#: src/wx-console/console_conf.c:141 +#, c-format +msgid "Director: name=%s address=%s DIRport=%d\n" msgstr "" -#: src/stored/status.c:280 +#: src/console/console_conf.c:140 src/console/console_conf.c:216 +#: src/console/console_conf.c:261 src/console/console_conf.c:288 +#: src/filed/filed_conf.c:268 src/filed/filed_conf.c:327 +#: src/filed/filed_conf.c:357 src/gnome2-console/console_conf.c:142 +#: src/gnome2-console/console_conf.c:220 src/gnome2-console/console_conf.c:268 +#: src/gnome2-console/console_conf.c:298 src/stored/stored_conf.c:510 +#: src/stored/stored_conf.c:598 src/stored/stored_conf.c:633 +#: src/wx-console/console_conf.c:145 src/wx-console/console_conf.c:220 +#: src/wx-console/console_conf.c:265 src/wx-console/console_conf.c:292 #, c-format -msgid "%s Job %s waiting for Client connection.\n" +msgid "Unknown resource type %d\n" msgstr "" -#: src/stored/status.c:295 +#: src/console/console_conf.c:242 src/dird/dird_conf.c:1112 +#: src/dird/dird_conf.c:1127 src/filed/filed_conf.c:296 +#: src/gnome2-console/console_conf.c:246 src/tray-monitor/tray_conf.c:262 +#: src/wx-console/console_conf.c:246 #, c-format -msgid "" -"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=\"%s\"\n" +msgid "%s item is required in %s resource, but not found.\n" msgstr "" -#: src/stored/status.c:307 +#: src/console/console_conf.c:304 src/dird/dird_conf.c:1299 +#: src/filed/filed_conf.c:374 src/gnome2-console/console_conf.c:314 +#: src/tray-monitor/tray_conf.c:341 src/wx-console/console_conf.c:308 #, c-format -msgid "" -"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=\"%s\"\n" +msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" msgstr "" -#: src/stored/status.c:323 src/filed/status.c:166 +#: src/dird/admin.c:55 #, c-format -msgid " Files=%s Bytes=%s Bytes/sec=%s\n" +msgid "Start Admin JobId %d, Job=%s\n" msgstr "" -#: src/stored/status.c:330 +#: src/dird/admin.c:82 src/dird/backup.c:343 src/dird/mac.c:287 #, c-format -msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" +msgid "Error getting job record for stats: %s" msgstr "" -#: src/stored/status.c:335 -msgid " FDSocket closed\n" +#: src/dird/admin.c:90 +msgid "Admin OK" msgstr "" -#: src/stored/status.c:343 src/filed/status.c:195 src/dird/ua_cmds.c:416 -msgid "No Jobs running.\n" +#: src/dird/admin.c:94 +msgid "*** Admin Error ***" msgstr "" -#: src/stored/status.c:345 src/stored/status.c:361 src/stored/status.c:438 -#: src/filed/status.c:198 src/filed/status.c:277 src/dird/ua_status.c:277 -#: src/dird/ua_status.c:493 src/dird/ua_status.c:655 -msgid "====\n" +#: src/dird/admin.c:98 +msgid "Admin Canceled" msgstr "" -#: src/stored/status.c:352 -msgid "" -"\n" -"Jobs waiting to reserve a drive:\n" +#: src/dird/admin.c:102 src/dird/backup.c:455 src/dird/mac.c:389 +#: src/dird/restore.c:246 +#, c-format +msgid "Inappropriate term code: %c\n" msgstr "" -#: src/stored/status.c:373 src/filed/status.c:211 src/dird/ua_status.c:665 -msgid "No Terminated Jobs.\n" +#: src/dird/admin.c:108 +msgid "Bacula " msgstr "" -#: src/stored/status.c:378 src/dird/ua_status.c:670 +#: src/dird/admin.c:108 +#, c-format msgid "" +"): %s\n" +" JobId: %d\n" +" Job: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Termination: %s\n" "\n" -"Terminated Jobs:\n" msgstr "" -#: src/stored/status.c:380 -msgid " JobId Level Files Bytes Status Finished Name \n" +#: src/dird/authenticate.c:67 src/dird/authenticate.c:68 +#: src/tray-monitor/authenticate.c:121 +#, c-format +msgid "Error sending Hello to Storage daemon. ERR=%s\n" msgstr "" -#: src/stored/status.c:382 src/filed/status.c:221 src/dird/ua_status.c:532 -msgid "======================================================================\n" +#: src/dird/authenticate.c:93 +msgid "Director and Storage daemon passwords or names not the same.\n" msgstr "" -#: src/stored/status.c:402 src/lib/util.c:178 src/filed/status.c:241 -#: src/dird/ua_status.c:703 -msgid "Created" +#: src/dird/authenticate.c:95 +msgid "" +"Director unable to authenticate with Storage daemon. 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 http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " +"help.\n" msgstr "" -#: src/stored/status.c:406 src/lib/util.c:191 src/lib/util.c:258 -#: src/filed/status.c:245 src/dird/ua_status.c:707 -msgid "Error" +#: src/dird/authenticate.c:123 src/dird/authenticate.c:223 +#: src/dird/authenticate.c:356 src/filed/authenticate.c:136 +#: src/filed/authenticate.c:232 src/stored/authenticate.c:145 +#: src/stored/authenticate.c:249 +msgid "TLS negotiation failed.\n" msgstr "" -#: src/stored/status.c:409 src/filed/status.c:248 src/dird/ua_status.c:710 -msgid "Diffs" +#: src/dird/authenticate.c:132 src/tray-monitor/authenticate.c:134 +#, c-format +msgid "bdird set configuration file to file\n" +" -dnn set debug level to nn\n" +" -f run in foreground (for debugging)\n" +" -g groupid\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/stored/parse_bsr.c:262 -#, c-format -msgid "MediaType %s in bsr at inappropriate place.\n" +#: src/dird/dird.c:196 src/stored/stored.c:189 +msgid "Cryptography library initialization failed.\n" msgstr "" -#: src/stored/parse_bsr.c:283 -#, c-format -msgid "Device \"%s\" in bsr at inappropriate place.\n" +#: src/dird/dird.c:396 +msgid "Too many open reload requests. Request ignored.\n" msgstr "" -#: src/stored/parse_bsr.c:440 -msgid "JobType not yet implemented\n" +#: src/dird/dird.c:411 +msgid "Out of reload table entries. Giving up.\n" msgstr "" -#: src/stored/parse_bsr.c:448 -msgid "JobLevel not yet implemented\n" +#: src/dird/dird.c:414 +msgid "Resetting previous configuration.\n" msgstr "" -#: src/stored/parse_bsr.c:631 +#: src/dird/dird.c:474 #, c-format -msgid "Slot %d in bsr at inappropriate place.\n" +msgid "" +"No Director resource defined in %s\n" +"Without that I don't know who I am :-(\n" msgstr "" -#: src/stored/parse_bsr.c:655 +#: src/dird/dird.c:482 src/filed/filed.c:295 #, c-format -msgid "VolFile : %u-%u\n" +msgid "No Messages resource defined in %s\n" msgstr "" -#: src/stored/parse_bsr.c:663 +#: src/dird/dird.c:487 #, c-format -msgid "VolBlock : %u-%u\n" +msgid "Only one Director resource permitted in %s\n" msgstr "" -#: src/stored/parse_bsr.c:673 +#: src/dird/dird.c:502 src/filed/filed.c:357 src/stored/stored.c:361 #, c-format -msgid "FileIndex : %u\n" +msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:675 +#: src/dird/dird.c:508 src/filed/filed.c:363 src/stored/stored.c:367 #, c-format -msgid "FileIndex : %u-%u\n" +msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:685 +#: src/dird/dird.c:514 src/filed/filed.c:369 src/stored/stored.c:373 #, c-format -msgid "JobId : %u\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/stored/parse_bsr.c:687 +#: src/dird/dird.c:533 src/filed/filed.c:388 src/stored/stored.c:392 #, c-format -msgid "JobId : %u-%u\n" +msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:697 +#: src/dird/dird.c:541 #, c-format -msgid "SessId : %u\n" +msgid "No Job records defined in %s\n" msgstr "" -#: src/stored/parse_bsr.c:699 +#: src/dird/dird.c:585 src/dird/dird.c:598 #, c-format -msgid "SessId : %u-%u\n" +msgid "Hey something is wrong. p=0x%lu\n" msgstr "" -#: src/stored/parse_bsr.c:708 +#: src/dird/dird.c:647 #, c-format -msgid "VolumeName : %s\n" +msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" msgstr "" -#: src/stored/parse_bsr.c:709 -#, c-format -msgid " MediaType : %s\n" +#: src/dird/dird.c:654 +msgid "Too many items in Job resource\n" msgstr "" -#: src/stored/parse_bsr.c:710 +#: src/dird/dird.c:672 src/dird/job.c:101 src/dird/ua_cmds.c:1480 +#: src/dird/ua_output.c:600 #, c-format -msgid " Device : %s\n" +msgid "Could not open database \"%s\".\n" msgstr "" -#: src/stored/parse_bsr.c:711 +#: src/dird/dird.c:675 #, c-format -msgid " Slot : %d\n" +msgid "%s" msgstr "" -#: src/stored/parse_bsr.c:720 +#: src/dird/dird.c:717 #, c-format -msgid "Client : %s\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Storage \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:728 +#: src/dird/dird.c:733 src/stored/stored.c:347 #, c-format -msgid "Job : %s\n" +msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:736 +#: src/dird/dird.c:784 #, c-format -msgid "SessTime : %u\n" +msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:750 -msgid "BSR is NULL\n" +#: src/dird/dird.c:790 +#, c-format +msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:754 +#: src/dird/dird.c:796 #, c-format -msgid "Next : 0x%x\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/stored/parse_bsr.c:755 +#: src/dird/dird.c:813 src/dird/dird.c:853 src/filed/filed.c:326 #, c-format -msgid "Root bsr : 0x%x\n" +msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:766 +#: src/dird/dird.c:836 #, c-format -msgid "count : %u\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:767 +#: src/dird/dird_conf.c:443 src/tray-monitor/tray_conf.c:152 #, c-format -msgid "found : %u\n" +msgid "No %s resource defined\n" msgstr "" -#: src/stored/parse_bsr.c:770 +#: src/dird/dird_conf.c:452 #, c-format -msgid "done : %s\n" +msgid "Director: name=%s MaxJobs=%d FDtimeout=%s SDtimeout=%s\n" msgstr "" -#: src/stored/parse_bsr.c:770 src/tools/dbcheck.c:1098 src/dird/ua_run.c:928 -#: src/dird/ua_input.c:120 src/dird/ua_select.c:54 src/dird/ua_update.c:223 -#: src/dird/ua_update.c:237 src/dird/ua_update.c:247 src/dird/ua_update.c:261 -#: src/dird/ua_update.c:551 -msgid "yes" +#: src/dird/dird_conf.c:457 +#, c-format +msgid " query_file=%s\n" msgstr "" -#: src/stored/parse_bsr.c:770 src/dird/ua_input.c:124 src/dird/ua_select.c:57 -#: src/dird/ua_update.c:225 src/dird/ua_update.c:237 src/dird/ua_update.c:249 -#: src/dird/ua_update.c:261 src/dird/ua_update.c:551 -msgid "no" +#: src/dird/dird_conf.c:460 src/dird/dird_conf.c:485 src/dird/dird_conf.c:499 +#: src/dird/dird_conf.c:544 src/dird/dird_conf.c:548 src/dird/dird_conf.c:552 +#: src/dird/dird_conf.c:576 src/dird/dird_conf.c:581 src/dird/dird_conf.c:585 +#: src/dird/dird_conf.c:589 src/dird/dird_conf.c:593 src/dird/dird_conf.c:597 +#: src/dird/dird_conf.c:607 +msgid " --> " msgstr "" -#: src/stored/parse_bsr.c:771 +#: src/dird/dird_conf.c:466 src/dird/dird_conf.c:469 #, c-format -msgid "positioning : %d\n" +msgid "Console: name=%s SSL=%d\n" msgstr "" -#: src/stored/parse_bsr.c:772 +#: src/dird/dird_conf.c:475 #, c-format -msgid "fast_reject : %d\n" +msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" msgstr "" -#: src/stored/wait.c:114 +#: src/dird/dird_conf.c:480 #, c-format -msgid "pthread timedwait error. ERR=%s\n" +msgid "Counter: name=%s min=%d max=%d\n" msgstr "" -#: src/stored/wait.c:199 +#: src/dird/dird_conf.c:491 #, c-format -msgid "Job %s waiting to reserve a device.\n" +msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" msgstr "" -#: src/stored/acquire.c:54 +#: src/dird/dird_conf.c:494 #, c-format -msgid "Num_writers=%d not zero. Job %d canceled.\n" +msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" msgstr "" -#: src/stored/acquire.c:62 +#: src/dird/dird_conf.c:506 #, c-format -msgid "No volumes specified. Job %d canceled.\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/stored/acquire.c:122 +#: src/dird/dird_conf.c:516 #, c-format -msgid "Media Type change. New device %s chosen.\n" +msgid "" +"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" +" DeviceName=%s MediaType=%s StorageId=%s\n" msgstr "" -#: src/stored/acquire.c:133 +#: src/dird/dird_conf.c:525 #, c-format -msgid "No suitable device found to read Volume \"%s\"\n" +msgid "" +"Catalog: name=%s address=%s DBport=%d db_name=%s\n" +" db_user=%s MutliDBConn=%d\n" msgstr "" -#: src/stored/acquire.c:155 src/stored/mount.c:83 +#: src/dird/dird_conf.c:533 #, c-format -msgid "Job %d canceled.\n" +msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" msgstr "" -#: src/stored/acquire.c:166 -#, c-format -msgid "Read open device %s Volume \"%s\" failed (EIO): ERR=%s\n" +#: src/dird/dird_conf.c:534 src/dird/ua_cmds.c:430 src/dird/ua_prune.c:454 +#: src/dird/ua_run.c:643 src/dird/ua_select.c:234 src/dird/ua_select.c:257 +msgid "Job" msgstr "" -#: src/stored/acquire.c:171 -#, c-format -msgid "Read open device %s Volume \"%s\" failed: ERR=%s\n" +#: src/dird/dird_conf.c:534 +msgid "JobDefs" msgstr "" -#: src/stored/acquire.c:237 src/stored/mount.c:77 +#: src/dird/dird_conf.c:538 #, c-format -msgid "Too many errors trying to mount device %s.\n" +msgid "" +" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=%" +"d\n" msgstr "" -#: src/stored/acquire.c:246 +#: src/dird/dird_conf.c:556 #, c-format -msgid "Ready to read from volume \"%s\" on device %s.\n" +msgid " --> Where=%s\n" msgstr "" -#: src/stored/acquire.c:289 +#: src/dird/dird_conf.c:559 #, c-format -msgid "Device %s is busy reading.\n" +msgid " --> Bootstrap=%s\n" msgstr "" -#: src/stored/acquire.c:319 +#: src/dird/dird_conf.c:562 #, c-format -msgid "Wanted Volume \"%s\", but device %s is busy writing on \"%s\" .\n" +msgid " --> RunBefore=%s\n" msgstr "" -#: src/stored/acquire.c:338 +#: src/dird/dird_conf.c:565 #, c-format -msgid "" -"Cannot recycle volume \"%s\" on device %s because it is in use by another " -"job.\n" +msgid " --> RunAfter=%s\n" msgstr "" -#: src/stored/acquire.c:360 +#: src/dird/dird_conf.c:568 #, c-format -msgid "Could not ready device %s for append.\n" +msgid " --> RunAfterFailed=%s\n" msgstr "" -#: src/stored/acquire.c:478 +#: src/dird/dird_conf.c:571 #, c-format -msgid "Alert: %s" +msgid " --> WriteBootstrap=%s\n" msgstr "" -#: src/stored/acquire.c:486 +#: src/dird/dird_conf.c:603 #, c-format -msgid "3997 Bad alert command: %s: ERR=%s.\n" +msgid " --> Run=%s\n" msgstr "" -#: src/stored/acquire.c:570 +#: src/dird/dird_conf.c:614 #, c-format -msgid "Hey! num_writers=%d!!!!\n" +msgid "FileSet: name=%s\n" msgstr "" -#: src/stored/bscan.c:109 +#: src/dird/dird_conf.c:676 src/dird/dird_conf.c:755 #, c-format -msgid "" -"Copyright (C) 2001-2005 Kern Sibbald.\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 nn\n" -" -m update media info in database\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\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 "Schedule: name=%s\n" msgstr "" -#: src/stored/bscan.c:221 src/stored/bextract.c:177 src/stored/bcopy.c:137 -msgid "Wrong number of arguments: \n" +#: src/dird/dird_conf.c:681 +#, c-format +msgid " --> Run Level=%s\n" msgstr "" -#: src/stored/bscan.c:234 src/stored/stored.c:265 -#, c-format -msgid "No Storage resource defined in %s. Cannot continue.\n" +#: src/dird/dird_conf.c:682 +msgid " hour=" msgstr "" -#: src/stored/bscan.c:242 src/stored/stored.c:296 -#, c-format -msgid "No Working Directory defined in %s. Cannot continue.\n" +#: src/dird/dird_conf.c:691 +msgid " mday=" msgstr "" -#: src/stored/bscan.c:250 -#, c-format -msgid "Working Directory: %s not found. Cannot continue.\n" +#: src/dird/dird_conf.c:700 +msgid " month=" msgstr "" -#: src/stored/bscan.c:254 -#, c-format -msgid "Working Directory: %s is not a directory. Cannot continue.\n" +#: src/dird/dird_conf.c:709 +msgid " wday=" msgstr "" -#: src/stored/bscan.c:268 src/stored/bscan.c:341 -#, c-format -msgid "First Volume Size = %sn" +#: src/dird/dird_conf.c:718 +msgid " wom=" msgstr "" -#: src/stored/bscan.c:274 -msgid "Could not init Bacula database\n" +#: src/dird/dird_conf.c:727 +msgid " woy=" msgstr "" -#: src/stored/bscan.c:281 +#: src/dird/dird_conf.c:736 #, c-format -msgid "Using Database: %s, User: %s\n" +msgid " mins=%d\n" msgstr "" -#: src/stored/bscan.c:315 -#, c-format -msgid "Create JobMedia for Job %s\n" +#: src/dird/dird_conf.c:738 src/dird/dird_conf.c:742 src/dird/dird_conf.c:746 +msgid " --> " msgstr "" -#: src/stored/bscan.c:326 +#: src/dird/dird_conf.c:759 #, c-format -msgid "Could not create JobMedia record for Volume=%s Job=%s\n" +msgid "Pool: name=%s PoolType=%s\n" msgstr "" -#: src/stored/bscan.c:383 +#: src/dird/dird_conf.c:761 #, c-format -msgid "done: %d%%\n" +msgid " use_cat=%d use_once=%d acpt_any=%d cat_files=%d\n" msgstr "" -#: src/stored/bscan.c:391 src/stored/bcopy.c:205 +#: src/dird/dird_conf.c:764 #, c-format -msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" +msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" msgstr "" -#: src/stored/bscan.c:407 -msgid "Volume is prelabeled. This tape cannot be scanned.\n" +#: src/dird/dird_conf.c:767 +#, c-format +msgid " VolUse=%s recycle=%d LabelFormat=%s\n" msgstr "" -#: src/stored/bscan.c:419 +#: src/dird/dird_conf.c:771 #, c-format -msgid "Pool record for %s found in DB.\n" +msgid " CleaningPrefix=%s LabelType=%d\n" msgstr "" -#: src/stored/bscan.c:423 +#: src/dird/dird_conf.c:773 #, c-format -msgid "VOL_LABEL: Pool record not found for Pool: %s\n" +msgid " RecyleOldest=%d PurgeOldest=%d MaxVolJobs=%d MaxVolFiles=%d\n" msgstr "" -#: src/stored/bscan.c:429 +#: src/dird/dird_conf.c:779 #, c-format -msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" +msgid "Messages: name=%s\n" msgstr "" -#: src/stored/bscan.c:433 +#: src/dird/dird_conf.c:781 #, c-format -msgid "Pool type \"%s\" is OK.\n" +msgid " mailcmd=%s\n" msgstr "" -#: src/stored/bscan.c:443 +#: src/dird/dird_conf.c:783 #, c-format -msgid "Media record for %s found in DB.\n" +msgid " opcmd=%s\n" msgstr "" -#: src/stored/bscan.c:450 +#: src/dird/dird_conf.c:786 src/tray-monitor/tray_conf.c:179 #, c-format -msgid "VOL_LABEL: Media record not found for Volume: %s\n" +msgid "Unknown resource type %d in dump_resource.\n" msgstr "" -#: src/stored/bscan.c:457 +#: src/dird/dird_conf.c:1080 src/tray-monitor/tray_conf.c:232 #, c-format -msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" +msgid "Unknown resource type %d in free_resource.\n" msgstr "" -#: src/stored/bscan.c:461 +#: src/dird/dird_conf.c:1118 src/lib/parse_conf.c:211 +#: src/tray-monitor/tray_conf.c:268 #, c-format -msgid "Media type \"%s\" is OK.\n" +msgid "Too many items in %s resource\n" msgstr "" -#: src/stored/bscan.c:470 +#: src/dird/dird_conf.c:1152 #, c-format -msgid "VOL_LABEL: OK for Volume: %s\n" +msgid "Cannot find Console resource %s\n" msgstr "" -#: src/stored/bscan.c:477 +#: src/dird/dird_conf.c:1158 src/filed/filed_conf.c:316 +#: src/stored/stored_conf.c:566 #, c-format -msgid "%d \"errors\" ignored before first Start of Session record.\n" +msgid "Cannot find Director resource %s\n" msgstr "" -#: src/stored/bscan.c:488 +#: src/dird/dird_conf.c:1165 src/stored/stored_conf.c:572 #, c-format -msgid "SOS_LABEL: Found Job record for JobId: %d\n" +msgid "Cannot find Storage resource %s\n" msgstr "" -#: src/stored/bscan.c:493 +#: src/dird/dird_conf.c:1174 #, c-format -msgid "SOS_LABEL: Job record not found for JobId: %d\n" +msgid "Cannot find Job resource %s\n" msgstr "" -#: src/stored/bscan.c:533 +#: src/dird/dird_conf.c:1192 #, c-format -msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" +msgid "Cannot find Counter resource %s\n" msgstr "" -#: src/stored/bscan.c:539 +#: src/dird/dird_conf.c:1200 src/filed/filed_conf.c:322 #, c-format -msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" +msgid "Cannot find Client resource %s\n" msgstr "" -#: src/stored/bscan.c:545 +#: src/dird/dird_conf.c:1212 #, c-format -msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" +msgid "Cannot find Schedule resource %s\n" msgstr "" -#: src/stored/bscan.c:563 src/stored/bscan.c:1041 +#: src/dird/dird_conf.c:1217 src/tray-monitor/tray_conf.c:287 #, c-format -msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" +msgid "Unknown resource type %d in save_resource.\n" msgstr "" -#: src/stored/bscan.c:607 +#: src/dird/dird_conf.c:1277 src/tray-monitor/tray_conf.c:322 #, c-format -msgid "Could not update job record. ERR=%s\n" +msgid "Unknown resource type %d in save_resrouce.\n" msgstr "" -#: src/stored/bscan.c:618 +#: src/dird/dird_conf.c:1292 #, c-format -msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" +msgid "Name item is required in %s resource, but not found.\n" msgstr "" -#: src/stored/bscan.c:630 +#: src/dird/dird_conf.c:1304 #, c-format -msgid "Could not find Job for SessId=%d SessTime=%d record.\n" +msgid "Inserting %s res: %s index=%d pass=%d\n" msgstr "" -#: src/stored/bscan.c:666 +#: src/dird/dird_conf.c:1377 #, c-format -msgid "%s file records. At file:blk=%s:%s bytes=%s\n" +msgid "Expected a Job Type keyword, got: %s" msgstr "" -#: src/stored/bscan.c:708 +#: src/dird/dird_conf.c:1401 #, c-format -msgid "Got MD5 record: %s\n" +msgid "Expected a Job Level keyword, got: %s" msgstr "" -#: src/stored/bscan.c:716 +#: src/dird/dird_conf.c:1421 #, c-format -msgid "Got SHA1 record: %s\n" +msgid "Expected a Restore replacement option, got: %s" msgstr "" -#: src/stored/bscan.c:724 +#: src/dird/expand.c:240 #, c-format -msgid "Got SHA256 record: %s\n" +msgid "Count not update counter %s: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:732 +#: src/dird/expand.c:412 #, c-format -msgid "Got SHA512 record: %s\n" +msgid "Cannot create var context: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:740 src/stored/bscan.c:747 -msgid "Got signed digest record\n" +#: src/dird/expand.c:417 +#, c-format +msgid "Cannot set var callback: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:753 +#: src/dird/expand.c:423 #, c-format -msgid "Got Prog Names Stream: %s\n" +msgid "Cannot set var operate: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:759 -msgid "Got Prog Data Stream record.\n" +#: src/dird/expand.c:429 src/dird/expand.c:444 +#, c-format +msgid "Cannot unescape string: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:763 +#: src/dird/expand.c:437 #, c-format -msgid "Unknown stream type!!! stream=%d data=%s\n" +msgid "Cannot expand expression \"%s\": ERR=%s\n" msgstr "" -#: src/stored/bscan.c:827 +#: src/dird/expand.c:455 #, c-format -msgid "Could not create File Attributes record. ERR=%s\n" +msgid "Cannot destroy var context: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:833 -#, c-format -msgid "Created File record: %s\n" +#: src/dird/fd_cmds.c:73 src/tray-monitor/tray-monitor.c:867 +msgid "File daemon" msgstr "" -#: src/stored/bscan.c:870 +#: src/dird/fd_cmds.c:104 #, c-format -msgid "Could not create media record. ERR=%s\n" +msgid "File daemon \"%s\" rejected Job command: %s\n" msgstr "" -#: src/stored/bscan.c:874 src/stored/bscan.c:895 +#: src/dird/fd_cmds.c:117 #, c-format -msgid "Could not update media record. ERR=%s\n" +msgid "Error updating Client record. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:878 +#: src/dird/fd_cmds.c:122 #, c-format -msgid "Created Media record for Volume: %s\n" +msgid "FD gave bad response to JobId command: %s\n" msgstr "" -#: src/stored/bscan.c:899 -#, c-format -msgid "Updated Media record at end of Volume: %s\n" +#: src/dird/fd_cmds.c:144 src/dird/fd_cmds.c:180 +msgid ", since=" msgstr "" -#: src/stored/bscan.c:916 -#, c-format -msgid "Could not create pool record. ERR=%s\n" +#: src/dird/fd_cmds.c:164 +msgid "No prior or suitable Full backup found. Doing FULL backup.\n" msgstr "" -#: src/stored/bscan.c:920 +#: src/dird/fd_cmds.c:165 src/dird/fd_cmds.c:173 #, c-format -msgid "Created Pool record for Pool: %s\n" +msgid " (upgraded from %s)" msgstr "" -#: src/stored/bscan.c:936 src/dird/job.c:624 +#: src/dird/fd_cmds.c:171 #, c-format -msgid "Could not create Client record. ERR=%s\n" +msgid "Prior failed job found. Upgrading to %s.\n" msgstr "" -#: src/stored/bscan.c:940 -#, c-format -msgid "Created Client record for Client: %s\n" +#: src/dird/fd_cmds.c:196 +msgid "since_utime " msgstr "" -#: src/stored/bscan.c:957 +#: src/dird/fd_cmds.c:232 #, c-format -msgid "Fileset \"%s\" already exists.\n" +msgid "Unimplemented backup level %d %c\n" msgstr "" -#: src/stored/bscan.c:961 +#: src/dird/fd_cmds.c:320 src/filed/job.c:566 #, c-format -msgid "Could not create FileSet record \"%s\". ERR=%s\n" +msgid "Cannot run program: %s. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:966 -#, c-format -msgid "Created FileSet record \"%s\"\n" +#: src/dird/fd_cmds.c:331 src/dird/fd_cmds.c:356 src/dird/fd_cmds.c:370 +msgid ">filed: write error on socket\n" msgstr "" -#: src/stored/bscan.c:1013 +#: src/dird/fd_cmds.c:337 #, c-format -msgid "Could not create JobId record. ERR=%s\n" +msgid "Error running program: %s. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1019 +#: src/dird/fd_cmds.c:346 #, c-format -msgid "Could not update job start record. ERR=%s\n" +msgid "Cannot open included file: %s. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1022 +#: src/dird/fd_cmds.c:441 src/filed/job.c:1622 #, c-format -msgid "Created new JobId=%u record for original JobId=%u\n" +msgid "Could not open bootstrap file %s: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1072 +#: src/dird/fd_cmds.c:526 #, c-format -msgid "Could not update JobId=%u record. ERR=%s\n" +msgid "" +" \n" -" -b specify a bootstrap file\n" -" -c specify a configuration file\n" -" -d set debug level to nn\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/stored/bextract.c:198 -#, c-format -msgid "%d Program Name and/or Program Data Stream records ignored.\n" +#: src/dird/next_vol.c:242 +msgid "volume has expired" msgstr "" -#: src/stored/bextract.c:202 +#: src/dird/next_vol.c:260 src/dird/next_vol.c:296 #, c-format -msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" +msgid "Recycled current volume \"%s\"\n" msgstr "" -#: src/stored/bextract.c:226 -#, c-format -msgid "Cannot stat %s. It must exist. ERR=%s\n" +#: src/dird/next_vol.c:265 +msgid "and recycling of current volume failed" msgstr "" -#: src/stored/bextract.c:230 -#, c-format -msgid "%s must be a directory.\n" +#: src/dird/next_vol.c:271 +msgid "but should be Append, Purged or Recycle" msgstr "" -#: src/stored/bextract.c:251 -#, c-format -msgid "%u files restored.\n" +#: src/dird/next_vol.c:299 +msgid "" +"but should be Append, Purged or Recycle (recycling of the current volume " +"failed)" msgstr "" -#: src/stored/bextract.c:278 src/stored/bextract.c:451 -msgid "Logic error output file should be open but is not.\n" +#: src/dird/next_vol.c:303 +msgid "" +"but should be Append, Purged or Recycle (cannot automatically recycle " +"current volume, as it still contains unpruned data)" msgstr "" -#: src/stored/bextract.c:298 src/filed/restore.c:269 +#: src/dird/next_vol.c:343 #, c-format -msgid "%s stream not supported on this Client.\n" +msgid "Unable to get Pool record: ERR=%s" msgstr "" -#: src/stored/bextract.c:347 +#: src/dird/next_vol.c:348 #, c-format -msgid "Seek error on %s: %s\n" +msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" msgstr "" -#: src/stored/bextract.c:359 src/stored/bextract.c:409 src/filed/restore.c:810 -#: src/filed/restore.c:855 +#: src/dird/next_vol.c:361 #, c-format -msgid "Write error on %s: %s\n" +msgid "Failed to move Scratch Volume. ERR=%s\n" msgstr "" -#: src/stored/bextract.c:387 src/filed/restore.c:728 +#: src/dird/next_vol.c:365 #, c-format -msgid "Seek to %s error on %s: ERR=%s\n" +msgid "Using Volume \"%s\" from 'Scratch' pool.\n" msgstr "" -#: src/stored/bextract.c:400 +#: src/dird/next_vol.c:373 #, c-format -msgid "Uncompression error. ERR=%d\n" +msgid "Unable to update Volume record: ERR=%s" msgstr "" -#: src/stored/bextract.c:408 -msgid "===Write error===\n" +#: src/dird/pythondir.c:105 src/filed/pythonfd.c:102 src/filed/pythonfd.c:156 +#: src/filed/pythonfd.c:220 src/stored/pythonsd.c:95 src/stored/pythonsd.c:160 +msgid "Job pointer not found." msgstr "" -#: src/stored/bextract.c:421 src/filed/restore.c:764 -msgid "GZIP data stream found, but GZIP not configured!\n" +#: src/dird/pythondir.c:137 +msgid "Pool record not found." msgstr "" -#: src/stored/bextract.c:442 -msgid "Got Program Name or Data Stream. Ignored.\n" +#: src/dird/pythondir.c:166 src/filed/pythonfd.c:133 src/stored/pythonsd.c:137 +#, c-format +msgid "Attribute %s not found." msgstr "" -#: src/stored/bextract.c:456 src/filed/restore.c:518 -#, c-format -msgid "Unknown stream=%d ignored. This shouldn't happen!\n" +#: src/dird/pythondir.c:209 src/dird/pythondir.c:215 src/filed/pythonfd.c:175 +#: src/stored/pythonsd.c:177 +msgid "Read-only attribute" msgstr "" -#: src/stored/stored.c:65 +#: src/dird/recycle.c:99 #, c-format -msgid "" -"Copyright (C) 2000-2005 Kern Sibbald.\n" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: stored [options] [-c config_file] [config_file]\n" -" -c use as configuration file\n" -" -dnn set debug level to nn\n" -" -f run in foreground (for debugging)\n" -" -g set groupid to group\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 "Recycled volume \"%s\"\n" msgstr "" -#: src/stored/stored.c:107 src/stored/btape.c:157 -#, c-format -msgid "Tape block size (%d) not multiple of system size (%d)\n" +#: src/dird/restore.c:70 +msgid "Cannot restore without bootstrap file.\n" msgstr "" -#: src/stored/stored.c:111 src/stored/btape.c:161 +#: src/dird/restore.c:77 #, c-format -msgid "Tape block size (%d) is not a power of 2\n" +msgid "Start Restore Job %s\n" msgstr "" -#: src/stored/stored.c:189 src/console/console.c:400 -#: src/gnome2-console/console.c:271 src/filed/filed.c:183 src/dird/dird.c:196 -msgid "Cryptography library initialization failed.\n" +#: src/dird/restore.c:219 +msgid "Restore OK -- warning file count mismatch" msgstr "" -#: src/stored/stored.c:193 src/console/console.c:404 -#: src/gnome2-console/console.c:275 src/filed/filed.c:188 src/dird/dird.c:200 -#: src/dird/dird.c:410 src/dird/dird.c:413 -#, c-format -msgid "Please correct configuration file: %s\n" +#: src/dird/restore.c:221 +msgid "Restore OK" msgstr "" -#: src/stored/stored.c:220 -msgid "Volume Session Time is ZERO!\n" +#: src/dird/restore.c:226 +msgid "*** Restore Error ***" msgstr "" -#: src/stored/stored.c:233 -#, c-format -msgid "Unable to create thread. ERR=%s\n" +#: src/dird/restore.c:236 +msgid "Restore Canceled" msgstr "" -#: src/stored/stored.c:271 +#: src/dird/restore.c:263 #, c-format -msgid "Only one Storage resource permitted in %s\n" +msgid "" +"Bacula %s (%s): %s\n" +" JobId: %d\n" +" Job: %s\n" +" 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/stored.c:276 +#: src/dird/run_conf.c:188 #, c-format -msgid "No Director resource defined in %s. Cannot continue.\n" +msgid "Expected an equals, got: %s" msgstr "" -#: src/stored/stored.c:281 +#: src/dird/run_conf.c:201 src/dird/run_conf.c:213 #, c-format -msgid "No Device resource defined in %s. Cannot continue.\n" +msgid "Expect a YES or NO, got: %s" msgstr "" -#: src/stored/stored.c:289 +#: src/dird/run_conf.c:227 #, c-format -msgid "No Messages resource defined in %s. Cannot continue.\n" -msgstr "" - -#: src/stored/stored.c:309 src/console/console.c:582 src/console/console.c:611 -#: src/gnome2-console/console.c:140 src/gnome2-console/console.c:169 -#: src/filed/filed.c:302 src/filed/filed.c:470 src/dird/dird.c:496 -#: src/dird/dird.c:722 src/dird/dird.c:788 src/dird/dird.c:840 -#: src/wx-console/console_thread.cpp:94 src/wx-console/console_thread.cpp:120 -msgid "TLS required but not configured in Bacula.\n" +msgid "Job level field: %s not found in run record" msgstr "" -#: src/stored/stored.c:316 +#: src/dird/run_conf.c:245 #, c-format -msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" +msgid "Could not find specified Pool Resource: %s" msgstr "" -#: src/stored/stored.c:322 +#: src/dird/run_conf.c:270 #, c-format -msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" +msgid "Could not find specified Storage Resource: %s" msgstr "" -#: src/stored/stored.c:328 +#: src/dird/run_conf.c:282 #, 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 "Could not find specified Messages Resource: %s" msgstr "" -#: src/stored/stored.c:347 src/dird/dird.c:744 +#: src/dird/run_conf.c:290 #, c-format -msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" +msgid "Expected a keyword name, got: %s" msgstr "" -#: src/stored/stored.c:361 src/filed/filed.c:479 src/dird/dird.c:502 -#, c-format -msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" +#: src/dird/run_conf.c:327 +msgid "Day number out of range (1-31)" msgstr "" -#: src/stored/stored.c:367 src/filed/filed.c:485 src/dird/dird.c:508 -#, c-format -msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" +#: src/dird/run_conf.c:344 src/dird/run_conf.c:490 +msgid "Week number out of range (0-53)" msgstr "" -#: src/stored/stored.c:373 src/filed/filed.c:491 src/dird/dird.c:514 +#: src/dird/run_conf.c:359 #, 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 "Job type field: %s in run record not found" msgstr "" -#: src/stored/stored.c:392 src/filed/filed.c:510 src/dird/dird.c:533 +#: src/dird/run_conf.c:366 #, c-format -msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" +msgid "Unexpected token: %d:%s" msgstr "" -#: src/stored/stored.c:455 -#, c-format -msgid "Could not initialize %s\n" +#: src/dird/run_conf.c:410 +msgid "Time must be preceded by keyword AT." msgstr "" -#: src/stored/stored.c:468 -#, c-format -msgid "Could not open device %s\n" +#: src/dird/run_conf.c:418 +msgid "Time logic error.\n" msgstr "" -#: src/stored/stored.c:481 -#, c-format -msgid "Could not mount device %s\n" +#: src/dird/run_conf.c:430 src/dird/run_conf.c:446 +msgid "Bad time specification." msgstr "" -#: src/stored/btape.c:164 -#, c-format -msgid "" -"\n" -"\n" -"!!!! Warning large disk addressing disabled. off_t=%d should be 8 or " -"more !!!!!\n" -"\n" -"\n" +#: src/dird/run_conf.c:459 +msgid "Range logic error.\n" msgstr "" -#: src/stored/btape.c:171 -#, c-format -msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" +#: src/dird/run_conf.c:468 +msgid "Bad day range specification." msgstr "" -#: src/stored/btape.c:180 -msgid "64 bit printf/scanf problem. i=%d x64=%" +#: src/dird/run_conf.c:515 +msgid "Invalid month, week or position day range" msgstr "" -#: src/stored/btape.c:180 -msgid " y64=%" +#: src/dird/run_conf.c:530 +msgid "Invalid month, weekday or position range" msgstr "" -#: src/stored/btape.c:180 src/dird/ua_status.c:730 -msgid "\n" +#: src/dird/run_conf.c:589 +msgid "Unexpected run state\n" msgstr "" -#: src/stored/btape.c:184 +#: src/dird/scheduler.c:80 #, c-format -msgid "Tape block granularity is %d bytes.\n" +msgid "Job %s not found\n" msgstr "" -#: src/stored/btape.c:251 -msgid "No archive name specified.\n" +#: src/dird/scheduler.c:103 +msgid "Walk queue" msgstr "" -#: src/stored/btape.c:255 -msgid "Improper number of arguments specified.\n" +#: src/dird/scheduler.c:113 +msgid "Dequeued job" msgstr "" -#: src/stored/btape.c:333 src/stored/bcopy.c:172 src/stored/device.c:266 -#, c-format -msgid "dev open failed: %s\n" +#: src/dird/scheduler.c:116 +msgid "Scheduler logic error\n" msgstr "" -#: src/stored/btape.c:338 -#, c-format -msgid "open device %s: OK\n" +#: src/dird/scheduler.c:132 +msgid "Run job" msgstr "" -#: src/stored/btape.c:359 -msgid "Enter Volume Name: " +#: src/dird/scheduler.c:349 +msgid "Inserted job" msgstr "" -#: src/stored/btape.c:366 -#, c-format -msgid "Device open failed. ERR=%s\n" +#: src/dird/scheduler.c:357 +msgid "Appended job" msgstr "" -#: src/stored/btape.c:371 -#, c-format -msgid "Wrote Volume label for volume \"%s\".\n" +#: src/dird/scheduler.c:361 +msgid "Run queue" msgstr "" -#: src/stored/btape.c:385 -msgid "Volume has no label.\n" +#: src/dird/ua_cmds.c:90 +msgid "add media to a pool" msgstr "" -#: src/stored/btape.c:388 -msgid "Volume label read correctly.\n" +#: src/dird/ua_cmds.c:91 +msgid "autodisplay [on|off] -- console messages" msgstr "" -#: src/stored/btape.c:391 -#, c-format -msgid "I/O error on device: ERR=%s" +#: src/dird/ua_cmds.c:92 +msgid "automount [on|off] -- after label" msgstr "" -#: src/stored/btape.c:394 -msgid "Volume name error\n" +#: src/dird/ua_cmds.c:93 +msgid "cancel [ | ] -- cancel a job" msgstr "" -#: src/stored/btape.c:397 -#, c-format -msgid "Error creating label. ERR=%s" +#: src/dird/ua_cmds.c:94 +msgid "create DB Pool from resource" msgstr "" -#: src/stored/btape.c:400 -msgid "Volume version error.\n" +#: src/dird/ua_cmds.c:95 +msgid "delete [pool= | media volume=]" msgstr "" -#: src/stored/btape.c:403 -msgid "Bad Volume label type.\n" +#: src/dird/ua_cmds.c:96 +msgid "disable -- disable a job" msgstr "" -#: src/stored/btape.c:406 -msgid "Unknown error.\n" +#: src/dird/ua_cmds.c:97 +msgid "enable -- enable a job" msgstr "" -#: src/stored/btape.c:424 -#, c-format -msgid "Bad status from load. ERR=%s\n" +#: src/dird/ua_cmds.c:98 +msgid "performs FileSet estimate, listing gives full listing" msgstr "" -#: src/stored/btape.c:426 -#, c-format -msgid "Loaded %s\n" +#: src/dird/ua_cmds.c:100 +msgid "gui [on|off] -- non-interactive gui mode" msgstr "" -#: src/stored/btape.c:435 src/stored/btape.c:775 src/stored/btape.c:817 -#: src/stored/btape.c:887 src/stored/btape.c:929 src/stored/btape.c:1197 -#, c-format -msgid "Bad status from rewind. ERR=%s\n" +#: src/dird/ua_cmds.c:101 src/stored/btape.c:2540 +msgid "print this command" msgstr "" -#: src/stored/btape.c:438 src/stored/btape.c:1205 -#, c-format -msgid "Rewound %s\n" +#: src/dird/ua_cmds.c:102 +msgid "" +"list [pools | jobs | jobtotals | media | files ]; " +"from catalog" msgstr "" -#: src/stored/btape.c:465 src/stored/btape.c:1209 -#, c-format -msgid "Bad status from weof %d. ERR=%s\n" +#: src/dird/ua_cmds.c:103 +msgid "label a tape" msgstr "" -#: src/stored/btape.c:469 -#, c-format -msgid "Wrote 1 EOF to %s\n" +#: src/dird/ua_cmds.c:104 +msgid "full or long list like list command" msgstr "" -#: src/stored/btape.c:472 -#, c-format -msgid "Wrote %d EOFs to %s\n" +#: src/dird/ua_cmds.c:105 +msgid "messages" msgstr "" -#: src/stored/btape.c:490 -msgid "Moved to end of medium.\n" +#: src/dird/ua_cmds.c:106 +msgid "mount " msgstr "" -#: src/stored/btape.c:517 -#, c-format -msgid "Bad status from bsf. ERR=%s\n" +#: src/dird/ua_cmds.c:107 +msgid "prune expired records from catalog" msgstr "" -#: src/stored/btape.c:519 -#, c-format -msgid "Backspaced %d file%s.\n" +#: src/dird/ua_cmds.c:108 +msgid "purge records from catalog" msgstr "" -#: src/stored/btape.c:536 -#, c-format -msgid "Bad status from bsr. ERR=%s\n" +#: src/dird/ua_cmds.c:109 +msgid "python control commands" msgstr "" -#: src/stored/btape.c:538 -#, c-format -msgid "Backspaced %d record%s.\n" +#: src/dird/ua_cmds.c:111 +msgid "query catalog" msgstr "" -#: src/stored/btape.c:566 -#, c-format -msgid "Device status:\n" +#: src/dird/ua_cmds.c:112 +msgid "restore files" msgstr "" -#: src/stored/btape.c:585 -#, c-format -msgid "Status:\n" +#: src/dird/ua_cmds.c:113 +msgid "relabel a tape" msgstr "" -#: src/stored/btape.c:600 -msgid "" -"Test writting 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/ua_cmds.c:114 +msgid "release " msgstr "" -#: src/stored/btape.c:606 src/dird/ua_label.c:498 -msgid "Do you want to continue? (y/n): " +#: src/dird/ua_cmds.c:115 +msgid "reload conf file" msgstr "" -#: src/stored/btape.c:608 src/stored/btape.c:1814 -msgid "Command aborted.\n" +#: src/dird/ua_cmds.c:116 +msgid "run " msgstr "" -#: src/stored/btape.c:624 -#, c-format -msgid "Block %d i=%d\n" +#: src/dird/ua_cmds.c:117 +msgid "status [storage | client]=" msgstr "" -#: src/stored/btape.c:650 -msgid "Skipping read backwards test because BSR turned off.\n" +#: src/dird/ua_cmds.c:118 +msgid "sets debug level" msgstr "" -#: src/stored/btape.c:654 -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_cmds.c:119 +msgid "sets new client address -- if authorized" msgstr "" -#: src/stored/btape.c:667 src/stored/btape.c:678 src/stored/btape.c:689 -#: src/stored/btape.c:787 src/stored/btape.c:803 src/stored/btape.c:899 -#: src/stored/btape.c:915 src/stored/btape.c:1523 src/stored/btape.c:2405 -msgid "Error writing record to block.\n" +#: src/dird/ua_cmds.c:120 +msgid "show (resource records) [jobs | pools | ... | all]" msgstr "" -#: src/stored/btape.c:671 src/stored/btape.c:682 src/stored/btape.c:693 -#: src/stored/btape.c:791 src/stored/btape.c:807 src/stored/btape.c:903 -#: src/stored/btape.c:919 src/stored/btape.c:1527 src/stored/btape.c:2409 -msgid "Error writing block to device.\n" +#: src/dird/ua_cmds.c:121 +msgid "use SQL to query catalog" msgstr "" -#: src/stored/btape.c:674 -#, c-format -msgid "Wrote first record of %d bytes.\n" +#: src/dird/ua_cmds.c:123 +msgid "turn on/off trace to file" msgstr "" -#: src/stored/btape.c:685 -#, c-format -msgid "Wrote second record of %d bytes.\n" +#: src/dird/ua_cmds.c:124 +msgid "unmount " msgstr "" -#: src/stored/btape.c:696 -#, c-format -msgid "Wrote third record of %d bytes.\n" +#: src/dird/ua_cmds.c:125 +msgid "umount for old-time Unix guys" msgstr "" -#: src/stored/btape.c:703 src/stored/btape.c:708 -#, c-format -msgid "Backspace file failed! ERR=%s\n" +#: src/dird/ua_cmds.c:126 +msgid "update Volume, Pool or slots" msgstr "" -#: src/stored/btape.c:712 -msgid "Backspaced over EOF OK.\n" +#: src/dird/ua_cmds.c:127 +msgid "use catalog xxx" msgstr "" -#: src/stored/btape.c:714 -#, c-format -msgid "Backspace record failed! ERR=%s\n" +#: src/dird/ua_cmds.c:128 +msgid "does variable expansion" msgstr "" -#: src/stored/btape.c:717 -msgid "Backspace record OK.\n" +#: src/dird/ua_cmds.c:129 +msgid "print Director version" msgstr "" -#: src/stored/btape.c:720 src/stored/btape.c:726 -#, c-format -msgid "Read block failed! ERR=%s\n" +#: src/dird/ua_cmds.c:130 +msgid "wait until no jobs are running" msgstr "" -#: src/stored/btape.c:731 -msgid "Bad data in record. Test failed!\n" +#: src/dird/ua_cmds.c:168 +#, c-format +msgid "%s: is an illegal command.\n" msgstr "" -#: src/stored/btape.c:735 +#: src/dird/ua_cmds.c:206 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" -"Block re-read correct. Test succeeded!\n" msgstr "" -#: src/stored/btape.c:736 -msgid "" -"=== End Write, backup, and re-read test ===\n" -"\n" +#: src/dird/ua_cmds.c:225 +#, c-format +msgid "Pool already has maximum volumes = %d\n" msgstr "" -#: src/stored/btape.c:743 -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_cmds.c:227 +msgid "Enter new maximum (zero for unlimited): " msgstr "" -#: src/stored/btape.c:767 -msgid "" -"\n" -"=== Write, rewind, and re-read test ===\n" -"\n" -"I'm going to write 1000 records and an EOF\n" -"then write 1000 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_cmds.c:248 +#, c-format +msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " msgstr "" -#: src/stored/btape.c:795 src/stored/btape.c:811 src/stored/btape.c:907 -#: src/stored/btape.c:923 +#: src/dird/ua_cmds.c:254 #, c-format -msgid "Wrote 1000 blocks of %d bytes.\n" +msgid "The number must be between 0 and %d\n" msgstr "" -#: src/stored/btape.c:820 src/stored/btape.c:932 -msgid "Rewind OK.\n" +#: src/dird/ua_cmds.c:261 +msgid "Enter Volume name: " msgstr "" -#: src/stored/btape.c:827 src/stored/btape.c:981 -msgid "Got EOF on tape.\n" +#: src/dird/ua_cmds.c:265 +msgid "Enter base volume name: " msgstr "" -#: src/stored/btape.c:832 -#, c-format -msgid "Read block %d failed! ERR=%s\n" +#: src/dird/ua_cmds.c:274 src/dird/ua_label.c:605 +msgid "Volume name too long.\n" msgstr "" -#: src/stored/btape.c:838 -#, c-format -msgid "Read record failed. Block %d! ERR=%s\n" +#: src/dird/ua_cmds.c:278 src/dird/ua_label.c:611 src/lib/edit.c:413 +msgid "Volume name must be at least one character long.\n" msgstr "" -#: src/stored/btape.c:844 src/stored/btape.c:1011 -#, c-format -msgid "Bad data in record. Expected %d, got %d at byte %d. Test failed!\n" +#: src/dird/ua_cmds.c:287 +msgid "Enter the starting number: " msgstr "" -#: src/stored/btape.c:851 -msgid "1000 blocks re-read correctly.\n" +#: src/dird/ua_cmds.c:292 +msgid "Start number must be greater than zero.\n" msgstr "" -#: src/stored/btape.c:854 src/stored/btape.c:1018 -msgid "" -"=== Test Succeeded. End Write, rewind, and re-read test ===\n" -"\n" +#: src/dird/ua_cmds.c:303 +msgid "Enter slot (0 for none): " msgstr "" -#: src/stored/btape.c:879 -msgid "" -"\n" -"=== Write, rewind, and position test ===\n" -"\n" -"I'm going to write 1000 records and an EOF\n" -"then write 1000 records and an EOF, then rewind,\n" -"and position to a few blocks and verify that it is correct.\n" -"\n" -"This is an *essential* feature ...\n" -"\n" +#: src/dird/ua_cmds.c:307 +msgid "InChanger? yes/no: " msgstr "" -#: src/stored/btape.c:972 +#: src/dird/ua_cmds.c:334 #, c-format -msgid "Reposition to file:block %d:%d\n" +msgid "%d Volumes created in pool %s\n" msgstr "" -#: src/stored/btape.c:974 -msgid "Reposition error.\n" +#: src/dird/ua_cmds.c:350 src/dird/ua_cmds.c:917 +msgid "Turn on or off? " msgstr "" -#: src/stored/btape.c:987 -#, c-format -msgid "" -"Read block %d failed! file=%d blk=%d. ERR=%s\n" -"\n" +#: src/dird/ua_cmds.c:358 src/dird/ua_cmds.c:925 +msgid "off" msgstr "" -#: src/stored/btape.c:989 -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_cmds.c:378 +msgid "jobid" msgstr "" -#: src/stored/btape.c:1005 +#: src/dird/ua_cmds.c:385 #, c-format -msgid "Read record failed! ERR=%s\n" +msgid "JobId %s is not running. Use Job name to cancel inactive jobs.\n" msgstr "" -#: src/stored/btape.c:1016 +#: src/dird/ua_cmds.c:389 +msgid "job" +msgstr "" + +#: src/dird/ua_cmds.c:394 #, c-format -msgid "Block %d re-read correctly.\n" +msgid "Warning Job %s is not running. Continuing anyway ...\n" msgstr "" -#: src/stored/btape.c:1037 -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_cmds.c:416 src/filed/status.c:195 src/stored/status.c:343 +msgid "No Jobs running.\n" msgstr "" -#: src/stored/btape.c:1061 -msgid "Now moving to end of medium.\n" +#: src/dird/ua_cmds.c:419 +msgid "Select Job:\n" msgstr "" -#: src/stored/btape.c:1063 src/stored/btape.c:1292 +#: src/dird/ua_cmds.c:425 #, c-format -msgid "We should be in file 3. I am at file %d. %s\n" +msgid "JobId=%s Job=%s" msgstr "" -#: src/stored/btape.c:1064 src/stored/btape.c:1082 src/stored/btape.c:1281 -#: src/stored/btape.c:1293 src/stored/btape.c:1306 src/stored/btape.c:1323 -msgid "This is correct!" +#: src/dird/ua_cmds.c:430 +msgid "Choose Job to cancel" msgstr "" -#: src/stored/btape.c:1064 src/stored/btape.c:1082 src/stored/btape.c:1281 -#: src/stored/btape.c:1293 src/stored/btape.c:1306 src/stored/btape.c:1323 -msgid "This is NOT correct!!!!" +#: src/dird/ua_cmds.c:434 +msgid "Confirm cancel (yes/no): " msgstr "" -#: src/stored/btape.c:1070 -msgid "" -"\n" -"Now the important part, I am going to attempt to append to the tape.\n" -"\n" +#: src/dird/ua_cmds.c:442 +#, c-format +msgid "Job %s not found.\n" msgstr "" -#: src/stored/btape.c:1077 +#: src/dird/ua_cmds.c:547 +#, c-format msgid "" -"Done appending, there should be no I/O errors\n" -"\n" -msgstr "" - -#: src/stored/btape.c:1078 -msgid "Doing Bacula scan of blocks:\n" +"Error: Pool %s already exists.\n" +"Use update to change it.\n" msgstr "" -#: src/stored/btape.c:1080 -msgid "End scanning the tape.\n" +#: src/dird/ua_cmds.c:558 +#, c-format +msgid "Pool %s created.\n" msgstr "" -#: src/stored/btape.c:1081 src/stored/btape.c:1305 -#, c-format -msgid "We should be in file 4. I am at file %d. %s\n" +#: src/dird/ua_cmds.c:571 +msgid "restart" msgstr "" -#: src/stored/btape.c:1106 -msgid "" -"\n" -"Autochanger enabled, but no name or no command device specified.\n" +#: src/dird/ua_cmds.c:575 +msgid "Python interpreter restarted.\n" msgstr "" -#: src/stored/btape.c:1110 -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_cmds.c:577 src/dird/ua_cmds.c:1145 +msgid "Nothing done.\n" msgstr "" -#: src/stored/btape.c:1113 -msgid "" -"\n" -"Do you wish to continue with the Autochanger test? (y/n): " +#: src/dird/ua_cmds.c:593 src/dird/ua_cmds.c:639 +msgid "Illegal command from this console.\n" msgstr "" -#: src/stored/btape.c:1120 -msgid "" -"\n" -"\n" -"=== Autochanger test ===\n" -"\n" +#: src/dird/ua_cmds.c:600 src/dird/ua_run.c:353 +#, c-format +msgid "Client \"%s\" not found.\n" msgstr "" -#: src/stored/btape.c:1129 -msgid "3301 Issuing autochanger \"loaded\" command.\n" +#: src/dird/ua_cmds.c:609 +#, c-format +msgid "Client \"%s\" address set to %s\n" msgstr "" -#: src/stored/btape.c:1138 +#: src/dird/ua_cmds.c:634 #, c-format -msgid "3991 Bad autochanger command: %s\n" +msgid "Job \"%s\" not found.\n" msgstr "" -#: src/stored/btape.c:1139 +#: src/dird/ua_cmds.c:643 #, c-format -msgid "3991 result=\"%s\": ERR=%s\n" +msgid "Job \"%s\" %sabled\n" msgstr "" -#: src/stored/btape.c:1143 +#: src/dird/ua_cmds.c:667 src/dird/ua_status.c:286 #, c-format -msgid "Slot %d loaded. I am going to unload it.\n" +msgid "Connecting to Storage daemon %s at %s:%d\n" msgstr "" -#: src/stored/btape.c:1145 -msgid "Nothing loaded in the drive. OK.\n" +#: src/dird/ua_cmds.c:673 src/dird/ua_status.c:297 +msgid "Connected to storage daemon\n" msgstr "" -#: src/stored/btape.c:1152 +#: src/dird/ua_cmds.c:693 src/dird/ua_cmds.c:1032 src/dird/ua_status.c:324 #, c-format -msgid "3302 Issuing autochanger \"unload %d %d\" command.\n" +msgid "Connecting to Client %s at %s:%d\n" msgstr "" -#: src/stored/btape.c:1157 -#, c-format -msgid "unload status=%s %d\n" +#: src/dird/ua_cmds.c:696 src/dird/ua_cmds.c:1035 +msgid "Failed to connect to Client.\n" msgstr "" -#: src/stored/btape.c:1157 -msgid "Bad" +#: src/dird/ua_cmds.c:812 +msgid "Enter new debug level: " msgstr "" -#: src/stored/btape.c:1160 -#, c-format -msgid "3992 Bad autochanger command: %s\n" +#: src/dird/ua_cmds.c:878 +msgid "Available daemons are: \n" msgstr "" -#: src/stored/btape.c:1161 -#, c-format -msgid "3992 result=\"%s\": ERR=%s\n" +#: src/dird/ua_cmds.c:883 +msgid "Select daemon type to set debug level" msgstr "" -#: src/stored/btape.c:1171 +#: src/dird/ua_cmds.c:987 src/dird/ua_run.c:478 #, c-format -msgid "3303 Issuing autochanger \"load %d %d\" command.\n" +msgid "Level %s not valid.\n" msgstr "" -#: src/stored/btape.c:1179 -#, c-format -msgid "3303 Autochanger \"load %d %d\" status is OK.\n" +#: src/dird/ua_cmds.c:1000 +msgid "No job specified.\n" msgstr "" -#: src/stored/btape.c:1183 -#, c-format -msgid "3993 Bad autochanger command: %s\n" +#: src/dird/ua_cmds.c:1040 +msgid "Error sending include list.\n" msgstr "" -#: src/stored/btape.c:1184 -#, c-format -msgid "3993 result=\"%s\": ERR=%s\n" +#: src/dird/ua_cmds.c:1045 +msgid "Error sending exclude list.\n" msgstr "" -#: src/stored/btape.c:1199 +#: src/dird/ua_cmds.c:1131 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 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/stored/btape.c:1212 -#, c-format -msgid "Wrote EOF to %s\n" +#: src/dird/ua_cmds.c:1134 +msgid "Choose catalog item to delete" +msgstr "" + +#: src/dird/ua_cmds.c:1202 +msgid "Enter JobId to delete: " msgstr "" -#: src/stored/btape.c:1216 +#: src/dird/ua_cmds.c:1245 #, 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" +msgid "Job %s and associated records deleted from the catalog.\n" msgstr "" -#: src/stored/btape.c:1221 +#: src/dird/ua_cmds.c:1258 +#, c-format msgid "" "\n" -"The test autochanger worked!!\n" -"\n" -msgstr "" - -#: src/stored/btape.c:1232 -msgid "You must correct this error or the Autochanger will not work.\n" +"This command will delete volume %s\n" +"and all Jobs saved on that volume from the Catalog\n" msgstr "" -#: src/stored/btape.c:1250 -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_cmds.c:1262 +msgid "Are you sure you want to delete this Volume? (yes/no): " msgstr "" -#: src/stored/btape.c:1275 -msgid "Now forward spacing 1 file.\n" +#: src/dird/ua_cmds.c:1283 +msgid "Are you sure you want to delete this Pool? (yes/no): " msgstr "" -#: src/stored/btape.c:1277 src/stored/btape.c:1289 src/stored/btape.c:1302 -#: src/stored/btape.c:1320 src/stored/btape.c:1489 +#: src/dird/ua_cmds.c:1380 #, c-format -msgid "Bad status from fsr. ERR=%s\n" +msgid "Using Catalog name=%s DB=%s\n" msgstr "" -#: src/stored/btape.c:1280 +#: src/dird/ua_cmds.c:1421 src/dird/ua_tree.c:622 src/stored/btape.c:2587 #, c-format -msgid "We should be in file 1. I am at file %d. %s\n" -msgstr "" - -#: src/stored/btape.c:1287 -msgid "Now forward spacing 2 files.\n" +msgid "" +" Command Description\n" +" ======= ===========\n" msgstr "" -#: src/stored/btape.c:1300 -msgid "Now forward spacing 4 files.\n" +#: src/dird/ua_cmds.c:1423 +#, c-format +msgid " %-10s %s\n" msgstr "" -#: src/stored/btape.c:1312 +#: src/dird/ua_cmds.c:1425 msgid "" -"The test worked this time. Please add:\n" "\n" -" Fast Forward Space File = no\n" +"When at a prompt, entering a period cancels the command.\n" "\n" -"to your Device resource for this drive.\n" -msgstr "" - -#: src/stored/btape.c:1318 -msgid "Now forward spacing 1 more file.\n" msgstr "" -#: src/stored/btape.c:1322 +#: src/dird/ua_cmds.c:1441 #, c-format -msgid "We should be in file 5. I am at file %d. %s\n" -msgstr "" - -#: src/stored/btape.c:1327 -msgid "" -"\n" -"=== End Forward space files test ===\n" -"\n" +msgid "%s Version: %s (%s)\n" msgstr "" -#: src/stored/btape.c:1331 -msgid "" -"\n" -"The forward space file test failed.\n" +#: src/dird/ua_cmds.c:1460 +msgid "Could not find a Catalog resource\n" msgstr "" -#: src/stored/btape.c:1333 -msgid "" -"You have Fast Forward Space File enabled.\n" -"I am turning it off then retrying the test.\n" +#: src/dird/ua_cmds.c:1463 +msgid "You must specify a \"use \" command before continuing.\n" msgstr "" -#: src/stored/btape.c:1339 -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_cmds.c:1467 +#, c-format +msgid "Using default Catalog name=%s DB=%s\n" msgstr "" -#: src/stored/btape.c:1371 -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_dotcmds.c:131 +msgid "The Director will segment fault.\n" msgstr "" -#: src/stored/btape.c:1379 -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_dotcmds.c:231 src/dird/ua_restore.c:740 +#: src/dird/ua_restore.c:778 src/dird/ua_restore.c:809 +#, c-format +msgid "Query failed: %s. ERR=%s\n" msgstr "" -#: src/stored/btape.c:1386 -msgid "" -"\n" -"\n" -"That appears *NOT* to have corrected the problem.\n" +#: src/dird/ua_input.c:82 +msgid "Enter slot" msgstr "" -#: src/stored/btape.c:1391 -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_input.c:86 src/dird/ua_input.c:92 +#, c-format +msgid "Expected a positive integer, got: %s\n" msgstr "" -#: src/stored/btape.c:1396 -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_input.c:120 src/dird/ua_run.c:862 src/dird/ua_select.c:54 +#: src/dird/ua_update.c:223 src/dird/ua_update.c:237 src/dird/ua_update.c:247 +#: src/dird/ua_update.c:261 src/dird/ua_update.c:551 +#: src/stored/parse_bsr.c:741 src/tools/dbcheck.c:1098 +msgid "yes" msgstr "" -#: src/stored/btape.c:1407 -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_input.c:124 src/dird/ua_select.c:57 src/dird/ua_update.c:225 +#: src/dird/ua_update.c:237 src/dird/ua_update.c:249 src/dird/ua_update.c:261 +#: src/dird/ua_update.c:551 src/stored/parse_bsr.c:741 +msgid "no" msgstr "" -#: src/stored/btape.c:1428 -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_input.c:127 +msgid "Invalid response. You must answer yes or no.\n" msgstr "" -#: src/stored/btape.c:1467 -#, c-format -msgid "Bad status from fsf. ERR=%s\n" +#: src/dird/ua_label.c:89 +msgid "Negative numbers not permitted\n" msgstr "" -#: src/stored/btape.c:1471 -msgid "Forward spaced 1 file.\n" +#: src/dird/ua_label.c:95 +msgid "Range end is not integer.\n" msgstr "" -#: src/stored/btape.c:1474 -#, c-format -msgid "Forward spaced %d files.\n" +#: src/dird/ua_label.c:100 +msgid "Range start is not an integer.\n" msgstr "" -#: src/stored/btape.c:1493 -msgid "Forward spaced 1 record.\n" +#: src/dird/ua_label.c:106 +msgid "Range end not bigger than start.\n" msgstr "" -#: src/stored/btape.c:1496 -#, c-format -msgid "Forward spaced %d records.\n" +#: src/dird/ua_label.c:112 +msgid "Input value is not an integer.\n" msgstr "" -#: src/stored/btape.c:1530 -#, c-format -msgid "Wrote one record of %d bytes.\n" +#: src/dird/ua_label.c:118 +msgid "Values must be be greater than zero.\n" msgstr "" -#: src/stored/btape.c:1532 -msgid "Wrote block to device.\n" +#: src/dird/ua_label.c:122 +msgid "Slot too large.\n" msgstr "" -#: src/stored/btape.c:1547 -msgid "Enter length to read: " +#: src/dird/ua_label.c:176 src/dird/ua_label.c:473 +msgid "No slots in changer to scan.\n" msgstr "" -#: src/stored/btape.c:1552 -msgid "Bad length entered, using default of 1024 bytes.\n" +#: src/dird/ua_label.c:188 src/dird/ua_label.c:484 +msgid "No Volumes found to label, or no barcodes.\n" msgstr "" -#: src/stored/btape.c:1561 +#: src/dird/ua_label.c:198 #, c-format -msgid "Read of %d bytes gives stat=%d. ERR=%s\n" +msgid "Slot %d greater than max %d ignored.\n" msgstr "" -#: src/stored/btape.c:1584 src/stored/btape.c:1633 +#: src/dird/ua_label.c:227 #, c-format -msgid "End of tape\n" +msgid "No VolName for Slot=%d InChanger set to zero.\n" msgstr "" -#: src/stored/btape.c:1589 +#: src/dird/ua_label.c:242 #, c-format -msgid "Starting scan at file %u\n" +msgid "Catalog record for Volume \"%s\" updated to reference slot %d.\n" msgstr "" -#: src/stored/btape.c:1594 src/stored/dev.c:1228 +#: src/dird/ua_label.c:246 #, c-format -msgid "read error on %s. ERR=%s.\n" +msgid "Catalog record for Volume \"%s\" is up to date.\n" msgstr "" -#: src/stored/btape.c:1596 +#: src/dird/ua_label.c:252 #, c-format -msgid "Bad status from read %d. ERR=%s\n" +msgid "Volume \"%s\" not found in catalog. Slot=%d InChanger set to zero.\n" msgstr "" -#: src/stored/btape.c:1599 src/stored/btape.c:1613 src/stored/btape.c:1677 -#: src/stored/btape.c:1689 src/stored/btape.c:1702 src/stored/btape.c:1718 +#: src/dird/ua_label.c:344 #, c-format -msgid "1 block of %d bytes in file %d\n" +msgid "" +"Volume \"%s\" has VolStatus %s. It must be Purged or Recycled before " +"relabeling.\n" msgstr "" -#: src/stored/btape.c:1602 src/stored/btape.c:1616 src/stored/btape.c:1680 -#: src/stored/btape.c:1692 src/stored/btape.c:1705 src/stored/btape.c:1721 -#, c-format -msgid "%d blocks of %d bytes in file %d\n" +#: src/dird/ua_label.c:360 +msgid "Enter new Volume name: " msgstr "" -#: src/stored/btape.c:1624 src/stored/btape.c:1696 +#: src/dird/ua_label.c:373 #, c-format -msgid "End of File mark.\n" +msgid "Media record for new Volume \"%s\" already exists.\n" msgstr "" -#: src/stored/btape.c:1645 src/stored/btape.c:1749 -#, c-format -msgid "Total files=%d, blocks=%d, bytes = %s\n" +#: src/dird/ua_label.c:388 +msgid "Enter slot (0 or Enter for none): " msgstr "" -#: src/stored/btape.c:1709 +#: src/dird/ua_label.c:413 #, c-format -msgid "Short block read.\n" +msgid "Delete of Volume \"%s\" failed. ERR=%s" msgstr "" -#: src/stored/btape.c:1712 +#: src/dird/ua_label.c:416 #, c-format -msgid "Error reading block. ERR=%s\n" +msgid "Old volume \"%s\" deleted from catalog.\n" msgstr "" -#: src/stored/btape.c:1736 +#: src/dird/ua_label.c:427 #, c-format -msgid "" -"Blk_block: %u dev_blk=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=%" -"s rlen=%d\n" +msgid "Requesting to mount %s ...\n" msgstr "" -#: src/stored/btape.c:1758 -#, c-format -msgid "Device status: %u. ERR=%s\n" +#: src/dird/ua_label.c:449 +msgid "Do not forget to mount the drive!!!\n" msgstr "" -#: src/stored/btape.c:1788 +#: src/dird/ua_label.c:489 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 3.2 GB. 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" +"The following Volumes will be labeled:\n" +"Slot Volume\n" +"==============\n" msgstr "" -#: src/stored/btape.c:1805 -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_label.c:498 src/stored/btape.c:606 +msgid "Do you want to continue? (y/n): " msgstr "" -#: src/stored/btape.c:1808 -msgid "Simple test (single tape) selected.\n" +#: src/dird/ua_label.c:519 +#, c-format +msgid "Media record for Slot %d Volume \"%s\" already exists.\n" msgstr "" -#: src/stored/btape.c:1811 -msgid "Multiple tape test selected.\n" +#: src/dird/ua_label.c:525 +#, c-format +msgid "Error setting InChanger: ERR=%s" msgstr "" -#: src/stored/btape.c:1827 -msgid "Rewind failed.\n" +#: src/dird/ua_label.c:548 +#, c-format +msgid "Maximum pool Volumes=%d reached.\n" msgstr "" -#: src/stored/btape.c:1830 -msgid "Write EOF failed.\n" +#: src/dird/ua_label.c:555 +#, c-format +msgid "Catalog record for cleaning tape \"%s\" successfully created.\n" msgstr "" -#: src/stored/btape.c:1857 -msgid "Wrote Start of Session label.\n" +#: src/dird/ua_label.c:562 +#, c-format +msgid "Catalog error on cleaning tape: %s" msgstr "" -#: src/stored/btape.c:1888 +#: src/dird/ua_label.c:598 #, c-format -msgid "%s Begin writing Bacula records to tape ...\n" +msgid "Illegal character \"%c\" in a volume name.\n" msgstr "" -#: src/stored/btape.c:1890 +#: src/dird/ua_label.c:643 #, c-format -msgid "%s Begin writing Bacula records to first tape ...\n" +msgid "Sending relabel command from \"%s\" to \"%s\" ...\n" msgstr "" -#: src/stored/btape.c:1931 +#: src/dird/ua_label.c:650 #, c-format -msgid "Wrote blk_block=%u, dev_blk_num=%u VolBytes=%s rate=%.1f KB/s\n" +msgid "Sending label command for Volume \"%s\" Slot %d ...\n" msgstr "" -#: src/stored/btape.c:1941 +#: src/dird/ua_label.c:682 #, c-format -msgid "%s Flush block, write EOF\n" +msgid "Catalog record for Volume \"%s\", Slot %d successfully created.\n" msgstr "" -#: src/stored/btape.c:1952 -msgid "Not OK\n" +#: src/dird/ua_label.c:695 +#, c-format +msgid "Label command failed for Volume %s.\n" msgstr "" -#: src/stored/btape.c:1980 -msgid "Set ok=false after write_block_to_device.\n" +#: src/dird/ua_label.c:705 +#, c-format +msgid "Connecting to Storage daemon %s at %s:%d ...\n" msgstr "" -#: src/stored/btape.c:1983 -msgid "Wrote End of Session label.\n" +#: src/dird/ua_label.c:733 +msgid "Could not open SD socket.\n" msgstr "" -#: src/stored/btape.c:2007 +#: src/dird/ua_label.c:739 #, c-format -msgid "Wrote state file last_block_num1=%d last_block_num2=%d\n" +msgid "readlabel %s Slot=%d drive=%d\n" msgstr "" -#: src/stored/btape.c:2011 +#: src/dird/ua_label.c:781 #, c-format -msgid "Could not create state file: %s ERR=%s\n" +msgid "autochanger list %s \n" msgstr "" -#: src/stored/btape.c:2019 +#: src/dird/ua_label.c:805 src/dird/ua_label.c:815 #, c-format -msgid "" -"\n" -"\n" -"%s Done filling tape at %d:%d. Now beginning re-read of tape ...\n" +msgid "Invalid Slot number: %s\n" msgstr "" -#: src/stored/btape.c:2023 +#: src/dird/ua_label.c:824 #, c-format -msgid "" -"\n" -"\n" -"%s Done filling tapes at %d:%d. Now beginning re-read of first tape ...\n" +msgid "Invalid Volume name: %s\n" msgstr "" -#: src/stored/btape.c:2062 -msgid "" -"\n" -"The state file level has changed. You must redo\n" -"the fill command.\n" +#: src/dird/ua_label.c:893 +#, c-format +msgid "autochanger slots %s\n" msgstr "" -#: src/stored/btape.c:2068 +#: src/dird/ua_label.c:903 #, c-format -msgid "" -"\n" -"Could not find the state file: %s ERR=%s\n" -"You must redo the fill command.\n" +msgid "Device \"%s\" has %d slots.\n" msgstr "" -#: src/stored/btape.c:2110 -msgid "Mount first tape. Press enter when ready: " +#: src/dird/ua_label.c:925 +#, c-format +msgid "autochanger drives %s\n" msgstr "" -#: src/stored/btape.c:2129 -msgid "Rewinding.\n" +#: src/dird/ua_label.c:952 +#, c-format +msgid "Pool \"%s\" resource not found!\n" msgstr "" -#: src/stored/btape.c:2134 -#, c-format -msgid "Reading the first 10000 records from %u:%u.\n" +#: src/dird/ua_output.c:64 src/dird/ua_output.c:88 +msgid "ON or OFF keyword missing.\n" msgstr "" -#: src/stored/btape.c:2138 src/stored/btape.c:2205 -#, c-format -msgid "Reposition from %u:%u to %u:%u\n" +#: src/dird/ua_output.c:176 +msgid "Keywords for the show command are:\n" msgstr "" -#: src/stored/btape.c:2141 src/stored/btape.c:2192 src/stored/btape.c:2208 +#: src/dird/ua_output.c:182 #, c-format -msgid "Reposition error. ERR=%s\n" +msgid "%s resource %s not found.\n" msgstr "" -#: src/stored/btape.c:2144 +#: src/dird/ua_output.c:185 #, c-format -msgid "Reading block %u.\n" +msgid "Resource %s not found\n" msgstr "" -#: src/stored/btape.c:2146 src/stored/btape.c:2197 src/stored/btape.c:2213 +#: src/dird/ua_output.c:251 +msgid "Hey! DB is NULL\n" +msgstr "" + +#: src/dird/ua_output.c:358 #, c-format -msgid "Error reading block: ERR=%s\n" +msgid "Jobid %d used %d Volume(s): %s\n" msgstr "" -#: src/stored/btape.c:2151 -msgid "" -"\n" -"The last block on the tape matches. Test succeeded.\n" -"\n" +#: src/dird/ua_output.c:376 +msgid "No Pool specified.\n" msgstr "" -#: src/stored/btape.c:2153 -msgid "" -"\n" -"The last block of the first tape matches.\n" -"\n" +#: src/dird/ua_output.c:387 src/dird/ua_select.c:458 +#, c-format +msgid "Error obtaining pool ids. ERR=%s\n" msgstr "" -#: src/stored/btape.c:2178 -msgid "Mount second tape. Press enter when ready: " +#: src/dird/ua_output.c:397 +#, c-format +msgid "Pool: %s\n" +msgstr "" + +#: src/dird/ua_output.c:413 src/dird/ua_status.c:452 +msgid "Ignoring illegal value for days.\n" msgstr "" -#: src/stored/btape.c:2190 +#: src/dird/ua_output.c:422 #, c-format -msgid "Reposition from %u:%u to 0:1\n" +msgid "Unknown list keyword: %s\n" msgstr "" -#: src/stored/btape.c:2195 src/stored/btape.c:2211 +#: src/dird/ua_output.c:448 #, c-format -msgid "Reading block %d.\n" +msgid "%s is not a job name.\n" msgstr "" -#: src/stored/btape.c:2201 -msgid "" -"\n" -"The first block on the second tape matches.\n" -"\n" +#: src/dird/ua_output.c:469 +#, c-format +msgid "Could not find next Volume for Job %s (%s, %s).\n" msgstr "" -#: src/stored/btape.c:2217 -msgid "" -"\n" -"The last block on the second tape matches. Test succeeded.\n" -"\n" +#: src/dird/ua_output.c:473 +#, c-format +msgid "The next Volume to be used by Job \"%s\" (%s, %s) will be %s\n" msgstr "" -#: src/stored/btape.c:2232 +#: src/dird/ua_output.c:483 #, c-format -msgid "10000 records read now at %d:%d\n" +msgid "Could not find next Volume for Job %s.\n" msgstr "" -#: src/stored/btape.c:2255 src/stored/btape.c:2266 src/stored/btape.c:2314 -msgid "Last block written" +#: src/dird/ua_output.c:673 +msgid "You have no messages.\n" msgstr "" -#: src/stored/btape.c:2257 src/stored/btape.c:2267 -msgid "Block read back" +#: src/dird/ua_prune.c:173 +msgid "Choose item to prune" +msgstr "" + +#: src/dird/ua_prune.c:254 +msgid "No Files found to prune.\n" msgstr "" -#: src/stored/btape.c:2258 +#: src/dird/ua_prune.c:286 #, c-format -msgid "" -"\n" -"\n" -"The blocks differ at byte %u\n" +msgid "Pruned Files from %s Jobs for client %s from catalog.\n" msgstr "" -#: src/stored/btape.c:2259 -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_prune.c:392 +msgid "No Jobs found to prune.\n" msgstr "" -#: src/stored/btape.c:2298 +#: src/dird/ua_prune.c:453 #, c-format -msgid "Last block at: %u:%u this_dev_block_num=%d\n" +msgid "Pruned %d %s for client %s from catalog.\n" msgstr "" -#: src/stored/btape.c:2312 -#, c-format -msgid "Block not written: FileIndex=%u blk_block=%u Size=%u\n" +#: src/dird/ua_prune.c:454 +msgid "Jobs" msgstr "" -#: src/stored/btape.c:2316 -msgid "Block not written" +#: src/dird/ua_prune.c:501 +#, c-format +msgid "There are no Jobs associated with Volume \"%s\". Prune not needed.\n" msgstr "" -#: src/stored/btape.c:2331 +#: src/dird/ua_prune.c:508 src/dird/ua_purge.c:482 #, c-format -msgid "End of tape %d:%d. VolumeCapacity=%s. Write rate = %.1f KB/s\n" +msgid "There are no Jobs associated with Volume \"%s\". Marking it purged.\n" msgstr "" -#: src/stored/btape.c:2340 src/stored/bcopy.c:235 src/stored/bcopy.c:242 -#: src/stored/bcopy.c:265 +#: src/dird/ua_prune.c:566 #, c-format -msgid "Cannot fixup device error. %s\n" +msgid "Pruned %d %s on Volume \"%s\" from catalog.\n" msgstr "" -#: src/stored/btape.c:2381 -msgid "Test writing blocks of 64512 bytes to tape.\n" +#: src/dird/ua_purge.c:177 +msgid "" +"\n" +"This command is 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" +"for retention periods. Normally you should use the\n" +"PRUNE command, which respects retention periods.\n" msgstr "" -#: src/stored/btape.c:2383 -msgid "How many blocks do you want to write? (1000): " +#: src/dird/ua_purge.c:237 +msgid "Choose item to purge" msgstr "" -#: src/stored/btape.c:2398 +#: src/dird/ua_purge.c:282 #, c-format -msgid "Begin writing %d Bacula blocks to tape ...\n" +msgid "Begin purging files for Client \"%s\"\n" msgstr "" -#: src/stored/btape.c:2450 +#: src/dird/ua_purge.c:294 #, c-format -msgid "Begin writing raw blocks of %u bytes.\n" +msgid "No Files found for client %s to purge from %s catalog.\n" msgstr "" -#: src/stored/btape.c:2470 +#: src/dird/ua_purge.c:325 #, c-format -msgid "Write failed at block %u. stat=%d ERR=%s\n" +msgid "%d Files for client \"%s\" purged from %s catalog.\n" msgstr "" -#: src/stored/btape.c:2500 +#: src/dird/ua_purge.c:362 #, c-format -msgid "Begin writing Bacula blocks of %u bytes.\n" +msgid "Begin purging jobs from Client \"%s\"\n" msgstr "" -#: src/stored/btape.c:2519 +#: src/dird/ua_purge.c:373 #, c-format -msgid "Write failed at block %u.\n" +msgid "No Jobs found for client %s to purge from %s catalog.\n" msgstr "" -#: src/stored/btape.c:2526 -msgid "test autochanger" +#: src/dird/ua_purge.c:413 +#, c-format +msgid "%d Jobs for client %s purged from %s catalog.\n" msgstr "" -#: src/stored/btape.c:2527 -msgid "backspace file" +#: src/dird/ua_purge.c:464 +#, c-format +msgid "" +"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/stored/btape.c:2528 -msgid "backspace record" +#: src/dird/ua_purge.c:535 +#, c-format +msgid "%d File%s on Volume \"%s\" purged from catalog.\n" msgstr "" -#: src/stored/btape.c:2529 -msgid "fill tape using Bacula writes" +#: src/dird/ua_purge.c:549 +#, c-format +msgid "" +"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" msgstr "" -#: src/stored/btape.c:2530 -msgid "list device capabilities" +#: src/dird/ua_purge.c:581 +#, c-format +msgid "Cannot purge Volume with VolStatus=%s\n" msgstr "" -#: src/stored/btape.c:2531 -msgid "clear tape errors" +#: src/dird/ua_query.c:59 src/findlib/create_file.c:282 +#: src/findlib/create_file.c:339 +#, c-format +msgid "Could not open %s: ERR=%s\n" msgstr "" -#: src/stored/btape.c:2532 -msgid "go to end of Bacula data for append" +#: src/dird/ua_query.c:64 +msgid "Available queries:\n" msgstr "" -#: src/stored/btape.c:2533 -msgid "go to the physical end of medium" +#: src/dird/ua_query.c:71 +msgid "Choose a query" msgstr "" -#: src/stored/btape.c:2534 -msgid "fill tape, write onto second volume" +#: src/dird/ua_query.c:85 +msgid "Could not find query.\n" msgstr "" -#: src/stored/btape.c:2535 -msgid "read filled tape" +#: src/dird/ua_query.c:103 +msgid "Too many prompts in query, max is 9.\n" msgstr "" -#: src/stored/btape.c:2536 -msgid "forward space a file" +#: src/dird/ua_query.c:206 +#, c-format +msgid "Warning prompt %d missing.\n" msgstr "" -#: src/stored/btape.c:2537 -msgid "forward space a record" +#: src/dird/ua_query.c:252 +msgid "" +"Entering SQL query mode.\n" +"Terminate each query with a semicolon.\n" +"Terminate query mode with a blank line.\n" msgstr "" -#: src/stored/btape.c:2538 src/dird/ua_cmds.c:101 -msgid "print this command" +#: src/dird/ua_query.c:255 src/dird/ua_query.c:272 +msgid "Enter SQL query: " msgstr "" -#: src/stored/btape.c:2539 -msgid "write a Bacula label to the tape" +#: src/dird/ua_query.c:274 +msgid "Add to SQL query: " msgstr "" -#: src/stored/btape.c:2540 -msgid "load a tape" +#: src/dird/ua_query.c:278 +msgid "End query mode.\n" msgstr "" -#: src/stored/btape.c:2541 -msgid "quit btape" -msgstr "" +#: src/dird/ua_restore.c:115 +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/btape.c:2542 -msgid "use write() to fill tape" +#: src/dird/ua_restore.c:131 +msgid "Restore not done.\n" msgstr "" -#: src/stored/btape.c:2543 -msgid "read and print the Bacula tape label" +#: src/dird/ua_restore.c:142 +msgid "Unable to construct a valid BSR. Cannot continue.\n" msgstr "" -#: src/stored/btape.c:2544 -msgid "test record handling functions" +#: src/dird/ua_restore.c:146 src/dird/ua_restore.c:160 +msgid "No files selected to be restored.\n" msgstr "" -#: src/stored/btape.c:2545 -msgid "rewind the tape" +#: src/dird/ua_restore.c:154 +msgid "" +"\n" +"1 file selected to be restored.\n" +"\n" msgstr "" -#: src/stored/btape.c:2546 -msgid "read() tape block by block to EOT and report" +#: src/dird/ua_restore.c:157 +#, c-format +msgid "" +"\n" +"%u files selected to be restored.\n" +"\n" msgstr "" -#: src/stored/btape.c:2547 -msgid "Bacula read block by block to EOT and report" +#: src/dird/ua_restore.c:175 +msgid "No Restore Job resource found!\n" msgstr "" -#: src/stored/btape.c:2548 -msgid "print tape status" +#: src/dird/ua_restore.c:237 +#, c-format +msgid "Missing value for keyword: %s\n" msgstr "" -#: src/stored/btape.c:2549 -msgid "General test Bacula tape functions" +#: src/dird/ua_restore.c:286 +msgid "List last 20 Jobs run" msgstr "" -#: src/stored/btape.c:2550 -msgid "write an EOF on the tape" +#: src/dird/ua_restore.c:287 +msgid "List Jobs where a given File is saved" msgstr "" -#: src/stored/btape.c:2551 -msgid "write a single Bacula block" +#: src/dird/ua_restore.c:288 +msgid "Enter list of comma separated JobIds to select" msgstr "" -#: src/stored/btape.c:2552 -msgid "read a single record" +#: src/dird/ua_restore.c:289 +msgid "Enter SQL list command" msgstr "" -#: src/stored/btape.c:2553 -msgid "quick fill command" +#: src/dird/ua_restore.c:290 +msgid "Select the most recent backup for a client" msgstr "" -#: src/stored/btape.c:2574 -#, c-format -msgid "%s is an illegal command\n" +#: src/dird/ua_restore.c:291 +msgid "Select backup for a client before a specified time" msgstr "" -#: src/stored/btape.c:2584 -#, c-format -msgid "Interactive commands:\n" +#: src/dird/ua_restore.c:292 +msgid "Enter a list of files to restore" msgstr "" -#: src/stored/btape.c:2585 src/dird/ua_tree.c:622 src/dird/ua_cmds.c:1423 -#, c-format -msgid "" -" Command Description\n" -" ======= ===========\n" +#: src/dird/ua_restore.c:293 +msgid "Enter a list of files to restore before a specified time" msgstr "" -#: src/stored/btape.c:2594 -#, c-format -msgid "" -"Copyright (C) 2000-2005 Kern Sibbald.\n" -"\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 nn\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_restore.c:294 +msgid "Find the JobIds of the most recent backup for a client" msgstr "" -#: src/stored/btape.c:2681 -#, c-format -msgid "Mount second Volume on device %s and press return when ready: " +#: src/dird/ua_restore.c:295 +msgid "Find the JobIds for a backup for a client before a specified time" msgstr "" -#: src/stored/btape.c:2708 -#, c-format -msgid "Mount blank Volume on device %s and press return when ready: " +#: src/dird/ua_restore.c:296 +msgid "Enter a list of directories to restore for found JobIds" msgstr "" -#: src/stored/btape.c:2726 -#, c-format -msgid "End of Volume \"%s\"\n" +#: src/dird/ua_restore.c:297 src/dird/ua_status.c:713 src/filed/status.c:251 +#: src/stored/status.c:412 src/wx-console/wxbconfigpanel.cpp:191 +msgid "Cancel" msgstr "" -#: src/stored/btape.c:2738 +#: src/dird/ua_restore.c:333 #, c-format -msgid "Read block=%u, VolBytes=%s rate=%.1f KB/s\n" +msgid "Unknown keyword: %s\n" msgstr "" -#: src/stored/btape.c:2752 src/stored/mount.c:540 +#: src/dird/ua_restore.c:357 #, c-format -msgid "Cannot open Dev=%s, Vol=%s\n" +msgid "Improper date format: %s\n" msgstr "" -#: src/stored/autochanger.c:53 +#: src/dird/ua_restore.c:397 src/dird/ua_select.c:590 #, c-format -msgid "No Changer Name given for device %s. Cannot continue.\n" +msgid "Error: Pool resource \"%s\" does not exist.\n" msgstr "" -#: src/stored/autochanger.c:59 +#: src/dird/ua_restore.c:402 #, c-format -msgid "No Changer Command given for device %s. Cannot continue.\n" +msgid "Error: Pool resource \"%s\" access not allowed.\n" msgstr "" -#: src/stored/autochanger.c:72 -#, c-format +#: src/dird/ua_restore.c:421 msgid "" -"Media Type not the same for all devices in changer %s. Cannot continue.\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" +"\n" msgstr "" -#: src/stored/autochanger.c:153 -#, c-format -msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" +#: src/dird/ua_restore.c:433 +msgid "To select the JobIds, you have the following choices:\n" msgstr "" -#: src/stored/autochanger.c:162 -#, c-format -msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" +#: src/dird/ua_restore.c:438 +msgid "Select item: " msgstr "" -#: src/stored/autochanger.c:168 -#, c-format -msgid "3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" +#: src/dird/ua_restore.c:452 +msgid "Enter Filename (no path):" msgstr "" -#: src/stored/autochanger.c:209 -msgid "3992 Missing Changer command.\n" +#: src/dird/ua_restore.c:467 src/dird/ua_restore.c:567 +msgid "Enter JobId(s), comma separated, to restore: " msgstr "" -#: src/stored/autochanger.c:219 -#, c-format -msgid "3301 Issuing autochanger \"loaded drive %d\" command.\n" +#: src/dird/ua_restore.c:473 +msgid "Enter SQL list command: " msgstr "" -#: src/stored/autochanger.c:229 -#, c-format -msgid "3302 Autochanger \"loaded drive %d\", result is Slot %d.\n" +#: src/dird/ua_restore.c:501 src/dird/ua_restore.c:526 +msgid "" +"Enter file names with paths, or < to enter a filename\n" +"containg a list of file names with paths, and terminate\n" +"them with a blank line.\n" msgstr "" -#: src/stored/autochanger.c:233 -#, c-format -msgid "3302 Autochanger \"loaded drive %d\", result: nothing loaded.\n" +#: src/dird/ua_restore.c:505 src/dird/ua_restore.c:530 +msgid "Enter full filename: " msgstr "" -#: src/stored/autochanger.c:240 +#: src/dird/ua_restore.c:565 #, c-format -msgid "3991 Bad autochanger \"loaded drive %d\" command: ERR=%s.\n" +msgid "You have already seleted the following JobIds: %s\n" msgstr "" -#: src/stored/autochanger.c:299 src/stored/autochanger.c:381 -#, c-format -msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" +#: src/dird/ua_restore.c:580 +msgid "" +"Enter full directory names or start the name\n" +"with a < to indicate it is a filename containg a list\n" +"of directories and terminate them with a blank line.\n" msgstr "" -#: src/stored/autochanger.c:312 src/stored/autochanger.c:403 -#, c-format -msgid "3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" +#: src/dird/ua_restore.c:584 +msgid "Enter directory name: " msgstr "" -#: src/stored/autochanger.c:370 -#, c-format -msgid "Volume \"%s\" is in use by device %s\n" +#: src/dird/ua_restore.c:609 +msgid "No Jobs selected.\n" msgstr "" -#: src/stored/autochanger.c:441 +#: src/dird/ua_restore.c:613 #, c-format -msgid "3993 Device %s not an autochanger device.\n" +msgid "You have selected the following JobIds: %s\n" msgstr "" -#: src/stored/autochanger.c:466 +#: src/dird/ua_restore.c:616 #, c-format -msgid "3306 Issuing autochanger \"%s\" command.\n" +msgid "You have selected the following JobId: %s\n" msgstr "" -#: src/stored/autochanger.c:469 -msgid "3996 Open bpipe failed.\n" +#: src/dird/ua_restore.c:624 +msgid "Invalid JobId in list.\n" msgstr "" -#: src/stored/autochanger.c:496 +#: src/dird/ua_restore.c:637 #, c-format -msgid "Autochanger error: ERR=%s\n" +msgid "Unable to get Job record for JobId=%s: ERR=%s\n" msgstr "" -#: src/stored/dvd.c:155 src/stored/dev.c:1822 +#: src/dird/ua_restore.c:642 #, c-format -msgid "Device %s cannot be mounted. ERR=%s\n" +msgid "No authorization. Job \"%s\" not selected.\n" msgstr "" -#: src/stored/dvd.c:276 -#, c-format -msgid "Cannot run free space command (%s)\n" +#: src/dird/ua_restore.c:656 +msgid "" +"The restored files will the most current backup\n" +"BEFORE the date you specify below.\n" +"\n" msgstr "" -#: src/stored/dvd.c:379 -#, c-format -msgid "Error while writing current part to the DVD: %s" +#: src/dird/ua_restore.c:659 +msgid "Enter date as YYYY-MM-DD HH:MM:SS :" msgstr "" -#: src/stored/dvd.c:399 -#, c-format -msgid "Remaining free space %s on %s\n" +#: src/dird/ua_restore.c:665 +msgid "Improper date format.\n" msgstr "" -#: src/stored/dvd.c:469 +#: src/dird/ua_restore.c:686 #, c-format -msgid "Next Volume part already exists on DVD. Cannot continue: %s\n" +msgid "Cannot open file %s: ERR=%s\n" msgstr "" -#: src/stored/dvd.c:486 +#: src/dird/ua_restore.c:694 src/dird/ua_restore.c:698 #, c-format -msgid "open_next_part can't unlink existing part %s, ERR=%s\n" +msgid "Error occurred on line %d of %s\n" msgstr "" -#: src/stored/dvd.c:705 +#: src/dird/ua_restore.c:744 src/dird/ua_restore.c:782 #, c-format -msgid "Unable to write part %s: ERR=%s\n" +msgid "No database record found for: %s\n" msgstr "" -#: src/stored/dvd.c:739 src/stored/dev.c:1734 -#, c-format -msgid "Unable to truncate device %s. ERR=%s\n" +#: src/dird/ua_restore.c:769 +msgid "No JobId specified cannot continue.\n" msgstr "" -#: src/stored/fd_cmds.c:334 src/filed/job.c:991 +#: src/dird/ua_restore.c:813 #, c-format -msgid "Could not create bootstrap file %s: ERR=%s\n" +msgid "No table found: %s\n" msgstr "" -#: src/stored/fd_cmds.c:345 -msgid "Error parsing bootstrap file.\n" +#: src/dird/ua_restore.c:918 +#, c-format +msgid "" +"\n" +"Building directory tree for JobId %s ... " msgstr "" -#: src/stored/mount.c:223 src/stored/mount.c:445 -#, c-format -msgid "Volume \"%s\" not on device %s.\n" +#: src/dird/ua_restore.c:937 +msgid "" +"\n" +"There were no files inserted into the tree, so file selection\n" +"is not possible.Most likely your retention policy pruned the files\n" msgstr "" -#: src/stored/mount.c:255 -#, c-format +#: src/dird/ua_restore.c:939 msgid "" -"Director wanted Volume \"%s\".\n" -" Current Volume \"%s\" not acceptable because:\n" -" %s" +"\n" +"Do you want to restore all the files? (yes|no): " msgstr "" -#: src/stored/mount.c:334 +#: src/dird/ua_restore.c:955 #, c-format -msgid "Volume \"%s\" previously written, moving to end of data.\n" +msgid "" +"\n" +"1 Job, %s files inserted into the tree and marked for extraction.\n" msgstr "" -#: src/stored/mount.c:337 +#: src/dird/ua_restore.c:959 #, c-format -msgid "Unable to position to end of data on device %s: ERR=%s\n" +msgid "" +"\n" +"1 Job, %s files inserted into the tree.\n" msgstr "" -#: src/stored/mount.c:349 +#: src/dird/ua_restore.c:965 #, c-format -msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" +msgid "" +"\n" +"%d Jobs, %s files inserted into the tree and marked for extraction.\n" msgstr "" -#: src/stored/mount.c:352 +#: src/dird/ua_restore.c:969 #, c-format msgid "" -"I cannot write on Volume \"%s\" because:\n" -"The number of files mismatch! Volume=%u Catalog=%u\n" +"\n" +"%d Jobs, %s files inserted into the tree.\n" msgstr "" -#: src/stored/mount.c:380 +#: src/dird/ua_restore.c:1046 #, c-format -msgid "Ready to append to end of Volume \"%s\" at file address=%u.\n" +msgid "Error getting FileSet \"%s\": ERR=%s\n" msgstr "" -#: src/stored/mount.c:384 -#, c-format -msgid "" -"I cannot write on Volume \"%s\" because:\n" -"The EOD file address is wrong: Volume file address=%u != Catalog Endblock=%u" -"(+1)\n" -"You probably removed DVD last part in spool directory.\n" +#: src/dird/ua_restore.c:1054 src/dird/ua_select.c:167 +msgid "The defined FileSet resources are:\n" msgstr "" -#: src/stored/mount.c:435 -#, c-format -msgid "Labeled new Volume \"%s\" on device %s.\n" +#: src/dird/ua_restore.c:1058 src/dird/ua_run.c:644 src/dird/ua_select.c:175 +msgid "FileSet" msgstr "" -#: src/stored/mount.c:440 -#, c-format -msgid "Warning device %s not configured to autolabel Volumes.\n" +#: src/dird/ua_restore.c:1058 src/dird/ua_select.c:175 +msgid "Select FileSet resource" msgstr "" -#: src/stored/mount.c:460 +#: src/dird/ua_restore.c:1065 #, c-format -msgid "Marking Volume \"%s\" in Error in Catalog.\n" +msgid "Error getting FileSet record: %s\n" msgstr "" -#: src/stored/mount.c:476 -#, c-format +#: src/dird/ua_restore.c:1066 msgid "" -"Autochanger Volume \"%s\" not found in slot %d.\n" -" Setting InChanger to zero in catalog.\n" -msgstr "" - -#: src/stored/mount.c:495 -msgid "Hey!!!!! WroteVol non-zero !!!!!\n" +"This probably means you modified the FileSet.\n" +"Continuing anyway.\n" msgstr "" -#: src/stored/label.c:81 src/stored/label.c:122 src/stored/label.c:210 +#: src/dird/ua_restore.c:1081 #, c-format -msgid "Wrong Volume mounted on device %s: Wanted %s have %s\n" +msgid "Pool \"%s\" not found, using any pool.\n" msgstr "" -#: src/stored/label.c:88 src/stored/label.c:125 src/stored/label.c:197 +#: src/dird/ua_restore.c:1107 src/dird/ua_restore.c:1123 #, c-format -msgid "Too many tries: %s" +msgid "No Full backup before %s found.\n" msgstr "" -#: src/stored/label.c:104 -#, c-format -msgid "Couldn't rewind device %s: ERR=%s\n" +#: src/dird/ua_restore.c:1146 +msgid "No jobs found.\n" msgstr "" -#: src/stored/label.c:142 -#, c-format +#: src/dird/ua_restore.c:1312 msgid "" -"Requested Volume \"%s\" on %s is not a Bacula labeled Volume, because: ERR=%s" +"Warning, the JobIds that you selected refer to more than one MediaType.\n" +"Restore is not possible. The MediaTypes used are:\n" msgstr "" -#: src/stored/label.c:147 -msgid "Could not read Volume label from block.\n" +#: src/dird/ua_restore.c:1320 +msgid "No MediaType found for your JobIds.\n" msgstr "" -#: src/stored/label.c:150 +#: src/dird/ua_restore.c:1352 #, c-format -msgid "Could not unserialize Volume label: ERR=%s\n" +msgid "Warning default storage overridden by %s on command line.\n" msgstr "" -#: src/stored/label.c:155 +#: src/dird/ua_restore.c:1363 #, c-format -msgid "Volume Header Id bad: %s\n" +msgid "" +"\n" +"Warning. Unable to find Storage resource for\n" +"MediaType \"%s\", needed by the Jobs you selected.\n" +"You will be allowed to select a Storage device later.\n" msgstr "" -#: src/stored/label.c:182 +#: src/dird/ua_run.c:112 #, c-format -msgid "Volume on %s has wrong Bacula version. Wanted %d got %d\n" +msgid "Value missing for keyword %s\n" msgstr "" -#: src/stored/label.c:193 -#, c-format -msgid "Volume on %s has bad Bacula label type: %x\n" +#: src/dird/ua_run.c:119 +msgid "Job name specified twice.\n" msgstr "" -#: src/stored/label.c:274 -#, c-format -msgid "Cannot write Volume label to block for device %s\n" +#: src/dird/ua_run.c:127 +msgid "JobId specified twice.\n" msgstr "" -#: src/stored/label.c:403 -#, c-format -msgid "Rewind error on device %s: ERR=%s\n" +#: src/dird/ua_run.c:136 +msgid "Client specified twice.\n" msgstr "" -#: src/stored/label.c:408 -#, c-format -msgid "Truncate error on device %s: ERR=%s\n" +#: src/dird/ua_run.c:144 +msgid "FileSet specified twice.\n" msgstr "" -#: src/stored/label.c:430 -#, c-format -msgid "Unable to write device %s: ERR=%s\n" +#: src/dird/ua_run.c:152 +msgid "Level specified twice.\n" msgstr "" -#: src/stored/label.c:458 -#, c-format -msgid "Recycled volume \"%s\" on device %s, all previous data lost.\n" +#: src/dird/ua_run.c:161 +msgid "Storage specified twice.\n" msgstr "" -#: src/stored/label.c:461 -#, c-format -msgid "Wrote label to prelabeled Volume \"%s\" on device %s\n" +#: src/dird/ua_run.c:169 +msgid "Pool specified twice.\n" msgstr "" -#: src/stored/label.c:660 -#, c-format -msgid "Bad session label = %d\n" +#: src/dird/ua_run.c:177 +msgid "Where specified twice.\n" msgstr "" -#: src/stored/label.c:678 src/stored/label.c:685 -#, c-format -msgid "Error writing Session label to %s: %s\n" +#: src/dird/ua_run.c:185 +msgid "Bootstrap specified twice.\n" msgstr "" -#: src/stored/label.c:720 -#, c-format -msgid "Expecting Volume Label, got FI=%s Stream=%s len=%d\n" +#: src/dird/ua_run.c:193 +msgid "Replace specified twice.\n" msgstr "" -#: src/stored/label.c:847 -#, c-format -msgid "Unknown %d" +#: src/dird/ua_run.c:201 +msgid "When specified twice.\n" msgstr "" -#: src/stored/label.c:851 -#, 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/dird/ua_run.c:209 +msgid "Priority specified twice.\n" msgstr "" -#: src/stored/label.c:873 -#, c-format -msgid "Date label written: %s\n" +#: src/dird/ua_run.c:214 +msgid "Priority must be positive nonzero setting it to 10.\n" msgstr "" -#: src/stored/label.c:879 -#, c-format -msgid "Date label written: %04d-%02d-%02d at %02d:%02d\n" +#: src/dird/ua_run.c:224 +msgid "Verify Job specified twice.\n" msgstr "" -#: src/stored/label.c:899 +#: src/dird/ua_run.c:268 #, 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 "Invalid keyword: %s\n" msgstr "" -#: src/stored/label.c:912 +#: src/dird/ua_run.c:280 #, c-format -msgid "" -"Job (unique name) : %s\n" -"FileSet : %s\n" -"JobType : %c\n" -"JobLevel : %c\n" +msgid "Catalog \"%s\" not found\n" msgstr "" -#: src/stored/label.c:921 +#: src/dird/ua_run.c:291 #, 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 "Job \"%s\" not found\n" msgstr "" -#: src/stored/label.c:942 -#, c-format -msgid "Date written : %s\n" +#: src/dird/ua_run.c:298 +msgid "A job name must be specified.\n" msgstr "" -#: src/stored/label.c:947 +#: src/dird/ua_run.c:304 #, c-format -msgid "Date written : %04d-%02d-%02d at %02d:%02d\n" -msgstr "" - -#: src/stored/label.c:966 -msgid "Fresh Volume" +msgid "No authorization. Job \"%s\".\n" msgstr "" -#: src/stored/label.c:969 -msgid "Volume" +#: src/dird/ua_run.c:313 +#, c-format +msgid "Storage \"%s\" not found.\n" msgstr "" -#: src/stored/label.c:978 src/stored/read_record.c:341 -msgid "End of Media" +#: src/dird/ua_run.c:323 +#, c-format +msgid "No authorization. Storage \"%s\".\n" msgstr "" -#: src/stored/label.c:981 -msgid "End of Tape" +#: src/dird/ua_run.c:333 +#, c-format +msgid "Pool \"%s\" not found.\n" msgstr "" -#: src/stored/label.c:1001 src/stored/label.c:1009 src/stored/label.c:1042 +#: src/dird/ua_run.c:343 #, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n" +msgid "No authorization. Pool \"%s\".\n" msgstr "" -#: src/stored/label.c:1006 -msgid "End of physical tape.\n" +#: src/dird/ua_run.c:363 +#, c-format +msgid "No authorization. Client \"%s\".\n" msgstr "" -#: src/stored/label.c:1021 src/stored/label.c:1030 +#: src/dird/ua_run.c:372 #, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d\n" +msgid "FileSet \"%s\" not found.\n" msgstr "" -#: src/stored/label.c:1023 +#: src/dird/ua_run.c:381 #, c-format -msgid " Job=%s Date=%s Level=%c Type=%c\n" +msgid "No authorization. FileSet \"%s\".\n" msgstr "" -#: src/stored/label.c:1032 +#: src/dird/ua_run.c:389 #, c-format -msgid " Date=%s Level=%c Type=%c Files=%s Bytes=%s Errors=%d Status=%c\n" +msgid "Verify Job \"%s\" not found.\n" msgstr "" -#: src/stored/butil.c:46 -msgid "Nohdr," +#: src/dird/ua_run.c:422 src/dird/ua_run.c:764 +msgid "Invalid time, using current time.\n" msgstr "" -#: src/stored/butil.c:49 -msgid "partial," +#: src/dird/ua_run.c:442 +#, c-format +msgid "Invalid replace option: %s\n" msgstr "" -#: src/stored/butil.c:52 -msgid "empty," +#: src/dird/ua_run.c:500 +#, c-format +msgid "" +"Run %s job\n" +"JobName: %s\n" +"FileSet: %s\n" +"Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/stored/butil.c:55 -msgid "Nomatch," +#: src/dird/ua_run.c:507 src/lib/util.c:295 +msgid "Admin" msgstr "" -#: src/stored/butil.c:58 -msgid "cont," +#: src/dird/ua_run.c:519 +#, c-format +msgid "" +"Run %s job\n" +"JobName: %s\n" +"FileSet: %s\n" +"Level: %s\n" +"Client: %s\n" +"Storage: %s\n" +"Pool: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/stored/butil.c:131 -msgid "Volume name or names is too long. Please use a .bsr file.\n" +#: src/dird/ua_run.c:528 src/lib/util.c:286 +msgid "Backup" msgstr "" -#: src/stored/butil.c:151 +#: src/dird/ua_run.c:544 #, c-format -msgid "Cannot find device \"%s\" in config file %s.\n" +msgid "" +"Run %s job\n" +"JobName: %s\n" +"FileSet: %s\n" +"Level: %s\n" +"Client: %s\n" +"Storage: %s\n" +"Pool: %s\n" +"Verify Job: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/stored/butil.c:158 -#, c-format -msgid "Cannot init device %s\n" +#: src/dird/ua_run.c:554 src/lib/util.c:289 +msgid "Verify" msgstr "" -#: src/stored/butil.c:179 -#, c-format -msgid "Cannot open %s\n" +#: src/dird/ua_run.c:571 +msgid "Please enter a JobId for restore: " msgstr "" -#: src/stored/butil.c:262 +#: src/dird/ua_run.c:580 #, c-format -msgid "Could not find device \"%s\" in config file %s.\n" +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"Where: %s\n" +"Replace: %s\n" +"FileSet: %s\n" +"Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/stored/butil.c:267 +#: src/dird/ua_run.c:602 #, c-format -msgid "Using device: \"%s\" for reading.\n" +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"Where: %s\n" +"Replace: %s\n" +"Client: %s\n" +"Storage: %s\n" +"JobId: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/stored/butil.c:270 +#: src/dird/ua_run.c:626 #, c-format -msgid "Using device: \"%s\" for writing.\n" +msgid "Unknown Job Type=%d\n" msgstr "" -#: src/stored/butil.c:286 -msgid "Unexpected End of Data\n" +#: src/dird/ua_run.c:631 +msgid "OK to run? (yes/mod/no): " msgstr "" -#: src/stored/butil.c:288 -msgid "Unexpected End of Tape\n" +#: src/dird/ua_run.c:637 src/dird/ua_select.c:44 +msgid "mod" msgstr "" -#: src/stored/butil.c:290 -msgid "Unexpected End of File\n" +#: src/dird/ua_run.c:640 src/dird/ua_update.c:464 +msgid "Parameters to modify:\n" msgstr "" -#: src/stored/butil.c:292 -msgid "Tape Door is Open\n" +#: src/dird/ua_run.c:641 +msgid "Level" msgstr "" -#: src/stored/butil.c:294 -msgid "Unexpected Tape is Off-line\n" +#: src/dird/ua_run.c:642 src/dird/ua_select.c:152 +#: src/wx-console/wxbrestorepanel.cpp:321 +#: src/wx-console/wxbrestorepanel.cpp:337 +#: src/wx-console/wxbrestorepanel.cpp:458 +#: src/wx-console/wxbrestorepanel.cpp:459 +#: src/wx-console/wxbrestorepanel.cpp:469 +#: src/wx-console/wxbrestorepanel.cpp:470 +#: src/wx-console/wxbrestorepanel.cpp:1133 +#: src/wx-console/wxbrestorepanel.cpp:1794 +#: src/wx-console/wxbrestorepanel.cpp:1865 +msgid "Storage" msgstr "" -#: src/stored/dev.c:112 -#, c-format -msgid "Unable to stat device %s: ERR=%s\n" +#: src/dird/ua_run.c:645 src/dird/ua_select.c:282 src/dird/ua_select.c:391 +#: src/wx-console/wxbrestorepanel.cpp:318 +#: src/wx-console/wxbrestorepanel.cpp:336 +#: src/wx-console/wxbrestorepanel.cpp:410 +#: src/wx-console/wxbrestorepanel.cpp:411 +#: src/wx-console/wxbrestorepanel.cpp:421 +#: src/wx-console/wxbrestorepanel.cpp:422 +#: src/wx-console/wxbrestorepanel.cpp:669 +#: src/wx-console/wxbrestorepanel.cpp:1103 +#: src/wx-console/wxbrestorepanel.cpp:1190 +#: src/wx-console/wxbrestorepanel.cpp:1787 +#: src/wx-console/wxbrestorepanel.cpp:1789 +#: src/wx-console/wxbrestorepanel.cpp:1863 +#: src/wx-console/wxbrestorepanel.cpp:1918 +msgid "Client" msgstr "" -#: src/stored/dev.c:123 -#, 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_run.c:646 src/wx-console/wxbrestorepanel.cpp:338 +#: src/wx-console/wxbrestorepanel.cpp:823 +#: src/wx-console/wxbrestorepanel.cpp:1867 +msgid "When" msgstr "" -#: src/stored/dev.c:181 -#, c-format -msgid "Unable to stat mount point %s: ERR=%s\n" +#: src/dird/ua_run.c:647 src/wx-console/wxbrestorepanel.cpp:339 +#: src/wx-console/wxbrestorepanel.cpp:1096 +#: src/wx-console/wxbrestorepanel.cpp:1869 +msgid "Priority" msgstr "" -#: src/stored/dev.c:188 -msgid "" -"Mount and unmount commands must defined for a device which requires mount.\n" +#: src/dird/ua_run.c:650 src/dird/ua_select.c:476 src/dird/ua_select.c:566 +#: src/dird/ua_update.c:400 src/dird/ua_update.c:475 +#: src/wx-console/wxbrestorepanel.cpp:320 +#: src/wx-console/wxbrestorepanel.cpp:506 +#: src/wx-console/wxbrestorepanel.cpp:516 +#: src/wx-console/wxbrestorepanel.cpp:1783 +msgid "Pool" msgstr "" -#: src/stored/dev.c:191 -msgid "Write part command must be defined for a device which requires mount.\n" +#: src/dird/ua_run.c:652 +msgid "Verify Job" msgstr "" -#: src/stored/dev.c:196 -#, c-format -msgid "Block size %u on device %s is too large, using default %u\n" +#: src/dird/ua_run.c:655 src/wx-console/wxbrestorepanel.cpp:331 +#: src/wx-console/wxbrestorepanel.cpp:1848 +msgid "Bootstrap" msgstr "" -#: src/stored/dev.c:201 -#, c-format -msgid "Max block size %u not multiple of device %s block size.\n" +#: src/dird/ua_run.c:656 src/wx-console/wxbrestorepanel.cpp:332 +#: src/wx-console/wxbrestorepanel.cpp:1072 +#: src/wx-console/wxbrestorepanel.cpp:1850 +msgid "Where" msgstr "" -#: src/stored/dev.c:217 src/stored/dev.c:223 -#, c-format -msgid "Unable to init cond variable: ERR=%s\n" +#: src/dird/ua_run.c:657 src/wx-console/wxbrestorepanel.cpp:334 +#: src/wx-console/wxbrestorepanel.cpp:1080 +#: src/wx-console/wxbrestorepanel.cpp:1854 +#: src/wx-console/wxbrestorepanel.cpp:1855 +#: src/wx-console/wxbrestorepanel.cpp:1856 +#: src/wx-console/wxbrestorepanel.cpp:1857 +#: src/wx-console/wxbrestorepanel.cpp:1858 +msgid "Replace" msgstr "" -#: src/stored/dev.c:313 -msgid "Illegal mode given to open dev.\n" +#: src/dird/ua_run.c:658 +msgid "JobId" msgstr "" -#: src/stored/dev.c:356 src/stored/device.c:295 -#, c-format -msgid "Unable to open device %s: ERR=%s\n" +#: src/dird/ua_run.c:660 src/dird/ua_update.c:479 +msgid "Select parameter to modify" msgstr "" -#: src/stored/dev.c:428 src/stored/dev.c:483 -#, c-format -msgid "Could not open file device %s. No Volume name given.\n" +#: src/dird/ua_run.c:664 src/dird/ua_run.c:691 +msgid "Levels:\n" msgstr "" -#: src/stored/dev.c:451 src/stored/dev.c:563 -#, c-format -msgid "Could not open: %s, ERR=%s\n" +#: src/dird/ua_run.c:665 src/filed/status.c:368 src/lib/util.c:319 +#: src/stored/status.c:451 +msgid "Base" msgstr "" -#: src/stored/dev.c:508 -#, c-format -msgid "" -"The media in the device %s is not empty, please blank it before writing " -"anything to it.\n" +#: src/dird/ua_run.c:666 src/filed/status.c:370 src/lib/util.c:321 +#: src/stored/status.c:453 +msgid "Full" msgstr "" -#: src/stored/dev.c:524 -#, c-format -msgid "There is no valid media in the device %s.\n" +#: src/dird/ua_run.c:667 src/filed/status.c:373 src/lib/util.c:324 +#: src/stored/status.c:456 +msgid "Incremental" msgstr "" -#: src/stored/dev.c:531 -#, c-format -msgid "Could not mount device %s.\n" +#: src/dird/ua_run.c:668 src/filed/status.c:376 src/lib/util.c:327 +#: src/stored/status.c:459 +msgid "Differential" msgstr "" -#: src/stored/dev.c:589 -#, c-format -msgid "Could not fstat: %s, ERR=%s\n" +#: src/dird/ua_run.c:669 src/filed/status.c:379 src/lib/util.c:330 +#: src/stored/status.c:462 +msgid "Since" msgstr "" -#: src/stored/dev.c:632 -#, c-format -msgid "Bad call to rewind. Device %s not open\n" +#: src/dird/ua_run.c:670 src/dird/ua_run.c:697 +msgid "Select level" msgstr "" -#: src/stored/dev.c:678 -#, c-format -msgid "Rewind error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:692 +msgid "Initialize Catalog" msgstr "" -#: src/stored/dev.c:688 src/stored/dev.c:801 src/stored/dev.c:937 -#: src/stored/dev.c:1453 -#, c-format -msgid "lseek_dev error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:693 src/filed/status.c:382 src/lib/util.c:333 +#: src/stored/status.c:465 +msgid "Verify Catalog" msgstr "" -#: src/stored/dev.c:728 -msgid "unknown blocked code" +#: src/dird/ua_run.c:694 src/lib/util.c:339 +msgid "Verify Volume to Catalog" msgstr "" -#: src/stored/dev.c:772 -#, c-format -msgid "Bad call to eod_dev. Device %s not open\n" +#: src/dird/ua_run.c:695 src/lib/util.c:342 +msgid "Verify Disk to Catalog" msgstr "" -#: src/stored/dev.c:837 -#, c-format -msgid "ioctl MTEOM error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:696 +msgid "Verify Volume Data (not yet implemented)" msgstr "" -#: src/stored/dev.c:845 src/stored/dev.c:977 -#, c-format -msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:718 +msgid "Level not appropriate for this Job. Cannot be changed.\n" msgstr "" -#: src/stored/dev.c:923 -msgid "Bad device call. Device not open\n" +#: src/dird/ua_run.c:756 +msgid "" +"Please enter desired start time as YYYY-MM-DD HH:MM:SS (return for now): " msgstr "" -#: src/stored/dev.c:936 -#, c-format -msgid "Seek error: ERR=%s\n" +#: src/dird/ua_run.c:771 +msgid "Enter new Priority: " msgstr "" -#: src/stored/dev.c:972 -msgid " Bacula status:" +#: src/dird/ua_run.c:775 +msgid "Priority must be a positive integer.\n" +msgstr "" + +#: src/dird/ua_run.c:793 +msgid "Please enter the Bootstrap file name: " msgstr "" -#: src/stored/dev.c:973 src/stored/dev.c:1022 src/stored/dev.c:1024 +#: src/dird/ua_run.c:804 #, c-format -msgid " file=%d block=%d\n" +msgid "Warning cannot open %s: ERR=%s\n" msgstr "" -#: src/stored/dev.c:981 -msgid " Device status:" +#: src/dird/ua_run.c:823 +msgid "Please enter path prefix for restore (/ for none): " msgstr "" -#: src/stored/dev.c:1046 -msgid "Bad call to load_dev. Device not open\n" +#: src/dird/ua_run.c:837 +msgid "Replace:\n" msgstr "" -#: src/stored/dev.c:1057 src/stored/dev.c:1070 -#, c-format -msgid "ioctl MTLOAD error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:841 +msgid "Select replace option" msgstr "" -#: src/stored/dev.c:1106 -#, c-format -msgid "ioctl MTOFFL error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:851 +msgid "" +"You must set the bootstrap file to NULL to be able to specify a JobId.\n" msgstr "" -#: src/stored/dev.c:1147 -msgid "Bad call to fsf_dev. Device not open\n" +#: src/dird/ua_run.c:869 +msgid "Job failed.\n" msgstr "" -#: src/stored/dev.c:1157 src/stored/dev.c:1278 +#: src/dird/ua_run.c:872 #, c-format -msgid "Device %s at End of Tape.\n" +msgid "Job started. JobId=%s\n" +msgstr "" + +#: src/dird/ua_run.c:878 +msgid "Job not run.\n" msgstr "" -#: src/stored/dev.c:1182 src/stored/dev.c:1258 +#: src/dird/ua_select.c:39 #, c-format -msgid "ioctl MTFSF error on %s. ERR=%s.\n" +msgid "The current %s retention period is: %s\n" msgstr "" -#: src/stored/dev.c:1306 -msgid "Bad call to bsf. Device not open\n" +#: src/dird/ua_select.c:41 +msgid "Continue? (yes/mod/no): " msgstr "" -#: src/stored/dev.c:1312 -#, c-format -msgid "Device %s cannot BSF because it is not a tape.\n" +#: src/dird/ua_select.c:45 +msgid "Enter new retention period: " msgstr "" -#: src/stored/dev.c:1327 -#, c-format -msgid "ioctl MTBSF error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:49 +msgid "Invalid period.\n" msgstr "" -#: src/stored/dev.c:1347 -msgid "Bad call to fsr. Device not open\n" +#: src/dird/ua_select.c:128 +msgid "You have the following choices:\n" msgstr "" -#: src/stored/dev.c:1356 -#, c-format -msgid "ioctl MTFSR not permitted on %s.\n" +#: src/dird/ua_select.c:144 +msgid "The defined Storage resources are:\n" msgstr "" -#: src/stored/dev.c:1384 -#, c-format -msgid "ioctl MTFSR %d error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:152 +msgid "Select Storage resource" msgstr "" -#: src/stored/dev.c:1403 -msgid "Bad call to bsr_dev. Device not open\n" +#: src/dird/ua_select.c:193 +msgid "catalog" msgstr "" -#: src/stored/dev.c:1413 -#, c-format -msgid "ioctl MTBSR not permitted on %s.\n" +#: src/dird/ua_select.c:201 +msgid "The defined Catalog resources are:\n" msgstr "" -#: src/stored/dev.c:1426 -#, c-format -msgid "ioctl MTBSR error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:209 +msgid "Catalog" msgstr "" -#: src/stored/dev.c:1442 -msgid "Bad call to reposition. Device not open\n" +#: src/dird/ua_select.c:209 +msgid "Select Catalog resource" msgstr "" -#: src/stored/dev.c:1510 -msgid "Bad call to weof_dev. Device not open\n" +#: src/dird/ua_select.c:226 +msgid "The defined Job resources are:\n" msgstr "" -#: src/stored/dev.c:1520 -msgid "Attempt to WEOF on non-appendable Volume\n" +#: src/dird/ua_select.c:234 +msgid "Select Job resource" msgstr "" -#: src/stored/dev.c:1537 -#, c-format -msgid "ioctl MTWEOF error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:249 +msgid "The defined Restore Job resources are:\n" msgstr "" -#: src/stored/dev.c:1567 -msgid "Got ENOTTY on read/write!\n" +#: src/dird/ua_select.c:257 +msgid "Select Restore Job" msgstr "" -#: src/stored/dev.c:1614 +#: src/dird/ua_select.c:274 +msgid "The defined Client resources are:\n" +msgstr "" + +#: src/dird/ua_select.c:282 +msgid "Select Client (File daemon) resource" +msgstr "" + +#: src/dird/ua_select.c:309 #, c-format -msgid "unknown func code %d" +msgid "Error: Client resource %s does not exist.\n" msgstr "" -#: src/stored/dev.c:1620 +#: src/dird/ua_select.c:334 #, c-format -msgid "I/O function \"%s\" not supported on this device.\n" +msgid "Could not find Client %s: ERR=%s" msgstr "" -#: src/stored/pythonsd.c:95 src/stored/pythonsd.c:160 src/filed/pythonfd.c:102 -#: src/filed/pythonfd.c:156 src/filed/pythonfd.c:220 src/dird/pythondir.c:105 -msgid "Job pointer not found." +#: src/dird/ua_select.c:337 src/lib/bnet_server.c:284 +#: src/lib/bnet_server.c:378 +msgid "client" msgstr "" -#: src/stored/pythonsd.c:137 src/filed/pythonfd.c:133 src/dird/pythondir.c:166 -#, c-format -msgid "Attribute %s not found." +#: src/dird/ua_select.c:338 +msgid "fd" msgstr "" -#: src/stored/pythonsd.c:154 src/filed/pythonfd.c:150 +#: src/dird/ua_select.c:344 src/dird/ua_select.c:398 #, c-format -msgid "Cannot delete attribute %s" +msgid "Could not find Client \"%s\": ERR=%s" msgstr "" -#: src/stored/pythonsd.c:177 src/filed/pythonfd.c:175 src/dird/pythondir.c:209 -#: src/dird/pythondir.c:215 -msgid "Read-only attribute" +#: src/dird/ua_select.c:373 +#, c-format +msgid "Error obtaining client ids. ERR=%s\n" msgstr "" -#: src/stored/pythonsd.c:187 src/filed/pythonfd.c:168 src/filed/pythonfd.c:184 -#, c-format -msgid "Cannot find attribute %s" +#: src/dird/ua_select.c:377 +msgid "No clients defined. You must run a job before using this command.\n" msgstr "" -#: src/stored/pythonsd.c:202 -msgid "Error in ParseTuple\n" +#: src/dird/ua_select.c:381 +msgid "Defined Clients:\n" msgstr "" -#: src/stored/pythonsd.c:218 -msgid "Parse tuple error in job_write\n" +#: src/dird/ua_select.c:391 +msgid "Select the Client" msgstr "" -#: src/stored/pythonsd.c:254 +#: src/dird/ua_select.c:424 src/dird/ua_select.c:447 src/dird/ua_select.c:483 #, c-format -msgid "Error in Python method %s\n" +msgid "Could not find Pool \"%s\": ERR=%s" msgstr "" -#: src/stored/bcopy.c:58 -#, c-format -msgid "" -"Copyright (C) 2002-2005 Kern Sibbald.\n" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bcopy [-d debug_level] \n" -" -b bootstrap specify a bootstrap file\n" -" -c specify configuration file\n" -" -d set debug level to nn\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/stored/bcopy.c:185 -msgid "Write of last block failed.\n" +#: src/dird/ua_select.c:462 +msgid "No pools defined. Use the \"create\" command to create one.\n" msgstr "" -#: src/stored/bcopy.c:188 -#, c-format -msgid "%u Jobs copied. %u records copied.\n" +#: src/dird/ua_select.c:466 +msgid "Defined Pools:\n" msgstr "" -#: src/stored/bcopy.c:220 -msgid "Volume is prelabeled. This volume cannot be copied.\n" +#: src/dird/ua_select.c:476 +msgid "Select the Pool" msgstr "" -#: src/stored/bcopy.c:223 -msgid "Volume label not copied.\n" +#: src/dird/ua_select.c:506 +#, c-format +msgid "No access to Pool \"%s\"\n" msgstr "" -#: src/stored/bcopy.c:247 -msgid "EOM label not copied.\n" +#: src/dird/ua_select.c:532 +msgid "Enter MediaId or Volume name: " msgstr "" -#: src/stored/bcopy.c:250 -msgid "EOT label not copied.\n" +#: src/dird/ua_select.c:558 +msgid "The defined Pool resources are:\n" msgstr "" -#: src/stored/record.c:60 -#, c-format -msgid "unknown: %d" +#: src/dird/ua_select.c:566 +msgid "Select Pool resource" msgstr "" -#: src/stored/record.c:367 -msgid "Damaged buffer\n" +#: src/dird/ua_select.c:601 +msgid "Enter the JobId to select: " msgstr "" -#: src/stored/device.c:100 +#: src/dird/ua_select.c:638 #, c-format -msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" +msgid "Could not find Job \"%s\": ERR=%s" msgstr "" -#: src/stored/device.c:114 +#: src/dird/ua_select.c:705 #, c-format -msgid "New volume \"%s\" mounted on device %s at %s.\n" +msgid "Automatically selected %s: %s\n" msgstr "" -#: src/stored/device.c:126 +#: src/dird/ua_select.c:710 #, c-format -msgid "write_block_to_device Volume label failed. ERR=%s" +msgid "Cannot select %s in batch mode.\n" msgstr "" -#: src/stored/device.c:162 -#, c-format -msgid "write_block_to_device overflow block failed. ERR=%s" +#: src/dird/ua_select.c:722 +msgid "Selection is empty!\n" msgstr "" -#: src/stored/device.c:297 -#, c-format -msgid "Unable to open archive %s: ERR=%s\n" +#: src/dird/ua_select.c:728 +msgid "Item 1 selected automatically.\n" msgstr "" -#: src/stored/device.c:311 -#, c-format -msgid "Device write lock failure. ERR=%s\n" +#: src/dird/ua_select.c:739 +msgid "Selection aborted, nothing done.\n" msgstr "" -#: src/stored/device.c:319 +#: src/dird/ua_select.c:744 #, c-format -msgid "Device write unlock failure. ERR=%s\n" +msgid "Please enter a number between 1 and %d\n" msgstr "" -#: src/stored/device.c:338 -#, c-format -msgid "pthread_cond_wait failure. ERR=%s\n" +#: src/dird/ua_select.c:793 +msgid "Storage name given twice.\n" msgstr "" -#: src/stored/read_record.c:68 +#: src/dird/ua_select.c:810 #, c-format -msgid "End of Volume at file %u on device %s, Volume \"%s\"\n" -msgstr "" - -#: src/stored/read_record.c:71 -msgid "End of all volumes.\n" +msgid "Expecting jobid=nn command, got: %s\n" msgstr "" -#: src/stored/read_record.c:110 +#: src/dird/ua_select.c:814 #, c-format -msgid "Got EOF at file %u on device %s, Volume \"%s\"\n" -msgstr "" - -#: src/stored/read_record.c:124 -msgid "Did fsr\n" +msgid "JobId %s is not running.\n" msgstr "" -#: src/stored/read_record.c:281 +#: src/dird/ua_select.c:823 #, c-format -msgid "Reposition from (file:block) %u:%u to %u:%u\n" +msgid "Expecting job=xxx, got: %s.\n" msgstr "" -#: src/stored/read_record.c:308 +#: src/dird/ua_select.c:827 #, c-format -msgid "Forward spacing to file:block %u:%u.\n" +msgid "Job \"%s\" is not running.\n" msgstr "" -#: src/stored/read_record.c:334 -msgid "Begin Session" +#: src/dird/ua_select.c:843 +#, c-format +msgid "Storage resource \"%s\": not found\n" msgstr "" -#: src/stored/read_record.c:338 -msgid "End Session" +#: src/dird/ua_select.c:875 +msgid "Enter autochanger drive[0]: " msgstr "" -#: src/stored/read_record.c:344 -#, c-format -msgid "Unknown code %d\n" +#: src/dird/ua_select.c:905 +msgid "Media Types defined in conf file:\n" msgstr "" -#: src/stored/mac.c:68 -#, c-format -msgid "No Volume names found for %s.\n" +#: src/dird/ua_select.c:911 +msgid "Media Type" msgstr "" -#: src/testprogs/schedule.c:37 -#, c-format -msgid "" -"\n" -"Version: " +#: src/dird/ua_select.c:911 +msgid "Select the Media Type" msgstr "" -#: src/testprogs/schedule.c:37 src/console/console.c:103 src/dird/admin.c:108 +#: src/dird/ua_server.c:61 #, c-format -msgid " (" +msgid "Cannot create UA thread: %s\n" msgstr "" -#: src/testprogs/schedule.c:37 -#, c-format -msgid "" -")\n" -"\n" -"Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c set configuration file to file\n" -" -dnn set debug level to nn\n" -" -f run in foreground (for debugging)\n" -" -r run now\n" -" -s no signals\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" +#: src/dird/ua_server.c:142 +msgid "You have messages.\n" msgstr "" -#: src/testprogs/schedule.c:192 src/dird/dird.c:474 -#, c-format -msgid "" -"No Director resource defined in %s\n" -"Without that I don't know who I am :-(\n" +#: src/dird/ua_status.c:126 +msgid "Status available for:\n" msgstr "" -#: src/testprogs/schedule.c:197 -msgid "No working directory specified. Cannot continue.\n" +#: src/dird/ua_status.c:132 +msgid "Select daemon type for status" msgstr "" -#: src/testprogs/schedule.c:204 src/filed/filed.c:295 src/dird/dird.c:482 +#: src/dird/ua_status.c:245 #, c-format -msgid "No Messages resource defined in %s\n" +msgid "%s Version: %s (%s) %s %s %s\n" msgstr "" -#: src/testprogs/schedule.c:209 src/dird/dird.c:487 +#: src/dird/ua_status.c:249 src/stored/status.c:71 #, c-format -msgid "Only one Director resource permitted in %s\n" +msgid "Daemon started %s, 1 Job run since started.\n" msgstr "" -#: src/testprogs/schedule.c:216 src/dird/dird.c:541 +#: src/dird/ua_status.c:252 src/stored/status.c:74 #, c-format -msgid "No Job records defined in %s\n" +msgid "Daemon started %s, %d Jobs run since started.\n" msgstr "" -#: src/testprogs/schedule.c:221 +#: src/dird/ua_status.c:257 src/filed/status.c:121 src/stored/status.c:78 #, c-format -msgid "No Client record defined for job %s\n" +msgid " Heap: bytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" msgstr "" -#: src/testprogs/schedule.c:225 -#, c-format -msgid "No FileSet record defined for job %s\n" +#: src/dird/ua_status.c:277 src/dird/ua_status.c:493 src/dird/ua_status.c:655 +#: src/filed/status.c:198 src/filed/status.c:277 src/stored/status.c:345 +#: src/stored/status.c:361 src/stored/status.c:438 +msgid "====\n" msgstr "" -#: src/testprogs/schedule.c:229 +#: src/dird/ua_status.c:289 #, c-format -msgid "No Storage resource defined for job %s\n" +msgid "" +"\n" +"Failed to connect to Storage daemon %s.\n" +"====\n" msgstr "" -#: src/testprogs/schedule.c:233 +#: src/dird/ua_status.c:327 #, c-format -msgid "No Pool resource defined for job %s\n" +msgid "" +"Failed to connect to Client %s.\n" +"====\n" msgstr "" -#: src/testprogs/schedule.c:242 -#, c-format -msgid "No Catalog resource defined for client %s\n" +#: src/dird/ua_status.c:335 +msgid "Connected to file daemon\n" msgstr "" -#: src/testprogs/testfind.c:46 src/testprogs/testfind.map.c:48 -#, c-format +#: src/dird/ua_status.c:350 msgid "" "\n" -"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -dnn set debug level to nn\n" -" -e specify file of exclude patterns\n" -" -i specify file of include patterns\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" +"Scheduled Jobs:\n" msgstr "" -#: src/testprogs/testfind.c:155 src/testprogs/testfind.map.c:160 -#: src/tools/testfind.c:160 -#, c-format +#: src/dird/ua_status.c:351 msgid "" -"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" +"Level Type Pri Scheduled Name Volume\n" msgstr "" -#: src/testprogs/testfind.c:292 src/testprogs/testfind.map.c:256 -#: src/tools/testls.c:178 src/tools/testfind.c:240 -#, c-format -msgid "Err: Could not access %s: %s\n" +#: src/dird/ua_status.c:352 +msgid "===================================================================================\n" msgstr "" -#: src/testprogs/testfind.c:295 src/testprogs/testfind.map.c:259 -#: src/tools/testls.c:181 src/tools/testfind.c:243 +#: src/dird/ua_status.c:399 #, c-format -msgid "Err: Could not follow ff->link %s: %s\n" +msgid "%-14s %-8s %3d %-18s %-18s %s\n" msgstr "" -#: src/testprogs/testfind.c:298 src/testprogs/testfind.map.c:262 -#: src/tools/testls.c:184 src/tools/testfind.c:246 -#, c-format -msgid "Err: Could not stat %s: %s\n" +#: src/dird/ua_status.c:491 +msgid "No Scheduled Jobs.\n" msgstr "" -#: src/testprogs/testfind.c:301 src/testprogs/testfind.map.c:265 -#: src/tools/testls.c:187 src/tools/testfind.c:249 -#, c-format -msgid "Skip: File not saved. No change. %s\n" +#: src/dird/ua_status.c:508 src/stored/status.c:277 +msgid "" +"\n" +"Running Jobs:\n" msgstr "" -#: src/testprogs/testfind.c:304 src/testprogs/testfind.map.c:268 -#: src/tools/testls.c:190 src/tools/testfind.c:252 +#: src/dird/ua_status.c:516 #, c-format -msgid "Err: Attempt to backup archive. Not saved. %s\n" +msgid "Console connected at %s\n" msgstr "" -#: src/testprogs/testfind.c:307 src/testprogs/testfind.map.c:271 -#: src/tools/testls.c:193 -#, c-format -msgid "Recursion turned off. Directory not entered. %s\n" +#: src/dird/ua_status.c:526 +msgid "" +"No Jobs running.\n" +"====\n" msgstr "" -#: src/testprogs/testfind.c:310 src/testprogs/testfind.map.c:274 -#: src/tools/testls.c:196 -#, c-format -msgid "Skip: File system change prohibited. Directory not entered. %s\n" +#: src/dird/ua_status.c:531 +msgid " JobId Level Name Status\n" msgstr "" -#: src/testprogs/testfind.c:313 src/testprogs/testfind.map.c:277 -#: src/tools/testls.c:199 src/tools/testfind.c:255 -#, c-format -msgid "Err: Could not open directory %s: %s\n" +#: src/dird/ua_status.c:532 src/filed/status.c:221 src/stored/status.c:382 +msgid "======================================================================\n" msgstr "" -#: src/testprogs/testfind.c:316 src/testprogs/testfind.map.c:280 -#: src/tools/testls.c:202 src/tools/testfind.c:258 -#, c-format -msgid "Err: Unknown file ff->type %d: %s\n" +#: src/dird/ua_status.c:540 +msgid "is waiting execution" msgstr "" -#: src/testprogs/testfind.c:366 src/testprogs/testfind.map.c:330 -#: src/tools/testfind.c:308 -#, c-format -msgid "===== Filename truncated to 255 chars: %s\n" +#: src/dird/ua_status.c:543 +msgid "is running" msgstr "" -#: src/testprogs/testfind.c:383 src/testprogs/testfind.map.c:347 -#: src/tools/testfind.c:325 -#, c-format -msgid "========== Path name truncated to 255 chars: %s\n" +#: src/dird/ua_status.c:546 +msgid "is blocked" msgstr "" -#: src/testprogs/testfind.c:392 src/testprogs/testfind.map.c:356 -#: src/tools/testfind.c:334 -#, c-format -msgid "========== Path length is zero. File=%s\n" +#: src/dird/ua_status.c:549 +msgid "has terminated" msgstr "" -#: src/testprogs/window.c:608 -msgid "Folder" +#: src/dird/ua_status.c:552 +msgid "has erred" msgstr "" -#: src/testprogs/window.c:744 src/testprogs/window.c:753 -#: src/testprogs/window.c:2449 src/testprogs/window.c:4167 -msgid "File Roller" +#: src/dird/ua_status.c:555 +msgid "has errors" msgstr "" -#: src/testprogs/window.c:752 -msgid "[read only]" +#: src/dird/ua_status.c:558 +msgid "has a fatal error" msgstr "" -#: src/testprogs/window.c:846 -#, c-format -msgid "1 file (%s)" +#: src/dird/ua_status.c:561 +msgid "has verify differences" msgstr "" -#: src/testprogs/window.c:849 -#, c-format -msgid "%d files (%s)" +#: src/dird/ua_status.c:564 +msgid "has been canceled" msgstr "" -#: src/testprogs/window.c:857 +#: src/dird/ua_status.c:568 #, c-format -msgid "1 file selected (%s)" +msgid "is waiting on Client %s" msgstr "" -#: src/testprogs/window.c:860 +#: src/dird/ua_status.c:574 #, c-format -msgid "%d files selected (%s)" +msgid "is waiting on Storage %s" msgstr "" -#: src/testprogs/window.c:1149 -msgid "Reading archive" +#: src/dird/ua_status.c:579 +msgid "is waiting on max Storage jobs" msgstr "" -#: src/testprogs/window.c:1152 -msgid "Deleting files from archive" +#: src/dird/ua_status.c:582 +msgid "is waiting on max Client jobs" msgstr "" -#: src/testprogs/window.c:1155 -msgid "Adding files to archive" -msgstr "" +#: src/dird/ua_status.c:585 +msgid "is waiting on max Job jobs" +msgstr "" -#: src/testprogs/window.c:1158 -msgid "Extracting files from archive" +#: src/dird/ua_status.c:588 +msgid "is waiting on max total jobs" msgstr "" -#: src/testprogs/window.c:1161 -msgid "Testing archive" +#: src/dird/ua_status.c:591 +msgid "is waiting for its start time" msgstr "" -#: src/testprogs/window.c:1167 -msgid "wait please..." +#: src/dird/ua_status.c:594 +msgid "is waiting for higher priority jobs to finish" msgstr "" -#: src/testprogs/window.c:1253 -msgid "Operation stopped" +#: src/dird/ua_status.c:599 +#, c-format +msgid "is in unknown state %c" msgstr "" -#: src/testprogs/window.c:1271 -msgid "An error occurred while extracting files." +#: src/dird/ua_status.c:613 +msgid "is waiting for a mount request" msgstr "" -#: src/testprogs/window.c:1275 -msgid "An error occurred while loading the archive." +#: src/dird/ua_status.c:620 +msgid "is waiting for an appendable Volume" msgstr "" -#: src/testprogs/window.c:1279 -msgid "An error occurred while deleting files from the archive." +#: src/dird/ua_status.c:627 +#, c-format +msgid "is waiting for Client %s to connect to Storage %s" msgstr "" -#: src/testprogs/window.c:1283 -msgid "An error occurred while adding files to the archive." +#: src/dird/ua_status.c:643 +#, c-format +msgid "%6d %-6s %-20s %s\n" msgstr "" -#: src/testprogs/window.c:1287 -msgid "An error occurred while testing archive." +#: src/dird/ua_status.c:665 src/filed/status.c:211 src/stored/status.c:373 +msgid "No Terminated Jobs.\n" msgstr "" -#: src/testprogs/window.c:1293 -msgid "Command not found." +#: src/dird/ua_status.c:670 src/stored/status.c:378 +msgid "" +"\n" +"Terminated Jobs:\n" msgstr "" -#: src/testprogs/window.c:1296 -msgid "Command exited abnormally." +#: src/dird/ua_status.c:671 +msgid " JobId Level Files Bytes Status Finished Name \n" msgstr "" -#: src/testprogs/window.c:1588 -msgid "You don't have permissions to add files to this archive." +#: src/dird/ua_status.c:672 +msgid "========================================================================\n" msgstr "" -#: src/testprogs/window.c:1610 -msgid "You can't add an archive to itself." +#: src/dird/ua_status.c:703 src/filed/status.c:241 src/lib/util.c:178 +#: src/stored/status.c:402 +msgid "Created" msgstr "" -#: src/testprogs/window.c:1770 -msgid "" -"Do you want to add this file to the current archive or open it as a new " -"archive?" +#: src/dird/ua_status.c:707 src/filed/status.c:245 src/lib/util.c:191 +#: src/lib/util.c:258 src/stored/status.c:406 +msgid "Error" msgstr "" -#: src/testprogs/window.c:1813 -msgid "Do you want to create a new archive with these files?" +#: src/dird/ua_status.c:710 src/filed/status.c:248 src/stored/status.c:409 +msgid "Diffs" msgstr "" -#: src/testprogs/window.c:1815 -msgid "Create _Archive" +#: src/dird/ua_status.c:716 src/filed/status.c:254 src/lib/util.c:187 +#: src/lib/util.c:254 src/stored/btape.c:1158 src/stored/status.c:415 +#: src/wx-console/wxbconfigpanel.cpp:180 +msgid "OK" msgstr "" -#: src/testprogs/window.c:2158 -msgid "Name" +#: src/dird/ua_status.c:719 src/filed/status.c:257 src/stored/status.c:418 +msgid "Other" msgstr "" -#: src/testprogs/window.c:2617 -msgid "_Up" +#: src/dird/ua_status.c:722 src/filed/status.c:268 src/stored/status.c:429 +#, c-format +msgid "%6d %-6s %8s %14s %-7s %-8s %s\n" msgstr "" -#: src/testprogs/window.c:2639 -msgid "Current Location:" +#: src/dird/ua_status.c:730 src/stored/btape.c:180 +msgid "\n" msgstr "" -#: src/testprogs/window.c:2671 src/wx-console/wxbrestorepanel.cpp:245 -#: src/wx-console/wxbrestorepanel.cpp:299 -msgid "Add" +#: src/dird/ua_tree.c:58 +msgid "change current directory" msgstr "" -#: src/testprogs/window.c:2672 -msgid "Add files to the archive" +#: src/dird/ua_tree.c:59 +msgid "count marked files in and below the cd" msgstr "" -#: src/testprogs/window.c:2682 -msgid "Extract" +#: src/dird/ua_tree.c:60 src/dird/ua_tree.c:61 +msgid "long list current directory, wildcards allowed" msgstr "" -#: src/testprogs/window.c:2683 -msgid "Extract files from the archive" +#: src/dird/ua_tree.c:62 +msgid "leave file selection mode" msgstr "" -#: src/testprogs/window.c:2693 -msgid "View" +#: src/dird/ua_tree.c:63 +msgid "estimate restore size" msgstr "" -#: src/testprogs/window.c:2694 -msgid "View selected file" +#: src/dird/ua_tree.c:64 +msgid "same as done command" msgstr "" -#: src/testprogs/window.c:3093 -msgid "File type not supported." +#: src/dird/ua_tree.c:65 +msgid "find files, wildcards allowed" msgstr "" -#: src/testprogs/window.c:3162 -msgid "Cannot load archive." +#: src/dird/ua_tree.c:66 src/dird/ua_tree.c:75 +msgid "print help" msgstr "" -#: src/testprogs/window.c:3227 -msgid "Destination folder does not exist. Do you want to create it?" +#: src/dird/ua_tree.c:67 +msgid "list current directory, wildcards allowed" msgstr "" -#: src/testprogs/window.c:3229 -msgid "Create _Folder" +#: src/dird/ua_tree.c:68 +msgid "list the marked files in and below the cd" msgstr "" -#: src/testprogs/window.c:3249 -#, c-format -msgid "" -"Could not create the destination folder: %s.\n" -"Extraction not performed." +#: src/dird/ua_tree.c:69 +msgid "mark dir/file to be restored recursively, wildcards allowed" msgstr "" -#: src/testprogs/window.c:3264 -msgid "Extraction not performed." +#: src/dird/ua_tree.c:70 +msgid "mark directory name to be restored (no files)" msgstr "" -#: src/testprogs/window.c:3576 -msgid "Last Output" +#: src/dird/ua_tree.c:71 +msgid "print current working directory" msgstr "" -#: src/testprogs/window.c:4102 -msgid "Add files to an archive" +#: src/dird/ua_tree.c:72 +msgid "unmark dir/file to be restored recursively in dir" msgstr "" -#: src/testprogs/window.c:4127 -msgid "Extract archive" +#: src/dird/ua_tree.c:73 +msgid "unmark directory name only no recursion" msgstr "" -#: src/cats/sql_list.c:53 -#, c-format -msgid "Query failed: %s\n" +#: src/dird/ua_tree.c:74 +msgid "quit and do not do restore" msgstr "" -#: src/cats/sql.c:96 -#, c-format +#: src/dird/ua_tree.c:94 msgid "" -"query %s failed:\n" -"%s\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/cats/sql.c:118 +#: src/dird/ua_tree.c:104 src/dird/ua_tree.c:664 src/dird/ua_tree.c:672 #, c-format -msgid "" -"insert %s failed:\n" -"%s\n" +msgid "cwd is: %s\n" msgstr "" -#: src/cats/sql.c:132 -#, c-format -msgid "Insertion problem: affected_rows=%s\n" +#: src/dird/ua_tree.c:125 +msgid "Illegal command. Enter \"done\" to exit.\n" msgstr "" -#: src/cats/sql.c:152 -#, c-format -msgid "" -"update %s failed:\n" -"%s\n" +#: src/dird/ua_tree.c:298 src/dird/ua_tree.c:309 src/dird/ua_tree.c:326 +msgid "No files marked.\n" msgstr "" -#: src/cats/sql.c:162 -#, c-format -msgid "Update problem: affected_rows=%s\n" +#: src/dird/ua_tree.c:311 +msgid "1 file marked.\n" msgstr "" -#: src/cats/sql.c:183 +#: src/dird/ua_tree.c:313 #, c-format -msgid "" -"delete %s failed:\n" -"%s\n" +msgid "%s files marked.\n" msgstr "" -#: src/cats/sql.c:209 src/cats/sql.c:216 src/cats/sql_create.c:823 -#: src/cats/sql_get.c:180 src/cats/sql_get.c:231 src/cats/sql_get.c:624 -#: src/cats/sql_get.c:699 src/cats/sql_get.c:926 -#, c-format -msgid "error fetching row: %s\n" +#: src/dird/ua_tree.c:340 +msgid "No directories marked.\n" msgstr "" -#: src/cats/sql.c:326 src/dird/catreq.c:375 src/dird/catreq.c:449 -#, c-format -msgid "Attribute create error. %s" +#: src/dird/ua_tree.c:342 +msgid "1 directory marked.\n" msgstr "" -#: src/cats/sql.c:407 +#: src/dird/ua_tree.c:344 #, c-format -msgid "Path length is zero. File=%s\n" +msgid "%s directories marked.\n" msgstr "" -#: src/cats/sql.c:451 -msgid "No results to list.\n" +#: src/dird/ua_tree.c:365 +#, c-format +msgid "%s total files/dirs. %s marked to be restored.\n" msgstr "" -#: src/cats/mysql.c:60 -msgid "A user name for MySQL must be supplied.\n" +#: src/dird/ua_tree.c:376 +msgid "No file specification given.\n" msgstr "" -#: src/cats/mysql.c:124 src/cats/postgresql.c:128 src/cats/sqlite.c:122 -#: src/cats/bdb.c:152 +#: src/dird/ua_tree.c:520 #, c-format -msgid "Unable to initialize DB lock. ERR=%s\n" +msgid "Node %s has no children.\n" msgstr "" -#: src/cats/mysql.c:161 +#: src/dird/ua_tree.c:611 #, c-format -msgid "" -"Unable to connect to MySQL server. \n" -"Database=%s User=%s\n" -"It is probably not running or your password is incorrect.\n" +msgid "%d total files; %d marked to be restored; %s bytes.\n" msgstr "" -#: src/cats/mysql.c:320 src/cats/postgresql.c:264 src/cats/sqlite.c:323 -#, c-format -msgid "Query failed: %s: ERR=%s\n" +#: src/dird/ua_tree.c:656 +msgid "Invalid path given.\n" msgstr "" -#: src/cats/postgresql.c:62 -msgid "A user name for PostgreSQL must be supplied.\n" +#: src/dird/ua_tree.c:683 src/dird/ua_tree.c:694 +msgid "No files unmarked.\n" msgstr "" -#: src/cats/postgresql.c:165 -#, c-format -msgid "" -"Unable to connect to PostgreSQL server.\n" -"Database=%s User=%s\n" -"It is probably not running or your password is incorrect.\n" +#: src/dird/ua_tree.c:696 +msgid "1 file unmarked.\n" msgstr "" -#: src/cats/postgresql.c:506 +#: src/dird/ua_tree.c:698 #, c-format -msgid "error fetching currval: %s\n" +msgid "%d files unmarked.\n" msgstr "" -#: src/cats/sql_delete.c:79 -#, c-format -msgid "No pool record %s exists\n" +#: src/dird/ua_tree.c:709 src/dird/ua_tree.c:725 +msgid "No directories unmarked.\n" msgstr "" -#: src/cats/sql_delete.c:84 -#, c-format -msgid "Expecting one pool record, got %d\n" +#: src/dird/ua_tree.c:727 +msgid "1 directory unmarked.\n" msgstr "" -#: src/cats/sql_delete.c:90 +#: src/dird/ua_tree.c:729 #, c-format -msgid "Error fetching row %s\n" +msgid "%d directories unmarked.\n" msgstr "" -#: src/cats/sql_create.c:86 -#, c-format -msgid "Create DB Job record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:79 +msgid "Update choice:\n" msgstr "" -#: src/cats/sql_create.c:135 -#, c-format -msgid "Create DB MAC record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:80 +msgid "Volume parameters" msgstr "" -#: src/cats/sql_create.c:182 -#, c-format -msgid "Create JobMedia record %s failed: ERR=%s\n" +#: src/dird/ua_update.c:81 +msgid "Pool from resource" msgstr "" -#: src/cats/sql_create.c:191 -#, c-format -msgid "Update Media record %s failed: ERR=%s\n" +#: src/dird/ua_update.c:82 +msgid "Slots from autochanger" msgstr "" -#: src/cats/sql_create.c:221 -#, c-format -msgid "pool record %s already exists\n" +#: src/dird/ua_update.c:83 +msgid "item" msgstr "" -#: src/cats/sql_create.c:247 -#, c-format -msgid "Create db Pool record %s failed: ERR=%s\n" +#: src/dird/ua_update.c:83 +msgid "Choose catalog item to update" msgstr "" -#: src/cats/sql_create.c:278 +#: src/dird/ua_update.c:122 #, c-format -msgid "Device record %s already exists\n" +msgid "Invalid VolStatus specified: %s\n" msgstr "" -#: src/cats/sql_create.c:294 +#: src/dird/ua_update.c:131 #, c-format -msgid "Create db Device record %s failed: ERR=%s\n" +msgid "New Volume status is: %s\n" msgstr "" -#: src/cats/sql_create.c:327 +#: src/dird/ua_update.c:141 #, c-format -msgid "More than one Storage record!: %d\n" +msgid "Invalid retention period specified: %s\n" msgstr "" -#: src/cats/sql_create.c:332 +#: src/dird/ua_update.c:149 #, c-format -msgid "error fetching Storage row: %s\n" +msgid "New retention period is: %s\n" msgstr "" -#: src/cats/sql_create.c:352 +#: src/dird/ua_update.c:160 #, c-format -msgid "Create DB Storage record %s failed. ERR=%s\n" +msgid "Invalid use duration specified: %s\n" msgstr "" -#: src/cats/sql_create.c:384 +#: src/dird/ua_update.c:168 #, c-format -msgid "mediatype record %s already exists\n" +msgid "New use duration is: %s\n" msgstr "" -#: src/cats/sql_create.c:400 +#: src/dird/ua_update.c:182 #, c-format -msgid "Create db mediatype record %s failed: ERR=%s\n" +msgid "New max jobs is: %s\n" msgstr "" -#: src/cats/sql_create.c:434 +#: src/dird/ua_update.c:195 #, c-format -msgid "Volume \"%s\" already exists.\n" +msgid "New max files is: %s\n" msgstr "" -#: src/cats/sql_create.c:472 +#: src/dird/ua_update.c:206 #, c-format -msgid "Create DB Media record %s failed. ERR=%s\n" +msgid "Invalid max. bytes specification: %s\n" msgstr "" -#: src/cats/sql_create.c:520 +#: src/dird/ua_update.c:214 #, c-format -msgid "More than one Client!: %d\n" +msgid "New Max bytes is: %s\n" msgstr "" -#: src/cats/sql_create.c:525 -#, c-format -msgid "error fetching Client row: %s\n" +#: src/dird/ua_update.c:228 src/dird/ua_update.c:252 +msgid "Invalid value. It must be yes or no.\n" msgstr "" -#: src/cats/sql_create.c:552 +#: src/dird/ua_update.c:236 #, c-format -msgid "Create DB Client record %s failed. ERR=%s\n" +msgid "New Recycle flag is: %s\n" msgstr "" -#: src/cats/sql_create.c:595 +#: src/dird/ua_update.c:260 #, c-format -msgid "Create DB Counters record %s failed. ERR=%s\n" +msgid "New InChanger flag is: %s\n" msgstr "" -#: src/cats/sql_create.c:628 +#: src/dird/ua_update.c:278 #, c-format -msgid "More than one FileSet!: %d\n" +msgid "Invalid slot, it must be between 0 and MaxVols=%d\n" msgstr "" -#: src/cats/sql_create.c:633 +#: src/dird/ua_update.c:287 src/dird/ua_update.c:577 #, c-format -msgid "error fetching FileSet row: ERR=%s\n" +msgid "Error updating media record Slot: ERR=%s" msgstr "" -#: src/cats/sql_create.c:663 +#: src/dird/ua_update.c:289 #, c-format -msgid "Create DB FileSet record %s failed. ERR=%s\n" +msgid "New Slot is: %d\n" msgstr "" -#: src/cats/sql_create.c:720 +#: src/dird/ua_update.c:316 #, c-format -msgid "Attempt to put non-attributes into catalog. Stream=%d\n" +msgid "New Pool is: %s\n" msgstr "" -#: src/cats/sql_create.c:783 +#: src/dird/ua_update.c:345 #, c-format -msgid "Create db File record %s failed. ERR=%s" +msgid "Error updating Volume record: ERR=%s" msgstr "" -#: src/cats/sql_create.c:816 src/cats/sql_get.c:224 +#: src/dird/ua_update.c:347 #, c-format -msgid "More than one Path!: %s for path: %s\n" +msgid "Volume defaults updated from \"%s\" Pool record.\n" msgstr "" -#: src/cats/sql_create.c:847 +#: src/dird/ua_update.c:369 #, c-format -msgid "Create db Path record %s failed. ERR=%s\n" +msgid "Error updating Volume records: ERR=%s" msgstr "" -#: src/cats/sql_create.c:880 -#, c-format -msgid "More than one Filename! %s for file: %s\n" +#: src/dird/ua_update.c:371 +msgid "All Volume defaults updated from Pool record.\n" msgstr "" -#: src/cats/sql_create.c:886 -#, c-format -msgid "Error fetching row for file=%s: ERR=%s\n" +#: src/dird/ua_update.c:391 +msgid "VolStatus" msgstr "" -#: src/cats/sql_create.c:902 -#, c-format -msgid "Create db Filename record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:392 +msgid "VolRetention" msgstr "" -#: src/cats/bdb_update.c:83 src/cats/bdb_update.c:114 -#, c-format -msgid "Error updating DB Job file. ERR=%s\n" +#: src/dird/ua_update.c:393 +msgid "VolUse" msgstr "" -#: src/cats/bdb_update.c:153 src/cats/bdb_update.c:189 -#, c-format -msgid "Error updating DB Media file. ERR=%s\n" +#: src/dird/ua_update.c:394 +msgid "MaxVolJobs" msgstr "" -#: src/cats/sqlite.c:136 -#, c-format -msgid "Database %s does not exist, please create it.\n" +#: src/dird/ua_update.c:395 +msgid "MaxVolFiles" msgstr "" -#: src/cats/sqlite.c:161 -#, c-format -msgid "Unable to open Database=%s. ERR=%s\n" +#: src/dird/ua_update.c:396 +msgid "MaxVolBytes" msgstr "" -#: src/cats/sqlite.c:162 src/lib/bnet_server.c:371 -msgid "unknown" +#: src/dird/ua_update.c:397 +msgid "Recycle" msgstr "" -#: src/cats/sqlite.c:221 -#, c-format -msgid "next_index query error: ERR=%s\n" +#: src/dird/ua_update.c:398 +msgid "InChanger" msgstr "" -#: src/cats/sqlite.c:226 -#, c-format -msgid "Error fetching index: ERR=%s\n" +#: src/dird/ua_update.c:399 src/dird/ua_update.c:472 +msgid "Slot" msgstr "" -#: src/cats/sqlite.c:236 -#, c-format -msgid "next_index update error: ERR=%s\n" +#: src/dird/ua_update.c:401 +msgid "FromPool" msgstr "" -#: src/cats/sql_find.c:90 src/cats/sql_find.c:119 -#, c-format -msgid "" -"Query error for start time request: ERR=%s\n" -"CMD=%s\n" +#: src/dird/ua_update.c:402 +msgid "AllFromPool" msgstr "" -#: src/cats/sql_find.c:96 -msgid "No prior Full backup Job record found.\n" +#: src/dird/ua_update.c:463 +#, c-format +msgid "Updating Volume \"%s\"\n" msgstr "" -#: src/cats/sql_find.c:108 -#, c-format -msgid "Unknown level=%d\n" +#: src/dird/ua_update.c:465 +msgid "Volume Status" msgstr "" -#: src/cats/sql_find.c:125 -#, c-format -msgid "" -"No Job record found: ERR=%s\n" -"CMD=%s\n" +#: src/dird/ua_update.c:466 +msgid "Volume Retention Period" msgstr "" -#: src/cats/sql_find.c:224 -#, c-format -msgid "Unknown Job level=%d\n" +#: src/dird/ua_update.c:467 +msgid "Volume Use Duration" msgstr "" -#: src/cats/sql_find.c:234 -#, c-format -msgid "No Job found for: %s.\n" +#: src/dird/ua_update.c:468 +msgid "Maximum Volume Jobs" msgstr "" -#: src/cats/sql_find.c:245 -#, c-format -msgid "No Job found for: %s\n" +#: src/dird/ua_update.c:469 +msgid "Maximum Volume Files" msgstr "" -#: src/cats/sql_find.c:317 -#, c-format -msgid "Request for Volume item %d greater than max %d\n" +#: src/dird/ua_update.c:470 +msgid "Maximum Volume Bytes" msgstr "" -#: src/cats/sql_find.c:329 -#, c-format -msgid "No Volume record found for item %d.\n" +#: src/dird/ua_update.c:471 +msgid "Recycle Flag" msgstr "" -#: src/cats/sql_get.c:130 -#, c-format -msgid "get_file_record want 1 got rows=%d\n" +#: src/dird/ua_update.c:473 +msgid "InChanger Flag" msgstr "" -#: src/cats/sql_get.c:135 -#, c-format -msgid "Error fetching row: %s\n" +#: src/dird/ua_update.c:474 +msgid "Volume Files" msgstr "" -#: src/cats/sql_get.c:143 -#, c-format -msgid "File record for PathId=%s FilenameId=%s not found.\n" +#: src/dird/ua_update.c:476 +msgid "Volume from Pool" msgstr "" -#: src/cats/sql_get.c:149 -msgid "File record not found in Catalog.\n" +#: src/dird/ua_update.c:477 +msgid "All Volumes from Pool" msgstr "" -#: src/cats/sql_get.c:174 -#, c-format -msgid "More than one Filename!: %s for file: %s\n" +#: src/dird/ua_update.c:478 +msgid "Done" msgstr "" -#: src/cats/sql_get.c:184 +#: src/dird/ua_update.c:489 #, c-format -msgid "Get DB Filename record %s found bad record: %d\n" +msgid "Current Volume status is: %s\n" msgstr "" -#: src/cats/sql_get.c:190 -#, c-format -msgid "Filename record: %s not found.\n" +#: src/dird/ua_update.c:490 +msgid "Possible Values are:\n" msgstr "" -#: src/cats/sql_get.c:194 -#, c-format -msgid "Filename record: %s not found in Catalog.\n" +#: src/dird/ua_update.c:501 +msgid "Choose new Volume Status" msgstr "" -#: src/cats/sql_get.c:235 +#: src/dird/ua_update.c:507 #, c-format -msgid "Get DB path record %s found bad record: %s\n" +msgid "Current retention period is: %s\n" msgstr "" -#: src/cats/sql_get.c:248 -#, c-format -msgid "Path record: %s not found.\n" +#: src/dird/ua_update.c:509 +msgid "Enter Volume Retention period: " msgstr "" -#: src/cats/sql_get.c:252 +#: src/dird/ua_update.c:516 #, c-format -msgid "Path record: %s not found in Catalog.\n" +msgid "Current use duration is: %s\n" msgstr "" -#: src/cats/sql_get.c:287 -#, c-format -msgid "No Job found for JobId %s\n" +#: src/dird/ua_update.c:518 +msgid "Enter Volume Use Duration: " msgstr "" -#: src/cats/sql_get.c:334 +#: src/dird/ua_update.c:525 #, c-format -msgid "No MAC record found for JobId %s\n" +msgid "Current max jobs is: %u\n" msgstr "" -#: src/cats/sql_get.c:385 src/cats/sql_get.c:441 -#, c-format -msgid "No volumes found for JobId=%d\n" +#: src/dird/ua_update.c:526 +msgid "Enter new Maximum Jobs: " msgstr "" -#: src/cats/sql_get.c:391 src/cats/sql_get.c:452 +#: src/dird/ua_update.c:533 #, c-format -msgid "Error fetching row %d: ERR=%s\n" +msgid "Current max files is: %u\n" msgstr "" -#: src/cats/sql_get.c:405 -#, c-format -msgid "No Volume for JobId %d found in Catalog.\n" +#: src/dird/ua_update.c:534 +msgid "Enter new Maximum Files: " msgstr "" -#: src/cats/sql_get.c:540 +#: src/dird/ua_update.c:541 #, c-format -msgid "Pool id select failed: ERR=%s\n" +msgid "Current value is: %s\n" msgstr "" -#: src/cats/sql_get.c:577 -#, c-format -msgid "Client id select failed: ERR=%s\n" +#: src/dird/ua_update.c:542 +msgid "Enter new Maximum Bytes: " msgstr "" -#: src/cats/sql_get.c:619 +#: src/dird/ua_update.c:550 #, c-format -msgid "More than one Pool!: %s\n" +msgid "Current recycle flag is: %s\n" msgstr "" -#: src/cats/sql_get.c:660 -msgid "Pool record not found in Catalog.\n" +#: src/dird/ua_update.c:552 +msgid "Enter new Recycle status: " msgstr "" -#: src/cats/sql_get.c:694 +#: src/dird/ua_update.c:559 #, c-format -msgid "More than one Client!: %s\n" +msgid "Current Slot is: %d\n" msgstr "" -#: src/cats/sql_get.c:711 src/cats/sql_get.c:715 -msgid "Client record not found in Catalog.\n" +#: src/dird/ua_update.c:560 +msgid "Enter new Slot: " msgstr "" -#: src/cats/sql_get.c:740 +#: src/dird/ua_update.c:567 #, c-format -msgid "More than one Counter!: %d\n" +msgid "Current InChanger flag is: %d\n" msgstr "" -#: src/cats/sql_get.c:745 -#, c-format -msgid "error fetching Counter row: %s\n" +#: src/dird/ua_update.c:568 +msgid "Set InChanger flag? yes/no: " msgstr "" -#: src/cats/sql_get.c:765 +#: src/dird/ua_update.c:579 #, c-format -msgid "Counter record: %s not found in Catalog.\n" +msgid "New InChanger flag is: %d\n" msgstr "" -#: src/cats/sql_get.c:801 -#, c-format -msgid "Error got %s FileSets but expected only one!\n" +#: src/dird/ua_update.c:586 +msgid "" +"Warning changing Volume Files can result\n" +"in loss of data on your Volume\n" +"\n" msgstr "" -#: src/cats/sql_get.c:806 +#: src/dird/ua_update.c:588 #, c-format -msgid "FileSet record \"%s\" not found.\n" +msgid "Current Volume Files is: %u\n" msgstr "" -#: src/cats/sql_get.c:816 -msgid "FileSet record not found in Catalog.\n" +#: src/dird/ua_update.c:589 +msgid "Enter new number of Files for Volume: " msgstr "" -#: src/cats/sql_get.c:873 -#, c-format -msgid "Media id select failed: ERR=%s\n" +#: src/dird/ua_update.c:594 +msgid "Normally, you should only increase Volume Files by one!\n" msgstr "" -#: src/cats/sql_get.c:921 -#, c-format -msgid "More than one Volume!: %s\n" +#: src/dird/ua_update.c:595 +msgid "Continue? (yes/no): " msgstr "" -#: src/cats/sql_get.c:966 +#: src/dird/ua_update.c:605 #, c-format -msgid "Media record MediaId=%s not found.\n" +msgid "New Volume Files is: %u\n" msgstr "" -#: src/cats/sql_get.c:969 +#: src/dird/ua_update.c:617 #, c-format -msgid "Media record for Volume \"%s\" not found.\n" +msgid "Current Pool is: %s\n" msgstr "" -#: src/cats/sql_get.c:976 -#, c-format -msgid "Media record for MediaId=%u not found in Catalog.\n" +#: src/dird/ua_update.c:618 +msgid "Enter new Pool name: " +msgstr "" + +#: src/dird/ua_update.c:631 +msgid "Selection terminated.\n" msgstr "" -#: src/cats/sql_get.c:979 +#: src/dird/ua_update.c:664 #, c-format -msgid "Media record for Vol=%s not found in Catalog.\n" +msgid "db_update_pool_record returned %d. ERR=%s\n" msgstr "" -#: src/cats/bdb.c:128 -msgid "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +#: src/dird/ua_update.c:671 +msgid "Pool DB record updated from resource.\n" msgstr "" -#: src/cats/bdb.c:129 -msgid "WARNING!!!! The Internal Database is NOT OPERATIONAL!\n" -msgstr "" - -#: src/cats/bdb.c:130 -msgid "You should use SQLite, PostgreSQL, or MySQL\n" +#: src/dird/verify.c:87 +msgid "" +"Unable to find JobId of previous InitCatalog Job.\n" +"Please run a Verify with Level=InitCatalog before\n" +"running the current Job.\n" msgstr "" -#: src/cats/bdb.c:162 +#: src/dird/verify.c:117 #, c-format -msgid "Unable to open Catalog DB control file %s: ERR=%s\n" +msgid "Verifying against JobId=%d Job=%s\n" msgstr "" -#: src/cats/bdb.c:217 +#: src/dird/verify.c:187 #, c-format -msgid "Error reading catalog DB control file. ERR=%s\n" +msgid "Start Verify JobId=%s Level=%s Job=%s\n" msgstr "" -#: src/cats/bdb.c:220 -#, c-format -msgid "" -"Error, catalog DB control file wrong version. Wanted %d, got %d\n" -"Please reinitialize the working directory.\n" +#: src/dird/verify.c:266 +msgid "Deprecated feature ... use bootstrap.\n" msgstr "" -#: src/console/authenticate.c:117 src/wx-console/authenticate.c:121 -msgid "TLS negotiation failed\n" +#: src/dird/verify.c:279 +#, c-format +msgid "Unimplemented Verify level %d(%c)\n" msgstr "" -#: src/console/authenticate.c:129 src/gnome2-console/authenticate.c:85 -#: src/tray-monitor/authenticate.c:87 src/pyqt/pconsole.cpp:97 -#: src/pyqt/bacula-gui-gtk/pconsole.cpp:97 src/pyqt/save/pconsole.cpp:97 +#: src/dird/verify.c:331 #, c-format -msgid "Bad response to Hello command: ERR=%s\n" +msgid "Unimplemented verify level %d\n" msgstr "" -#: src/console/authenticate.c:136 src/wx-console/authenticate.c:136 -#: src/gnome2-console/authenticate.c:95 src/tray-monitor/authenticate.c:94 -#: src/pyqt/pconsole.cpp:103 src/pyqt/bacula-gui-gtk/pconsole.cpp:103 -#: src/pyqt/save/pconsole.cpp:103 -msgid "Director rejected Hello command\n" +#: src/dird/verify.c:386 +msgid "Verify OK" msgstr "" -#: src/console/authenticate.c:146 src/wx-console/authenticate.c:146 -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 http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +#: src/dird/verify.c:390 +msgid "*** Verify Error ***" msgstr "" -#: src/console/console_conf.c:123 src/wx-console/console_conf.c:128 -#: src/gnome2-console/console_conf.c:122 -#, c-format -msgid "No record for %d %s\n" +#: src/dird/verify.c:394 +msgid "Verify warnings" msgstr "" -#: src/console/console_conf.c:132 src/wx-console/console_conf.c:137 -#, c-format -msgid "Console: name=%s rcfile=%s histfile=%s\n" +#: src/dird/verify.c:397 +msgid "Verify Canceled" msgstr "" -#: src/console/console_conf.c:136 src/wx-console/console_conf.c:141 -#: src/gnome2-console/console_conf.c:131 -#, c-format -msgid "Director: name=%s address=%s DIRport=%d\n" +#: src/dird/verify.c:400 +msgid "Verify Differences" msgstr "" -#: src/console/console_conf.c:242 src/wx-console/console_conf.c:246 -#: src/gnome2-console/console_conf.c:246 src/tray-monitor/tray_conf.c:262 -#: src/filed/filed_conf.c:332 src/dird/dird_conf.c:1137 -#: src/dird/dird_conf.c:1152 +#: src/dird/verify.c:405 #, c-format -msgid "%s item is required in %s resource, but not found.\n" +msgid "Inappropriate term code: %d %c\n" msgstr "" -#: src/console/console_conf.c:304 src/wx-console/console_conf.c:308 -#: src/gnome2-console/console_conf.c:314 src/tray-monitor/tray_conf.c:341 -#: src/filed/filed_conf.c:416 src/dird/dird_conf.c:1338 +#: src/dird/verify.c:419 #, c-format -msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" +msgid "" +"Bacula %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 "" -#: src/console/console.c:102 +#: src/dird/verify.c:454 #, c-format msgid "" -"Copyright (C) 2000-2005 Kern Sibbald\n" +"Bacula %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" -"Version: " msgstr "" -#: src/console/console.c:103 +#: src/dird/verify.c:530 #, c-format msgid "" -") %s %s %s\n" -"\n" -"Usage: bconsole [-s] [-c config_file] [-d debug_level]\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" +"birdSD.\n" +msgstr "" + +#: src/filed/backup.c:155 #, c-format -msgid "Cannot open file %s for input. ERR=%s\n" +msgid " Recursion turned off. Will not descend into %s\n" msgstr "" -#: src/console/console.c:802 -msgid "Too many arguments on output/tee command.\n" +#: src/filed/backup.c:162 +#, c-format +msgid " Filesystem change prohibited. Will not descend into %s\n" msgstr "" -#: src/console/console.c:818 +#: src/filed/backup.c:168 #, c-format -msgid "Cannot open file %s for output. ERR=%s\n" +msgid " Disallowed filesystem. Will not descend into %s\n" msgstr "" -#: src/wx-console/authenticate.c:129 -msgid "Bad response to Hello command: ERR=" +#: src/filed/backup.c:186 src/filed/verify.c:113 +#, c-format +msgid " Could not access %s: ERR=%s\n" msgstr "" -#: src/lib/bshm.c:69 +#: src/filed/backup.c:193 src/filed/verify.c:120 #, c-format -msgid "shmget failure key = %x\n" +msgid " Could not follow link %s: ERR=%s\n" msgstr "" -#: src/lib/bshm.c:77 +#: src/filed/backup.c:200 src/filed/verify.c:127 #, c-format -msgid "Could not get %d bytes of shared memory: %s\n" +msgid " Could not stat %s: ERR=%s\n" msgstr "" -#: src/lib/bshm.c:102 +#: src/filed/backup.c:207 src/filed/verify.c:133 #, c-format -msgid "Could not attach shared memory: %s\n" +msgid " Unchanged file skipped: %s\n" msgstr "" -#: src/lib/bshm.c:123 +#: src/filed/backup.c:210 #, c-format -msgid "Error detaching shared memory: %s\n" +msgid " Archive file not saved: %s\n" msgstr "" -#: src/lib/bshm.c:139 +#: src/filed/backup.c:214 src/filed/verify.c:147 #, c-format -msgid "Could not destroy shared memory: %s\n" +msgid " Could not open directory %s: ERR=%s\n" msgstr "" -#: src/lib/lex.c:79 src/wx-console/console_thread.cpp:186 +#: src/filed/backup.c:220 #, c-format -msgid "Problem probably begins at line %d.\n" +msgid " Unknown file type %d; not saved: %s\n" msgstr "" -#: src/lib/lex.c:84 src/wx-console/console_thread.cpp:191 +#: src/filed/backup.c:240 #, c-format -msgid "" -"Config error: %s\n" -" : line %d, col %d of file %s\n" -"%s\n" -"%s" +msgid "Python reader program \"%s\" not found.\n" msgstr "" -#: src/lib/lex.c:88 +#: src/filed/backup.c:269 src/filed/verify.c:214 #, c-format -msgid "Config error: %s\n" +msgid " Cannot open %s: ERR=%s.\n" msgstr "" -#: src/lib/lex.c:108 -msgid "Close of NULL file\n" +#: src/filed/backup.c:298 src/filed/verify.c:229 +#, c-format +msgid " Cannot open resource fork for %s: ERR=%s.\n" msgstr "" -#: src/lib/lex.c:181 -msgid "get_char: called after EOF\n" +#: src/filed/backup.c:349 +#, c-format +msgid "Unknown signature type %i.\n" msgstr "" -#: src/lib/lex.c:220 +#: src/filed/backup.c:414 src/filed/backup.c:499 src/filed/backup.c:525 +#: src/filed/backup.c:557 src/filed/backup.c:570 src/filed/backup.c:578 +#: src/filed/backup.c:619 src/filed/backup.c:653 #, c-format -msgid "Config token too long, file: %s, line %d, begins at line %d\n" +msgid "Network send error to SD. ERR=%s\n" msgstr "" -#: src/lib/lex.c:244 -msgid "none" +#: src/filed/backup.c:479 +#, c-format +msgid "Compression error: %d\n" msgstr "" -#: src/lib/lex.c:245 -msgid "comment" +#: src/filed/backup.c:516 +#, c-format +msgid "Read error on file %s. ERR=%s\n" msgstr "" -#: src/lib/lex.c:246 -msgid "number" +#: src/filed/backup.c:519 +msgid "Too many errors.\n" msgstr "" -#: src/lib/lex.c:247 -msgid "ip_addr" +#: src/filed/backup.c:548 +#, c-format +msgid "Error reading ACL of %s\n" msgstr "" -#: src/lib/lex.c:248 -msgid "identifier" +#: src/filed/filed.c:62 +#, c-format +msgid "" +"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" +" -c use as configuration file\n" +" -dnn set debug level to nn\n" +" -f run in foreground (for debugging)\n" +" -g groupid\n" +" -i inetd request\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" msgstr "" -#: src/lib/lex.c:249 -msgid "string" +#: src/filed/filed.c:282 +#, c-format +msgid "" +"No File daemon resource defined in %s\n" +"Without that I don't know who I am :-(\n" msgstr "" -#: src/lib/lex.c:250 -msgid "quoted_string" +#: src/filed/filed.c:287 +#, c-format +msgid "Only one Client resource permitted in %s\n" msgstr "" -#: src/lib/lex.c:286 +#: src/filed/filed.c:310 #, c-format -msgid "expected a positive integer number, got: %s" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon in %s.\n" msgstr "" -#: src/lib/lex.c:292 +#: src/filed/filed.c:339 #, c-format -msgid "expected a postive integer number, got: %s" +msgid "No Director resource defined in %s\n" msgstr "" -#: src/lib/lex.c:504 +#: src/filed/job.c:324 #, c-format -msgid "Cannot open included config file %s: %s\n" +msgid "2901 Job %s not found.\n" msgstr "" -#: src/lib/lex.c:539 +#: src/filed/job.c:340 #, c-format -msgid "expected an integer or a range, got %s: %s" +msgid "2001 Job %s marked to be canceled.\n" msgstr "" -#: src/lib/lex.c:553 src/lib/lex.c:561 src/lib/lex.c:572 src/lib/lex.c:580 -#, c-format -msgid "expected an integer number, got %s: %s" +#: src/filed/job.c:343 +msgid "2902 Error scanning cancel command.\n" msgstr "" -#: src/lib/lex.c:590 +#: src/filed/job.c:362 #, c-format -msgid "expected a name, got %s: %s" +msgid "2991 Bad setdebug command: %s\n" msgstr "" -#: src/lib/lex.c:594 +#: src/filed/job.c:378 #, c-format -msgid "name %s length %d too long, max is %d\n" +msgid "Bad estimate command: %s" msgstr "" -#: src/lib/lex.c:602 -#, c-format -msgid "expected a string, got %s: %s" +#: src/filed/job.c:379 +msgid "2992 Bad estimate command.\n" msgstr "" -#: src/lib/tls.c:81 +#: src/filed/job.c:402 #, c-format -msgid "" -"Error with certificate at depth: %d, issuer = %s, subject = %s, ERR=%d:%s\n" +msgid "Bad Job Command: %s" msgstr "" -#: src/lib/tls.c:118 -msgid "Error initializing SSL context" +#: src/filed/job.c:422 +#, c-format +msgid "Bad RunBeforeJob command: %s\n" msgstr "" -#: src/lib/tls.c:139 -msgid "Error loading certificate verification stores" +#: src/filed/job.c:423 src/filed/job.c:436 +msgid "2905 Bad RunBeforeJob command.\n" msgstr "" -#: src/lib/tls.c:144 -msgid "" -"Either a certificate file or a directory must be specified as a verification " -"store\n" +#: src/filed/job.c:449 +#, c-format +msgid "Bad RunAfter command: %s\n" msgstr "" -#: src/lib/tls.c:155 -msgid "Error loading certificate file" +#: src/filed/job.c:450 +msgid "2905 Bad RunAfterJob command.\n" msgstr "" -#: src/lib/tls.c:163 -msgid "Error loading private key" +#: src/filed/job.c:476 +#, c-format +msgid "%s could not execute. ERR=%s\n" msgstr "" -#: src/lib/tls.c:171 -msgid "Unable to open DH parameters file" +#: src/filed/job.c:485 +#, c-format +msgid "%s: %s\n" msgstr "" -#: src/lib/tls.c:177 -msgid "Unable to load DH parameters from specified file" +#: src/filed/job.c:490 +#, c-format +msgid "%s returned non-zero status=%d. ERR=%s\n" msgstr "" -#: src/lib/tls.c:181 -msgid "Failed to set TLS Diffie-Hellman parameters" +#: src/filed/job.c:575 +#, c-format +msgid "Error running program: %s. RtnStat=%d ERR=%s\n" msgstr "" -#: src/lib/tls.c:190 -msgid "Error setting cipher list, no valid ciphers available\n" +#: src/filed/job.c:585 +#, c-format +msgid "Cannot open FileSet input file: %s. ERR=%s\n" msgstr "" -#: src/lib/tls.c:238 -msgid "Peer failed to present a TLS certificate\n" +#: src/filed/job.c:679 +#, c-format +msgid "REGEX %s compile error. ERR=%s\n" msgstr "" -#: src/lib/tls.c:280 +#: src/filed/job.c:733 #, c-format -msgid "Peer %s failed to present a TLS certificate\n" +msgid "Invalid FileSet command: %s\n" msgstr "" -#: src/lib/tls.c:383 -msgid "Error creating file descriptor-based BIO" +#: src/filed/job.c:902 src/findlib/match.c:184 +#, c-format +msgid "Unknown include/exclude option: %c\n" msgstr "" -#: src/lib/tls.c:394 -msgid "Error creating new SSL object" +#: src/filed/job.c:962 src/stored/fd_cmds.c:329 +#, c-format +msgid "Could not create bootstrap file %s: ERR=%s\n" msgstr "" -#: src/lib/tls.c:458 src/lib/tls.c:481 -msgid "Connect failure" +#: src/filed/job.c:1061 +#, c-format +msgid "DIR and FD clocks differ by %d seconds, FD automatically adjusting.\n" msgstr "" -#: src/lib/tls.c:558 src/lib/tls.c:562 -msgid "TLS shutdown failure." +#: src/filed/job.c:1069 +#, c-format +msgid "Unknown backup level: %s\n" msgstr "" -#: src/lib/tls.c:611 src/lib/tls.c:631 -msgid "TLS read/write failure." +#: src/filed/job.c:1081 +#, c-format +msgid "Bad level command: %s\n" msgstr "" -#: src/lib/parse_conf.c:160 -msgid "***UNKNOWN***" +#: src/filed/job.c:1102 +#, c-format +msgid "Bad session command: %s" msgstr "" -#: src/lib/parse_conf.c:179 +#: src/filed/job.c:1123 #, c-format -msgid "Unable to initialize resource lock. ERR=%s\n" +msgid "Bad storage command: %s" msgstr "" -#: src/lib/parse_conf.c:213 src/tray-monitor/tray_conf.c:268 -#: src/dird/dird_conf.c:1143 +#: src/filed/job.c:1132 #, c-format -msgid "Too many items in %s resource\n" +msgid "Failed to connect to Storage daemon: %s:%d\n" msgstr "" -#: src/lib/parse_conf.c:264 src/lib/parse_conf.c:283 -#, c-format -msgid "expected an =, got: %s" +#: src/filed/job.c:1144 +msgid "Failed to authenticate Storage daemon.\n" msgstr "" -#: src/lib/parse_conf.c:291 -#, c-format -msgid "Unknown item code: %d\n" +#: src/filed/job.c:1170 +msgid "Cannot contact Storage daemon\n" msgstr "" -#: src/lib/parse_conf.c:331 +#: src/filed/job.c:1188 #, c-format -msgid "message type: %s not found" +msgid "Bad response to append open: %s\n" msgstr "" -#: src/lib/parse_conf.c:368 -#, c-format -msgid "Attempt to redefine name \"%s\" to \"%s\"." +#: src/filed/job.c:1193 +msgid "Bad response from stored to open command\n" msgstr "" -#: src/lib/parse_conf.c:459 +#: src/filed/job.c:1222 #, c-format -msgid "Could not find config Resource %s referenced on line %d : %s\n" +msgid "Generate VSS snapshots. Driver=\"%s\", Drive(s)=\"%s\"\n" msgstr "" -#: src/lib/parse_conf.c:463 +#: src/filed/job.c:1225 #, c-format -msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" +msgid "Generate VSS snapshots failed. ERR=%s\n" msgstr "" -#: src/lib/parse_conf.c:498 +#: src/filed/job.c:1232 #, c-format -msgid "Too many %s directives. Max. is %d. line %d: %s\n" +msgid "Generate VSS snapshot of drive \"%c:\\\" failed\n" msgstr "" -#: src/lib/parse_conf.c:508 +#: src/filed/job.c:1241 #, c-format -msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" +msgid "VSS Writer: %s\n" msgstr "" -#: src/lib/parse_conf.c:570 -#, c-format -msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" +#: src/filed/job.c:1245 +msgid "No drive letters found for generating VSS snapshots.\n" +msgstr "" + +#: src/filed/job.c:1248 +msgid "VSS was not initialized properly. VSS support is disabled.\n" +msgstr "" + +#: src/filed/job.c:1297 +msgid "Append Close with SD failed.\n" msgstr "" -#: src/lib/parse_conf.c:634 +#: src/filed/job.c:1301 #, c-format -msgid "expected a size number, got: %s" +msgid "Bad status %d returned from Storage Daemon.\n" msgstr "" -#: src/lib/parse_conf.c:639 +#: src/filed/job.c:1336 #, c-format -msgid "expected a size, got: %s" +msgid "2994 Bad verify command: %s\n" msgstr "" -#: src/lib/parse_conf.c:676 src/lib/parse_conf.c:681 +#: src/filed/job.c:1351 src/filed/job.c:1390 #, c-format -msgid "expected a time period, got: %s" +msgid "2994 Bad verify level: %s\n" msgstr "" -#: src/lib/parse_conf.c:700 src/lib/parse_conf.c:715 +#: src/filed/job.c:1430 #, c-format -msgid "Expect %s, got: %s" +msgid "Bad replace command. CMD=%s\n" msgstr "" -#: src/lib/parse_conf.c:740 +#: src/filed/job.c:1507 +msgid "Improper calling sequence.\n" +msgstr "" + +#: src/filed/job.c:1527 #, c-format -msgid "Expected a Tape Label keyword, got: %s" +msgid "Bad response to SD read open: %s\n" +msgstr "" + +#: src/filed/job.c:1532 +msgid "Bad response from stored to read open command\n" msgstr "" -#: src/lib/parse_conf.c:789 +#: src/filed/job.c:1598 #, c-format -msgid "Cannot open config file \"%s\": %s\n" +msgid "Comm error with SD. bad response to %s. ERR=%s\n" msgstr "" -#: src/lib/parse_conf.c:802 +#: src/filed/job.c:1601 #, c-format -msgid "Expected a Resource name identifier, got: %s" +msgid "Bad response to %s command. Wanted %s, got %s\n" msgstr "" -#: src/lib/parse_conf.c:814 +#: src/filed/pythonfd.c:150 src/stored/pythonsd.c:154 #, c-format -msgid "expected resource name, got: %s" +msgid "Cannot delete attribute %s" msgstr "" -#: src/lib/parse_conf.c:825 +#: src/filed/pythonfd.c:168 src/filed/pythonfd.c:184 src/stored/pythonsd.c:187 #, c-format -msgid "not in resource definition: %s" +msgid "Cannot find attribute %s" msgstr "" -#: src/lib/parse_conf.c:836 src/dird/inc_conf.c:320 src/dird/inc_conf.c:585 +#: src/filed/restore.c:55 #, c-format -msgid "expected an equals, got: %s" +msgid "Size of data or stream of %s not correct. Original %s, restored %s.\n" msgstr "" -#: src/lib/parse_conf.c:850 +#: src/filed/restore.c:165 src/filed/verify_vol.c:90 #, c-format -msgid "" -"Keyword \"%s\" not permitted in this resource.\n" -"Perhaps you left the trailing brace off of the previous resource." +msgid "Record header scan error: %s\n" msgstr "" -#: src/lib/parse_conf.c:867 +#: src/filed/restore.c:172 src/filed/verify_vol.c:99 #, c-format -msgid "unexpected token %d %s in resource definition" +msgid "Data record error. ERR=%s\n" msgstr "" -#: src/lib/parse_conf.c:873 +#: src/filed/restore.c:176 src/filed/verify_vol.c:103 #, c-format -msgid "Unknown parser state %d\n" +msgid "Actual data size %d not same as header %d\n" msgstr "" -#: src/lib/parse_conf.c:878 -msgid "End of conf file reached with unclosed resource." +#: src/filed/restore.c:201 src/filed/restore.c:383 +msgid "Logic error: output file should be open\n" msgstr "" -#: src/lib/mem_pool.c:95 +#: src/filed/restore.c:207 src/filed/restore.c:388 +msgid "Logic error: output file should not be open\n" +msgstr "" + +#: src/filed/restore.c:218 src/filed/verify_vol.c:142 +#: src/stored/bextract.c:289 src/stored/bls.c:371 src/stored/bscan.c:651 #, c-format -msgid "MemPool index %d larger than max %d\n" +msgid "Record header file index %ld not equal record index %ld\n" msgstr "" -#: src/lib/mem_pool.c:113 src/lib/mem_pool.c:133 src/lib/mem_pool.c:168 -#: src/lib/mem_pool.c:239 src/lib/mem_pool.c:259 src/lib/mem_pool.c:297 -#: src/lib/mem_pool.c:550 +#: src/filed/restore.c:231 src/stored/bextract.c:298 #, c-format -msgid "Out of memory requesting %d bytes\n" +msgid "%s stream not supported on this Client.\n" msgstr "" -#: src/lib/watchdog.c:69 +#: src/filed/restore.c:308 #, c-format -msgid "Unable to initialize watchdog lock. ERR=%s\n" +msgid " Cannot open resource fork for %s.\n" msgstr "" -#: src/lib/watchdog.c:165 -msgid "BUG! register_watchdog called before start_watchdog\n" +#: src/filed/restore.c:331 +#, c-format +msgid " Invalid length of Finder Info (got %d, not 32)\n" msgstr "" -#: src/lib/watchdog.c:168 +#: src/filed/restore.c:335 #, c-format -msgid "BUG! Watchdog %p has NULL callback\n" +msgid " Could not set Finder Info on %s\n" msgstr "" -#: src/lib/watchdog.c:171 +#: src/filed/restore.c:347 #, c-format -msgid "BUG! Watchdog %p has zero interval\n" +msgid "Can't restore ACL of %s\n" msgstr "" -#: src/lib/watchdog.c:191 -msgid "BUG! unregister_watchdog_unlocked called before start_watchdog\n" +#: src/filed/restore.c:359 +#, c-format +msgid "Can't restore default ACL of %s\n" msgstr "" -#: src/lib/watchdog.c:309 +#: src/filed/restore.c:391 src/stored/bextract.c:455 #, c-format -msgid "rwl_writelock failure. ERR=%s\n" +msgid "Unknown stream=%d ignored. This shouldn't happen!\n" msgstr "" -#: src/lib/watchdog.c:323 +#: src/filed/restore.c:428 #, c-format -msgid "rwl_writeunlock failure. ERR=%s\n" +msgid "" +"%d non-supported data streams and %d non-supported attrib streams ignored.\n" msgstr "" -#: src/lib/regex.c:1040 -msgid "Success" +#: src/filed/restore.c:432 +#, c-format +msgid "%d non-supported resource fork streams ignored.\n" msgstr "" -#: src/lib/regex.c:1043 -msgid "No match" +#: src/filed/restore.c:435 +#, c-format +msgid "%d non-supported Finder Info streams ignored.\n" msgstr "" -#: src/lib/regex.c:1046 -msgid "Invalid regular expression" +#: src/filed/restore.c:438 +#, c-format +msgid "%d non-supported acl streams ignored.\n" msgstr "" -#: src/lib/regex.c:1049 -msgid "Invalid collation character" +#: src/filed/restore.c:450 +msgid "None" msgstr "" -#: src/lib/regex.c:1052 -msgid "Invalid character class name" +#: src/filed/restore.c:454 +msgid "Zlib errno" msgstr "" -#: src/lib/regex.c:1055 -msgid "Trailing backslash" +#: src/filed/restore.c:456 +msgid "Zlib stream error" msgstr "" -#: src/lib/regex.c:1058 -msgid "Invalid back reference" +#: src/filed/restore.c:458 +msgid "Zlib data error" msgstr "" -#: src/lib/regex.c:1061 -msgid "Unmatched [ or [^" +#: src/filed/restore.c:460 +msgid "Zlib memory error" msgstr "" -#: src/lib/regex.c:1064 -msgid "Unmatched ( or \\(" +#: src/filed/restore.c:462 +msgid "Zlib buffer error" msgstr "" -#: src/lib/regex.c:1067 -msgid "Unmatched \\{" +#: src/filed/restore.c:464 +msgid "Zlib version error" msgstr "" -#: src/lib/regex.c:1070 -msgid "Invalid content of \\{\\}" +#: src/filed/restore.c:466 src/lib/util.c:546 src/lib/util.c:556 +#: src/lib/util.c:564 src/lib/util.c:571 src/lib/util.c:578 src/lib/util.c:592 +#: src/lib/util.c:602 src/lib/util.c:609 src/lib/util.c:620 +msgid "*none*" msgstr "" -#: src/lib/regex.c:1073 -msgid "Invalid range end" +#: src/filed/restore.c:498 src/stored/bextract.c:387 +#, c-format +msgid "Seek to %s error on %s: ERR=%s\n" msgstr "" -#: src/lib/regex.c:1076 -msgid "Memory exhausted" +#: src/filed/restore.c:522 +#, c-format +msgid "Uncompression error on file %s. ERR=%s\n" msgstr "" -#: src/lib/regex.c:1079 -msgid "Invalid preceding regular expression" +#: src/filed/restore.c:530 src/stored/bextract.c:421 +msgid "GZIP data stream found, but GZIP not configured!\n" msgstr "" -#: src/lib/regex.c:1082 -msgid "Premature end of regular expression" +#: src/filed/restore.c:539 src/stored/bextract.c:359 src/stored/bextract.c:409 +#, c-format +msgid "Write error on %s: %s\n" msgstr "" -#: src/lib/regex.c:1085 -msgid "Regular expression too big" +#: src/filed/status.c:67 +#, c-format +msgid "%s Version: %s (%s) %s %s %s %s\n" msgstr "" -#: src/lib/regex.c:1088 -msgid "Unmatched ) or \\)" +#: src/filed/status.c:71 +#, c-format +msgid "Daemon started %s, %d Job%s run since started.\n" msgstr "" -#: src/lib/regex.c:5874 -msgid "No previous regular expression" +#: src/filed/status.c:127 +#, c-format +msgid " Sizeof: off_t=%d size_t=%d debug=%d trace=%d\n" msgstr "" -#: src/lib/util.c:181 -msgid "Running" +#: src/filed/status.c:138 +msgid "Running Jobs:\n" msgstr "" -#: src/lib/util.c:184 -msgid "Blocked" +#: src/filed/status.c:149 +#, c-format +msgid "Director connected at: %s\n" msgstr "" -#: src/lib/util.c:194 -msgid "Non-fatal error" +#: src/filed/status.c:151 +#, c-format +msgid "JobId %d Job %s is running.\n" msgstr "" -#: src/lib/util.c:197 src/lib/util.c:264 -msgid "Canceled" +#: src/filed/status.c:154 +#, c-format +msgid " %s%s Job started: %s\n" msgstr "" -#: src/lib/util.c:200 -msgid "Verify differences" +#: src/filed/status.c:166 src/stored/status.c:323 +#, c-format +msgid " Files=%s Bytes=%s Bytes/sec=%s\n" msgstr "" -#: src/lib/util.c:203 -msgid "Waiting on FD" +#: src/filed/status.c:171 +#, c-format +msgid " Files Examined=%s\n" msgstr "" -#: src/lib/util.c:206 -msgid "Wait on SD" +#: src/filed/status.c:176 +#, c-format +msgid " Processing file: %s\n" msgstr "" -#: src/lib/util.c:209 -msgid "Wait for new Volume" +#: src/filed/status.c:187 +msgid " SDSocket closed.\n" msgstr "" -#: src/lib/util.c:212 -msgid "Waiting for mount" +#: src/filed/status.c:217 +msgid "Terminated Jobs:\n" msgstr "" -#: src/lib/util.c:215 -msgid "Waiting for Storage resource" +#: src/filed/status.c:219 +msgid " JobId Level Files Bytes Status Finished Name \n" msgstr "" -#: src/lib/util.c:218 -msgid "Waiting for Job resource" +#: src/filed/status.c:323 src/filed/status.c:347 src/stored/status.c:513 +#: src/stored/status.c:536 +#, c-format +msgid "Bad .status command: %s\n" msgstr "" -#: src/lib/util.c:221 -msgid "Waiting for Client resource" +#: src/filed/status.c:324 +msgid "2900 Bad .status command, missing argument.\n" msgstr "" -#: src/lib/util.c:224 -msgid "Waiting on Max Jobs" +#: src/filed/status.c:348 +msgid "2900 Bad .status command, wrong argument.\n" msgstr "" -#: src/lib/util.c:227 -msgid "Waiting for Start Time" +#: src/filed/status.c:385 src/stored/status.c:468 +msgid "Init Catalog" msgstr "" -#: src/lib/util.c:230 -msgid "Waiting on Priority" +#: src/filed/status.c:388 src/stored/status.c:471 +msgid "Volume to Catalog" msgstr "" -#: src/lib/util.c:237 -#, c-format -msgid "Unknown Job termination status=%d" +#: src/filed/status.c:391 src/stored/status.c:474 +msgid "Disk to Catalog" msgstr "" -#: src/lib/util.c:261 -msgid "Fatal Error" +#: src/filed/status.c:394 src/stored/status.c:477 +msgid "Data" msgstr "" -#: src/lib/util.c:267 -msgid "Differences" +#: src/filed/status.c:400 src/lib/util.c:351 src/stored/status.c:483 +msgid "Unknown Job Level" msgstr "" -#: src/lib/util.c:270 -msgid "Unknown term code" +#: src/filed/status.c:451 +msgid "Bacula Idle" msgstr "" -#: src/lib/util.c:286 src/dird/ua_run.c:561 -msgid "Backup" +#: src/filed/status.c:462 +msgid "Bacula Running" msgstr "" -#: src/lib/util.c:289 src/dird/ua_run.c:594 -msgid "Verify" +#: src/filed/status.c:476 +msgid "Last Job Canceled" msgstr "" -#: src/lib/util.c:292 src/gnome2-console/interface.c:261 -#: src/wx-console/wxbrestorepanel.cpp:384 -#: src/wx-console/wxbrestorepanel.cpp:1949 -msgid "Restore" +#: src/filed/status.c:480 +msgid "Last Job Failed" msgstr "" -#: src/lib/util.c:295 src/dird/ua_run.c:540 -msgid "Admin" +#: src/filed/status.c:484 +msgid "Last Job had Warnings" msgstr "" -#: src/lib/util.c:298 -msgid "Migrate" +#: src/filed/verify.c:45 +#, c-format +msgid "Cannot malloc %d network read buffer\n" msgstr "" -#: src/lib/util.c:301 -msgid "Copy" +#: src/filed/verify.c:136 +#, c-format +msgid " Archive file skipped: %s\n" msgstr "" -#: src/lib/util.c:304 -msgid "Unknown Type" +#: src/filed/verify.c:139 +#, c-format +msgid " Recursion turned off. Directory skipped: %s\n" msgstr "" -#: src/lib/util.c:336 -msgid "Verify Init Catalog" +#: src/filed/verify.c:142 +#, c-format +msgid " File system change prohibited. Directory skipped: %s\n" msgstr "" -#: src/lib/util.c:339 src/dird/ua_run.c:760 -msgid "Verify Volume to Catalog" +#: src/filed/verify.c:152 +#, c-format +msgid " Unknown file type %d: %s\n" msgstr "" -#: src/lib/util.c:342 src/dird/ua_run.c:761 -msgid "Verify Disk to Catalog" +#: src/filed/verify.c:195 src/filed/verify_vol.c:200 +#, c-format +msgid "Network error in send to Director: ERR=%s\n" msgstr "" -#: src/lib/util.c:345 -msgid "Verify Data" +#: src/filed/verify.c:284 +#, c-format +msgid "Error reading file %s: ERR=%s\n" msgstr "" -#: src/lib/util.c:546 src/lib/util.c:556 src/lib/util.c:564 src/lib/util.c:571 -#: src/lib/util.c:578 src/lib/util.c:592 src/lib/util.c:602 src/lib/util.c:609 -#: src/lib/util.c:620 src/filed/restore.c:629 -msgid "*none*" +#: src/filed/verify_vol.c:56 +msgid "Storage command not issued before Verify.\n" msgstr "" -#: src/lib/util.c:647 -msgid "Working directory not defined. Cannot continue.\n" +#: src/filed/verify_vol.c:136 +#, c-format +msgid "Error scanning record header: %s\n" msgstr "" -#: src/lib/util.c:650 +#: src/findlib/attribs.c:335 #, c-format -msgid "Working Directory: \"%s\" not found. Cannot continue.\n" +msgid "File size of restored file %s not correct. Original %s, restored %s.\n" msgstr "" -#: src/lib/util.c:654 +#: src/findlib/attribs.c:353 src/findlib/attribs.c:360 #, c-format -msgid "Working Directory: \"%s\" is not a directory. Cannot continue.\n" +msgid "Unable to set file owner %s: ERR=%s\n" msgstr "" -#: src/lib/bpipe.c:282 src/lib/bpipe.c:361 -msgid "Program killed by Bacula watchdog (timeout)\n" +#: src/findlib/attribs.c:366 +#, c-format +msgid "Unable to set file modes %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:50 +#: src/findlib/attribs.c:376 #, c-format -msgid "Only ipv4 and ipv6 are supported (%d)\n" +msgid "Unable to set file times %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:54 +#: src/findlib/attribs.c:390 #, c-format -msgid "Only ipv4 is supported (%d)\n" +msgid "Unable to set file flags %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:163 +#: src/findlib/attribs.c:635 #, c-format -msgid "It was tried to assign a ipv6 address to a ipv4(%d)\n" +msgid "Error in %s file %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:172 +#: src/findlib/attribs.c:652 #, c-format -msgid "It was tried to assign a ipv4 address to a ipv6(%d)\n" +msgid "Error in %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:251 -#, c-format -msgid "Can't add default address (%s)\n" +#: src/findlib/bfile.c:67 +msgid "GZIP data" msgstr "" -#: src/lib/address_conf.c:281 -msgid "the old style addresses cannot be mixed with new style" +#: src/findlib/bfile.c:69 +msgid "GZIP sparse data" msgstr "" -#: src/lib/address_conf.c:304 -#, c-format -msgid "can't resolve service(%s)" +#: src/findlib/bfile.c:71 +msgid "Win32 data" msgstr "" -#: src/lib/address_conf.c:314 -#, c-format -msgid "can't resolve hostname(%s) %s" +#: src/findlib/bfile.c:73 +msgid "Win32 GZIP data" msgstr "" -#: src/lib/address_conf.c:403 -#, c-format -msgid "Expected a block begin { , got: %s" +#: src/findlib/bfile.c:75 +msgid "File attributes" msgstr "" -#: src/lib/address_conf.c:408 -msgid "Empty addr block is not allowed" +#: src/findlib/bfile.c:77 +msgid "File data" msgstr "" -#: src/lib/address_conf.c:412 -#, c-format -msgid "Expected a string, got: %s" +#: src/findlib/bfile.c:79 +msgid "MD5 signature" msgstr "" -#: src/lib/address_conf.c:421 -#, c-format -msgid "Expected a string [ip|ipv4|ipv6], got: %s" +#: src/findlib/bfile.c:81 +msgid "Extended attributes" msgstr "" -#: src/lib/address_conf.c:425 -#, c-format -msgid "Expected a string [ip|ipv4], got: %s" +#: src/findlib/bfile.c:83 +msgid "Sparse data" msgstr "" -#: src/lib/address_conf.c:430 src/lib/address_conf.c:460 -#, c-format -msgid "Expected a equal =, got: %s" +#: src/findlib/bfile.c:85 +msgid "Program names" msgstr "" -#: src/lib/address_conf.c:434 -#, c-format -msgid "Expected a block beginn { , got: %s" +#: src/findlib/bfile.c:87 +msgid "Program data" msgstr "" -#: src/lib/address_conf.c:441 src/lib/address_conf.c:456 -#, c-format -msgid "Expected a identifier [addr|port], got: %s" +#: src/findlib/bfile.c:89 +msgid "SHA1 signature" msgstr "" -#: src/lib/address_conf.c:446 -msgid "Only one port per address block" +#: src/findlib/bfile.c:91 +msgid "HFS+ resource fork" msgstr "" -#: src/lib/address_conf.c:452 -msgid "Only one addr per address block" +#: src/findlib/bfile.c:93 +msgid "HFS+ Finder Info" msgstr "" -#: src/lib/address_conf.c:468 +#: src/findlib/create_file.c:86 #, c-format -msgid "Expected a number or a string, got: %s" +msgid "File skipped. Not newer: %s\n" msgstr "" -#: src/lib/address_conf.c:474 +#: src/findlib/create_file.c:93 #, c-format -msgid "Expected an IP number or a hostname, got: %s" +msgid "File skipped. Not older: %s\n" msgstr "" -#: src/lib/address_conf.c:480 -msgid "State machine missmatch" +#: src/findlib/create_file.c:99 +#, c-format +msgid "File skipped. Already exists: %s\n" msgstr "" -#: src/lib/address_conf.c:486 src/lib/address_conf.c:499 +#: src/findlib/create_file.c:124 #, c-format -msgid "Expected a end of block }, got: %s" +msgid "File %s already exists and could not be replaced. ERR=%s.\n" msgstr "" -#: src/lib/address_conf.c:492 +#: src/findlib/create_file.c:176 src/findlib/create_file.c:277 +#: src/findlib/create_file.c:328 #, c-format -msgid "Can't add hostname(%s) and port(%s) to addrlist (%s)" +msgid "bpkt already open fid=%d\n" msgstr "" -#: src/lib/address_conf.c:508 -#, c-format -msgid "Expected a hostname or IP nummer, got: %s" +#: src/findlib/create_file.c:198 +msgid "Could not save_dirn" msgstr "" -#: src/lib/address_conf.c:513 src/lib/address_conf.c:527 +#: src/findlib/create_file.c:207 src/findlib/create_file.c:220 #, c-format -msgid "can't add port (%s) to (%s)" +msgid "Could not chdir to %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:522 +#: src/findlib/create_file.c:240 #, c-format -msgid "Expected a port number or string, got: %s" -msgstr "" - -#: src/lib/jcr.c:279 -msgid "NULL jcr.\n" +msgid "Could not create %s: ERR=%s\n" msgstr "" -#: src/lib/jcr.c:400 +#: src/findlib/create_file.c:253 #, c-format -msgid "JCR use_count=%d JobId=%d\n" +msgid "Cannot make fifo %s: ERR=%s\n" msgstr "" -#: src/lib/jcr.c:682 +#: src/findlib/create_file.c:261 #, c-format -msgid "" -"Watchdog sending kill after %d secs to thread stalled reading Storage " -"daemon.\n" +msgid "Cannot make node %s: ERR=%s\n" msgstr "" -#: src/lib/jcr.c:694 +#: src/findlib/create_file.c:297 #, c-format -msgid "" -"Watchdog sending kill after %d secs to thread stalled reading File daemon.\n" +msgid "Could not symlink %s -> %s: ERR=%s\n" msgstr "" -#: src/lib/jcr.c:706 +#: src/findlib/create_file.c:307 #, c-format -msgid "" -"Watchdog sending kill after %d secs to thread stalled reading Director.\n" +msgid "Could not hard link %s -> %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:253 src/lib/message.c:263 +#: src/findlib/create_file.c:358 #, c-format -msgid "Could not open console message file %s: ERR=%s\n" +msgid "Original file %s not saved: type=%d\n" msgstr "" -#: src/lib/message.c:268 +#: src/findlib/create_file.c:361 #, c-format -msgid "Could not get con mutex: ERR=%s\n" +msgid "Unknown file type %d; not restored: %s\n" msgstr "" -#: src/lib/message.c:372 +#: src/findlib/create_file.c:392 #, c-format -msgid "open mail pipe %s failed: ERR=%s\n" -msgstr "" - -#: src/lib/message.c:378 -msgid "Bacula Message" +msgid "Zero length filename: %s\n" msgstr "" -#: src/lib/message.c:431 -msgid "open mail pipe failed.\n" +#: src/findlib/enable_priv.c:85 +msgid "AdjustTokenPrivileges set " msgstr "" -#: src/lib/message.c:443 +#: src/findlib/find_one.c:168 #, c-format -msgid "close error: ERR=%s\n" +msgid "Top level directory \"%s\" has an unlisted fstype\n" msgstr "" -#: src/lib/message.c:454 +#: src/findlib/makepath.c:117 #, c-format -msgid "Mail prog: %s" +msgid "Cannot create directory %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:463 +#: src/findlib/makepath.c:121 src/findlib/makepath.c:378 #, c-format -msgid "" -"Mail program terminated in error.\n" -"CMD=%s\n" -"ERR=%s\n" +msgid "%s exists but is not a directory\n" msgstr "" -#: src/lib/message.c:650 +#: src/findlib/makepath.c:276 src/findlib/makepath.c:337 +#: src/findlib/makepath.c:397 #, c-format -msgid "" -"Operator mail program terminated in error.\n" -"CMD=%s\n" -"ERR=%s\n" +msgid "Cannot change owner and/or group of %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:667 src/lib/message.c:689 src/lib/message.c:705 +#: src/findlib/makepath.c:297 #, c-format -msgid "fopen %s failed: ERR=%s\n" +msgid "Cannot chdir to directory, %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:933 +#: src/findlib/makepath.c:352 src/findlib/makepath.c:368 +#: src/findlib/makepath.c:402 #, c-format -msgid "%s: ABORTING due to ERROR in %s:%d\n" +msgid "Cannot change permissions of %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:937 +#: src/findlib/save-cwd.c:48 #, c-format -msgid "%s: ERROR TERMINATION at %s:%d\n" +msgid "Cannot open current directory: %s\n" msgstr "" -#: src/lib/message.c:942 +#: src/findlib/save-cwd.c:62 #, c-format -msgid "%s: Fatal Error because: " +msgid "Current directory: %s\n" msgstr "" -#: src/lib/message.c:944 +#: src/findlib/save-cwd.c:84 #, c-format -msgid "%s: Fatal Error at %s:%d because:\n" +msgid "Cannot get current directory: %s\n" msgstr "" -#: src/lib/message.c:948 +#: src/findlib/save-cwd.c:105 #, c-format -msgid "%s: ERROR: " +msgid "Cannot return to %s from %s: %s\n" msgstr "" -#: src/lib/message.c:950 +#: src/findlib/save-cwd.c:109 #, c-format -msgid "%s: ERROR in %s:%d " +msgid "Cannot return to saved working directory from %s: %s\n" msgstr "" -#: src/lib/message.c:953 +#: src/findlib/save-cwd.c:115 #, c-format -msgid "%s: Warning: " +msgid "Cannot return to %s: %s\n" msgstr "" -#: src/lib/message.c:956 +#: src/findlib/save-cwd.c:119 #, c-format -msgid "%s: Security violation: " +msgid "Cannot return to saved working directory: %s\n" msgstr "" -#: src/lib/message.c:1032 +#: src/gnome2-console/authenticate.c:74 #, c-format -msgid "%s ABORTING due to ERROR\n" +msgid "%s: Director authorization problem.\n" msgstr "" -#: src/lib/message.c:1035 -#, c-format -msgid "%s ERROR TERMINATION\n" +#: src/gnome2-console/authenticate.c:75 +msgid "Director authorization problem.\n" msgstr "" -#: src/lib/message.c:1038 -#, c-format -msgid "%s: %s Fatal error: " +#: src/gnome2-console/authenticate.c:77 +msgid "" +"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " +"help.\n" msgstr "" -#: src/lib/message.c:1044 +#: src/gnome2-console/authenticate.c:87 #, c-format -msgid "%s: %s Error: " +msgid "%s: Bad response to Hello command: ERR=%s\n" msgstr "" -#: src/lib/message.c:1050 -#, c-format -msgid "%s: %s Warning: " +#: src/gnome2-console/authenticate.c:89 +msgid "The Director is probably not running.\n" msgstr "" -#: src/lib/message.c:1053 +#: src/gnome2-console/console.c:88 #, c-format -msgid "%s: %s Security violation: " +msgid "" +"Copyright (C) 2002-2005 Kern Sibbald\n" +"\n" +"Version: %s (%s) %s %s %s\n" +"\n" +"Usage: gnome-console [-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 "" -#: src/lib/edit.c:433 +#: src/gnome2-console/console.c:219 #, c-format -msgid "Illegal character \"%c\" in name.\n" -msgstr "" - -#: src/lib/edit.c:440 -msgid "Name too long.\n" +msgid "Pthread cond init error = %s\n" msgstr "" -#: src/lib/edit.c:446 src/dird/ua_cmds.c:278 src/dird/ua_label.c:611 -msgid "Volume name must be at least one character long.\n" +#: src/gnome2-console/console.c:357 +msgid " Not Connected" msgstr "" -#: src/lib/bnet_server.c:96 +#: src/gnome2-console/console.c:478 #, c-format -msgid "Cannot open stream socket. ERR=%s. Current %s All %s\n" +msgid " Connecting to Director %s:%d" msgstr "" -#: src/lib/bnet_server.c:109 src/lib/bnet_server.c:258 +#: src/gnome2-console/console.c:479 #, c-format -msgid "Cannot set SO_REUSEADDR on socket: %s\n" +msgid "" +"Connecting to Director %s:%d\n" +"\n" msgstr "" -#: src/lib/bnet_server.c:118 +#: src/gnome2-console/console.c:494 src/wx-console/console_thread.cpp:360 #, c-format -msgid "Cannot bind port %d: ERR=%s: Retrying ...\n" +msgid "Passphrase for Console \"%s\" TLS private key: " msgstr "" -#: src/lib/bnet_server.c:123 +#: src/gnome2-console/console.c:516 src/wx-console/console_thread.cpp:381 #, c-format -msgid "Cannot bind port %d: ERR=%s.\n" +msgid "Passphrase for Director \"%s\" TLS private key: " msgstr "" -#: src/lib/bnet_server.c:134 -#, c-format -msgid "Could not init client queue: ERR=%s\n" +#: src/gnome2-console/console.c:535 src/tray-monitor/tray-monitor.c:860 +#: src/wx-console/console_thread.cpp:399 +msgid "Director daemon" msgstr "" -#: src/lib/bnet_server.c:157 src/lib/bnet_server.c:320 -#, c-format -msgid "Error in select: %s\n" +#: src/gnome2-console/console.c:547 +msgid " Initializing ..." msgstr "" -#: src/lib/bnet_server.c:178 src/lib/bnet_server.c:339 -#, c-format -msgid "Connection from %s:%d refused by hosts.access\n" +#: src/gnome2-console/console.c:583 +msgid " Connected" msgstr "" -#: src/lib/bnet_server.c:193 src/lib/bnet_server.c:351 src/lib/bnet.c:796 -#: src/lib/bnet.c:821 -#, c-format -msgid "Cannot set SO_KEEPALIVE on socket: %s\n" +#: src/gnome2-console/console.c:591 +msgid " Processing command ..." msgstr "" -#: src/lib/bnet_server.c:204 -msgid "Could not create client BSOCK.\n" +#: src/gnome2-console/console.c:626 +msgid " At prompt waiting for input ..." msgstr "" -#: src/lib/bnet_server.c:211 -#, c-format -msgid "Could not add job to client queue: ERR=%s\n" +#: src/gnome2-console/console.c:746 +msgid " Ready" msgstr "" -#: src/lib/bnet_server.c:222 +#: src/gnome2-console/console_conf.c:135 #, c-format -msgid "Could not destroy client queue: ERR=%s\n" +msgid "Console: name=%s\n" msgstr "" -#: src/lib/bnet_server.c:249 +#: src/gnome2-console/console_conf.c:138 #, c-format -msgid "Cannot open stream socket: %s\n" +msgid "ConsoleFont: name=%s font face=%s\n" msgstr "" -#: src/lib/bnet_server.c:278 -#, c-format -msgid "Cannot bind port %d: ERR=%s: retrying ...\n" +#: src/gnome2-console/interface.c:32 +msgid "_Connect" msgstr "" -#: src/lib/bnet_server.c:284 -msgid "Server socket" +#: src/gnome2-console/interface.c:33 src/gnome2-console/interface.c:232 +msgid "Connect to Director" msgstr "" -#: src/lib/bnet_server.c:284 src/lib/bnet_server.c:378 -#: src/dird/ua_select.c:337 -msgid "client" +#: src/gnome2-console/interface.c:39 +msgid "_Disconnect" msgstr "" -#: src/lib/bnet_server.c:366 -#, c-format -msgid "Socket accept error for %s. ERR=%s\n" +#: src/gnome2-console/interface.c:40 +msgid "Disconnect from Director" msgstr "" -#: src/lib/bget_msg.c:86 -msgid "Status OK\n" +#: src/gnome2-console/interface.c:93 +msgid "_Display Messages" msgstr "" -#: src/lib/bget_msg.c:90 -#, c-format -msgid "bget_msg: unknown signal %d\n" +#: src/gnome2-console/interface.c:129 +msgid "_File" msgstr "" -#: src/lib/rwlock.c:289 -msgid "rwl_writeunlock called too many times.\n" +#: src/gnome2-console/interface.c:136 +msgid "_Edit" msgstr "" -#: src/lib/rwlock.c:293 -msgid "rwl_writeunlock by non-owner.\n" +#: src/gnome2-console/interface.c:143 +msgid "_View" msgstr "" -#: src/lib/rwlock.c:358 src/lib/semlock.c:248 -#, c-format -msgid "Write lock failed. ERR=%s\n" +#: src/gnome2-console/interface.c:144 src/gnome2-console/interface.c:252 +msgid "Display Messages" msgstr "" -#: src/lib/rwlock.c:365 src/lib/semlock.c:255 -#, c-format -msgid "Write unlock failed. ERR=%s\n" +#: src/gnome2-console/interface.c:150 +msgid "_Settings" msgstr "" -#: src/lib/rwlock.c:375 src/lib/semlock.c:265 -#, c-format -msgid "Read lock failed. ERR=%s\n" +#: src/gnome2-console/interface.c:157 +msgid "_Help" msgstr "" -#: src/lib/rwlock.c:382 src/lib/semlock.c:272 -#, c-format -msgid "Read unlock failed. ERR=%s\n" +#: src/gnome2-console/interface.c:197 +msgid "Bacula Console" msgstr "" -#: src/lib/rwlock.c:391 src/lib/semlock.c:281 -#, c-format -msgid "Thread %d found unchanged elements %d times\n" +#: src/gnome2-console/interface.c:231 src/wx-console/wxbmainframe.cpp:229 +#: src/wx-console/wxbmainframe.cpp:597 +msgid "Connect" msgstr "" -#: src/lib/rwlock.c:423 src/lib/semlock.c:313 -#, c-format -msgid "Init rwlock failed. ERR=%s\n" +#: src/gnome2-console/interface.c:241 +msgid "Run" msgstr "" -#: src/lib/rwlock.c:438 src/lib/semlock.c:328 -#, c-format -msgid "Create thread failed. ERR=%s\n" +#: src/gnome2-console/interface.c:242 src/gnome2-console/interface.c:677 +#: src/gnome2-console/interface.c:690 +msgid "Run a Job" msgstr "" -#: src/lib/rwlock.c:449 src/lib/semlock.c:339 -#, c-format -msgid "Join thread failed. ERR=%s\n" +#: src/gnome2-console/interface.c:251 +msgid "Msgs" msgstr "" -#: src/lib/rwlock.c:452 src/lib/semlock.c:342 -#, c-format -msgid "%02d: interval %d, writes %d, reads %d\n" +#: src/gnome2-console/interface.c:261 src/lib/util.c:292 +#: src/wx-console/wxbrestorepanel.cpp:384 +#: src/wx-console/wxbrestorepanel.cpp:1949 +msgid "Restore" msgstr "" -#: src/lib/rwlock.c:462 src/lib/semlock.c:352 -#, c-format -msgid "data %02d: value %d, %d writes\n" +#: src/gnome2-console/interface.c:271 +msgid "Label" msgstr "" -#: src/lib/rwlock.c:467 src/lib/semlock.c:357 -#, c-format -msgid "Total: %d thread writes, %d data writes\n" +#: src/gnome2-console/interface.c:299 +msgid " Command: " msgstr "" -#: src/lib/rwlock.c:539 src/lib/semlock.c:429 -msgid "Try write lock" +#: src/gnome2-console/interface.c:307 +msgid "Enter Commands Here" msgstr "" -#: src/lib/rwlock.c:545 src/lib/semlock.c:435 -msgid "Try read lock" +#: src/gnome2-console/interface.c:318 +msgid " Status: " msgstr "" -#: src/lib/rwlock.c:600 src/lib/semlock.c:490 -msgid "Create thread" +#: src/gnome2-console/interface.c:326 +msgid " " msgstr "" -#: src/lib/rwlock.c:610 src/lib/semlock.c:500 -msgid "Join thread" +#: src/gnome2-console/interface.c:422 +msgid "About Bacula Console" msgstr "" -#: src/lib/rwlock.c:612 src/lib/semlock.c:502 -#, c-format -msgid "%02d: interval %d, updates %d, r_collisions %d, w_collisions %d\n" +#: src/gnome2-console/interface.c:436 +msgid "Bacula Console\n" msgstr "" -#: src/lib/rwlock.c:624 src/lib/semlock.c:514 -#, c-format -msgid "data %02d: value %d, %d updates\n" +#: src/gnome2-console/interface.c:444 +msgid "Copyright (c) 2000 - 2004, Kern Sibbald and John Walker" msgstr "" -#: src/lib/cram-md5.c:76 src/lib/cram-md5.c:101 -msgid "1999 Authorization failed.\n" +#: src/gnome2-console/interface.c:450 +msgid "Authors: Kern Sibbald and John Walker" msgstr "" -#: src/lib/smartall.c:132 src/lib/smartall.c:223 src/lib/smartall.c:238 -msgid "Out of memory\n" +#: src/gnome2-console/interface.c:456 +msgid "It comes by night and sucks the essence from your computers" msgstr "" -#: src/lib/smartall.c:160 -#, c-format -msgid "Attempt to free NULL called from %s:%d\n" +#: src/gnome2-console/interface.c:521 src/gnome2-console/interface.c:536 +msgid "Select Director" msgstr "" -#: src/lib/smartall.c:176 -#, c-format -msgid "qp->qnext->qprev != qp called from %s:%d\n" +#: src/gnome2-console/interface.c:708 src/gnome2-console/interface.c:1616 +msgid "Job:" msgstr "" -#: src/lib/smartall.c:180 -#, c-format -msgid "qp->qprev->qnext != qp called from %s:%d\n" +#: src/gnome2-console/interface.c:728 +msgid " Type:" msgstr "" -#: src/lib/smartall.c:189 -#, c-format -msgid "Buffer overrun called from %s:%d\n" +#: src/gnome2-console/interface.c:757 src/gnome2-console/interface.c:1644 +#: src/wx-console/wxbrestorepanel.cpp:1862 +msgid "Client:" msgstr "" -#: src/lib/smartall.c:260 -#, c-format -msgid "sm_realloc size: %d\n" +#: src/gnome2-console/interface.c:787 src/gnome2-console/interface.c:1672 +msgid "FileSet: " msgstr "" -#: src/lib/smartall.c:301 -#, c-format -msgid "sm_realloc %d at %x from %s:%d\n" +#: src/gnome2-console/interface.c:813 src/wx-console/wxbrestorepanel.cpp:1868 +msgid "Priority:" msgstr "" -#: src/lib/smartall.c:363 -#, 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: %lx\n" +#: src/gnome2-console/interface.c:836 +msgid "Level:" msgstr "" -#: src/lib/smartall.c:374 -#, c-format -msgid "Orphaned buffer: %6u bytes allocated at line %d of %s %s\n" +#: src/gnome2-console/interface.c:866 src/gnome2-console/interface.c:1418 +#: src/gnome2-console/interface.c:1700 +msgid "Pool:" msgstr "" -#: src/lib/smartall.c:410 -#, c-format -msgid "Damaged buffer found. Called from %s:%d\n" +#: src/gnome2-console/interface.c:895 src/gnome2-console/interface.c:1393 +#: src/gnome2-console/interface.c:1728 src/wx-console/wxbrestorepanel.cpp:1864 +msgid "Storage:" msgstr "" -#: src/lib/smartall.c:440 -#, c-format -msgid "" -"\n" -"Damaged buffers found at %s:%d\n" +#: src/gnome2-console/interface.c:924 +msgid "Messages:" msgstr "" -#: src/lib/smartall.c:443 -#, c-format -msgid " discovery of bad prev link.\n" +#: src/gnome2-console/interface.c:952 +msgid "Where: " msgstr "" -#: src/lib/smartall.c:446 -#, c-format -msgid " discovery of bad next link.\n" +#: src/gnome2-console/interface.c:970 src/wx-console/wxbrestorepanel.cpp:1866 +msgid "When:" msgstr "" -#: src/lib/smartall.c:449 -#, c-format -msgid " discovery of data overrun.\n" +#: src/gnome2-console/interface.c:988 src/wx-console/wxbrestorepanel.cpp:1847 +msgid "Bootstrap:" msgstr "" -#: src/lib/smartall.c:452 -#, c-format -msgid " Buffer address: %lx\n" +#: src/gnome2-console/interface.c:1108 +msgid "_New" msgstr "" -#: src/lib/smartall.c:459 -#, c-format -msgid "Damaged buffer: %6u bytes allocated at line %d of %s %s\n" +#: src/gnome2-console/interface.c:1177 +msgid "Restore File Selection" msgstr "" -#: src/lib/bsys.c:176 src/lib/bsys.c:192 src/lib/bsys.c:202 src/lib/bsys.c:214 -#, c-format -msgid "Out of memory: ERR=%s\n" +#: src/gnome2-console/interface.c:1226 +msgid "Current dir:" msgstr "" -#: src/lib/bsys.c:256 -msgid "Buffer overflow.\n" +#: src/gnome2-console/interface.c:1252 +msgid "Files Selected: " msgstr "" -#: src/lib/bsys.c:322 -msgid "Bad errno" +#: src/gnome2-console/interface.c:1373 src/gnome2-console/interface.c:1383 +msgid "Label a Volume" msgstr "" -#: src/lib/bsys.c:339 -msgid "Possible mutex deadlock.\n" +#: src/gnome2-console/interface.c:1444 +msgid "Volume Name:" msgstr "" -#: src/lib/bsys.c:343 src/lib/bsys.c:375 -#, c-format -msgid "Mutex lock failure. ERR=%s\n" +#: src/gnome2-console/interface.c:1459 +msgid "Slot:" msgstr "" -#: src/lib/bsys.c:346 -msgid "Possible mutex deadlock resolved.\n" +#: src/gnome2-console/interface.c:1585 +msgid "Restore Files Dialog" msgstr "" -#: src/lib/bsys.c:358 -#, c-format -msgid "Mutex unlock not locked. ERR=%s\n" +#: src/gnome2-console/interface.c:1599 +msgid "Restore Files" msgstr "" -#: src/lib/bsys.c:363 src/lib/bsys.c:385 -#, c-format -msgid "Mutex unlock failure. ERR=%s\n" +#: src/gnome2-console/interface.c:1756 +msgid "Before:" msgstr "" -#: src/lib/bsys.c:399 -#, c-format -msgid "Memset for %d bytes at %s:%d\n" +#: src/gnome2-console/interface.c:1799 +msgid "Select Files" msgstr "" -#: src/lib/bsys.c:428 -#, c-format -msgid "Cannot open pid file. %s ERR=%s\n" +#: src/gnome2-console/interface.c:1883 +msgid "Progress" msgstr "" -#: src/lib/bsys.c:432 -#, c-format -msgid "" -"%s is already running. pid=%d\n" -"Check file %s\n" +#: src/gnome2-console/restore.c:121 +msgid "Mark" msgstr "" -#: src/lib/bsys.c:445 -#, c-format -msgid "Could not open pid file. %s ERR=%s\n" +#: src/gnome2-console/restore.c:121 +msgid "File" msgstr "" -#: src/lib/bsys.c:565 -#, c-format -msgid "Could not create state file. %s ERR=%s\n" +#: src/gnome2-console/restore.c:121 +msgid "Mode" msgstr "" -#: src/lib/bsys.c:584 -#, c-format -msgid "Write final hdr error: ERR=%s\n" +#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:288 +msgid "User" msgstr "" -#: src/lib/bsys.c:611 -#, c-format -msgid "Could not find specified group: %s\n" +#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:292 +msgid "Group" msgstr "" -#: src/lib/bsys.c:614 src/lib/bsys.c:618 -#, c-format -msgid "Could not set specified group: %s\n" +#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:276 +msgid "Size" msgstr "" -#: src/lib/bsys.c:627 -#, c-format -msgid "Could not find specified userid: %s\n" +#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:280 +msgid "Date" msgstr "" -#: src/lib/bsys.c:630 +#: src/gnome2-console/support.c:41 #, c-format -msgid "Could not set specified userid: %s\n" +msgid "Widget not found: %s" +msgstr "" + +#: src/gnome2-console/support.c:60 src/gnome2-console/support.c:85 +#, c-format +msgid "Couldn't find pixmap file: %s" +msgstr "" + +#: src/gnome2-console/support.c:92 +#, c-format +msgid "Failed to load pixbuf file: %s: %s\n" +msgstr "" + +#: src/lib/tls.c:105 +#, c-format +msgid "" +"Error with certificate at depth: %d, issuer = %s, subject = %s, ERR=%d:%s\n" +msgstr "" + +#: src/lib/tls.c:152 +msgid "Error initializing SSL context" +msgstr "" + +#: src/lib/tls.c:173 +msgid "Error loading certificate verification stores" +msgstr "" + +#: src/lib/tls.c:178 +msgid "" +"Either a certificate file or a directory must be specified as a verification " +"store\n" +msgstr "" + +#: src/lib/tls.c:189 +msgid "Error loading certificate file" +msgstr "" + +#: src/lib/tls.c:197 +msgid "Error loading private key" +msgstr "" + +#: src/lib/tls.c:205 +msgid "Unable to open DH parameters file" +msgstr "" + +#: src/lib/tls.c:211 +msgid "Unable to load DH parameters from specified file" +msgstr "" + +#: src/lib/tls.c:215 +msgid "Failed to set TLS Diffie-Hellman parameters" +msgstr "" + +#: src/lib/tls.c:224 +msgid "Error setting cipher list, no valid ciphers available\n" +msgstr "" + +#: src/lib/tls.c:272 +msgid "Peer failed to present a TLS certificate\n" +msgstr "" + +#: src/lib/tls.c:314 +#, c-format +msgid "Peer %s failed to present a TLS certificate\n" +msgstr "" + +#: src/lib/tls.c:417 +msgid "Error creating file descriptor-based BIO" +msgstr "" + +#: src/lib/tls.c:428 +msgid "Error creating new SSL object" +msgstr "" + +#: src/lib/tls.c:492 src/lib/tls.c:515 +msgid "Connect failure" +msgstr "" + +#: src/lib/tls.c:592 src/lib/tls.c:596 +msgid "TLS shutdown failure." +msgstr "" + +#: src/lib/tls.c:645 src/lib/tls.c:665 +msgid "TLS read/write failure." +msgstr "" + +#: src/lib/tls.c:723 src/lib/tls.c:780 src/stored/dev.c:209 +#: src/stored/dev.c:227 src/stored/dev.c:233 src/stored/stored_conf.c:593 +#, c-format +msgid "Unable to init mutex: ERR=%s\n" +msgstr "" + +#: src/lib/tls.c:743 src/lib/tls.c:812 +#, c-format +msgid "Unable to destroy mutex: ERR=%s\n" +msgstr "" + +#: src/lib/tls.c:877 +#, c-format +msgid "Unable to init OpenSSL threading: ERR=%s\n" +msgstr "" + +#: src/lib/tls.c:887 +msgid "Failed to seed OpenSSL PRNG\n" +msgstr "" + +#: src/lib/tls.c:913 +msgid "Failed to save OpenSSL PRNG\n" +msgstr "" + +#: src/lib/address_conf.c:50 +#, c-format +msgid "Only ipv4 and ipv6 are supported (%d)\n" +msgstr "" + +#: src/lib/address_conf.c:54 +#, c-format +msgid "Only ipv4 is supported (%d)\n" +msgstr "" + +#: src/lib/address_conf.c:163 +#, c-format +msgid "It was tried to assign a ipv6 address to a ipv4(%d)\n" +msgstr "" + +#: src/lib/address_conf.c:172 +#, c-format +msgid "It was tried to assign a ipv4 address to a ipv6(%d)\n" +msgstr "" + +#: src/lib/address_conf.c:251 +#, c-format +msgid "Can't add default address (%s)\n" +msgstr "" + +#: src/lib/address_conf.c:281 +msgid "the old style addresses cannot be mixed with new style" +msgstr "" + +#: src/lib/address_conf.c:304 +#, c-format +msgid "can't resolve service(%s)" +msgstr "" + +#: src/lib/address_conf.c:314 +#, c-format +msgid "can't resolve hostname(%s) %s" +msgstr "" + +#: src/lib/address_conf.c:403 +#, c-format +msgid "Expected a block begin { , got: %s" +msgstr "" + +#: src/lib/address_conf.c:408 +msgid "Empty addr block is not allowed" +msgstr "" + +#: src/lib/address_conf.c:412 +#, c-format +msgid "Expected a string, got: %s" +msgstr "" + +#: src/lib/address_conf.c:421 +#, c-format +msgid "Expected a string [ip|ipv4|ipv6], got: %s" +msgstr "" + +#: src/lib/address_conf.c:425 +#, c-format +msgid "Expected a string [ip|ipv4], got: %s" +msgstr "" + +#: src/lib/address_conf.c:430 src/lib/address_conf.c:460 +#, c-format +msgid "Expected a equal =, got: %s" +msgstr "" + +#: src/lib/address_conf.c:434 +#, c-format +msgid "Expected a block beginn { , got: %s" +msgstr "" + +#: src/lib/address_conf.c:441 src/lib/address_conf.c:456 +#, c-format +msgid "Expected a identifier [addr|port], got: %s" +msgstr "" + +#: src/lib/address_conf.c:446 +msgid "Only one port per address block" +msgstr "" + +#: src/lib/address_conf.c:452 +msgid "Only one addr per address block" +msgstr "" + +#: src/lib/address_conf.c:468 +#, c-format +msgid "Expected a number or a string, got: %s" +msgstr "" + +#: src/lib/address_conf.c:474 +#, c-format +msgid "Expected an IP number or a hostname, got: %s" +msgstr "" + +#: src/lib/address_conf.c:480 +msgid "State machine missmatch" +msgstr "" + +#: src/lib/address_conf.c:486 src/lib/address_conf.c:499 +#, c-format +msgid "Expected a end of block }, got: %s" +msgstr "" + +#: src/lib/address_conf.c:492 +#, c-format +msgid "Can't add hostname(%s) and port(%s) to addrlist (%s)" +msgstr "" + +#: src/lib/address_conf.c:508 +#, c-format +msgid "Expected a hostname or IP nummer, got: %s" +msgstr "" + +#: src/lib/address_conf.c:513 src/lib/address_conf.c:527 +#, c-format +msgid "can't add port (%s) to (%s)" +msgstr "" + +#: src/lib/address_conf.c:522 +#, c-format +msgid "Expected a port number or string, got: %s" +msgstr "" + +#: src/lib/attr.c:64 +#, c-format +msgid "Error scanning attributes: %s\n" msgstr "" #: src/lib/berrno.c:48 @@ -6988,14 +6865,13 @@ msgstr "" msgid "Invalid errno. No error message possible." msgstr "" -#: src/lib/res.c:66 -#, c-format -msgid "rwl_writelock failure at %s:%d: ERR=%s\n" +#: src/lib/bget_msg.c:86 +msgid "Status OK\n" msgstr "" -#: src/lib/res.c:76 +#: src/lib/bget_msg.c:90 #, c-format -msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" +msgid "bget_msg: unknown signal %d\n" msgstr "" #: src/lib/bnet.c:109 @@ -7097,6 +6973,12 @@ msgstr "" msgid "Socket open error. proto=%d port=%d. ERR=%s\n" msgstr "" +#: src/lib/bnet.c:796 src/lib/bnet.c:821 src/lib/bnet_server.c:193 +#: src/lib/bnet_server.c:351 +#, c-format +msgid "Cannot set SO_KEEPALIVE on socket: %s\n" +msgstr "" + #: src/lib/bnet.c:852 #, c-format msgid "" @@ -7143,7116 +7025,6813 @@ msgstr "" msgid "Unknown sig %d" msgstr "" -#: src/lib/pythonlib.c:108 -msgid "Could not initialize Python\n" -msgstr "" - -#: src/lib/pythonlib.c:113 +#: src/lib/bnet_pkt.c:89 src/lib/bnet_pkt.c:147 #, c-format -msgid "Could not Run Python string %s\n" +msgid "Unknown BPKT type: %d\n" msgstr "" -#: src/lib/pythonlib.c:125 -msgid "Could not initialize Python Job type.\n" +#: src/lib/bnet_server.c:96 +#, c-format +msgid "Cannot open stream socket. ERR=%s. Current %s All %s\n" msgstr "" -#: src/lib/pythonlib.c:130 +#: src/lib/bnet_server.c:109 src/lib/bnet_server.c:258 #, c-format -msgid "Could not import Python script %s/%s. Python disabled.\n" +msgid "Cannot set SO_REUSEADDR on socket: %s\n" msgstr "" -#: src/lib/pythonlib.c:230 -msgid "Could not create Python Job Object.\n" +#: src/lib/bnet_server.c:118 +#, c-format +msgid "Cannot bind port %d: ERR=%s: Retrying ...\n" msgstr "" -#: src/lib/pythonlib.c:243 src/lib/pythonlib.c:267 +#: src/lib/bnet_server.c:123 #, c-format -msgid "Python function \"%s\" not found.\n" +msgid "Cannot bind port %d: ERR=%s.\n" msgstr "" -#: src/lib/pythonlib.c:282 +#: src/lib/bnet_server.c:134 #, c-format -msgid "Unknown Python daemon event %s\n" +msgid "Could not init client queue: ERR=%s\n" msgstr "" -#: src/lib/attr.c:64 +#: src/lib/bnet_server.c:157 src/lib/bnet_server.c:320 #, c-format -msgid "Error scanning attributes: %s\n" +msgid "Error in select: %s\n" msgstr "" -#: src/lib/daemon.c:53 +#: src/lib/bnet_server.c:178 src/lib/bnet_server.c:339 #, c-format -msgid "Cannot fork to become daemon: %s\n" +msgid "Connection from %s:%d refused by hosts.access\n" msgstr "" -#: src/lib/signal.c:61 -msgid "Invalid signal number" +#: src/lib/bnet_server.c:204 +msgid "Could not create client BSOCK.\n" msgstr "" -#: src/lib/signal.c:87 +#: src/lib/bnet_server.c:211 #, c-format -msgid "Bacula interrupted by signal %d: %s\n" +msgid "Could not add job to client queue: ERR=%s\n" msgstr "" -#: src/lib/signal.c:100 +#: src/lib/bnet_server.c:222 #, c-format -msgid "Kaboom! %s, %s got signal %d. Attempting traceback.\n" +msgid "Could not destroy client queue: ERR=%s\n" msgstr "" -#: src/lib/signal.c:102 +#: src/lib/bnet_server.c:249 #, c-format -msgid "Kaboom! exepath=%s\n" +msgid "Cannot open stream socket: %s\n" msgstr "" -#: src/lib/signal.c:136 +#: src/lib/bnet_server.c:278 #, c-format -msgid "Fork error: ERR=%s\n" +msgid "Cannot bind port %d: ERR=%s: retrying ...\n" msgstr "" -#: src/lib/signal.c:143 -#, c-format -msgid "Calling: %s %s %s\n" +#: src/lib/bnet_server.c:284 +msgid "Server socket" msgstr "" -#: src/lib/signal.c:145 +#: src/lib/bnet_server.c:366 #, c-format -msgid "execv: %s failed: ERR=%s\n" +msgid "Socket accept error for %s. ERR=%s\n" msgstr "" -#: src/lib/signal.c:160 -#, c-format -msgid "Traceback complete, attempting cleanup ...\n" +#: src/lib/bpipe.c:282 src/lib/bpipe.c:361 +msgid "Program killed by Bacula watchdog (timeout)\n" msgstr "" -#: src/lib/signal.c:168 +#: src/lib/bshm.c:69 #, c-format -msgid "It looks like the traceback worked ...\n" +msgid "shmget failure key = %x\n" msgstr "" -#: src/lib/signal.c:197 +#: src/lib/bshm.c:77 #, c-format -msgid "BA_NSIG too small (%d) should be (%d)\n" +msgid "Could not get %d bytes of shared memory: %s\n" msgstr "" -#: src/lib/signal.c:203 -msgid "UNKNOWN SIGNAL" +#: src/lib/bshm.c:102 +#, c-format +msgid "Could not attach shared memory: %s\n" msgstr "" -#: src/lib/signal.c:204 -msgid "Hangup" +#: src/lib/bshm.c:123 +#, c-format +msgid "Error detaching shared memory: %s\n" msgstr "" -#: src/lib/signal.c:205 -msgid "Interrupt" +#: src/lib/bshm.c:139 +#, c-format +msgid "Could not destroy shared memory: %s\n" msgstr "" -#: src/lib/signal.c:206 -msgid "Quit" +#: src/lib/bsys.c:176 src/lib/bsys.c:192 src/lib/bsys.c:202 src/lib/bsys.c:214 +#, c-format +msgid "Out of memory: ERR=%s\n" msgstr "" -#: src/lib/signal.c:207 -msgid "Illegal instruction" +#: src/lib/bsys.c:256 +msgid "Buffer overflow.\n" msgstr "" -#: src/lib/signal.c:208 -msgid "Trace/Breakpoint trap" +#: src/lib/bsys.c:322 +msgid "Bad errno" msgstr "" -#: src/lib/signal.c:209 -msgid "Abort" +#: src/lib/bsys.c:339 +msgid "Possible mutex deadlock.\n" msgstr "" -#: src/lib/signal.c:211 -msgid "EMT instruction (Emulation Trap)" +#: src/lib/bsys.c:343 src/lib/bsys.c:375 +#, c-format +msgid "Mutex lock failure. ERR=%s\n" msgstr "" -#: src/lib/signal.c:214 -msgid "IOT trap" +#: src/lib/bsys.c:346 +msgid "Possible mutex deadlock resolved.\n" msgstr "" -#: src/lib/signal.c:216 -msgid "BUS error" +#: src/lib/bsys.c:358 +#, c-format +msgid "Mutex unlock not locked. ERR=%s\n" msgstr "" -#: src/lib/signal.c:217 -msgid "Floating-point exception" +#: src/lib/bsys.c:363 src/lib/bsys.c:385 +#, c-format +msgid "Mutex unlock failure. ERR=%s\n" msgstr "" -#: src/lib/signal.c:218 -msgid "Kill, unblockable" +#: src/lib/bsys.c:399 +#, c-format +msgid "Memset for %d bytes at %s:%d\n" msgstr "" -#: src/lib/signal.c:219 -msgid "User-defined signal 1" +#: src/lib/bsys.c:428 +#, c-format +msgid "Cannot open pid file. %s ERR=%s\n" msgstr "" -#: src/lib/signal.c:220 -msgid "Segmentation violation" +#: src/lib/bsys.c:432 +#, c-format +msgid "" +"%s is already running. pid=%d\n" +"Check file %s\n" msgstr "" -#: src/lib/signal.c:221 -msgid "User-defined signal 2" +#: src/lib/bsys.c:445 +#, c-format +msgid "Could not open pid file. %s ERR=%s\n" msgstr "" -#: src/lib/signal.c:222 -msgid "Broken pipe" +#: src/lib/bsys.c:565 +#, c-format +msgid "Could not create state file. %s ERR=%s\n" msgstr "" -#: src/lib/signal.c:223 -msgid "Alarm clock" +#: src/lib/bsys.c:584 +#, c-format +msgid "Write final hdr error: ERR=%s\n" msgstr "" -#: src/lib/signal.c:224 -msgid "Termination" +#: src/lib/bsys.c:611 +#, c-format +msgid "Could not find specified group: %s\n" msgstr "" -#: src/lib/signal.c:226 -msgid "Stack fault" +#: src/lib/bsys.c:614 src/lib/bsys.c:618 +#, c-format +msgid "Could not set specified group: %s\n" msgstr "" -#: src/lib/signal.c:228 -msgid "Child status has changed" +#: src/lib/bsys.c:627 +#, c-format +msgid "Could not find specified userid: %s\n" msgstr "" -#: src/lib/signal.c:229 -msgid "Continue" +#: src/lib/bsys.c:630 +#, c-format +msgid "Could not set specified userid: %s\n" msgstr "" -#: src/lib/signal.c:230 -msgid "Stop, unblockable" +#: src/lib/btimers.c:241 +msgid "stop_btimer called with NULL btimer_id\n" msgstr "" -#: src/lib/signal.c:231 -msgid "Keyboard stop" +#: src/lib/cram-md5.c:76 src/lib/cram-md5.c:101 +msgid "1999 Authorization failed.\n" msgstr "" -#: src/lib/signal.c:232 -msgid "Background read from tty" +#: src/lib/daemon.c:53 +#, c-format +msgid "Cannot fork to become daemon: %s\n" msgstr "" -#: src/lib/signal.c:233 -msgid "Background write to tty" +#: src/lib/edit.c:400 +#, c-format +msgid "Illegal character \"%c\" in name.\n" msgstr "" -#: src/lib/signal.c:234 -msgid "Urgent condition on socket" +#: src/lib/edit.c:407 +msgid "Name too long.\n" msgstr "" -#: src/lib/signal.c:235 -msgid "CPU limit exceeded" +#: src/lib/events.c:161 +msgid "Events not available" msgstr "" -#: src/lib/signal.c:236 -msgid "File size limit exceeded" +#: src/lib/jcr.c:278 +msgid "NULL jcr.\n" msgstr "" -#: src/lib/signal.c:237 -msgid "Virtual alarm clock" +#: src/lib/jcr.c:399 +#, c-format +msgid "JCR use_count=%d JobId=%d\n" msgstr "" -#: src/lib/signal.c:238 -msgid "Profiling alarm clock" +#: src/lib/jcr.c:680 +#, c-format +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading Storage " +"daemon.\n" msgstr "" -#: src/lib/signal.c:239 -msgid "Window size change" +#: src/lib/jcr.c:692 +#, c-format +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading File daemon.\n" msgstr "" -#: src/lib/signal.c:240 -msgid "I/O now possible" +#: src/lib/jcr.c:704 +#, c-format +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading Director.\n" msgstr "" -#: src/lib/signal.c:242 -msgid "Power failure restart" +#: src/lib/lex.c:79 src/wx-console/console_thread.cpp:186 +#, c-format +msgid "Problem probably begins at line %d.\n" msgstr "" -#: src/lib/signal.c:245 -msgid "No runnable lwp" +#: src/lib/lex.c:84 src/wx-console/console_thread.cpp:191 +#, c-format +msgid "" +"Config error: %s\n" +" : line %d, col %d of file %s\n" +"%s\n" +"%s" msgstr "" -#: src/lib/signal.c:248 -msgid "SIGLWP special signal used by thread library" +#: src/lib/lex.c:88 +#, c-format +msgid "Config error: %s\n" msgstr "" -#: src/lib/signal.c:251 -msgid "Checkpoint Freeze" +#: src/lib/lex.c:108 +msgid "Close of NULL file\n" msgstr "" -#: src/lib/signal.c:254 -msgid "Checkpoint Thaw" +#: src/lib/lex.c:181 +msgid "get_char: called after EOF\n" msgstr "" -#: src/lib/signal.c:257 -msgid "Thread Cancellation" +#: src/lib/lex.c:220 +#, c-format +msgid "Config token too long, file: %s, line %d, begins at line %d\n" msgstr "" -#: src/lib/signal.c:260 -msgid "Resource Lost (e.g. record-lock lost)" +#: src/lib/lex.c:244 +msgid "none" msgstr "" -#: src/lib/events.c:161 -msgid "Events not available" +#: src/lib/lex.c:245 +msgid "comment" msgstr "" -#: src/lib/btimers.c:241 -msgid "stop_btimer called with NULL btimer_id\n" +#: src/lib/lex.c:246 +msgid "number" msgstr "" -#: src/lib/var.c:2659 -msgid "everything ok" +#: src/lib/lex.c:247 +msgid "ip_addr" msgstr "" -#: src/lib/var.c:2660 -msgid "incomplete named character" +#: src/lib/lex.c:248 +msgid "identifier" msgstr "" -#: src/lib/var.c:2661 -msgid "incomplete hexadecimal value" +#: src/lib/lex.c:249 +msgid "string" msgstr "" -#: src/lib/var.c:2662 -msgid "invalid hexadecimal value" +#: src/lib/lex.c:250 +msgid "quoted_string" msgstr "" -#: src/lib/var.c:2663 -msgid "octal value too large" +#: src/lib/lex.c:286 +#, c-format +msgid "expected a positive integer number, got: %s" msgstr "" -#: src/lib/var.c:2664 -msgid "invalid octal value" +#: src/lib/lex.c:292 +#, c-format +msgid "expected a postive integer number, got: %s" msgstr "" -#: src/lib/var.c:2665 -msgid "incomplete octal value" +#: src/lib/lex.c:504 +#, c-format +msgid "Cannot open included config file %s: %s\n" msgstr "" -#: src/lib/var.c:2666 -msgid "incomplete grouped hexadecimal value" +#: src/lib/lex.c:539 +#, c-format +msgid "expected an integer or a range, got %s: %s" msgstr "" -#: src/lib/var.c:2667 -msgid "incorrect character class specification" +#: src/lib/lex.c:553 src/lib/lex.c:561 src/lib/lex.c:572 src/lib/lex.c:580 +#, c-format +msgid "expected an integer number, got %s: %s" msgstr "" -#: src/lib/var.c:2668 -msgid "invalid expansion configuration" +#: src/lib/lex.c:590 +#, c-format +msgid "expected a name, got %s: %s" msgstr "" -#: src/lib/var.c:2669 -msgid "out of memory" +#: src/lib/lex.c:594 +#, c-format +msgid "name %s length %d too long, max is %d\n" msgstr "" -#: src/lib/var.c:2670 -msgid "incomplete variable specification" +#: src/lib/lex.c:602 +#, c-format +msgid "expected a string, got %s: %s" msgstr "" -#: src/lib/var.c:2671 -msgid "undefined variable" +#: src/lib/mem_pool.c:95 +#, c-format +msgid "MemPool index %d larger than max %d\n" msgstr "" -#: src/lib/var.c:2672 -msgid "input is neither text nor variable" +#: src/lib/mem_pool.c:113 src/lib/mem_pool.c:133 src/lib/mem_pool.c:168 +#: src/lib/mem_pool.c:239 src/lib/mem_pool.c:259 src/lib/mem_pool.c:297 +#: src/lib/mem_pool.c:550 +#, c-format +msgid "Out of memory requesting %d bytes\n" msgstr "" -#: src/lib/var.c:2673 -msgid "unknown command character in variable" +#: src/lib/message.c:253 src/lib/message.c:263 +#, c-format +msgid "Could not open console message file %s: ERR=%s\n" msgstr "" -#: src/lib/var.c:2674 -msgid "malformatted search and replace operation" +#: src/lib/message.c:268 +#, c-format +msgid "Could not get con mutex: ERR=%s\n" msgstr "" -#: src/lib/var.c:2675 -msgid "unknown flag in search and replace operation" +#: src/lib/message.c:372 +#, c-format +msgid "open mail pipe %s failed: ERR=%s\n" msgstr "" -#: src/lib/var.c:2676 -msgid "invalid regex in search and replace operation" +#: src/lib/message.c:378 +msgid "Bacula Message" msgstr "" -#: src/lib/var.c:2677 -msgid "missing parameter in command" +#: src/lib/message.c:431 +msgid "open mail pipe failed.\n" msgstr "" -#: src/lib/var.c:2678 -msgid "empty search string in search and replace operation" +#: src/lib/message.c:443 +#, c-format +msgid "close error: ERR=%s\n" msgstr "" -#: src/lib/var.c:2679 -msgid "start offset missing in cut operation" +#: src/lib/message.c:454 +#, c-format +msgid "Mail prog: %s" msgstr "" -#: src/lib/var.c:2680 -msgid "offsets in cut operation delimited by unknown character" +#: src/lib/message.c:463 +#, c-format +msgid "" +"Mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" -#: src/lib/var.c:2681 -msgid "range out of bounds in cut operation" +#: src/lib/message.c:650 +#, c-format +msgid "" +"Operator mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" -#: src/lib/var.c:2682 -msgid "offset out of bounds in cut operation" +#: src/lib/message.c:667 src/lib/message.c:689 src/lib/message.c:705 +#, c-format +msgid "fopen %s failed: ERR=%s\n" msgstr "" -#: src/lib/var.c:2683 -msgid "logic error in cut operation" +#: src/lib/message.c:933 +#, c-format +msgid "%s: ABORTING due to ERROR in %s:%d\n" msgstr "" -#: src/lib/var.c:2684 -msgid "malformatted transpose operation" +#: src/lib/message.c:937 +#, c-format +msgid "%s: ERROR TERMINATION at %s:%d\n" msgstr "" -#: src/lib/var.c:2685 -msgid "source and target class mismatch in transpose operation" +#: src/lib/message.c:942 +#, c-format +msgid "%s: Fatal Error because: " msgstr "" -#: src/lib/var.c:2686 -msgid "empty character class in transpose operation" +#: src/lib/message.c:944 +#, c-format +msgid "%s: Fatal Error at %s:%d because:\n" msgstr "" -#: src/lib/var.c:2687 -msgid "incorrect character class in transpose operation" +#: src/lib/message.c:948 +#, c-format +msgid "%s: ERROR: " msgstr "" -#: src/lib/var.c:2688 -msgid "malformatted padding operation" +#: src/lib/message.c:950 +#, c-format +msgid "%s: ERROR in %s:%d " msgstr "" -#: src/lib/var.c:2689 -msgid "width parameter missing in padding operation" +#: src/lib/message.c:953 +#, c-format +msgid "%s: Warning: " msgstr "" -#: src/lib/var.c:2690 -msgid "fill string missing in padding operation" +#: src/lib/message.c:956 +#, c-format +msgid "%s: Security violation: " msgstr "" -#: src/lib/var.c:2691 -msgid "unknown quoted pair in search and replace operation" +#: src/lib/message.c:1032 +#, c-format +msgid "%s ABORTING due to ERROR\n" msgstr "" -#: src/lib/var.c:2692 -msgid "sub-matching reference out of range" +#: src/lib/message.c:1035 +#, c-format +msgid "%s ERROR TERMINATION\n" msgstr "" -#: src/lib/var.c:2693 -msgid "invalid argument" +#: src/lib/message.c:1038 +#, c-format +msgid "%s: %s Fatal error: " msgstr "" -#: src/lib/var.c:2694 -msgid "incomplete quoted pair" +#: src/lib/message.c:1044 +#, c-format +msgid "%s: %s Error: " msgstr "" -#: src/lib/var.c:2695 -msgid "lookup function does not support variable arrays" +#: src/lib/message.c:1050 +#, c-format +msgid "%s: %s Warning: " msgstr "" -#: src/lib/var.c:2696 -msgid "index of array variable contains an invalid character" +#: src/lib/message.c:1053 +#, c-format +msgid "%s: %s Security violation: " msgstr "" -#: src/lib/var.c:2697 -msgid "index of array variable is incomplete" +#: src/lib/parse_conf.c:160 +msgid "***UNKNOWN***" msgstr "" -#: src/lib/var.c:2698 -msgid "bracket expression in array variable's index not closed" +#: src/lib/parse_conf.c:179 +#, c-format +msgid "Unable to initialize resource lock. ERR=%s\n" msgstr "" -#: src/lib/var.c:2699 -msgid "division by zero error in index specification" +#: src/lib/parse_conf.c:262 src/lib/parse_conf.c:281 +#, c-format +msgid "expected an =, got: %s" msgstr "" -#: src/lib/var.c:2700 -msgid "unterminated loop construct" +#: src/lib/parse_conf.c:289 +#, c-format +msgid "Unknown item code: %d\n" msgstr "" -#: src/lib/var.c:2701 -msgid "invalid character in loop limits" +#: src/lib/parse_conf.c:328 +#, c-format +msgid "message type: %s not found" msgstr "" -#: src/lib/var.c:2702 -msgid "malformed operation argument list" +#: src/lib/parse_conf.c:367 +#, c-format +msgid "Attempt to redefine name \"%s\" to \"%s\"." msgstr "" -#: src/lib/var.c:2703 -msgid "undefined operation" +#: src/lib/parse_conf.c:458 +#, c-format +msgid "Could not find config Resource %s referenced on line %d : %s\n" msgstr "" -#: src/lib/var.c:2704 -msgid "formatting failure" +#: src/lib/parse_conf.c:462 +#, c-format +msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/lib/var.c:2713 -msgid "unknown error" +#: src/lib/parse_conf.c:497 +#, c-format +msgid "Too many %s directives. Max. is %d. line %d: %s\n" msgstr "" -#: src/lib/semlock.c:185 -msgid "sem_unlock by non-owner.\n" +#: src/lib/parse_conf.c:507 +#, c-format +msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/lib/crypto.c:423 -msgid "Unable to open certificate file" +#: src/lib/parse_conf.c:569 +#, c-format +msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/lib/crypto.c:430 -msgid "Unable to read certificate from file" +#: src/lib/parse_conf.c:633 +#, c-format +msgid "expected a size number, got: %s" msgstr "" -#: src/lib/crypto.c:436 -msgid "Unable to extract public key from certificate" +#: src/lib/parse_conf.c:638 +#, c-format +msgid "expected a size, got: %s" msgstr "" -#: src/lib/crypto.c:442 -msgid "" -"Provided certificate does not include the required subjectKeyIdentifier " -"extension." +#: src/lib/parse_conf.c:675 src/lib/parse_conf.c:680 +#, c-format +msgid "expected a time period, got: %s" msgstr "" -#: src/lib/crypto.c:448 +#: src/lib/parse_conf.c:699 #, c-format -msgid "Unsupported key type provided: %d\n" +msgid "Expect a %s or %s, got: %s" msgstr "" -#: src/lib/crypto.c:485 src/lib/crypto.c:533 -msgid "Unable to open private key file" +#: src/lib/parse_conf.c:723 +#, c-format +msgid "Expected a Tape Label keyword, got: %s" msgstr "" -#: src/lib/crypto.c:515 src/lib/crypto.c:549 -msgid "Unable to read private key from file" +#: src/lib/parse_conf.c:772 +#, c-format +msgid "Cannot open config file \"%s\": %s\n" msgstr "" -#: src/lib/crypto.c:606 +#: src/lib/parse_conf.c:785 #, c-format -msgid "Unsupported digest type: %d\n" +msgid "Expected a Resource name identifier, got: %s" msgstr "" -#: src/lib/crypto.c:619 -msgid "OpenSSL digest initialization failed" +#: src/lib/parse_conf.c:797 +#, c-format +msgid "expected resource name, got: %s" msgstr "" -#: src/lib/crypto.c:773 -msgid "OpenSSL error occured" +#: src/lib/parse_conf.c:808 +#, c-format +msgid "not in resource definition: %s" msgstr "" -#: src/lib/crypto.c:839 -msgid "Signature creation failed" +#: src/lib/parse_conf.c:833 +#, c-format +msgid "" +"Keyword \"%s\" not permitted in this resource.\n" +"Perhaps you left the trailing brace off of the previous resource." msgstr "" -#: src/lib/crypto.c:916 -msgid "Signature decoding failed" +#: src/lib/parse_conf.c:850 +#, c-format +msgid "unexpected token %d %s in resource definition" msgstr "" -#: src/lib/crypto.c:992 -msgid "Unsupported cipher type specified\n" +#: src/lib/parse_conf.c:856 +#, c-format +msgid "Unknown parser state %d\n" msgstr "" -#: src/lib/crypto.c:1149 -msgid "CryptoData decoding failed" +#: src/lib/parse_conf.c:861 +msgid "End of conf file reached with unclosed resource." msgstr "" -#: src/lib/crypto.c:1193 -msgid "Failure decrypting the session key" +#: src/lib/pythonlib.c:108 +msgid "Could not initialize Python\n" msgstr "" -#: src/lib/crypto.c:1246 +#: src/lib/pythonlib.c:113 #, c-format -msgid "Unsupported contentEncryptionAlgorithm: %d\n" +msgid "Could not Run Python string %s\n" msgstr "" -#: src/lib/crypto.c:1256 src/lib/crypto.c:1262 -msgid "OpenSSL cipher context initialization failed" +#: src/lib/pythonlib.c:125 +msgid "Could not initialize Python Job type.\n" msgstr "" -#: src/lib/crypto.c:1269 -msgid "Encryption session provided an invalid symmetric key" -msgstr "" +#: src/lib/pythonlib.c:130 +#, c-format +msgid "Could not import Python script %s/%s. Python disabled.\n" +msgstr "" -#: src/lib/crypto.c:1275 -msgid "Encryption session provided an invalid IV" +#: src/lib/pythonlib.c:230 +msgid "Could not create Python Job Object.\n" msgstr "" -#: src/lib/crypto.c:1281 -msgid "OpenSSL cipher context key/IV initialization failed" +#: src/lib/pythonlib.c:243 src/lib/pythonlib.c:267 +#, c-format +msgid "Python function \"%s\" not found.\n" msgstr "" -#: src/lib/crypto.c:1347 +#: src/lib/pythonlib.c:282 #, c-format -msgid "Unable to init OpenSSL threading: ERR=%s\n" +msgid "Unknown Python daemon event %s\n" msgstr "" -#: src/lib/crypto.c:1360 -msgid "Failed to seed OpenSSL PRNG\n" +#: src/lib/regex.c:1040 +msgid "Success" msgstr "" -#: src/lib/crypto.c:1386 -msgid "Failed to save OpenSSL PRNG\n" +#: src/lib/regex.c:1043 +msgid "No match" msgstr "" -#: src/lib/crypto.c:1444 -msgid "Unsupported digest type specified\n" +#: src/lib/regex.c:1046 +msgid "Invalid regular expression" msgstr "" -#: src/lib/crypto.c:1463 -#, c-format -msgid "SHA1Update() returned an error: %d\n" +#: src/lib/regex.c:1049 +msgid "Invalid collation character" msgstr "" -#: src/lib/openssl.c:109 src/lib/openssl.c:178 -#, c-format -msgid "Unable to destroy mutex: ERR=%s\n" +#: src/lib/regex.c:1052 +msgid "Invalid character class name" msgstr "" -#: src/gnome2-console/restore.c:121 -msgid "Mark" +#: src/lib/regex.c:1055 +msgid "Trailing backslash" msgstr "" -#: src/gnome2-console/restore.c:121 -msgid "File" +#: src/lib/regex.c:1058 +msgid "Invalid back reference" msgstr "" -#: src/gnome2-console/restore.c:121 -msgid "Mode" +#: src/lib/regex.c:1061 +msgid "Unmatched [ or [^" msgstr "" -#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:288 -msgid "User" +#: src/lib/regex.c:1064 +msgid "Unmatched ( or \\(" msgstr "" -#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:292 -msgid "Group" +#: src/lib/regex.c:1067 +msgid "Unmatched \\{" msgstr "" -#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:276 -msgid "Size" +#: src/lib/regex.c:1070 +msgid "Invalid content of \\{\\}" msgstr "" -#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:280 -msgid "Date" +#: src/lib/regex.c:1073 +msgid "Invalid range end" msgstr "" -#: src/gnome2-console/interface.c:32 -msgid "_Connect" +#: src/lib/regex.c:1076 +msgid "Memory exhausted" msgstr "" -#: src/gnome2-console/interface.c:33 src/gnome2-console/interface.c:232 -msgid "Connect to Director" +#: src/lib/regex.c:1079 +msgid "Invalid preceding regular expression" msgstr "" -#: src/gnome2-console/interface.c:39 -msgid "_Disconnect" +#: src/lib/regex.c:1082 +msgid "Premature end of regular expression" msgstr "" -#: src/gnome2-console/interface.c:40 -msgid "Disconnect from Director" +#: src/lib/regex.c:1085 +msgid "Regular expression too big" msgstr "" -#: src/gnome2-console/interface.c:93 -msgid "_Display Messages" +#: src/lib/regex.c:1088 +msgid "Unmatched ) or \\)" msgstr "" -#: src/gnome2-console/interface.c:129 -msgid "_File" +#: src/lib/regex.c:5874 +msgid "No previous regular expression" msgstr "" -#: src/gnome2-console/interface.c:136 -msgid "_Edit" +#: src/lib/res.c:66 +#, c-format +msgid "rwl_writelock failure at %s:%d: ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:143 -msgid "_View" +#: src/lib/res.c:76 +#, c-format +msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:144 src/gnome2-console/interface.c:252 -msgid "Display Messages" +#: src/lib/rwlock.c:289 +msgid "rwl_writeunlock called too many times.\n" msgstr "" -#: src/gnome2-console/interface.c:150 -msgid "_Settings" +#: src/lib/rwlock.c:293 +msgid "rwl_writeunlock by non-owner.\n" msgstr "" -#: src/gnome2-console/interface.c:157 -msgid "_Help" +#: src/lib/rwlock.c:358 src/lib/semlock.c:248 +#, c-format +msgid "Write lock failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:197 -msgid "Bacula Console" +#: src/lib/rwlock.c:365 src/lib/semlock.c:255 +#, c-format +msgid "Write unlock failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:231 src/wx-console/wxbmainframe.cpp:229 -#: src/wx-console/wxbmainframe.cpp:597 -msgid "Connect" +#: src/lib/rwlock.c:375 src/lib/semlock.c:265 +#, c-format +msgid "Read lock failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:241 -msgid "Run" +#: src/lib/rwlock.c:382 src/lib/semlock.c:272 +#, c-format +msgid "Read unlock failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:242 src/gnome2-console/interface.c:677 -#: src/gnome2-console/interface.c:690 -msgid "Run a Job" +#: src/lib/rwlock.c:391 src/lib/semlock.c:281 +#, c-format +msgid "Thread %d found unchanged elements %d times\n" msgstr "" -#: src/gnome2-console/interface.c:251 -msgid "Msgs" +#: src/lib/rwlock.c:423 src/lib/semlock.c:313 +#, c-format +msgid "Init rwlock failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:271 -msgid "Label" +#: src/lib/rwlock.c:438 src/lib/semlock.c:328 +#, c-format +msgid "Create thread failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:299 -msgid " Command: " +#: src/lib/rwlock.c:449 src/lib/semlock.c:339 +#, c-format +msgid "Join thread failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:307 -msgid "Enter Commands Here" +#: src/lib/rwlock.c:452 src/lib/semlock.c:342 +#, c-format +msgid "%02d: interval %d, writes %d, reads %d\n" msgstr "" -#: src/gnome2-console/interface.c:318 -msgid " Status: " +#: src/lib/rwlock.c:462 src/lib/semlock.c:352 +#, c-format +msgid "data %02d: value %d, %d writes\n" msgstr "" -#: src/gnome2-console/interface.c:326 -msgid " " +#: src/lib/rwlock.c:467 src/lib/semlock.c:357 +#, c-format +msgid "Total: %d thread writes, %d data writes\n" msgstr "" -#: src/gnome2-console/interface.c:422 -msgid "About Bacula Console" +#: src/lib/rwlock.c:539 src/lib/semlock.c:429 +msgid "Try write lock" msgstr "" -#: src/gnome2-console/interface.c:436 -msgid "Bacula Console\n" +#: src/lib/rwlock.c:545 src/lib/semlock.c:435 +msgid "Try read lock" msgstr "" -#: src/gnome2-console/interface.c:444 -msgid "Copyright (c) 2000 - 2004, Kern Sibbald and John Walker" +#: src/lib/rwlock.c:600 src/lib/semlock.c:490 +msgid "Create thread" msgstr "" -#: src/gnome2-console/interface.c:450 -msgid "Authors: Kern Sibbald and John Walker" +#: src/lib/rwlock.c:610 src/lib/semlock.c:500 +msgid "Join thread" msgstr "" -#: src/gnome2-console/interface.c:456 -msgid "It comes by night and sucks the essence from your computers" +#: src/lib/rwlock.c:612 src/lib/semlock.c:502 +#, c-format +msgid "%02d: interval %d, updates %d, r_collisions %d, w_collisions %d\n" msgstr "" -#: src/gnome2-console/interface.c:521 src/gnome2-console/interface.c:536 -msgid "Select Director" +#: src/lib/rwlock.c:624 src/lib/semlock.c:514 +#, c-format +msgid "data %02d: value %d, %d updates\n" msgstr "" -#: src/gnome2-console/interface.c:708 src/gnome2-console/interface.c:1616 -msgid "Job:" +#: src/lib/semlock.c:185 +msgid "sem_unlock by non-owner.\n" msgstr "" -#: src/gnome2-console/interface.c:728 -msgid " Type:" +#: src/lib/signal.c:61 +msgid "Invalid signal number" msgstr "" -#: src/gnome2-console/interface.c:757 src/gnome2-console/interface.c:1644 -#: src/wx-console/wxbrestorepanel.cpp:1862 -msgid "Client:" +#: src/lib/signal.c:87 +#, c-format +msgid "Bacula interrupted by signal %d: %s\n" msgstr "" -#: src/gnome2-console/interface.c:787 src/gnome2-console/interface.c:1672 -msgid "FileSet: " +#: src/lib/signal.c:100 +#, c-format +msgid "Kaboom! %s, %s got signal %d. Attempting traceback.\n" msgstr "" -#: src/gnome2-console/interface.c:813 src/wx-console/wxbrestorepanel.cpp:1868 -msgid "Priority:" +#: src/lib/signal.c:102 +#, c-format +msgid "Kaboom! exepath=%s\n" msgstr "" -#: src/gnome2-console/interface.c:836 -msgid "Level:" +#: src/lib/signal.c:136 +#, c-format +msgid "Fork error: ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:866 src/gnome2-console/interface.c:1418 -#: src/gnome2-console/interface.c:1700 -msgid "Pool:" +#: src/lib/signal.c:143 +#, c-format +msgid "Calling: %s %s %s\n" msgstr "" -#: src/gnome2-console/interface.c:895 src/gnome2-console/interface.c:1393 -#: src/gnome2-console/interface.c:1728 src/wx-console/wxbrestorepanel.cpp:1864 -msgid "Storage:" +#: src/lib/signal.c:145 +#, c-format +msgid "execv: %s failed: ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:924 -msgid "Messages:" +#: src/lib/signal.c:160 +#, c-format +msgid "Traceback complete, attempting cleanup ...\n" msgstr "" -#: src/gnome2-console/interface.c:952 -msgid "Where: " +#: src/lib/signal.c:168 +#, c-format +msgid "It looks like the traceback worked ...\n" msgstr "" -#: src/gnome2-console/interface.c:970 src/wx-console/wxbrestorepanel.cpp:1866 -msgid "When:" +#: src/lib/signal.c:197 +#, c-format +msgid "BA_NSIG too small (%d) should be (%d)\n" msgstr "" -#: src/gnome2-console/interface.c:988 src/wx-console/wxbrestorepanel.cpp:1847 -msgid "Bootstrap:" +#: src/lib/signal.c:203 +msgid "UNKNOWN SIGNAL" msgstr "" -#: src/gnome2-console/interface.c:1108 -msgid "_New" +#: src/lib/signal.c:204 +msgid "Hangup" msgstr "" -#: src/gnome2-console/interface.c:1177 -msgid "Restore File Selection" +#: src/lib/signal.c:205 +msgid "Interrupt" msgstr "" -#: src/gnome2-console/interface.c:1226 -msgid "Current dir:" +#: src/lib/signal.c:206 +msgid "Quit" msgstr "" -#: src/gnome2-console/interface.c:1252 -msgid "Files Selected: " +#: src/lib/signal.c:207 +msgid "Illegal instruction" msgstr "" -#: src/gnome2-console/interface.c:1373 src/gnome2-console/interface.c:1383 -msgid "Label a Volume" +#: src/lib/signal.c:208 +msgid "Trace/Breakpoint trap" msgstr "" -#: src/gnome2-console/interface.c:1444 -msgid "Volume Name:" +#: src/lib/signal.c:209 +msgid "Abort" msgstr "" -#: src/gnome2-console/interface.c:1459 -msgid "Slot:" +#: src/lib/signal.c:211 +msgid "EMT instruction (Emulation Trap)" msgstr "" -#: src/gnome2-console/interface.c:1585 -msgid "Restore Files Dialog" +#: src/lib/signal.c:214 +msgid "IOT trap" msgstr "" -#: src/gnome2-console/interface.c:1599 -msgid "Restore Files" +#: src/lib/signal.c:216 +msgid "BUS error" msgstr "" -#: src/gnome2-console/interface.c:1756 -msgid "Before:" +#: src/lib/signal.c:217 +msgid "Floating-point exception" msgstr "" -#: src/gnome2-console/interface.c:1799 -msgid "Select Files" +#: src/lib/signal.c:218 +msgid "Kill, unblockable" msgstr "" -#: src/gnome2-console/interface.c:1883 -msgid "Progress" +#: src/lib/signal.c:219 +msgid "User-defined signal 1" msgstr "" -#: src/gnome2-console/support.c:41 -#, c-format -msgid "Widget not found: %s" +#: src/lib/signal.c:220 +msgid "Segmentation violation" msgstr "" -#: src/gnome2-console/support.c:60 src/gnome2-console/support.c:85 -#, c-format -msgid "Couldn't find pixmap file: %s" +#: src/lib/signal.c:221 +msgid "User-defined signal 2" msgstr "" -#: src/gnome2-console/support.c:92 -#, c-format -msgid "Failed to load pixbuf file: %s: %s\n" +#: src/lib/signal.c:222 +msgid "Broken pipe" msgstr "" -#: src/gnome2-console/authenticate.c:74 -#, c-format -msgid "%s: Director authorization problem.\n" +#: src/lib/signal.c:223 +msgid "Alarm clock" msgstr "" -#: src/gnome2-console/authenticate.c:75 -msgid "Director authorization problem.\n" +#: src/lib/signal.c:224 +msgid "Termination" msgstr "" -#: src/gnome2-console/authenticate.c:77 -msgid "" -"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +#: src/lib/signal.c:226 +msgid "Stack fault" msgstr "" -#: src/gnome2-console/authenticate.c:87 -#, c-format -msgid "%s: Bad response to Hello command: ERR=%s\n" +#: src/lib/signal.c:228 +msgid "Child status has changed" msgstr "" -#: src/gnome2-console/authenticate.c:89 -msgid "The Director is probably not running.\n" +#: src/lib/signal.c:229 +msgid "Continue" msgstr "" -#: src/gnome2-console/console_conf.c:135 -#, c-format -msgid "Console: name=%s\n" +#: src/lib/signal.c:230 +msgid "Stop, unblockable" msgstr "" -#: src/gnome2-console/console_conf.c:138 -#, c-format -msgid "ConsoleFont: name=%s font face=%s\n" +#: src/lib/signal.c:231 +msgid "Keyboard stop" msgstr "" -#: src/gnome2-console/console.c:88 -#, c-format -msgid "" -"Copyright (C) 2002-2005 Kern Sibbald\n" -"\n" -"Version: %s (%s) %s %s %s\n" -"\n" -"Usage: gnome-console [-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" +#: src/lib/signal.c:232 +msgid "Background read from tty" msgstr "" -#: src/gnome2-console/console.c:219 -#, c-format -msgid "Pthread cond init error = %s\n" +#: src/lib/signal.c:233 +msgid "Background write to tty" msgstr "" -#: src/gnome2-console/console.c:357 -msgid " Not Connected" +#: src/lib/signal.c:234 +msgid "Urgent condition on socket" msgstr "" -#: src/gnome2-console/console.c:478 -#, c-format -msgid " Connecting to Director %s:%d" +#: src/lib/signal.c:235 +msgid "CPU limit exceeded" msgstr "" -#: src/gnome2-console/console.c:479 -#, c-format -msgid "" -"Connecting to Director %s:%d\n" -"\n" +#: src/lib/signal.c:236 +msgid "File size limit exceeded" msgstr "" -#: src/gnome2-console/console.c:494 src/wx-console/console_thread.cpp:360 -#, c-format -msgid "Passphrase for Console \"%s\" TLS private key: " +#: src/lib/signal.c:237 +msgid "Virtual alarm clock" msgstr "" -#: src/gnome2-console/console.c:516 src/wx-console/console_thread.cpp:381 -#, c-format -msgid "Passphrase for Director \"%s\" TLS private key: " +#: src/lib/signal.c:238 +msgid "Profiling alarm clock" msgstr "" -#: src/gnome2-console/console.c:535 src/tray-monitor/tray-monitor.c:860 -#: src/wx-console/console_thread.cpp:399 -msgid "Director daemon" +#: src/lib/signal.c:239 +msgid "Window size change" msgstr "" -#: src/gnome2-console/console.c:547 -msgid " Initializing ..." +#: src/lib/signal.c:240 +msgid "I/O now possible" msgstr "" -#: src/gnome2-console/console.c:583 -msgid " Connected" +#: src/lib/signal.c:242 +msgid "Power failure restart" msgstr "" -#: src/gnome2-console/console.c:591 -msgid " Processing command ..." +#: src/lib/signal.c:245 +msgid "No runnable lwp" msgstr "" -#: src/gnome2-console/console.c:626 -msgid " At prompt waiting for input ..." +#: src/lib/signal.c:248 +msgid "SIGLWP special signal used by thread library" msgstr "" -#: src/gnome2-console/console.c:746 -msgid " Ready" +#: src/lib/signal.c:251 +msgid "Checkpoint Freeze" msgstr "" -#: src/tools/bsmtp.c:85 -#, c-format -msgid "Fatal malformed reply from %s: %s\n" +#: src/lib/signal.c:254 +msgid "Checkpoint Thaw" msgstr "" -#: src/tools/bsmtp.c:121 -#, c-format -msgid "" -"\n" -"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" -" -c set the Cc: field\n" -" -dnn set debug level to nn\n" -" -f set the From: field\n" -" -h use mailhost:port as the SMTP server\n" -" -s set the Subject: field\n" -" -? print this message.\n" -"\n" +#: src/lib/signal.c:257 +msgid "Thread Cancellation" msgstr "" -#: src/tools/bsmtp.c:204 -msgid "Fatal error: no recipient given.\n" +#: src/lib/signal.c:260 +msgid "Resource Lost (e.g. record-lock lost)" msgstr "" -#: src/tools/bsmtp.c:225 +#: src/lib/smartall.c:132 src/lib/smartall.c:223 src/lib/smartall.c:238 +msgid "Out of memory\n" +msgstr "" + +#: src/lib/smartall.c:160 #, c-format -msgid "Fatal gethostname error: ERR=%s\n" +msgid "Attempt to free NULL called from %s:%d\n" msgstr "" -#: src/tools/bsmtp.c:229 +#: src/lib/smartall.c:176 #, c-format -msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" +msgid "qp->qnext->qprev != qp called from %s:%d\n" msgstr "" -#: src/tools/bsmtp.c:254 +#: src/lib/smartall.c:180 #, c-format -msgid "Error unknown mail host \"%s\": ERR=%s\n" +msgid "qp->qprev->qnext != qp called from %s:%d\n" msgstr "" -#: src/tools/bsmtp.c:257 -msgid "Retrying connection using \"localhost\".\n" +#: src/lib/smartall.c:189 +#, c-format +msgid "Buffer overrun called from %s:%d\n" msgstr "" -#: src/tools/bsmtp.c:265 +#: src/lib/smartall.c:260 #, c-format -msgid "Fatal error: Unknown address family for smtp host: %d\n" +msgid "sm_realloc size: %d\n" msgstr "" -#: src/tools/bsmtp.c:273 +#: src/lib/smartall.c:301 #, c-format -msgid "Fatal socket error: ERR=%s\n" +msgid "sm_realloc %d at %x from %s:%d\n" msgstr "" -#: src/tools/bsmtp.c:277 +#: src/lib/smartall.c:363 #, c-format -msgid "Fatal connect error to %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: %lx\n" msgstr "" -#: src/tools/bsmtp.c:282 +#: src/lib/smartall.c:374 #, c-format -msgid "Fatal dup error: ERR=%s\n" +msgid "Orphaned buffer: %6u bytes allocated at line %d of %s %s\n" msgstr "" -#: src/tools/bsmtp.c:286 src/tools/bsmtp.c:290 +#: src/lib/smartall.c:410 #, c-format -msgid "Fatal fdopen error: ERR=%s\n" +msgid "Damaged buffer found. Called from %s:%d\n" msgstr "" -#: src/tools/testls.c:45 +#: src/lib/smartall.c:440 #, c-format msgid "" "\n" -"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -dnn set debug level to nn\n" -" -e specify file of exclude patterns\n" -" -i specify file of include patterns\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" +"Damaged buffers found at %s:%d\n" msgstr "" -#: src/tools/testls.c:130 src/tools/testfind.c:134 +#: src/lib/smartall.c:443 #, c-format -msgid "Could not open include file: %s\n" +msgid " discovery of bad prev link.\n" msgstr "" -#: src/tools/testls.c:143 src/tools/testfind.c:147 +#: src/lib/smartall.c:446 #, c-format -msgid "Could not open exclude file: %s\n" +msgid " discovery of bad next link.\n" msgstr "" -#: src/tools/testfind.c:49 +#: src/lib/smartall.c:449 #, c-format -msgid "" -"\n" -"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -dnn set debug level to nn\n" -" -e specify file of exclude patterns\n" -" -i specify file of include patterns\n" -" - read pattern(s) from stdin\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 " discovery of data overrun.\n" msgstr "" -#: src/tools/testfind.c:199 +#: src/lib/smartall.c:452 #, c-format -msgid "Reg: %s\n" +msgid " Buffer address: %lx\n" msgstr "" -#: src/tools/testfind.c:220 -msgid "\t[will not descend: recursion turned off]" +#: src/lib/smartall.c:459 +#, c-format +msgid "Damaged buffer: %6u bytes allocated at line %d of %s %s\n" msgstr "" -#: src/tools/testfind.c:222 -msgid "\t[will not descend: file system change not allowed]" +#: src/lib/util.c:181 +msgid "Running" msgstr "" -#: src/tools/testfind.c:224 -msgid "\t[will not descend: disallowed file system]" +#: src/lib/util.c:184 +msgid "Blocked" msgstr "" -#: src/tools/testfind.c:337 -#, c-format -msgid "Path: %s\n" +#: src/lib/util.c:194 +msgid "Non-fatal error" msgstr "" -#: src/tools/testfind.c:338 src/dird/verify.c:756 -#, c-format -msgid "File: %s\n" +#: src/lib/util.c:197 src/lib/util.c:264 +msgid "Canceled" msgstr "" -#: src/tools/fstype.c:34 -#, c-format -msgid "" -"\n" -"Usage: fstype [-d debug_level] 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" +#: src/lib/util.c:200 +msgid "Verify differences" msgstr "" -#: src/tools/fstype.c:86 -#, c-format -msgid "%s: unknown\n" +#: src/lib/util.c:203 +msgid "Waiting on FD" msgstr "" -#: src/tools/dbcheck.c:158 -msgid "" -"Warning skipping the additional parameters for working directory/dbname/user/" -"password/host.\n" +#: src/lib/util.c:206 +msgid "Wait on SD" msgstr "" -#: src/tools/dbcheck.c:174 -#, c-format -msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" +#: src/lib/util.c:209 +msgid "Wait for new Volume" msgstr "" -#: src/tools/dbcheck.c:176 -#, c-format -msgid "Error there is no Catalog section in the given config file [%s]\n" +#: src/lib/util.c:212 +msgid "Waiting for mount" msgstr "" -#: src/tools/dbcheck.c:185 -msgid "Error no Director resource defined.\n" +#: src/lib/util.c:215 +msgid "Waiting for Storage resource" msgstr "" -#: src/tools/dbcheck.c:199 -msgid "Wrong number of arguments.\n" +#: src/lib/util.c:218 +msgid "Waiting for Job resource" msgstr "" -#: src/tools/dbcheck.c:204 -msgid "Working directory not supplied.\n" +#: src/lib/util.c:221 +msgid "Waiting for Client resource" msgstr "" -#: src/tools/dbcheck.c:269 -#, c-format -msgid "Hello, this is the database check/correct program.\n" +#: src/lib/util.c:224 +msgid "Waiting on Max Jobs" msgstr "" -#: src/tools/dbcheck.c:271 -#, c-format -msgid "Modify database is on." +#: src/lib/util.c:227 +msgid "Waiting for Start Time" msgstr "" -#: src/tools/dbcheck.c:273 -#, c-format -msgid "Modify database is off." +#: src/lib/util.c:230 +msgid "Waiting on Priority" msgstr "" -#: src/tools/dbcheck.c:275 src/tools/dbcheck.c:336 +#: src/lib/util.c:237 #, c-format -msgid " Verbose is on.\n" +msgid "Unknown Job termination status=%d" msgstr "" -#: src/tools/dbcheck.c:277 src/tools/dbcheck.c:338 -#, c-format -msgid " Verbose is off.\n" +#: src/lib/util.c:261 +msgid "Fatal Error" msgstr "" -#: src/tools/dbcheck.c:279 -#, c-format -msgid "Please select the fuction you want to perform.\n" +#: src/lib/util.c:267 +msgid "Differences" msgstr "" -#: src/tools/dbcheck.c:283 -#, 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/lib/util.c:270 +msgid "Unknown term code" msgstr "" -#: src/tools/dbcheck.c:302 -#, 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/lib/util.c:298 +msgid "Migrate" msgstr "" -#: src/tools/dbcheck.c:322 -msgid "Select function number: " +#: src/lib/util.c:301 +msgid "Copy" msgstr "" -#: src/tools/dbcheck.c:329 -#, c-format -msgid "Database will be modified.\n" +#: src/lib/util.c:304 +msgid "Unknown Type" msgstr "" -#: src/tools/dbcheck.c:331 -#, c-format -msgid "Database will NOT be modified.\n" +#: src/lib/util.c:336 +msgid "Verify Init Catalog" msgstr "" -#: src/tools/dbcheck.c:421 -#, c-format -msgid "JobId=%s Name=\"%s\" StartTime=%s\n" +#: src/lib/util.c:345 +msgid "Verify Data" msgstr "" -#: src/tools/dbcheck.c:429 -#, c-format -msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" +#: src/lib/util.c:647 +msgid "Working directory not defined. Cannot continue.\n" msgstr "" -#: src/tools/dbcheck.c:436 +#: src/lib/util.c:650 #, c-format -msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" +msgid "Working Directory: \"%s\" not found. Cannot continue.\n" msgstr "" -#: src/tools/dbcheck.c:443 +#: src/lib/util.c:654 #, c-format -msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" +msgid "Working Directory: \"%s\" is not a directory. Cannot continue.\n" msgstr "" -#: src/tools/dbcheck.c:450 -#, c-format -msgid "Orphaned ClientId=%s Name=\"%s\"\n" +#: src/lib/var.c:2659 +msgid "everything ok" msgstr "" -#: src/tools/dbcheck.c:503 -#, c-format -msgid "Deleting: %s\n" +#: src/lib/var.c:2660 +msgid "incomplete named character" msgstr "" -#: src/tools/dbcheck.c:577 -#, c-format -msgid "Checking for duplicate Filename entries.\n" +#: src/lib/var.c:2661 +msgid "incomplete hexadecimal value" msgstr "" -#: src/tools/dbcheck.c:586 -#, c-format -msgid "Found %d duplicate Filename records.\n" +#: src/lib/var.c:2662 +msgid "invalid hexadecimal value" msgstr "" -#: src/tools/dbcheck.c:587 -msgid "Print the list? (yes/no): " +#: src/lib/var.c:2663 +msgid "octal value too large" msgstr "" -#: src/tools/dbcheck.c:603 src/tools/dbcheck.c:657 -#, c-format -msgid "Found %d for: %s\n" +#: src/lib/var.c:2664 +msgid "invalid octal value" msgstr "" -#: src/tools/dbcheck.c:630 -#, c-format -msgid "Checking for duplicate Path entries.\n" +#: src/lib/var.c:2665 +msgid "incomplete octal value" msgstr "" -#: src/tools/dbcheck.c:640 -#, c-format -msgid "Found %d duplicate Path records.\n" +#: src/lib/var.c:2666 +msgid "incomplete grouped hexadecimal value" msgstr "" -#: src/tools/dbcheck.c:641 src/tools/dbcheck.c:691 src/tools/dbcheck.c:723 -#: src/tools/dbcheck.c:755 src/tools/dbcheck.c:783 src/tools/dbcheck.c:811 -#: src/tools/dbcheck.c:849 src/tools/dbcheck.c:887 src/tools/dbcheck.c:918 -#: src/tools/dbcheck.c:948 src/tools/dbcheck.c:982 src/tools/dbcheck.c:1040 -msgid "Print them? (yes/no): " +#: src/lib/var.c:2667 +msgid "incorrect character class specification" msgstr "" -#: src/tools/dbcheck.c:683 -#, c-format -msgid "Checking for orphaned JobMedia entries.\n" +#: src/lib/var.c:2668 +msgid "invalid expansion configuration" msgstr "" -#: src/tools/dbcheck.c:690 -#, c-format -msgid "Found %d orphaned JobMedia records.\n" +#: src/lib/var.c:2669 +msgid "out of memory" msgstr "" -#: src/tools/dbcheck.c:703 -#, c-format -msgid "Deleting %d orphaned JobMedia records.\n" +#: src/lib/var.c:2670 +msgid "incomplete variable specification" msgstr "" -#: src/tools/dbcheck.c:712 -#, c-format -msgid "Checking for orphaned File entries. This may take some time!\n" +#: src/lib/var.c:2671 +msgid "undefined variable" msgstr "" -#: src/tools/dbcheck.c:722 -#, c-format -msgid "Found %d orphaned File records.\n" +#: src/lib/var.c:2672 +msgid "input is neither text nor variable" msgstr "" -#: src/tools/dbcheck.c:735 -#, c-format -msgid "Deleting %d orphaned File records.\n" +#: src/lib/var.c:2673 +msgid "unknown command character in variable" msgstr "" -#: src/tools/dbcheck.c:744 -#, c-format -msgid "Checking for orphaned Path entries. This may take some time!\n" +#: src/lib/var.c:2674 +msgid "malformatted search and replace operation" msgstr "" -#: src/tools/dbcheck.c:754 -#, c-format -msgid "Found %d orphaned Path records.\n" +#: src/lib/var.c:2675 +msgid "unknown flag in search and replace operation" msgstr "" -#: src/tools/dbcheck.c:763 -#, c-format -msgid "Deleting %d orphaned Path records.\n" +#: src/lib/var.c:2676 +msgid "invalid regex in search and replace operation" msgstr "" -#: src/tools/dbcheck.c:772 -#, c-format -msgid "Checking for orphaned Filename entries. This may take some time!\n" +#: src/lib/var.c:2677 +msgid "missing parameter in command" msgstr "" -#: src/tools/dbcheck.c:782 -#, c-format -msgid "Found %d orphaned Filename records.\n" +#: src/lib/var.c:2678 +msgid "empty search string in search and replace operation" msgstr "" -#: src/tools/dbcheck.c:791 -#, c-format -msgid "Deleting %d orphaned Filename records.\n" +#: src/lib/var.c:2679 +msgid "start offset missing in cut operation" msgstr "" -#: src/tools/dbcheck.c:800 -#, c-format -msgid "Checking for orphaned FileSet entries. This takes some time!\n" +#: src/lib/var.c:2680 +msgid "offsets in cut operation delimited by unknown character" msgstr "" -#: src/tools/dbcheck.c:810 -#, c-format -msgid "Found %d orphaned FileSet records.\n" +#: src/lib/var.c:2681 +msgid "range out of bounds in cut operation" msgstr "" -#: src/tools/dbcheck.c:822 -#, c-format -msgid "Deleting %d orphaned FileSet records.\n" +#: src/lib/var.c:2682 +msgid "offset out of bounds in cut operation" msgstr "" -#: src/tools/dbcheck.c:831 -#, c-format -msgid "Checking for orphaned Client entries.\n" +#: src/lib/var.c:2683 +msgid "logic error in cut operation" msgstr "" -#: src/tools/dbcheck.c:848 -#, c-format -msgid "Found %d orphaned Client records.\n" +#: src/lib/var.c:2684 +msgid "malformatted transpose operation" msgstr "" -#: src/tools/dbcheck.c:860 -#, c-format -msgid "Deleting %d orphaned Client records.\n" +#: src/lib/var.c:2685 +msgid "source and target class mismatch in transpose operation" msgstr "" -#: src/tools/dbcheck.c:869 -#, c-format -msgid "Checking for orphaned Job entries.\n" +#: src/lib/var.c:2686 +msgid "empty character class in transpose operation" msgstr "" -#: src/tools/dbcheck.c:886 -#, c-format -msgid "Found %d orphaned Job records.\n" +#: src/lib/var.c:2687 +msgid "incorrect character class in transpose operation" msgstr "" -#: src/tools/dbcheck.c:898 -#, c-format -msgid "Deleting %d orphaned Job records.\n" +#: src/lib/var.c:2688 +msgid "malformatted padding operation" msgstr "" -#: src/tools/dbcheck.c:908 -#, c-format -msgid "Checking for Admin Job entries.\n" +#: src/lib/var.c:2689 +msgid "width parameter missing in padding operation" msgstr "" -#: src/tools/dbcheck.c:917 -#, c-format -msgid "Found %d Admin Job records.\n" +#: src/lib/var.c:2690 +msgid "fill string missing in padding operation" msgstr "" -#: src/tools/dbcheck.c:929 -#, c-format -msgid "Deleting %d Admin Job records.\n" +#: src/lib/var.c:2691 +msgid "unknown quoted pair in search and replace operation" msgstr "" -#: src/tools/dbcheck.c:938 -#, c-format -msgid "Checking for Restore Job entries.\n" +#: src/lib/var.c:2692 +msgid "sub-matching reference out of range" msgstr "" -#: src/tools/dbcheck.c:947 -#, c-format -msgid "Found %d Restore Job records.\n" +#: src/lib/var.c:2693 +msgid "invalid argument" msgstr "" -#: src/tools/dbcheck.c:959 -#, c-format -msgid "Deleting %d Restore Job records.\n" +#: src/lib/var.c:2694 +msgid "incomplete quoted pair" msgstr "" -#: src/tools/dbcheck.c:972 -#, c-format -msgid "Checking for Filenames with a trailing slash\n" +#: src/lib/var.c:2695 +msgid "lookup function does not support variable arrays" msgstr "" -#: src/tools/dbcheck.c:981 -#, c-format -msgid "Found %d bad Filename records.\n" +#: src/lib/var.c:2696 +msgid "index of array variable contains an invalid character" msgstr "" -#: src/tools/dbcheck.c:995 src/tools/dbcheck.c:1053 -#, c-format -msgid "Reparing %d bad Filename records.\n" +#: src/lib/var.c:2697 +msgid "index of array variable is incomplete" msgstr "" -#: src/tools/dbcheck.c:1030 -#, c-format -msgid "Checking for Paths without a trailing slash\n" +#: src/lib/var.c:2698 +msgid "bracket expression in array variable's index not closed" msgstr "" -#: src/tools/dbcheck.c:1039 -#, c-format -msgid "Found %d bad Path records.\n" +#: src/lib/var.c:2699 +msgid "division by zero error in index specification" msgstr "" -#: src/findlib/enable_priv.c:85 -msgid "AdjustTokenPrivileges set " +#: src/lib/var.c:2700 +msgid "unterminated loop construct" msgstr "" -#: src/findlib/find_one.c:168 -#, c-format -msgid "Top level directory \"%s\" has an unlisted fstype\n" +#: src/lib/var.c:2701 +msgid "invalid character in loop limits" msgstr "" -#: src/findlib/save-cwd.c:48 -#, c-format -msgid "Cannot open current directory: %s\n" +#: src/lib/var.c:2702 +msgid "malformed operation argument list" msgstr "" -#: src/findlib/save-cwd.c:62 -#, c-format -msgid "Current directory: %s\n" +#: src/lib/var.c:2703 +msgid "undefined operation" msgstr "" -#: src/findlib/save-cwd.c:84 -#, c-format -msgid "Cannot get current directory: %s\n" +#: src/lib/var.c:2704 +msgid "formatting failure" msgstr "" -#: src/findlib/save-cwd.c:105 -#, c-format -msgid "Cannot return to %s from %s: %s\n" +#: src/lib/var.c:2713 +msgid "unknown error" msgstr "" -#: src/findlib/save-cwd.c:109 +#: src/lib/watchdog.c:74 #, c-format -msgid "Cannot return to saved working directory from %s: %s\n" +msgid "Unable to initialize watchdog lock. ERR=%s\n" msgstr "" -#: src/findlib/save-cwd.c:115 -#, c-format -msgid "Cannot return to %s: %s\n" +#: src/lib/watchdog.c:170 +msgid "BUG! register_watchdog called before start_watchdog\n" msgstr "" -#: src/findlib/save-cwd.c:119 +#: src/lib/watchdog.c:173 #, c-format -msgid "Cannot return to saved working directory: %s\n" +msgid "BUG! Watchdog %p has NULL callback\n" msgstr "" -#: src/findlib/bfile.c:64 -msgid "GZIP data" +#: src/lib/watchdog.c:176 +#, c-format +msgid "BUG! Watchdog %p has zero interval\n" msgstr "" -#: src/findlib/bfile.c:66 -msgid "GZIP sparse data" +#: src/lib/watchdog.c:196 +msgid "BUG! unregister_watchdog_unlocked called before start_watchdog\n" msgstr "" -#: src/findlib/bfile.c:68 -msgid "Win32 data" +#: src/lib/watchdog.c:313 +#, c-format +msgid "rwl_writelock failure. ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:70 -msgid "Win32 GZIP data" +#: src/lib/watchdog.c:327 +#, c-format +msgid "rwl_writeunlock failure. ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:72 -msgid "File attributes" +#: src/stored/acquire.c:96 +#, c-format +msgid "Hey! num_writers=%d!!!!\n" msgstr "" -#: src/findlib/bfile.c:74 -msgid "File data" +#: src/stored/acquire.c:146 +#, c-format +msgid "Num_writers=%d not zero. Job %d canceled.\n" msgstr "" -#: src/findlib/bfile.c:76 -msgid "MD5 digest" +#: src/stored/acquire.c:154 +#, c-format +msgid "No volumes specified. Job %d canceled.\n" msgstr "" -#: src/findlib/bfile.c:78 -msgid "Extended attributes" +#: src/stored/acquire.c:182 src/stored/mount.c:73 +#, c-format +msgid "Job %d canceled.\n" msgstr "" -#: src/findlib/bfile.c:80 -msgid "Sparse data" +#: src/stored/acquire.c:193 +#, c-format +msgid "Open device %s Volume \"%s\" failed (EIO): ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:82 -msgid "Program names" +#: src/stored/acquire.c:198 +#, c-format +msgid "Open device %s Volume \"%s\" failed: ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:84 -msgid "Program data" +#: src/stored/acquire.c:263 src/stored/mount.c:67 +#, c-format +msgid "Too many errors trying to mount device %s.\n" msgstr "" -#: src/findlib/bfile.c:86 -msgid "SHA1 digest" +#: src/stored/acquire.c:272 +#, c-format +msgid "Ready to read from volume \"%s\" on device %s.\n" msgstr "" -#: src/findlib/bfile.c:88 -msgid "HFS+ resource fork" +#: src/stored/acquire.c:311 +#, c-format +msgid "Device %s is busy reading.\n" msgstr "" -#: src/findlib/bfile.c:90 -msgid "HFS+ Finder Info" +#: src/stored/acquire.c:341 +#, c-format +msgid "Wanted Volume \"%s\", but device %s is busy writing on \"%s\" .\n" msgstr "" -#: src/findlib/bfile.c:92 -msgid "SHA256 digest" +#: src/stored/acquire.c:360 +#, c-format +msgid "" +"Cannot recycle volume \"%s\" on device %s because it is in use by another " +"job.\n" msgstr "" -#: src/findlib/bfile.c:94 -msgid "SHA512 digest" +#: src/stored/acquire.c:382 +#, c-format +msgid "Could not ready device %s for append.\n" msgstr "" -#: src/findlib/bfile.c:96 -msgid "Signed digest" +#: src/stored/acquire.c:459 src/stored/block.c:354 src/stored/block.c:677 +#: src/stored/block.c:746 +#, c-format +msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" msgstr "" -#: src/findlib/bfile.c:98 -msgid "Encrypted File data" +#: src/stored/acquire.c:501 +#, c-format +msgid "Alert: %s" msgstr "" -#: src/findlib/bfile.c:100 -msgid "Encrypted GZIP data" +#: src/stored/acquire.c:509 +#, c-format +msgid "3997 Bad alert command: %s: ERR=%s.\n" msgstr "" -#: src/findlib/bfile.c:102 -msgid "Encrypted Win32 data" +#: src/stored/ansi_label.c:83 +#, c-format +msgid "Read error on device %s in ANSI label. ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:104 -msgid "Encrypted Win32 GZIP data" +#: src/stored/ansi_label.c:93 +msgid "Insane! End of tape while reading ANSI label.\n" msgstr "" -#: src/findlib/bfile.c:106 -msgid "Encrypted HFS+ resource fork" +#: src/stored/ansi_label.c:117 +msgid "No VOL1 label while reading ANSI/IBM label.\n" msgstr "" -#: src/findlib/create_file.c:86 +#: src/stored/ansi_label.c:137 #, c-format -msgid "File skipped. Not newer: %s\n" +msgid "Wanted ANSI Volume \"%s\" got \"%s\"\n" msgstr "" -#: src/findlib/create_file.c:93 -#, c-format -msgid "File skipped. Not older: %s\n" +#: src/stored/ansi_label.c:148 +msgid "No HDR1 label while reading ANSI label.\n" msgstr "" -#: src/findlib/create_file.c:99 +#: src/stored/ansi_label.c:154 #, c-format -msgid "File skipped. Already exists: %s\n" +msgid "ANSI/IBM Volume \"%s\" does not belong to Bacula.\n" msgstr "" -#: src/findlib/create_file.c:124 -#, c-format -msgid "File %s already exists and could not be replaced. ERR=%s.\n" +#: src/stored/ansi_label.c:165 +msgid "No HDR2 label while reading ANSI/IBM label.\n" msgstr "" -#: src/findlib/create_file.c:176 src/findlib/create_file.c:279 -#: src/findlib/create_file.c:330 -#, c-format -msgid "bpkt already open fid=%d\n" -msgstr "" - -#: src/findlib/create_file.c:198 -msgid "Could not save_dirn" +#: src/stored/ansi_label.c:179 +msgid "Unknown or bad ANSI/IBM label record.\n" msgstr "" -#: src/findlib/create_file.c:207 src/findlib/create_file.c:220 -#, c-format -msgid "Could not chdir to %s: ERR=%s\n" +#: src/stored/ansi_label.c:186 +msgid "Too many records in while reading ANSI/IBM label.\n" msgstr "" -#: src/findlib/create_file.c:240 +#: src/stored/ansi_label.c:285 #, c-format -msgid "Could not create %s: ERR=%s\n" +msgid "ANSI Volume label name \"%s\" longer than 6 chars.\n" msgstr "" -#: src/findlib/create_file.c:253 +#: src/stored/ansi_label.c:302 #, c-format -msgid "Cannot make fifo %s: ERR=%s\n" +msgid "Could not write ANSI VOL1 label. ERR=%s\n" msgstr "" -#: src/findlib/create_file.c:263 +#: src/stored/ansi_label.c:340 src/stored/ansi_label.c:369 #, c-format -msgid "Cannot make node %s: ERR=%s\n" +msgid "Could not write ANSI HDR1 label. ERR=%s\n" msgstr "" -#: src/findlib/create_file.c:284 src/findlib/create_file.c:341 -#: src/dird/ua_query.c:59 -#, c-format -msgid "Could not open %s: ERR=%s\n" +#: src/stored/ansi_label.c:345 src/stored/ansi_label.c:376 +msgid "Could not write ANSI HDR1 label.\n" msgstr "" -#: src/findlib/create_file.c:299 +#: src/stored/ansi_label.c:381 #, c-format -msgid "Could not symlink %s -> %s: ERR=%s\n" +msgid "Error writing EOF to tape. ERR=%s" msgstr "" -#: src/findlib/create_file.c:309 -#, c-format -msgid "Could not hard link %s -> %s: ERR=%s\n" +#: src/stored/ansi_label.c:386 +msgid "write_ansi_ibm_label called for non-ANSI/IBM type\n" msgstr "" -#: src/findlib/create_file.c:360 -#, c-format -msgid "Original file %s not saved: type=%d\n" +#: src/stored/append.c:49 +msgid "DCR is NULL!!!\n" msgstr "" -#: src/findlib/create_file.c:363 -#, c-format -msgid "Unknown file type %d; not restored: %s\n" +#: src/stored/append.c:54 +msgid "DEVICE is NULL!!!\n" msgstr "" -#: src/findlib/create_file.c:394 -#, c-format -msgid "Zero length filename: %s\n" +#: src/stored/append.c:66 +msgid "Unable to set network buffer size.\n" msgstr "" -#: src/findlib/makepath.c:117 -#, c-format -msgid "Cannot create directory %s: ERR=%s\n" +#: src/stored/append.c:79 src/stored/append.c:88 src/stored/append.c:100 +#: src/stored/append.c:256 src/stored/append.c:271 src/stored/append.c:283 +#: src/stored/askdir.c:294 src/stored/askdir.c:295 +msgid "NULL Volume name. This shouldn't happen!!!\n" msgstr "" -#: src/findlib/makepath.c:121 src/findlib/makepath.c:378 +#: src/stored/append.c:94 src/stored/btape.c:1854 #, c-format -msgid "%s exists but is not a directory\n" +msgid "Write session label failed. ERR=%s\n" msgstr "" -#: src/findlib/makepath.c:276 src/findlib/makepath.c:337 -#: src/findlib/makepath.c:397 +#: src/stored/append.c:106 #, c-format -msgid "Cannot change owner and/or group of %s: ERR=%s\n" +msgid "Network send error to FD. ERR=%s\n" msgstr "" -#: src/findlib/makepath.c:297 +#: src/stored/append.c:143 #, c-format -msgid "Cannot chdir to directory, %s: ERR=%s\n" +msgid "Error reading data header from FD. ERR=%s\n" msgstr "" -#: src/findlib/makepath.c:352 src/findlib/makepath.c:368 -#: src/findlib/makepath.c:402 +#: src/stored/append.c:165 #, c-format -msgid "Cannot change permissions of %s: ERR=%s\n" +msgid "Malformed data header from FD: %s\n" msgstr "" -#: src/findlib/match.c:184 src/filed/job.c:931 -#, c-format -msgid "Unknown include/exclude option: %c\n" +#: src/stored/append.c:175 +msgid "File index from FD not positive or sequential\n" msgstr "" -#: src/findlib/attribs.c:392 +#: src/stored/append.c:206 src/stored/append.c:276 src/stored/spool.c:248 #, c-format -msgid "File size of restored file %s not correct. Original %s, restored %s.\n" +msgid "Fatal append error on device %s: ERR=%s\n" msgstr "" -#: src/findlib/attribs.c:410 src/findlib/attribs.c:417 +#: src/stored/append.c:231 #, c-format -msgid "Unable to set file owner %s: ERR=%s\n" +msgid "Error updating file attributes. ERR=%s\n" msgstr "" -#: src/findlib/attribs.c:423 +#: src/stored/append.c:244 #, c-format -msgid "Unable to set file modes %s: ERR=%s\n" +msgid "Network error on data channel. ERR=%s\n" msgstr "" -#: src/findlib/attribs.c:433 +#: src/stored/append.c:265 src/stored/btape.c:1976 #, c-format -msgid "Unable to set file times %s: ERR=%s\n" +msgid "Error writting end session label. ERR=%s\n" msgstr "" -#: src/findlib/attribs.c:447 -#, c-format -msgid "Unable to set file flags %s: ERR=%s\n" +#: src/stored/append.c:278 +msgid "Set ok=FALSE after write_block_to_device.\n" msgstr "" -#: src/findlib/attribs.c:692 -#, c-format -msgid "Error in %s file %s: ERR=%s\n" +#: src/stored/askdir.c:161 +msgid "Network error on bnet_recv in req_vol_info.\n" msgstr "" -#: src/findlib/attribs.c:709 +#: src/stored/askdir.c:178 #, c-format -msgid "Error in %s: ERR=%s\n" +msgid "Error getting Volume info: %s" msgstr "" -#: src/tray-monitor/tray_conf.c:152 src/dird/dird_conf.c:455 -#, c-format -msgid "No %s resource defined\n" +#: src/stored/askdir.c:299 src/stored/askdir.c:300 +msgid "Attempt to update_volume_info in read mode!!!\n" msgstr "" -#: src/tray-monitor/tray_conf.c:161 +#: src/stored/askdir.c:328 #, c-format -msgid "Monitor: name=%s FDtimeout=%s SDtimeout=%s\n" +msgid "Didn't get vol info vol=%s: ERR=%s" msgstr "" -#: src/tray-monitor/tray_conf.c:167 +#: src/stored/askdir.c:359 #, c-format -msgid "Director: name=%s address=%s FDport=%d\n" +msgid "Error creating JobMedia record: ERR=%s\n" msgstr "" -#: src/tray-monitor/tray_conf.c:171 +#: src/stored/askdir.c:366 #, c-format -msgid "Client: name=%s address=%s FDport=%d\n" +msgid "Error creating JobMedia record: %s\n" msgstr "" -#: src/tray-monitor/tray_conf.c:175 +#: src/stored/askdir.c:432 #, c-format -msgid "Storage: name=%s address=%s SDport=%d\n" +msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" msgstr "" -#: src/tray-monitor/tray_conf.c:179 src/dird/dird_conf.c:808 +#: src/stored/askdir.c:445 #, c-format -msgid "Unknown resource type %d in dump_resource.\n" +msgid "" +"Job %s waiting. Cannot find any appendable volumes.\n" +"Please use the \"label\" command to create a new Volume for:\n" +" Storage: %s\n" +" Media type: %s\n" +" Pool: %s\n" msgstr "" -#: src/tray-monitor/tray_conf.c:232 src/dird/dird_conf.c:1105 +#: src/stored/askdir.c:469 src/stored/askdir.c:551 #, c-format -msgid "Unknown resource type %d in free_resource.\n" +msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" msgstr "" -#: src/tray-monitor/tray_conf.c:287 src/dird/dird_conf.c:1256 -#, c-format -msgid "Unknown resource type %d in save_resource.\n" +#: src/stored/askdir.c:479 +msgid "pthread error in mount_next_volume.\n" msgstr "" -#: src/tray-monitor/tray_conf.c:322 src/dird/dird_conf.c:1316 -#, c-format -msgid "Unknown resource type %d in save_resrouce.\n" +#: src/stored/askdir.c:511 +msgid "Cannot request another volume: no volume name given.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:102 +#: src/stored/askdir.c:517 #, c-format -msgid "" -"Copyright (C) 2000-2004 Kern Sibbald and John Walker\n" -"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" -" -dnn set debug level to nn\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" +msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:251 +#: src/stored/askdir.c:532 #, c-format -msgid "" -"Error: %d Monitor resource defined in %s. You must define one and only one " -"Monitor resource.\n" +msgid "Please mount Volume \"%s\" on Storage Device %s for Job %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:282 -#, c-format -msgid "" -"No Client, Storage nor 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/askdir.c:561 +msgid "pthread error in mount_volume\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:304 +#: src/stored/authenticate.c:53 #, 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:319 -msgid "Open status window..." +msgid "I only authenticate Directors, not %d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:325 -msgid "Exit" +#: src/stored/authenticate.c:120 +msgid "" +"Incorrect password given by Director.\n" +"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " +"help.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:337 -msgid "Bacula tray monitor" +#: src/stored/authenticate.c:178 +#, c-format +msgid "Unable to authenticate Director at %s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:362 -msgid " (DIR)" +#: src/stored/authenticate.c:223 src/stored/authenticate.c:259 +#, c-format +msgid "" +"Incorrect authorization key from File daemon at %s rejected.\n" +"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " +"help.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:366 -msgid " (FD)" +#: src/stored/autochanger.c:53 +#, c-format +msgid "No Changer Name given for device %s. Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:370 -msgid " (SD)" +#: src/stored/autochanger.c:59 +#, c-format +msgid "No Changer Command given for device %s. Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:383 -msgid "Unknown status." +#: src/stored/autochanger.c:72 +#, c-format +msgid "" +"Media Type not the same for all devices in changer %s. Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:424 -msgid "Refresh interval in seconds: " +#: src/stored/autochanger.c:152 +#, c-format +msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:432 -msgid "Refresh now" +#: src/stored/autochanger.c:161 +#, c-format +msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:436 -msgid "About" +#: src/stored/autochanger.c:167 +#, c-format +msgid "3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:440 -msgid "Close" +#: src/stored/autochanger.c:208 +msgid "3992 Missing Changer command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:460 +#: src/stored/autochanger.c:218 #, c-format -msgid "Disconnecting from Director %s:%d\n" +msgid "3301 Issuing autochanger \"loaded drive %d\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:463 +#: src/stored/autochanger.c:227 #, c-format -msgid "Disconnecting from Client %s:%d\n" +msgid "3302 Autochanger \"loaded drive %d\", result is Slot %d.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:466 +#: src/stored/autochanger.c:231 #, c-format -msgid "Disconnecting from Storage %s:%d\n" -msgstr "" - -#: src/tray-monitor/tray-monitor.c:502 src/tray-monitor/tray-monitor.c:512 -msgid "Bacula Tray Monitor" +msgid "3302 Autochanger \"loaded drive %d\", result: nothing loaded.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:503 src/tray-monitor/tray-monitor.c:513 -msgid "" -"Copyright (C) 2004-2005 Kern Sibbald\n" -"Written by Nicolas Boichat\n" +#: src/stored/autochanger.c:238 +#, c-format +msgid "3991 Bad autochanger \"loaded drive %d\" command: ERR=%s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:505 src/tray-monitor/tray-monitor.c:515 -msgid "Version:" +#: src/stored/autochanger.c:297 src/stored/autochanger.c:380 +#, c-format +msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:583 +#: src/stored/autochanger.c:310 src/stored/autochanger.c:401 #, c-format -msgid "Error, currentitem is not a Client or a Storage..\n" +msgid "3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:656 +#: src/stored/autochanger.c:369 #, c-format -msgid "" -"Current job: %s\n" -"Last job: %s" +msgid "Volume %s is in use by device %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:668 +#: src/stored/autochanger.c:439 #, c-format -msgid " (%d errors)" +msgid "3993 Device %s not an autochanger device.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:671 +#: src/stored/autochanger.c:464 #, c-format -msgid " (%d error)" +msgid "3306 Issuing autochanger \"%s\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:708 -msgid "No current job." +#: src/stored/autochanger.c:467 +msgid "3996 Open bpipe failed.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:711 -msgid "No last job." +#: src/stored/autochanger.c:494 +#, c-format +msgid "Autochanger error: ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:719 -msgid "Job status: Created" -msgstr "" - -#: src/tray-monitor/tray-monitor.c:724 -msgid "Job status: Running" +#: src/stored/bcopy.c:58 +#, c-format +msgid "" +"Copyright (C) 2002-2005 Kern Sibbald.\n" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bcopy [-d debug_level] \n" +" -b bootstrap specify a bootstrap file\n" +" -c specify configuration file\n" +" -d set debug level to nn\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/tray-monitor/tray-monitor.c:728 -msgid "Job status: Blocked" +#: src/stored/bcopy.c:137 src/stored/bextract.c:177 src/stored/bscan.c:221 +msgid "Wrong number of arguments: \n" msgstr "" -#: src/tray-monitor/tray-monitor.c:733 -msgid "Job status: Terminated" +#: src/stored/bcopy.c:172 src/stored/btape.c:333 src/stored/device.c:266 +#, c-format +msgid "dev open failed: %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:738 -msgid "Job status: Terminated in error" +#: src/stored/bcopy.c:185 +msgid "Write of last block failed.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:744 -msgid "Job status: Error" +#: src/stored/bcopy.c:188 +#, c-format +msgid "%u Jobs copied. %u records copied.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:748 -msgid "Job status: Fatal error" +#: src/stored/bcopy.c:205 src/stored/bscan.c:390 +#, c-format +msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:753 -msgid "Job status: Verify differences" +#: src/stored/bcopy.c:220 +msgid "Volume is prelabeled. This volume cannot be copied.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:758 -msgid "Job status: Canceled" +#: src/stored/bcopy.c:223 +msgid "Volume label not copied.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:763 -msgid "Job status: Waiting on File daemon" +#: src/stored/bcopy.c:235 src/stored/bcopy.c:242 src/stored/bcopy.c:265 +#: src/stored/btape.c:2342 +#, c-format +msgid "Cannot fixup device error. %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:768 -msgid "Job status: Waiting on the Storage daemon" +#: src/stored/bcopy.c:247 +msgid "EOM label not copied.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:773 -msgid "Job status: Waiting for new media" +#: src/stored/bcopy.c:250 +msgid "EOT label not copied.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:778 -msgid "Job status: Waiting for Mount" +#: src/stored/bcopy.c:290 src/stored/bextract.c:479 src/stored/bls.c:443 +#: src/stored/bscan.c:1234 src/stored/btape.c:2690 +#, c-format +msgid "Mount Volume \"%s\" on device %s and press return when ready: " msgstr "" -#: src/tray-monitor/tray-monitor.c:783 -msgid "Job status: Waiting for storage resource" +#: src/stored/bextract.c:70 +#, c-format +msgid "" +"Copyright (C) 2000-2005 Kern Sibbald.\n" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bextract \n" +" -b specify a bootstrap file\n" +" -c specify a configuration file\n" +" -d set debug level to nn\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/tray-monitor/tray-monitor.c:788 -msgid "Job status: Waiting for job resource" +#: src/stored/bextract.c:127 src/stored/bls.c:128 +#, c-format +msgid "Could not open exclude file: %s, ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:793 -msgid "Job status: Waiting for Client resource" +#: src/stored/bextract.c:142 src/stored/bls.c:142 +#, c-format +msgid "Could not open include file: %s, ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:798 -msgid "Job status: Waiting for maximum jobs" +#: src/stored/bextract.c:198 +#, c-format +msgid "%d Program Name and/or Program Data Stream records ignored.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:803 -msgid "Job status: Waiting for start time" +#: src/stored/bextract.c:202 +#, c-format +msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:808 -msgid "Job status: Waiting for higher priority jobs to finish" +#: src/stored/bextract.c:226 +#, c-format +msgid "Cannot stat %s. It must exist. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:813 +#: src/stored/bextract.c:230 #, c-format -msgid "Unknown job status %c." +msgid "%s must be a directory.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:814 +#: src/stored/bextract.c:251 #, c-format -msgid "Job status: Unknown(%c)" +msgid "%u files restored.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:821 -#, c-format -msgid "Bad scan : '%s' %d\n" +#: src/stored/bextract.c:278 src/stored/bextract.c:450 +msgid "Logic error output file should be open but is not.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:859 -#, c-format -msgid "Connecting to Director %s:%d" +#: src/stored/bextract.c:285 src/stored/bls.c:364 src/stored/bscan.c:647 +msgid "Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:865 +#: src/stored/bextract.c:347 #, c-format -msgid "Connecting to Client %s:%d\n" +msgid "Seek error on %s: %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:866 +#: src/stored/bextract.c:400 #, c-format -msgid "Connecting to Client %s:%d" +msgid "Uncompression error. ERR=%d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:867 src/dird/fd_cmds.c:73 -msgid "File daemon" +#: src/stored/bextract.c:408 +msgid "===Write error===\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:872 -#, c-format -msgid "Connecting to Storage %s:%d\n" +#: src/stored/bextract.c:441 +msgid "Got Program Name or Data Stream. Ignored.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:873 +#: src/stored/block.c:79 #, c-format -msgid "Connecting to Storage %s:%d" +msgid "" +"Dump block %s %x: size=%d BlkNum=%d\n" +" Hdrcksum=%x cksum=%x\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:874 src/filed/job.c:1158 -#: src/dird/msgchan.c:78 -msgid "Storage daemon" +#: src/stored/block.c:92 +#, c-format +msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d p=%x\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:878 src/tray-monitor/tray-monitor.c:916 +#: src/stored/block.c:148 #, c-format -msgid "Error, currentitem is not a Client, a Storage or a Director..\n" +msgid "%d block read errors not printed.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:884 -msgid "Cannot connect to daemon.\n" +#: src/stored/block.c:236 src/stored/block.c:252 src/stored/block.c:262 +#, c-format +msgid "" +"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " +"discarded.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:885 -msgid "Cannot connect to daemon." +#: src/stored/block.c:276 +#, 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/tray-monitor/tray-monitor.c:897 +#: src/stored/block.c:302 #, c-format -msgid "Authentication error : %s" +msgid "" +"Volume data error at %u:%u!\n" +"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:904 -msgid "Opened connection with Director daemon.\n" +#: src/stored/block.c:410 +msgid "Cannot write block. Device at EOM.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:905 -msgid "Opened connection with Director daemon." +#: src/stored/block.c:415 +msgid "Attempt to write on read-only Volume.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:908 -msgid "Opened connection with File daemon.\n" +#: src/stored/block.c:467 +#, c-format +msgid "User defined maximum volume capacity %s exceeded on device %s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:909 -msgid "Opened connection with File daemon." +#: src/stored/block.c:482 +#, c-format +msgid "Unable to write EOF. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:912 -msgid "Opened connection with Storage daemon.\n" +#: src/stored/block.c:508 src/stored/block.c:519 +msgid "Write block header zeroed.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:913 -msgid "Opened connection with Storage daemon." +#: src/stored/block.c:537 +#, c-format +msgid "Write error at %u:%u on device %s. ERR=%s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:948 -msgid "<< Error: BNET_PROMPT signal received. >>\n" +#: src/stored/block.c:544 +#, c-format +msgid "End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:953 src/wx-console/console_thread.cpp:465 -msgid "<< Heartbeat signal received, answered. >>\n" +#: src/stored/block.c:619 src/stored/block.c:625 +#, c-format +msgid "Backspace file at EOT failed. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:957 +#: src/stored/block.c:632 #, c-format -msgid "<< Unexpected signal received : %s >>\n" +msgid "Backspace record at EOT failed. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:962 -msgid "\n" +#: src/stored/block.c:649 +#, c-format +msgid "Re-read last block at EOT failed. ERR=%s" msgstr "" -#: src/tray-monitor/tray-monitor.c:966 -msgid "Error : BNET_HARDEOF or BNET_ERROR" +#: src/stored/block.c:653 +msgid "Re-read of last block succeeded.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:972 -msgid "\n" +#: src/stored/block.c:656 +#, c-format +msgid "Re-read of last block failed. Last block=%u Current block=%u.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:976 -msgid "Error : Connection closed." +#: src/stored/block.c:685 +#, c-format +msgid "" +"Error writing final EOF to tape. This Volume may not be readable.\n" +"%s" msgstr "" -#: src/tray-monitor/authenticate.c:78 +#: src/stored/block.c:795 src/stored/dvd.c:689 +#, c-format msgid "" -"Director authorization problem.\n" -"Most likely the passwords do not agree.\n" -"Please see http://www.bacula.org/html-manual/faq.html#AuthorizationErrors " -"for help.\n" +"Error while writing, current part number is less than the total number of " +"parts (%d/%d, device=%s)\n" msgstr "" -#: src/tray-monitor/authenticate.c:121 src/dird/authenticate.c:67 -#: src/dird/authenticate.c:68 +#: src/stored/block.c:803 src/stored/block.c:913 #, c-format -msgid "Error sending Hello to Storage daemon. ERR=%s\n" +msgid "Unable to open device next part %s: ERR=%s\n" msgstr "" -#: src/tray-monitor/authenticate.c:127 +#: src/stored/block.c:821 +#, c-format msgid "" -"Director and Storage daemon passwords or names not the same.\n" -"Please see http://www.bacula.org/html-manual/faq.html#AuthorizationErrors " -"for help.\n" +"End of Volume \"%s\" at %u:%u on device %s (part_size=%s, free_space=%s, " +"free_space_errno=%d, errmsg=%s).\n" msgstr "" -#: src/tray-monitor/authenticate.c:134 src/dird/authenticate.c:132 +#: src/stored/block.c:834 #, c-format -msgid "bdird\n" +" -b specify a bootstrap file\n" +" -c specify a config file\n" +" -d specify debug level\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/filed/restore.c:214 src/filed/restore.c:493 -msgid "Logic error: output file should be open\n" +#: src/stored/bls.c:189 +msgid "No archive name specified\n" msgstr "" -#: src/filed/restore.c:231 src/filed/restore.c:509 src/filed/restore.c:546 +#: src/stored/bls.c:224 #, c-format -msgid "Missing cryptographic signature for %s\n" +msgid "" +"\n" +"Warning, this Volume is a continuation of Volume %s\n" msgstr "" -#: src/filed/restore.c:245 src/filed/restore.c:515 -msgid "Logic error: output file should not be open\n" +#: src/stored/bls.c:267 +#, c-format +msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/filed/restore.c:326 -msgid "Missing private key required to decrypt encrypted backup data." +#: src/stored/bls.c:278 +#, c-format +msgid "Mounted Volume \"%s\".\n" msgstr "" -#: src/filed/restore.c:329 -msgid "Decrypt of the session key failed." +#: src/stored/bls.c:280 +#, c-format +msgid "Got EOF at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/filed/restore.c:333 +#: src/stored/bls.c:304 #, c-format -msgid "An error occured while decoding encrypted session data stream: %s" +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/filed/restore.c:345 +#: src/stored/bls.c:313 #, c-format -msgid "Failed to initialize decryption context for %s\n" +msgid "Block: %d size=%d\n" msgstr "" -#: src/filed/restore.c:409 +#: src/stored/bls.c:380 #, c-format -msgid " Cannot open resource fork for %s.\n" +msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" msgstr "" -#: src/filed/restore.c:432 -#, c-format -msgid " Invalid length of Finder Info (got %d, not 32)\n" +#: src/stored/bls.c:397 src/stored/read_record.c:322 +msgid "Fresh Volume Label" msgstr "" -#: src/filed/restore.c:436 -#, c-format -msgid " Could not set Finder Info on %s\n" +#: src/stored/bls.c:400 src/stored/read_record.c:325 +msgid "Volume Label" msgstr "" -#: src/filed/restore.c:448 -#, c-format -msgid "Can't restore ACL of %s\n" +#: src/stored/bls.c:404 src/stored/label.c:969 +msgid "Begin Job Session" msgstr "" -#: src/filed/restore.c:460 -#, c-format -msgid "Can't restore default ACL of %s\n" +#: src/stored/bls.c:408 src/stored/label.c:972 +msgid "End Job Session" +msgstr "" + +#: src/stored/bls.c:411 +msgid "End of Medium" +msgstr "" + +#: src/stored/bls.c:414 src/stored/label.c:981 +msgid "Unknown" msgstr "" -#: src/filed/restore.c:470 +#: src/stored/bls.c:420 src/stored/read_record.c:343 #, c-format -msgid "Failed to decode message signature for %s\n" +msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" msgstr "" -#: src/filed/restore.c:591 +#: src/stored/bscan.c:109 #, c-format msgid "" -"%d non-supported data streams and %d non-supported attrib streams ignored.\n" +"Copyright (C) 2001-2005 Kern Sibbald.\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 nn\n" +" -m update media info in database\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\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/filed/restore.c:595 +#: src/stored/bscan.c:234 src/stored/stored.c:265 #, c-format -msgid "%d non-supported resource fork streams ignored.\n" +msgid "No Storage resource defined in %s. Cannot continue.\n" msgstr "" -#: src/filed/restore.c:598 +#: src/stored/bscan.c:242 src/stored/stored.c:296 #, c-format -msgid "%d non-supported Finder Info streams ignored.\n" +msgid "No Working Directory defined in %s. Cannot continue.\n" msgstr "" -#: src/filed/restore.c:601 +#: src/stored/bscan.c:250 #, c-format -msgid "%d non-supported acl streams ignored.\n" +msgid "Working Directory: %s not found. Cannot continue.\n" msgstr "" -#: src/filed/restore.c:613 -msgid "None" +#: src/stored/bscan.c:254 +#, c-format +msgid "Working Directory: %s is not a directory. Cannot continue.\n" msgstr "" -#: src/filed/restore.c:617 -msgid "Zlib errno" +#: src/stored/bscan.c:268 src/stored/bscan.c:341 +#, c-format +msgid "First Volume Size = %sn" msgstr "" -#: src/filed/restore.c:619 -msgid "Zlib stream error" +#: src/stored/bscan.c:274 +msgid "Could not init Bacula database\n" msgstr "" -#: src/filed/restore.c:621 -msgid "Zlib data error" +#: src/stored/bscan.c:281 +#, c-format +msgid "Using Database: %s, User: %s\n" msgstr "" -#: src/filed/restore.c:623 -msgid "Zlib memory error" +#: src/stored/bscan.c:315 +#, c-format +msgid "Create JobMedia for Job %s\n" msgstr "" -#: src/filed/restore.c:625 -msgid "Zlib buffer error" +#: src/stored/bscan.c:326 +#, c-format +msgid "Could not create JobMedia record for Volume=%s Job=%s\n" msgstr "" -#: src/filed/restore.c:627 -msgid "Zlib version error" +#: src/stored/bscan.c:382 +#, c-format +msgid "done: %d%%\n" msgstr "" -#: src/filed/restore.c:662 -#, c-format -msgid "Signature validation failed for %s: \n" +#: src/stored/bscan.c:406 +msgid "Volume is prelabeled. This tape cannot be scanned.\n" msgstr "" -#: src/filed/restore.c:669 src/filed/restore.c:684 +#: src/stored/bscan.c:418 #, c-format -msgid "Signature validation failed for %s: %s\n" +msgid "Pool record for %s found in DB.\n" msgstr "" -#: src/filed/restore.c:754 +#: src/stored/bscan.c:422 #, c-format -msgid "Uncompression error on file %s. ERR=%s\n" +msgid "VOL_LABEL: Pool record not found for Pool: %s\n" msgstr "" -#: src/filed/restore.c:785 -msgid "Decryption error\n" +#: src/stored/bscan.c:428 +#, c-format +msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" msgstr "" -#: src/filed/restore.c:804 src/filed/restore.c:849 +#: src/stored/bscan.c:432 #, c-format -msgid "Write error in Win32 Block Decomposition on %s: %s\n" +msgid "Pool type \"%s\" is OK.\n" msgstr "" -#: src/filed/restore.c:843 +#: src/stored/bscan.c:442 #, c-format -msgid "Decryption error for %s\n" +msgid "Media record for %s found in DB.\n" msgstr "" -#: src/filed/verify.c:45 +#: src/stored/bscan.c:449 #, c-format -msgid "Cannot malloc %d network read buffer\n" +msgid "VOL_LABEL: Media record not found for Volume: %s\n" msgstr "" -#: src/filed/verify.c:113 src/filed/backup.c:242 +#: src/stored/bscan.c:456 #, c-format -msgid " Could not access %s: ERR=%s\n" +msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" msgstr "" -#: src/filed/verify.c:120 src/filed/backup.c:249 +#: src/stored/bscan.c:460 #, c-format -msgid " Could not follow link %s: ERR=%s\n" +msgid "Media type \"%s\" is OK.\n" msgstr "" -#: src/filed/verify.c:127 src/filed/backup.c:256 +#: src/stored/bscan.c:469 #, c-format -msgid " Could not stat %s: ERR=%s\n" +msgid "VOL_LABEL: OK for Volume: %s\n" msgstr "" -#: src/filed/verify.c:133 src/filed/backup.c:263 +#: src/stored/bscan.c:476 #, c-format -msgid " Unchanged file skipped: %s\n" +msgid "%d \"errors\" ignored before first Start of Session record.\n" msgstr "" -#: src/filed/verify.c:136 +#: src/stored/bscan.c:487 #, c-format -msgid " Archive file skipped: %s\n" +msgid "SOS_LABEL: Found Job record for JobId: %d\n" msgstr "" -#: src/filed/verify.c:139 +#: src/stored/bscan.c:492 #, c-format -msgid " Recursion turned off. Directory skipped: %s\n" +msgid "SOS_LABEL: Job record not found for JobId: %d\n" msgstr "" -#: src/filed/verify.c:142 +#: src/stored/bscan.c:532 #, c-format -msgid " File system change prohibited. Directory skipped: %s\n" +msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/filed/verify.c:147 src/filed/backup.c:270 +#: src/stored/bscan.c:538 #, c-format -msgid " Could not open directory %s: ERR=%s\n" +msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/filed/verify.c:152 +#: src/stored/bscan.c:544 #, c-format -msgid " Unknown file type %d: %s\n" +msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/filed/verify.c:195 src/filed/verify_vol.c:201 +#: src/stored/bscan.c:562 src/stored/bscan.c:1013 #, c-format -msgid "Network error in send to Director: ERR=%s\n" +msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" msgstr "" -#: src/filed/verify.c:228 src/filed/backup.c:306 +#: src/stored/bscan.c:606 #, c-format -msgid "%s digest initialization failed\n" +msgid "Could not update job record. ERR=%s\n" msgstr "" -#: src/filed/verify.c:284 src/filed/backup.c:368 +#: src/stored/bscan.c:617 #, c-format -msgid " Cannot open %s: ERR=%s.\n" +msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" msgstr "" -#: src/filed/verify.c:298 src/filed/backup.c:417 +#: src/stored/bscan.c:629 #, c-format -msgid " Cannot open resource fork for %s: ERR=%s.\n" +msgid "Could not find Job for SessId=%d SessTime=%d record.\n" msgstr "" -#: src/filed/verify.c:334 +#: src/stored/bscan.c:665 #, c-format -msgid "Error reading file %s: ERR=%s\n" +msgid "%s file records. At file:blk=%s:%s bytes=%s\n" msgstr "" -#: src/filed/backup.c:70 -msgid "Cannot set buffer size FD->SD.\n" +#: src/stored/bscan.c:708 +#, c-format +msgid "Got MD5 record: %s\n" msgstr "" -#: src/filed/backup.c:95 src/filed/backup.c:107 -msgid "An error occured while encrypting the stream.\n" +#: src/stored/bscan.c:717 +#, c-format +msgid "Got SHA1 record: %s\n" msgstr "" -#: src/filed/backup.c:211 +#: src/stored/bscan.c:725 #, c-format -msgid " Recursion turned off. Will not descend into %s\n" +msgid "Got Prog Names Stream: %s\n" msgstr "" -#: src/filed/backup.c:218 -#, c-format -msgid " Filesystem change prohibited. Will not descend into %s\n" +#: src/stored/bscan.c:731 +msgid "Got Prog Data Stream record.\n" msgstr "" -#: src/filed/backup.c:224 +#: src/stored/bscan.c:735 #, c-format -msgid " Disallowed filesystem. Will not descend into %s\n" +msgid "Unknown stream type!!! stream=%d data=%s\n" msgstr "" -#: src/filed/backup.c:266 +#: src/stored/bscan.c:799 #, c-format -msgid " Archive file not saved: %s\n" +msgid "Could not create File Attributes record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:276 +#: src/stored/bscan.c:805 #, c-format -msgid " Unknown file type %d; not saved: %s\n" +msgid "Created File record: %s\n" msgstr "" -#: src/filed/backup.c:320 +#: src/stored/bscan.c:842 #, c-format -msgid "%s signature digest initialization failed\n" +msgid "Could not create media record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:338 +#: src/stored/bscan.c:846 src/stored/bscan.c:867 #, c-format -msgid "Python reader program \"%s\" not found.\n" +msgid "Could not update media record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:471 -msgid "Failed to allocate memory for stream signature.\n" +#: src/stored/bscan.c:850 +#, c-format +msgid "Created Media record for Volume: %s\n" msgstr "" -#: src/filed/backup.c:476 src/filed/backup.c:482 src/filed/backup.c:495 -msgid "An error occured while signing the stream.\n" +#: src/stored/bscan.c:871 +#, c-format +msgid "Updated Media record at end of Volume: %s\n" msgstr "" -#: src/filed/backup.c:596 -msgid "Failed to initialize encryption context\n" +#: src/stored/bscan.c:888 +#, c-format +msgid "Could not create pool record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:617 src/filed/backup.c:728 src/filed/backup.c:757 -#: src/filed/backup.c:778 src/filed/backup.c:823 src/filed/backup.c:836 -#: src/filed/backup.c:844 src/filed/backup.c:889 src/filed/backup.c:923 +#: src/stored/bscan.c:892 #, c-format -msgid "Network send error to SD. ERR=%s\n" +msgid "Created Pool record for Pool: %s\n" msgstr "" -#: src/filed/backup.c:692 +#: src/stored/bscan.c:912 #, c-format -msgid "Compression error: %d\n" +msgid "Created Client record for Client: %s\n" msgstr "" -#: src/filed/backup.c:716 -msgid "Encryption error\n" +#: src/stored/bscan.c:929 +#, c-format +msgid "Fileset \"%s\" already exists.\n" msgstr "" -#: src/filed/backup.c:744 -msgid "Encryption padding error\n" +#: src/stored/bscan.c:933 +#, c-format +msgid "Could not create FileSet record \"%s\". ERR=%s\n" msgstr "" -#: src/filed/backup.c:769 +#: src/stored/bscan.c:938 #, c-format -msgid "Read error on file %s. ERR=%s\n" +msgid "Created FileSet record \"%s\"\n" msgstr "" -#: src/filed/backup.c:772 -msgid "Too many errors.\n" +#: src/stored/bscan.c:985 +#, c-format +msgid "Could not create JobId record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:814 +#: src/stored/bscan.c:991 #, c-format -msgid "Error reading ACL of %s\n" +msgid "Could not update job start record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:868 -msgid "Invalid file flags, no supported data stream type.\n" +#: src/stored/bscan.c:994 +#, c-format +msgid "Created new JobId=%u record for original JobId=%u\n" msgstr "" -#: src/filed/job.c:328 +#: src/stored/bscan.c:1044 #, c-format -msgid "2901 Job %s not found.\n" +msgid "Could not update JobId=%u record. ERR=%s\n" msgstr "" -#: src/filed/job.c:344 +#: src/stored/bscan.c:1049 #, c-format -msgid "2001 Job %s marked to be canceled.\n" +msgid "Updated Job termination record for JobId=%u TermStat=%c\n" msgstr "" -#: src/filed/job.c:347 -msgid "2902 Error scanning cancel command.\n" +#: src/stored/bscan.c:1071 +#, c-format +msgid "Job Termination code: %d" msgstr "" -#: src/filed/job.c:366 +#: src/stored/bscan.c:1076 #, c-format -msgid "2991 Bad setdebug command: %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/filed/job.c:382 +#: src/stored/bscan.c:1140 #, c-format -msgid "Bad estimate command: %s" +msgid "Could not create JobMedia record. ERR=%s\n" msgstr "" -#: src/filed/job.c:383 -msgid "2992 Bad estimate command.\n" +#: src/stored/bscan.c:1144 +#, c-format +msgid "Created JobMedia record JobId %d, MediaId %d\n" msgstr "" -#: src/filed/job.c:406 +#: src/stored/bscan.c:1160 #, c-format -msgid "Bad Job Command: %s" +msgid "Could not find SessId=%d SessTime=%d for MD5/SHA1 record.\n" msgstr "" -#: src/filed/job.c:426 +#: src/stored/bscan.c:1174 #, c-format -msgid "Bad RunBeforeJob command: %s\n" +msgid "Could not add MD5/SHA1 to File record. ERR=%s\n" msgstr "" -#: src/filed/job.c:427 src/filed/job.c:440 -msgid "2905 Bad RunBeforeJob command.\n" +#: src/stored/bscan.c:1179 +msgid "Updated MD5/SHA1 record\n" msgstr "" -#: src/filed/job.c:453 +#: src/stored/btape.c:157 src/stored/stored.c:107 #, c-format -msgid "Bad RunAfter command: %s\n" +msgid "Tape block size (%d) not multiple of system size (%d)\n" msgstr "" -#: src/filed/job.c:454 -msgid "2905 Bad RunAfterJob command.\n" +#: src/stored/btape.c:161 src/stored/stored.c:111 +#, c-format +msgid "Tape block size (%d) is not a power of 2\n" msgstr "" -#: src/filed/job.c:480 +#: src/stored/btape.c:164 #, c-format -msgid "%s could not execute. ERR=%s\n" +msgid "" +"\n" +"\n" +"!!!! Warning large disk addressing disabled. off_t=%d should be 8 or " +"more !!!!!\n" +"\n" +"\n" msgstr "" -#: src/filed/job.c:489 +#: src/stored/btape.c:171 #, c-format -msgid "%s: %s\n" +msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" msgstr "" -#: src/filed/job.c:494 -#, c-format -msgid "%s returned non-zero status=%d. ERR=%s\n" +#: src/stored/btape.c:180 +msgid "64 bit printf/scanf problem. i=%d x64=%" msgstr "" -#: src/filed/job.c:570 src/dird/fd_cmds.c:320 -#, c-format -msgid "Cannot run program: %s. ERR=%s\n" +#: src/stored/btape.c:180 +msgid " y64=%" msgstr "" -#: src/filed/job.c:579 +#: src/stored/btape.c:184 #, c-format -msgid "Error running program: %s. RtnStat=%d ERR=%s\n" +msgid "Tape block granularity is %d bytes.\n" msgstr "" -#: src/filed/job.c:589 -#, c-format -msgid "Cannot open FileSet input file: %s. ERR=%s\n" +#: src/stored/btape.c:251 +msgid "No archive name specified.\n" msgstr "" -#: src/filed/job.c:683 -#, c-format -msgid "REGEX %s compile error. ERR=%s\n" +#: src/stored/btape.c:255 +msgid "Improper number of arguments specified.\n" msgstr "" -#: src/filed/job.c:737 +#: src/stored/btape.c:338 #, c-format -msgid "Invalid FileSet command: %s\n" +msgid "open device %s: OK\n" msgstr "" -#: src/filed/job.c:1090 -#, c-format -msgid "DIR and FD clocks differ by %d seconds, FD automatically adjusting.\n" +#: src/stored/btape.c:359 +msgid "Enter Volume Name: " msgstr "" -#: src/filed/job.c:1098 +#: src/stored/btape.c:366 #, c-format -msgid "Unknown backup level: %s\n" +msgid "Device open failed. ERR=%s\n" msgstr "" -#: src/filed/job.c:1110 +#: src/stored/btape.c:371 #, c-format -msgid "Bad level command: %s\n" +msgid "Wrote Volume label for volume \"%s\".\n" msgstr "" -#: src/filed/job.c:1131 -#, c-format -msgid "Bad session command: %s" +#: src/stored/btape.c:385 +msgid "Volume has no label.\n" msgstr "" -#: src/filed/job.c:1152 -#, c-format -msgid "Bad storage command: %s" +#: src/stored/btape.c:388 +msgid "Volume label read correctly.\n" msgstr "" -#: src/filed/job.c:1161 +#: src/stored/btape.c:391 #, c-format -msgid "Failed to connect to Storage daemon: %s:%d\n" +msgid "I/O error on device: ERR=%s" msgstr "" -#: src/filed/job.c:1173 -msgid "Failed to authenticate Storage daemon.\n" +#: src/stored/btape.c:394 +msgid "Volume name error\n" msgstr "" -#: src/filed/job.c:1199 -msgid "Cannot contact Storage daemon\n" +#: src/stored/btape.c:397 +#, c-format +msgid "Error creating label. ERR=%s" msgstr "" -#: src/filed/job.c:1217 -#, c-format -msgid "Bad response to append open: %s\n" +#: src/stored/btape.c:400 +msgid "Volume version error.\n" msgstr "" -#: src/filed/job.c:1222 -msgid "Bad response from stored to open command\n" +#: src/stored/btape.c:403 +msgid "Bad Volume label type.\n" msgstr "" -#: src/filed/job.c:1249 -#, c-format -msgid "Generate VSS snapshots. Driver=\"%s\", Drive(s)=\"%s\"\n" +#: src/stored/btape.c:406 +msgid "Unknown error.\n" msgstr "" -#: src/filed/job.c:1252 +#: src/stored/btape.c:424 #, c-format -msgid "Generate VSS snapshots failed. ERR=%s\n" +msgid "Bad status from load. ERR=%s\n" msgstr "" -#: src/filed/job.c:1259 +#: src/stored/btape.c:426 #, c-format -msgid "Generate VSS snapshot of drive \"%c:\\\" failed\n" +msgid "Loaded %s\n" msgstr "" -#: src/filed/job.c:1268 +#: src/stored/btape.c:435 src/stored/btape.c:775 src/stored/btape.c:817 +#: src/stored/btape.c:887 src/stored/btape.c:929 src/stored/btape.c:1198 #, c-format -msgid "VSS Writer: %s\n" +msgid "Bad status from rewind. ERR=%s\n" msgstr "" -#: src/filed/job.c:1272 -msgid "No drive letters found for generating VSS snapshots.\n" +#: src/stored/btape.c:438 src/stored/btape.c:1206 +#, c-format +msgid "Rewound %s\n" msgstr "" -#: src/filed/job.c:1275 -msgid "VSS was not initialized properly. VSS support is disabled.\n" +#: src/stored/btape.c:465 src/stored/btape.c:1210 +#, c-format +msgid "Bad status from weof %d. ERR=%s\n" msgstr "" -#: src/filed/job.c:1324 -msgid "Append Close with SD failed.\n" +#: src/stored/btape.c:469 +#, c-format +msgid "Wrote 1 EOF to %s\n" msgstr "" -#: src/filed/job.c:1328 +#: src/stored/btape.c:472 #, c-format -msgid "Bad status %d returned from Storage Daemon.\n" +msgid "Wrote %d EOFs to %s\n" msgstr "" -#: src/filed/job.c:1361 -#, c-format -msgid "2994 Bad verify command: %s\n" +#: src/stored/btape.c:490 +msgid "Moved to end of medium.\n" msgstr "" -#: src/filed/job.c:1376 src/filed/job.c:1415 +#: src/stored/btape.c:517 #, c-format -msgid "2994 Bad verify level: %s\n" +msgid "Bad status from bsf. ERR=%s\n" msgstr "" -#: src/filed/job.c:1455 +#: src/stored/btape.c:519 #, c-format -msgid "Bad replace command. CMD=%s\n" +msgid "Backspaced %d file%s.\n" msgstr "" -#: src/filed/job.c:1532 -msgid "Improper calling sequence.\n" +#: src/stored/btape.c:536 +#, c-format +msgid "Bad status from bsr. ERR=%s\n" msgstr "" -#: src/filed/job.c:1552 +#: src/stored/btape.c:538 #, c-format -msgid "Bad response to SD read open: %s\n" +msgid "Backspaced %d record%s.\n" msgstr "" -#: src/filed/job.c:1557 -msgid "Bad response from stored to read open command\n" +#: src/stored/btape.c:548 src/stored/status.c:227 +#, c-format +msgid "Configured device capabilities:\n" msgstr "" -#: src/filed/job.c:1623 +#: src/stored/btape.c:566 #, c-format -msgid "Comm error with SD. bad response to %s. ERR=%s\n" +msgid "Device status:\n" msgstr "" -#: src/filed/job.c:1626 +#: src/stored/btape.c:580 src/stored/status.c:259 #, c-format -msgid "Bad response to %s command. Wanted %s, got %s\n" +msgid "Device parameters:\n" msgstr "" -#: src/filed/job.c:1647 src/dird/fd_cmds.c:441 +#: src/stored/btape.c:585 #, c-format -msgid "Could not open bootstrap file %s: ERR=%s\n" +msgid "Status:\n" msgstr "" -#: src/filed/status.c:67 -#, c-format -msgid "%s Version: %s (%s) %s %s %s %s\n" +#: src/stored/btape.c:600 +msgid "" +"Test writting 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/filed/status.c:71 -#, c-format -msgid "Daemon started %s, %d Job%s run since started.\n" +#: src/stored/btape.c:608 src/stored/btape.c:1815 +msgid "Command aborted.\n" msgstr "" -#: src/filed/status.c:127 +#: src/stored/btape.c:624 #, c-format -msgid " Sizeof: off_t=%d size_t=%d debug=%d trace=%d\n" +msgid "Block %d i=%d\n" msgstr "" -#: src/filed/status.c:138 -msgid "Running Jobs:\n" +#: src/stored/btape.c:650 +msgid "Skipping read backwards test because BSR turned off.\n" msgstr "" -#: src/filed/status.c:149 -#, c-format -msgid "Director connected at: %s\n" +#: src/stored/btape.c:654 +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/filed/status.c:151 -#, c-format -msgid "JobId %d Job %s is running.\n" +#: src/stored/btape.c:667 src/stored/btape.c:678 src/stored/btape.c:689 +#: src/stored/btape.c:787 src/stored/btape.c:803 src/stored/btape.c:899 +#: src/stored/btape.c:915 src/stored/btape.c:1524 src/stored/btape.c:2407 +msgid "Error writing record to block.\n" msgstr "" -#: src/filed/status.c:154 +#: src/stored/btape.c:671 src/stored/btape.c:682 src/stored/btape.c:693 +#: src/stored/btape.c:791 src/stored/btape.c:807 src/stored/btape.c:903 +#: src/stored/btape.c:919 src/stored/btape.c:1528 src/stored/btape.c:2411 +msgid "Error writing block to device.\n" +msgstr "" + +#: src/stored/btape.c:674 #, c-format -msgid " %s%s Job started: %s\n" +msgid "Wrote first record of %d bytes.\n" msgstr "" -#: src/filed/status.c:171 +#: src/stored/btape.c:685 #, c-format -msgid " Files Examined=%s\n" +msgid "Wrote second record of %d bytes.\n" msgstr "" -#: src/filed/status.c:176 +#: src/stored/btape.c:696 #, c-format -msgid " Processing file: %s\n" +msgid "Wrote third record of %d bytes.\n" msgstr "" -#: src/filed/status.c:187 -msgid " SDSocket closed.\n" +#: src/stored/btape.c:703 src/stored/btape.c:708 +#, c-format +msgid "Backspace file failed! ERR=%s\n" msgstr "" -#: src/filed/status.c:217 -msgid "Terminated Jobs:\n" +#: src/stored/btape.c:712 +msgid "Backspaced over EOF OK.\n" msgstr "" -#: src/filed/status.c:219 -msgid " JobId Level Files Bytes Status Finished Name \n" +#: src/stored/btape.c:714 +#, c-format +msgid "Backspace record failed! ERR=%s\n" msgstr "" -#: src/filed/status.c:324 -msgid "2900 Bad .status command, missing argument.\n" +#: src/stored/btape.c:717 +msgid "Backspace record OK.\n" msgstr "" -#: src/filed/status.c:348 -msgid "2900 Bad .status command, wrong argument.\n" +#: src/stored/btape.c:720 src/stored/btape.c:726 +#, c-format +msgid "Read block failed! ERR=%s\n" msgstr "" -#: src/filed/status.c:451 -msgid "Bacula Idle" +#: src/stored/btape.c:731 +msgid "Bad data in record. Test failed!\n" msgstr "" -#: src/filed/status.c:462 -msgid "Bacula Running" +#: src/stored/btape.c:735 +msgid "" +"\n" +"Block re-read correct. Test succeeded!\n" msgstr "" -#: src/filed/status.c:476 -msgid "Last Job Canceled" -msgstr "" - -#: src/filed/status.c:480 -msgid "Last Job Failed" +#: src/stored/btape.c:736 +msgid "" +"=== End Write, backup, and re-read test ===\n" +"\n" msgstr "" -#: src/filed/status.c:484 -msgid "Last Job had Warnings" +#: src/stored/btape.c:743 +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/filed/filed.c:62 -#, c-format +#: src/stored/btape.c:767 msgid "" -"Copyright (C) 2000-2005 Kern Sibbald\n" "\n" -"Version: %s (%s)\n" +"=== Write, rewind, and re-read test ===\n" "\n" -"Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" -" -c use as configuration file\n" -" -dnn set debug level to nn\n" -" -f run in foreground (for debugging)\n" -" -g groupid\n" -" -i inetd request\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" +"I'm going to write 1000 records and an EOF\n" +"then write 1000 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/filed/filed.c:282 +#: src/stored/btape.c:795 src/stored/btape.c:811 src/stored/btape.c:907 +#: src/stored/btape.c:923 #, c-format -msgid "" -"No File daemon resource defined in %s\n" -"Without that I don't know who I am :-(\n" +msgid "Wrote 1000 blocks of %d bytes.\n" msgstr "" -#: src/filed/filed.c:287 -#, c-format -msgid "Only one Client resource permitted in %s\n" +#: src/stored/btape.c:820 src/stored/btape.c:932 +msgid "Rewind OK.\n" msgstr "" -#: src/filed/filed.c:310 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon in %s.\n" +#: src/stored/btape.c:827 src/stored/btape.c:981 +msgid "Got EOF on tape.\n" msgstr "" -#: src/filed/filed.c:326 src/dird/dird.c:824 src/dird/dird.c:864 +#: src/stored/btape.c:832 #, c-format -msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" +msgid "Read block %d failed! ERR=%s\n" msgstr "" -#: src/filed/filed.c:334 -msgid "PKI encryption/signing enabled but not compiled into Bacula.\n" +#: src/stored/btape.c:838 +#, c-format +msgid "Read record failed. Block %d! ERR=%s\n" msgstr "" -#: src/filed/filed.c:345 +#: src/stored/btape.c:844 src/stored/btape.c:1011 #, 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 "Bad data in record. Expected %d, got %d at byte %d. Test failed!\n" msgstr "" -#: src/filed/filed.c:357 src/filed/filed.c:388 src/filed/filed.c:429 -msgid "Failed to allocate a new keypair object.\n" +#: src/stored/btape.c:851 +msgid "1000 blocks re-read correctly.\n" msgstr "" -#: src/filed/filed.c:361 -#, c-format -msgid "Failed to load public certificate for File daemon \"%s\" in %s.\n" +#: src/stored/btape.c:854 src/stored/btape.c:1018 +msgid "" +"=== Test Succeeded. End Write, rewind, and re-read test ===\n" +"\n" msgstr "" -#: src/filed/filed.c:367 -#, c-format -msgid "Failed to load private key for File daemon \"%s\" in %s.\n" +#: src/stored/btape.c:879 +msgid "" +"\n" +"=== Write, rewind, and position test ===\n" +"\n" +"I'm going to write 1000 records and an EOF\n" +"then write 1000 records and an EOF, then rewind,\n" +"and position to a few blocks and verify that it is correct.\n" +"\n" +"This is an *essential* feature ...\n" +"\n" msgstr "" -#: src/filed/filed.c:397 src/filed/filed.c:438 +#: src/stored/btape.c:972 #, c-format -msgid "Failed to load private key from file %s for File daemon \"%s\" in %s.\n" +msgid "Reposition to file:block %d:%d\n" +msgstr "" + +#: src/stored/btape.c:974 +msgid "Reposition error.\n" msgstr "" -#: src/filed/filed.c:404 +#: src/stored/btape.c:987 #, c-format msgid "" -"Failed to load trusted signer certificate from file %s for File daemon \"%s" -"\" in %s.\n" +"Read block %d failed! file=%d blk=%d. ERR=%s\n" +"\n" msgstr "" -#: src/filed/filed.c:445 -#, c-format +#: src/stored/btape.c:989 msgid "" -"Failed to load master key certificate from file %s for File daemon \"%s\" in " -"%s.\n" +"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/filed/filed.c:461 +#: src/stored/btape.c:1005 #, c-format -msgid "No Director resource defined in %s\n" +msgid "Read record failed! ERR=%s\n" msgstr "" -#: src/filed/authenticate.c:45 +#: src/stored/btape.c:1016 #, c-format -msgid "I only authenticate directors, not %d\n" +msgid "Block %d re-read correctly.\n" msgstr "" -#: src/filed/authenticate.c:110 -#, c-format +#: src/stored/btape.c:1037 msgid "" -"Incorrect password given by Director at %s.\n" -"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +"\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/filed/authenticate.c:208 -msgid "" -"Authorization key rejected by Storage daemon.\n" -"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +#: src/stored/btape.c:1061 +msgid "Now moving to end of medium.\n" msgstr "" -#: src/filed/filed_conf.c:358 src/dird/dird_conf.c:1239 +#: src/stored/btape.c:1063 src/stored/btape.c:1293 #, c-format -msgid "Cannot find Client resource %s\n" +msgid "We should be in file 3. I am at file %d. %s\n" msgstr "" -#: src/filed/verify_vol.c:57 -msgid "Storage command not issued before Verify.\n" +#: src/stored/btape.c:1064 src/stored/btape.c:1082 src/stored/btape.c:1282 +#: src/stored/btape.c:1294 src/stored/btape.c:1307 src/stored/btape.c:1324 +msgid "This is correct!" msgstr "" -#: src/filed/verify_vol.c:137 -#, c-format -msgid "Error scanning record header: %s\n" +#: src/stored/btape.c:1064 src/stored/btape.c:1082 src/stored/btape.c:1282 +#: src/stored/btape.c:1294 src/stored/btape.c:1307 src/stored/btape.c:1324 +msgid "This is NOT correct!!!!" msgstr "" -#: src/dird/ua_tree.c:58 -msgid "change current directory" +#: src/stored/btape.c:1070 +msgid "" +"\n" +"Now the important part, I am going to attempt to append to the tape.\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:59 -msgid "count marked files in and below the cd" +#: src/stored/btape.c:1077 +msgid "" +"Done appending, there should be no I/O errors\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:60 src/dird/ua_tree.c:61 -msgid "long list current directory, wildcards allowed" +#: src/stored/btape.c:1078 +msgid "Doing Bacula scan of blocks:\n" msgstr "" -#: src/dird/ua_tree.c:62 -msgid "leave file selection mode" +#: src/stored/btape.c:1080 +msgid "End scanning the tape.\n" msgstr "" -#: src/dird/ua_tree.c:63 -msgid "estimate restore size" +#: src/stored/btape.c:1081 src/stored/btape.c:1306 +#, c-format +msgid "We should be in file 4. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_tree.c:64 -msgid "same as done command" +#: src/stored/btape.c:1106 +msgid "" +"\n" +"Autochanger enabled, but no name or no command device specified.\n" msgstr "" -#: src/dird/ua_tree.c:65 -msgid "find files, wildcards allowed" +#: src/stored/btape.c:1110 +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_tree.c:66 src/dird/ua_tree.c:75 -msgid "print help" +#: src/stored/btape.c:1113 +msgid "" +"\n" +"Do you wish to continue with the Autochanger test? (y/n): " msgstr "" -#: src/dird/ua_tree.c:67 -msgid "list current directory, wildcards allowed" +#: src/stored/btape.c:1120 +msgid "" +"\n" +"\n" +"=== Autochanger test ===\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:68 -msgid "list the marked files in and below the cd" +#: src/stored/btape.c:1129 +msgid "3301 Issuing autochanger \"loaded\" command.\n" msgstr "" -#: src/dird/ua_tree.c:69 -msgid "mark dir/file to be restored recursively, wildcards allowed" +#: src/stored/btape.c:1138 +#, c-format +msgid "3991 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_tree.c:70 -msgid "mark directory name to be restored (no files)" +#: src/stored/btape.c:1139 +#, c-format +msgid "3991 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:71 -msgid "print current working directory" +#: src/stored/btape.c:1143 +#, c-format +msgid "Slot %d loaded. I am going to unload it.\n" msgstr "" -#: src/dird/ua_tree.c:72 -msgid "unmark dir/file to be restored recursively in dir" +#: src/stored/btape.c:1145 +msgid "Nothing loaded in the drive. OK.\n" msgstr "" -#: src/dird/ua_tree.c:73 -msgid "unmark directory name only no recursion" +#: src/stored/btape.c:1153 +#, c-format +msgid "3302 Issuing autochanger \"unload %d %d\" command.\n" msgstr "" -#: src/dird/ua_tree.c:74 -msgid "quit and do not do restore" +#: src/stored/btape.c:1158 +#, c-format +msgid "unload status=%s %d\n" msgstr "" -#: src/dird/ua_tree.c:94 -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:1158 +msgid "Bad" msgstr "" -#: src/dird/ua_tree.c:104 src/dird/ua_tree.c:664 src/dird/ua_tree.c:672 +#: src/stored/btape.c:1161 #, c-format -msgid "cwd is: %s\n" +msgid "3992 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_tree.c:125 -msgid "Illegal command. Enter \"done\" to exit.\n" +#: src/stored/btape.c:1162 +#, c-format +msgid "3992 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:298 src/dird/ua_tree.c:309 src/dird/ua_tree.c:326 -msgid "No files marked.\n" +#: src/stored/btape.c:1172 +#, c-format +msgid "3303 Issuing autochanger \"load %d %d\" command.\n" msgstr "" -#: src/dird/ua_tree.c:311 -msgid "1 file marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:313 +#: src/stored/btape.c:1180 #, c-format -msgid "%s files marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:340 -msgid "No directories marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:342 -msgid "1 directory marked.\n" +msgid "3303 Autochanger \"load %d %d\" status is OK.\n" msgstr "" -#: src/dird/ua_tree.c:344 +#: src/stored/btape.c:1184 #, c-format -msgid "%s directories marked.\n" +msgid "3993 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_tree.c:365 +#: src/stored/btape.c:1185 #, c-format -msgid "%s total files/dirs. %s marked to be restored.\n" +msgid "3993 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:376 -msgid "No file specification given.\n" +#: src/stored/btape.c:1200 +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_tree.c:520 +#: src/stored/btape.c:1213 #, c-format -msgid "Node %s has no children.\n" +msgid "Wrote EOF to %s\n" msgstr "" -#: src/dird/ua_tree.c:611 +#: src/stored/btape.c:1217 #, c-format -msgid "%d total files; %d marked to be restored; %s bytes.\n" -msgstr "" - -#: src/dird/ua_tree.c:656 -msgid "Invalid path given.\n" -msgstr "" - -#: src/dird/ua_tree.c:683 src/dird/ua_tree.c:694 -msgid "No files unmarked.\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_tree.c:696 -msgid "1 file unmarked.\n" +#: src/stored/btape.c:1222 +msgid "" +"\n" +"The test autochanger worked!!\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:698 -#, c-format -msgid "%d files unmarked.\n" +#: src/stored/btape.c:1233 +msgid "You must correct this error or the Autochanger will not work.\n" msgstr "" -#: src/dird/ua_tree.c:709 src/dird/ua_tree.c:725 -msgid "No directories unmarked.\n" +#: src/stored/btape.c:1251 +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_tree.c:727 -msgid "1 directory unmarked.\n" +#: src/stored/btape.c:1276 +msgid "Now forward spacing 1 file.\n" msgstr "" -#: src/dird/ua_tree.c:729 +#: src/stored/btape.c:1278 src/stored/btape.c:1290 src/stored/btape.c:1303 +#: src/stored/btape.c:1321 src/stored/btape.c:1490 #, c-format -msgid "%d directories unmarked.\n" -msgstr "" - -#: src/dird/restore.c:71 -msgid "Cannot restore without bootstrap file.\n" +msgid "Bad status from fsr. ERR=%s\n" msgstr "" -#: src/dird/restore.c:78 +#: src/stored/btape.c:1281 #, c-format -msgid "Start Restore Job %s\n" +msgid "We should be in file 1. I am at file %d. %s\n" msgstr "" -#: src/dird/restore.c:225 -msgid "Restore OK -- warning file count mismatch" +#: src/stored/btape.c:1288 +msgid "Now forward spacing 2 files.\n" msgstr "" -#: src/dird/restore.c:227 -msgid "Restore OK" +#: src/stored/btape.c:1301 +msgid "Now forward spacing 4 files.\n" msgstr "" -#: src/dird/restore.c:232 -msgid "*** Restore Error ***" +#: src/stored/btape.c:1313 +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/restore.c:242 -msgid "Restore Canceled" +#: src/stored/btape.c:1319 +msgid "Now forward spacing 1 more file.\n" msgstr "" -#: src/dird/restore.c:252 src/dird/backup.c:382 src/dird/admin.c:102 +#: src/stored/btape.c:1323 #, c-format -msgid "Inappropriate term code: %c\n" +msgid "We should be in file 5. I am at file %d. %s\n" msgstr "" -#: src/dird/restore.c:269 -#, c-format +#: src/stored/btape.c:1328 msgid "" -"Bacula %s (%s): %s\n" -" JobId: %d\n" -" Job: %s\n" -" 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" +"=== End Forward space files test ===\n" "\n" msgstr "" -#: src/dird/scheduler.c:80 -#, c-format -msgid "Job %s not found\n" -msgstr "" - -#: src/dird/scheduler.c:103 -msgid "Walk queue" -msgstr "" - -#: src/dird/scheduler.c:113 -msgid "Dequeued job" +#: src/stored/btape.c:1332 +msgid "" +"\n" +"The forward space file test failed.\n" msgstr "" -#: src/dird/scheduler.c:116 -msgid "Scheduler logic error\n" +#: src/stored/btape.c:1334 +msgid "" +"You have Fast Forward Space File enabled.\n" +"I am turning it off then retrying the test.\n" msgstr "" -#: src/dird/scheduler.c:132 -msgid "Run job" +#: src/stored/btape.c:1340 +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/scheduler.c:349 -msgid "Inserted job" +#: src/stored/btape.c:1372 +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/scheduler.c:357 -msgid "Appended job" +#: src/stored/btape.c:1380 +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/scheduler.c:361 -msgid "Run queue" +#: src/stored/btape.c:1387 +msgid "" +"\n" +"\n" +"That appears *NOT* to have corrected the problem.\n" msgstr "" -#: src/dird/dird_conf.c:464 -#, c-format -msgid "Director: name=%s MaxJobs=%d FDtimeout=%s SDtimeout=%s\n" +#: src/stored/btape.c:1392 +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/dird_conf.c:469 -#, c-format -msgid " query_file=%s\n" +#: src/stored/btape.c:1397 +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/dird_conf.c:472 src/dird/dird_conf.c:492 src/dird/dird_conf.c:506 -#: src/dird/dird_conf.c:551 src/dird/dird_conf.c:555 src/dird/dird_conf.c:559 -#: src/dird/dird_conf.c:583 src/dird/dird_conf.c:588 src/dird/dird_conf.c:592 -#: src/dird/dird_conf.c:596 src/dird/dird_conf.c:600 src/dird/dird_conf.c:604 -#: src/dird/dird_conf.c:614 src/dird/dird_conf.c:789 src/dird/dird_conf.c:795 -msgid " --> " +#: src/stored/btape.c:1408 +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/dird_conf.c:477 -#, c-format -msgid "Console: name=%s SSL=%d\n" +#: src/stored/btape.c:1429 +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/dird_conf.c:482 +#: src/stored/btape.c:1468 #, c-format -msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" +msgid "Bad status from fsf. ERR=%s\n" msgstr "" -#: src/dird/dird_conf.c:487 -#, c-format -msgid "Counter: name=%s min=%d max=%d\n" +#: src/stored/btape.c:1472 +msgid "Forward spaced 1 file.\n" msgstr "" -#: src/dird/dird_conf.c:498 +#: src/stored/btape.c:1475 #, c-format -msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" +msgid "Forward spaced %d files.\n" msgstr "" -#: src/dird/dird_conf.c:501 -#, c-format -msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" +#: src/stored/btape.c:1494 +msgid "Forward spaced 1 record.\n" msgstr "" -#: src/dird/dird_conf.c:513 +#: src/stored/btape.c:1497 #, 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 "Forward spaced %d records.\n" msgstr "" -#: src/dird/dird_conf.c:523 +#: src/stored/btape.c:1531 #, c-format -msgid "" -"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" -" DeviceName=%s MediaType=%s StorageId=%s\n" +msgid "Wrote one record of %d bytes.\n" msgstr "" -#: src/dird/dird_conf.c:532 -#, c-format -msgid "" -"Catalog: name=%s address=%s DBport=%d db_name=%s\n" -" db_user=%s MutliDBConn=%d\n" +#: src/stored/btape.c:1533 +msgid "Wrote block to device.\n" msgstr "" -#: src/dird/dird_conf.c:540 -#, c-format -msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:541 src/dird/ua_cmds.c:430 src/dird/ua_run.c:709 -#: src/dird/ua_prune.c:454 src/dird/ua_select.c:234 src/dird/ua_select.c:257 -msgid "Job" -msgstr "" - -#: src/dird/dird_conf.c:541 -msgid "JobDefs" -msgstr "" - -#: src/dird/dird_conf.c:545 -#, c-format -msgid "" -" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=%" -"d\n" -msgstr "" - -#: src/dird/dird_conf.c:563 -#, c-format -msgid " --> Where=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:566 -#, c-format -msgid " --> Bootstrap=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:569 -#, c-format -msgid " --> RunBefore=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:572 -#, c-format -msgid " --> RunAfter=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:575 -#, c-format -msgid " --> RunAfterFailed=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:578 -#, c-format -msgid " --> WriteBootstrap=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:610 -#, c-format -msgid " --> Run=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:621 -#, c-format -msgid "FileSet: name=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:683 src/dird/dird_conf.c:762 -#, c-format -msgid "Schedule: name=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:688 -#, c-format -msgid " --> Run Level=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:689 -msgid " hour=" -msgstr "" - -#: src/dird/dird_conf.c:698 -msgid " mday=" -msgstr "" - -#: src/dird/dird_conf.c:707 -msgid " month=" -msgstr "" - -#: src/dird/dird_conf.c:716 -msgid " wday=" -msgstr "" - -#: src/dird/dird_conf.c:725 -msgid " wom=" -msgstr "" - -#: src/dird/dird_conf.c:734 -msgid " woy=" -msgstr "" - -#: src/dird/dird_conf.c:743 -#, c-format -msgid " mins=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:745 src/dird/dird_conf.c:749 src/dird/dird_conf.c:753 -msgid " --> " -msgstr "" - -#: src/dird/dird_conf.c:766 -#, c-format -msgid "Pool: name=%s PoolType=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:768 -#, c-format -msgid " use_cat=%d use_once=%d acpt_any=%d cat_files=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:771 -#, c-format -msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:774 -#, c-format -msgid " VolUse=%s recycle=%d LabelFormat=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:778 -#, c-format -msgid " CleaningPrefix=%s LabelType=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:780 -#, c-format -msgid " RecyleOldest=%d PurgeOldest=%d MaxVolJobs=%d MaxVolFiles=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:784 -#, c-format -msgid " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:801 -#, c-format -msgid "Messages: name=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:803 -#, c-format -msgid " mailcmd=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:805 -#, c-format -msgid " opcmd=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1183 -#, c-format -msgid "Cannot find Pool resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1191 -#, c-format -msgid "Cannot find Console resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1213 -#, c-format -msgid "Cannot find Job resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1231 -#, c-format -msgid "Cannot find Counter resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1251 -#, c-format -msgid "Cannot find Schedule resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1331 -#, c-format -msgid "Name item is required in %s resource, but not found.\n" -msgstr "" - -#: src/dird/dird_conf.c:1343 -#, c-format -msgid "Inserting %s res: %s index=%d pass=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:1416 -#, c-format -msgid "Expected a Job Type keyword, got: %s" -msgstr "" - -#: src/dird/dird_conf.c:1440 -#, c-format -msgid "Expected a Job Level keyword, got: %s" -msgstr "" - -#: src/dird/dird_conf.c:1460 -#, c-format -msgid "Expected a Restore replacement option, got: %s" -msgstr "" - -#: src/dird/msgchan.c:156 -#, c-format -msgid "Storage daemon rejected Job command: %s\n" -msgstr "" - -#: src/dird/msgchan.c:163 -#, c-format -msgid " | ] -- cancel a job" -msgstr "" - -#: src/dird/ua_cmds.c:94 -msgid "create DB Pool from resource" -msgstr "" - -#: src/dird/ua_cmds.c:95 -msgid "delete [pool= | media volume=]" -msgstr "" - -#: src/dird/ua_cmds.c:96 -msgid "disable -- disable a job" -msgstr "" - -#: src/dird/ua_cmds.c:97 -msgid "enable -- enable a job" -msgstr "" - -#: src/dird/ua_cmds.c:98 -msgid "performs FileSet estimate, listing gives full listing" -msgstr "" - -#: src/dird/ua_cmds.c:100 -msgid "gui [on|off] -- non-interactive gui mode" -msgstr "" - -#: src/dird/ua_cmds.c:102 -msgid "" -"list [pools | jobs | jobtotals | media | files ]; " -"from catalog" -msgstr "" - -#: src/dird/ua_cmds.c:103 -msgid "label a tape" -msgstr "" - -#: src/dird/ua_cmds.c:104 -msgid "full or long list like list command" -msgstr "" - -#: src/dird/ua_cmds.c:105 -msgid "messages" -msgstr "" - -#: src/dird/ua_cmds.c:106 -msgid "mount " -msgstr "" - -#: src/dird/ua_cmds.c:107 -msgid "prune expired records from catalog" -msgstr "" - -#: src/dird/ua_cmds.c:108 -msgid "purge records from catalog" -msgstr "" - -#: src/dird/ua_cmds.c:109 -msgid "python control commands" -msgstr "" - -#: src/dird/ua_cmds.c:111 -msgid "query catalog" -msgstr "" - -#: src/dird/ua_cmds.c:112 -msgid "restore files" -msgstr "" - -#: src/dird/ua_cmds.c:113 -msgid "relabel a tape" -msgstr "" - -#: src/dird/ua_cmds.c:114 -msgid "release " -msgstr "" - -#: src/dird/ua_cmds.c:115 -msgid "reload conf file" -msgstr "" - -#: src/dird/ua_cmds.c:116 -msgid "run " -msgstr "" - -#: src/dird/ua_cmds.c:117 -msgid "status [storage | client]=" -msgstr "" - -#: src/dird/ua_cmds.c:118 -msgid "sets debug level" -msgstr "" - -#: src/dird/ua_cmds.c:119 -msgid "sets new client address -- if authorized" -msgstr "" - -#: src/dird/ua_cmds.c:120 -msgid "show (resource records) [jobs | pools | ... | all]" -msgstr "" - -#: src/dird/ua_cmds.c:121 -msgid "use SQL to query catalog" -msgstr "" - -#: src/dird/ua_cmds.c:123 -msgid "turn on/off trace to file" -msgstr "" - -#: src/dird/ua_cmds.c:124 -msgid "unmount " -msgstr "" - -#: src/dird/ua_cmds.c:125 -msgid "umount for old-time Unix guys" -msgstr "" - -#: src/dird/ua_cmds.c:126 -msgid "update Volume, Pool or slots" -msgstr "" - -#: src/dird/ua_cmds.c:127 -msgid "use catalog xxx" -msgstr "" - -#: src/dird/ua_cmds.c:128 -msgid "does variable expansion" -msgstr "" - -#: src/dird/ua_cmds.c:129 -msgid "print Director version" -msgstr "" - -#: src/dird/ua_cmds.c:130 -msgid "wait until no jobs are running" -msgstr "" - -#: src/dird/ua_cmds.c:168 -#, c-format -msgid "%s: is an illegal command.\n" -msgstr "" - -#: src/dird/ua_cmds.c:206 -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/dird/ua_cmds.c:225 -#, c-format -msgid "Pool already has maximum volumes=%d\n" -msgstr "" - -#: src/dird/ua_cmds.c:227 -msgid "Enter new maximum (zero for unlimited): " -msgstr "" - -#: src/dird/ua_cmds.c:248 -#, c-format -msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " -msgstr "" - -#: src/dird/ua_cmds.c:254 -#, c-format -msgid "The number must be between 0 and %d\n" -msgstr "" - -#: src/dird/ua_cmds.c:261 -msgid "Enter Volume name: " -msgstr "" - -#: src/dird/ua_cmds.c:265 -msgid "Enter base volume name: " -msgstr "" - -#: src/dird/ua_cmds.c:274 src/dird/ua_label.c:605 -msgid "Volume name too long.\n" -msgstr "" - -#: src/dird/ua_cmds.c:287 -msgid "Enter the starting number: " -msgstr "" - -#: src/dird/ua_cmds.c:292 -msgid "Start number must be greater than zero.\n" -msgstr "" - -#: src/dird/ua_cmds.c:303 -msgid "Enter slot (0 for none): " +#: src/stored/btape.c:1548 +msgid "Enter length to read: " msgstr "" -#: src/dird/ua_cmds.c:307 -msgid "InChanger? yes/no: " +#: src/stored/btape.c:1553 +msgid "Bad length entered, using default of 1024 bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:334 +#: src/stored/btape.c:1562 #, c-format -msgid "%d Volumes created in pool %s\n" +msgid "Read of %d bytes gives stat=%d. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:350 src/dird/ua_cmds.c:917 -msgid "Turn on or off? " +#: src/stored/btape.c:1585 src/stored/btape.c:1634 +#, c-format +msgid "End of tape\n" msgstr "" -#: src/dird/ua_cmds.c:358 src/dird/ua_cmds.c:925 -msgid "off" +#: src/stored/btape.c:1590 +#, c-format +msgid "Starting scan at file %u\n" msgstr "" -#: src/dird/ua_cmds.c:378 -msgid "jobid" +#: src/stored/btape.c:1595 src/stored/dev.c:1229 +#, c-format +msgid "read error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_cmds.c:385 +#: src/stored/btape.c:1597 #, c-format -msgid "JobId %s is not running. Use Job name to cancel inactive jobs.\n" +msgid "Bad status from read %d. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:389 -msgid "job" +#: src/stored/btape.c:1600 src/stored/btape.c:1614 src/stored/btape.c:1678 +#: src/stored/btape.c:1690 src/stored/btape.c:1703 src/stored/btape.c:1719 +#, c-format +msgid "1 block of %d bytes in file %d\n" msgstr "" -#: src/dird/ua_cmds.c:394 +#: src/stored/btape.c:1603 src/stored/btape.c:1617 src/stored/btape.c:1681 +#: src/stored/btape.c:1693 src/stored/btape.c:1706 src/stored/btape.c:1722 #, c-format -msgid "Warning Job %s is not running. Continuing anyway ...\n" +msgid "%d blocks of %d bytes in file %d\n" msgstr "" -#: src/dird/ua_cmds.c:419 -msgid "Select Job:\n" +#: src/stored/btape.c:1625 src/stored/btape.c:1697 +#, c-format +msgid "End of File mark.\n" msgstr "" -#: src/dird/ua_cmds.c:425 +#: src/stored/btape.c:1646 src/stored/btape.c:1750 #, c-format -msgid "JobId=%s Job=%s" +msgid "Total files=%d, blocks=%d, bytes = %s\n" msgstr "" -#: src/dird/ua_cmds.c:430 -msgid "Choose Job to cancel" +#: src/stored/btape.c:1710 +#, c-format +msgid "Short block read.\n" msgstr "" -#: src/dird/ua_cmds.c:434 -msgid "Confirm cancel (yes/no): " +#: src/stored/btape.c:1713 +#, c-format +msgid "Error reading block. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:442 +#: src/stored/btape.c:1737 #, c-format -msgid "Job %s not found.\n" +msgid "" +"Blk_block: %u dev_blk=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=%" +"s rlen=%d\n" msgstr "" -#: src/dird/ua_cmds.c:547 +#: src/stored/btape.c:1759 #, c-format +msgid "Device status: %u. ERR=%s\n" +msgstr "" + +#: src/stored/btape.c:1789 msgid "" -"Error: Pool %s already exists.\n" -"Use update to change it.\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 3.2 GB. 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_cmds.c:558 -#, c-format -msgid "Pool %s created.\n" +#: src/stored/btape.c:1806 +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_cmds.c:571 -msgid "restart" +#: src/stored/btape.c:1809 +msgid "Simple test (single tape) selected.\n" msgstr "" -#: src/dird/ua_cmds.c:575 -msgid "Python interpreter restarted.\n" +#: src/stored/btape.c:1812 +msgid "Multiple tape test selected.\n" msgstr "" -#: src/dird/ua_cmds.c:577 src/dird/ua_cmds.c:1145 -msgid "Nothing done.\n" +#: src/stored/btape.c:1828 +msgid "Rewind failed.\n" msgstr "" -#: src/dird/ua_cmds.c:593 src/dird/ua_cmds.c:639 -msgid "Illegal command from this console.\n" +#: src/stored/btape.c:1831 +msgid "Write EOF failed.\n" msgstr "" -#: src/dird/ua_cmds.c:600 src/dird/ua_run.c:374 -#, c-format -msgid "Client \"%s\" not found.\n" +#: src/stored/btape.c:1858 +msgid "Wrote Start of Session label.\n" msgstr "" -#: src/dird/ua_cmds.c:609 +#: src/stored/btape.c:1889 #, c-format -msgid "Client \"%s\" address set to %s\n" +msgid "%s Begin writing Bacula records to tape ...\n" msgstr "" -#: src/dird/ua_cmds.c:634 +#: src/stored/btape.c:1891 #, c-format -msgid "Job \"%s\" not found.\n" +msgid "%s Begin writing Bacula records to first tape ...\n" msgstr "" -#: src/dird/ua_cmds.c:643 +#: src/stored/btape.c:1932 #, c-format -msgid "Job \"%s\" %sabled\n" +msgid "Wrote blk_block=%u, dev_blk_num=%u VolBytes=%s rate=%.1f KB/s\n" msgstr "" -#: src/dird/ua_cmds.c:667 src/dird/ua_status.c:286 +#: src/stored/btape.c:1942 #, c-format -msgid "Connecting to Storage daemon %s at %s:%d\n" +msgid "%s Flush block, write EOF\n" msgstr "" -#: src/dird/ua_cmds.c:670 src/dird/ua_cmds.c:1319 src/dird/job.c:414 -#: src/dird/ua_label.c:708 -msgid "Failed to connect to Storage daemon.\n" +#: src/stored/btape.c:1953 +msgid "Not OK\n" msgstr "" -#: src/dird/ua_cmds.c:673 src/dird/ua_status.c:297 -msgid "Connected to storage daemon\n" +#: src/stored/btape.c:1981 +msgid "Set ok=false after write_block_to_device.\n" msgstr "" -#: src/dird/ua_cmds.c:693 src/dird/ua_cmds.c:1032 src/dird/ua_status.c:324 +#: src/stored/btape.c:1984 +msgid "Wrote End of Session label.\n" +msgstr "" + +#: src/stored/btape.c:2008 #, c-format -msgid "Connecting to Client %s at %s:%d\n" +msgid "Wrote state file last_block_num1=%d last_block_num2=%d\n" msgstr "" -#: src/dird/ua_cmds.c:696 src/dird/ua_cmds.c:1035 -msgid "Failed to connect to Client.\n" +#: src/stored/btape.c:2012 +#, c-format +msgid "Could not create state file: %s ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:812 -msgid "Enter new debug level: " +#: src/stored/btape.c:2020 +#, c-format +msgid "" +"\n" +"\n" +"%s Done filling tape at %d:%d. Now beginning re-read of tape ...\n" msgstr "" -#: src/dird/ua_cmds.c:878 -msgid "Available daemons are: \n" +#: src/stored/btape.c:2024 +#, c-format +msgid "" +"\n" +"\n" +"%s Done filling tapes at %d:%d. Now beginning re-read of first tape ...\n" msgstr "" -#: src/dird/ua_cmds.c:883 -msgid "Select daemon type to set debug level" +#: src/stored/btape.c:2063 +msgid "" +"\n" +"The state file level has changed. You must redo\n" +"the fill command.\n" msgstr "" -#: src/dird/ua_cmds.c:987 src/dird/ua_run.c:511 +#: src/stored/btape.c:2069 #, c-format -msgid "Level %s not valid.\n" +msgid "" +"\n" +"Could not find the state file: %s ERR=%s\n" +"You must redo the fill command.\n" msgstr "" -#: src/dird/ua_cmds.c:1000 -msgid "No job specified.\n" +#: src/stored/btape.c:2111 +msgid "Mount first tape. Press enter when ready: " msgstr "" -#: src/dird/ua_cmds.c:1040 -msgid "Error sending include list.\n" +#: src/stored/btape.c:2131 +msgid "Rewinding.\n" msgstr "" -#: src/dird/ua_cmds.c:1045 -msgid "Error sending exclude list.\n" +#: src/stored/btape.c:2136 +#, c-format +msgid "Reading the first 10000 records from %u:%u.\n" msgstr "" -#: src/dird/ua_cmds.c:1131 -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/btape.c:2140 src/stored/btape.c:2207 +#, c-format +msgid "Reposition from %u:%u to %u:%u\n" msgstr "" -#: src/dird/ua_cmds.c:1134 -msgid "Choose catalog item to delete" +#: src/stored/btape.c:2143 src/stored/btape.c:2194 src/stored/btape.c:2210 +#, c-format +msgid "Reposition error. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1202 -msgid "Enter JobId to delete: " +#: src/stored/btape.c:2146 +#, c-format +msgid "Reading block %u.\n" msgstr "" -#: src/dird/ua_cmds.c:1247 +#: src/stored/btape.c:2148 src/stored/btape.c:2199 src/stored/btape.c:2215 #, c-format -msgid "Job %s and associated records deleted from the catalog.\n" +msgid "Error reading block: ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1260 -#, c-format +#: src/stored/btape.c:2153 msgid "" "\n" -"This command will delete volume %s\n" -"and all Jobs saved on that volume from the Catalog\n" +"The last block on the tape matches. Test succeeded.\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:1264 -msgid "Are you sure you want to delete this Volume? (yes/no): " +#: src/stored/btape.c:2155 +msgid "" +"\n" +"The last block of the first tape matches.\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:1285 -msgid "Are you sure you want to delete this Pool? (yes/no): " +#: src/stored/btape.c:2180 +msgid "Mount second tape. Press enter when ready: " msgstr "" -#: src/dird/ua_cmds.c:1382 +#: src/stored/btape.c:2192 #, c-format -msgid "Using Catalog name=%s DB=%s\n" +msgid "Reposition from %u:%u to 0:1\n" msgstr "" -#: src/dird/ua_cmds.c:1425 +#: src/stored/btape.c:2197 src/stored/btape.c:2213 #, c-format -msgid " %-10s %s\n" +msgid "Reading block %d.\n" msgstr "" -#: src/dird/ua_cmds.c:1427 +#: src/stored/btape.c:2203 msgid "" "\n" -"When at a prompt, entering a period cancels the command.\n" +"The first block on the second tape matches.\n" +"\n" +msgstr "" + +#: src/stored/btape.c:2219 +msgid "" +"\n" +"The last block on the second tape matches. Test succeeded.\n" "\n" msgstr "" -#: src/dird/ua_cmds.c:1443 +#: src/stored/btape.c:2234 #, c-format -msgid "%s Version: %s (%s)\n" +msgid "10000 records read now at %d:%d\n" msgstr "" -#: src/dird/ua_cmds.c:1462 -msgid "Could not find a Catalog resource\n" +#: src/stored/btape.c:2257 src/stored/btape.c:2268 src/stored/btape.c:2316 +msgid "Last block written" msgstr "" -#: src/dird/ua_cmds.c:1465 -msgid "You must specify a \"use \" command before continuing.\n" +#: src/stored/btape.c:2259 src/stored/btape.c:2269 +msgid "Block read back" msgstr "" -#: src/dird/ua_cmds.c:1469 +#: src/stored/btape.c:2260 #, c-format -msgid "Using default Catalog name=%s DB=%s\n" +msgid "" +"\n" +"\n" +"The blocks differ at byte %u\n" +msgstr "" + +#: src/stored/btape.c:2261 +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/ua_cmds.c:1482 src/dird/job.c:115 src/dird/dird.c:683 -#: src/dird/ua_output.c:607 +#: src/stored/btape.c:2300 #, c-format -msgid "Could not open database \"%s\".\n" +msgid "Last block at: %u:%u this_dev_block_num=%d\n" msgstr "" -#: src/dird/ua_run.c:119 +#: src/stored/btape.c:2314 #, c-format -msgid "Value missing for keyword %s\n" +msgid "Block not written: FileIndex=%u blk_block=%u Size=%u\n" msgstr "" -#: src/dird/ua_run.c:126 -msgid "Job name specified twice.\n" +#: src/stored/btape.c:2318 +msgid "Block not written" msgstr "" -#: src/dird/ua_run.c:134 -msgid "JobId specified twice.\n" +#: src/stored/btape.c:2333 +#, c-format +msgid "End of tape %d:%d. VolumeCapacity=%s. Write rate = %.1f KB/s\n" msgstr "" -#: src/dird/ua_run.c:143 -msgid "Client specified twice.\n" +#: src/stored/btape.c:2383 +msgid "Test writing blocks of 64512 bytes to tape.\n" msgstr "" -#: src/dird/ua_run.c:151 -msgid "FileSet specified twice.\n" +#: src/stored/btape.c:2385 +msgid "How many blocks do you want to write? (1000): " msgstr "" -#: src/dird/ua_run.c:159 -msgid "Level specified twice.\n" +#: src/stored/btape.c:2400 +#, c-format +msgid "Begin writing %d Bacula blocks to tape ...\n" msgstr "" -#: src/dird/ua_run.c:168 -msgid "Storage specified twice.\n" +#: src/stored/btape.c:2452 +#, c-format +msgid "Begin writing raw blocks of %u bytes.\n" msgstr "" -#: src/dird/ua_run.c:176 -msgid "Pool specified twice.\n" +#: src/stored/btape.c:2472 +#, c-format +msgid "Write failed at block %u. stat=%d ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:184 -msgid "Where specified twice.\n" +#: src/stored/btape.c:2502 +#, c-format +msgid "Begin writing Bacula blocks of %u bytes.\n" msgstr "" -#: src/dird/ua_run.c:192 -msgid "Bootstrap specified twice.\n" +#: src/stored/btape.c:2521 +#, c-format +msgid "Write failed at block %u.\n" +msgstr "" + +#: src/stored/btape.c:2528 +msgid "test autochanger" msgstr "" -#: src/dird/ua_run.c:200 -msgid "Replace specified twice.\n" +#: src/stored/btape.c:2529 +msgid "backspace file" msgstr "" -#: src/dird/ua_run.c:208 -msgid "When specified twice.\n" +#: src/stored/btape.c:2530 +msgid "backspace record" msgstr "" -#: src/dird/ua_run.c:216 -msgid "Priority specified twice.\n" +#: src/stored/btape.c:2531 +msgid "fill tape using Bacula writes" msgstr "" -#: src/dird/ua_run.c:221 -msgid "Priority must be positive nonzero setting it to 10.\n" +#: src/stored/btape.c:2532 +msgid "list device capabilities" msgstr "" -#: src/dird/ua_run.c:231 -msgid "Verify Job specified twice.\n" +#: src/stored/btape.c:2533 +msgid "clear tape errors" msgstr "" -#: src/dird/ua_run.c:263 -msgid "Migration Job specified twice.\n" +#: src/stored/btape.c:2534 +msgid "go to end of Bacula data for append" msgstr "" -#: src/dird/ua_run.c:289 -#, c-format -msgid "Invalid keyword: %s\n" +#: src/stored/btape.c:2535 +msgid "go to the physical end of medium" msgstr "" -#: src/dird/ua_run.c:301 -#, c-format -msgid "Catalog \"%s\" not found\n" +#: src/stored/btape.c:2536 +msgid "fill tape, write onto second volume" msgstr "" -#: src/dird/ua_run.c:312 -#, c-format -msgid "Job \"%s\" not found\n" +#: src/stored/btape.c:2537 +msgid "read filled tape" msgstr "" -#: src/dird/ua_run.c:319 -msgid "A job name must be specified.\n" +#: src/stored/btape.c:2538 +msgid "forward space a file" msgstr "" -#: src/dird/ua_run.c:325 -#, c-format -msgid "No authorization. Job \"%s\".\n" +#: src/stored/btape.c:2539 +msgid "forward space a record" msgstr "" -#: src/dird/ua_run.c:334 -#, c-format -msgid "Storage \"%s\" not found.\n" +#: src/stored/btape.c:2541 +msgid "write a Bacula label to the tape" msgstr "" -#: src/dird/ua_run.c:344 -#, c-format -msgid "No authorization. Storage \"%s\".\n" +#: src/stored/btape.c:2542 +msgid "load a tape" msgstr "" -#: src/dird/ua_run.c:354 -#, c-format -msgid "Pool \"%s\" not found.\n" +#: src/stored/btape.c:2543 +msgid "quit btape" msgstr "" -#: src/dird/ua_run.c:364 -#, c-format -msgid "No authorization. Pool \"%s\".\n" +#: src/stored/btape.c:2544 +msgid "use write() to fill tape" msgstr "" -#: src/dird/ua_run.c:384 -#, c-format -msgid "No authorization. Client \"%s\".\n" +#: src/stored/btape.c:2545 +msgid "read and print the Bacula tape label" msgstr "" -#: src/dird/ua_run.c:393 -#, c-format -msgid "FileSet \"%s\" not found.\n" +#: src/stored/btape.c:2546 +msgid "test record handling functions" msgstr "" -#: src/dird/ua_run.c:402 -#, c-format -msgid "No authorization. FileSet \"%s\".\n" +#: src/stored/btape.c:2547 +msgid "rewind the tape" msgstr "" -#: src/dird/ua_run.c:410 -#, c-format -msgid "Verify Job \"%s\" not found.\n" +#: src/stored/btape.c:2548 +msgid "read() tape block by block to EOT and report" msgstr "" -#: src/dird/ua_run.c:420 -#, c-format -msgid "Migration Job \"%s\" not found.\n" +#: src/stored/btape.c:2549 +msgid "Bacula read block by block to EOT and report" msgstr "" -#: src/dird/ua_run.c:455 src/dird/ua_run.c:830 -msgid "Invalid time, using current time.\n" +#: src/stored/btape.c:2550 +msgid "print tape status" msgstr "" -#: src/dird/ua_run.c:475 -#, c-format -msgid "Invalid replace option: %s\n" +#: src/stored/btape.c:2551 +msgid "General test Bacula tape functions" msgstr "" -#: src/dird/ua_run.c:533 -#, c-format -msgid "" -"Run %s job\n" -"JobName: %s\n" -"FileSet: %s\n" -"Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Priority: %d\n" +#: src/stored/btape.c:2552 +msgid "write an EOF on the tape" msgstr "" -#: src/dird/ua_run.c:552 -#, c-format -msgid "" -"Run %s job\n" -"JobName: %s\n" -"FileSet: %s\n" -"Level: %s\n" -"Client: %s\n" -"Storage: %s\n" -"Pool: %s\n" -"When: %s\n" -"Priority: %d\n" +#: src/stored/btape.c:2553 +msgid "write a single Bacula block" msgstr "" -#: src/dird/ua_run.c:583 -#, c-format -msgid "" -"Run %s job\n" -"JobName: %s\n" -"FileSet: %s\n" -"Level: %s\n" -"Client: %s\n" -"Storage: %s\n" -"Pool: %s\n" -"Verify Job: %s\n" -"Verify List: %s\n" -"When: %s\n" -"Priority: %d\n" +#: src/stored/btape.c:2554 +msgid "read a single record" msgstr "" -#: src/dird/ua_run.c:612 -msgid "Please enter a JobId for restore: " +#: src/stored/btape.c:2555 +msgid "quick fill command" msgstr "" -#: src/dird/ua_run.c:621 +#: src/stored/btape.c:2576 #, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"Where: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" +msgid "%s is an illegal command\n" msgstr "" -#: src/dird/ua_run.c:643 +#: src/stored/btape.c:2586 #, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"Where: %s\n" -"Replace: %s\n" -"Client: %s\n" -"Storage: %s\n" -"JobId: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" +msgid "Interactive commands:\n" msgstr "" -#: src/dird/ua_run.c:668 +#: src/stored/btape.c:2596 #, c-format msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"Where: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Client: %s\n" -"Storage: %s\n" -"Migration Job: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" +"Copyright (C) 2000-2005 Kern Sibbald.\n" +"\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 nn\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_run.c:693 +#: src/stored/btape.c:2687 #, c-format -msgid "Unknown Job Type=%d\n" -msgstr "" - -#: src/dird/ua_run.c:697 -msgid "OK to run? (yes/mod/no): " -msgstr "" - -#: src/dird/ua_run.c:703 src/dird/ua_select.c:44 -msgid "mod" -msgstr "" - -#: src/dird/ua_run.c:706 src/dird/ua_update.c:464 -msgid "Parameters to modify:\n" +msgid "Mount second Volume on device %s and press return when ready: " msgstr "" -#: src/dird/ua_run.c:707 -msgid "Level" +#: src/stored/btape.c:2714 +#, c-format +msgid "Mount blank Volume on device %s and press return when ready: " msgstr "" -#: src/dird/ua_run.c:708 src/dird/ua_select.c:152 -#: src/wx-console/wxbrestorepanel.cpp:321 -#: src/wx-console/wxbrestorepanel.cpp:337 -#: src/wx-console/wxbrestorepanel.cpp:458 -#: src/wx-console/wxbrestorepanel.cpp:459 -#: src/wx-console/wxbrestorepanel.cpp:469 -#: src/wx-console/wxbrestorepanel.cpp:470 -#: src/wx-console/wxbrestorepanel.cpp:1133 -#: src/wx-console/wxbrestorepanel.cpp:1794 -#: src/wx-console/wxbrestorepanel.cpp:1865 -msgid "Storage" +#: src/stored/btape.c:2732 +#, c-format +msgid "End of Volume \"%s\"\n" msgstr "" -#: src/dird/ua_run.c:710 src/dird/ua_restore.c:1058 src/dird/ua_select.c:175 -msgid "FileSet" +#: src/stored/btape.c:2744 +#, c-format +msgid "Read block=%u, VolBytes=%s rate=%.1f KB/s\n" msgstr "" -#: src/dird/ua_run.c:711 src/dird/ua_select.c:282 src/dird/ua_select.c:391 -#: src/wx-console/wxbrestorepanel.cpp:318 -#: src/wx-console/wxbrestorepanel.cpp:336 -#: src/wx-console/wxbrestorepanel.cpp:410 -#: src/wx-console/wxbrestorepanel.cpp:411 -#: src/wx-console/wxbrestorepanel.cpp:421 -#: src/wx-console/wxbrestorepanel.cpp:422 -#: src/wx-console/wxbrestorepanel.cpp:669 -#: src/wx-console/wxbrestorepanel.cpp:1103 -#: src/wx-console/wxbrestorepanel.cpp:1190 -#: src/wx-console/wxbrestorepanel.cpp:1787 -#: src/wx-console/wxbrestorepanel.cpp:1789 -#: src/wx-console/wxbrestorepanel.cpp:1863 -#: src/wx-console/wxbrestorepanel.cpp:1918 -msgid "Client" +#: src/stored/btape.c:2759 src/stored/mount.c:500 +#, c-format +msgid "Cannot open Dev=%s, Vol=%s\n" msgstr "" -#: src/dird/ua_run.c:712 src/wx-console/wxbrestorepanel.cpp:338 -#: src/wx-console/wxbrestorepanel.cpp:823 -#: src/wx-console/wxbrestorepanel.cpp:1867 -msgid "When" +#: src/stored/butil.c:46 +msgid "Nohdr," msgstr "" -#: src/dird/ua_run.c:713 src/wx-console/wxbrestorepanel.cpp:339 -#: src/wx-console/wxbrestorepanel.cpp:1096 -#: src/wx-console/wxbrestorepanel.cpp:1869 -msgid "Priority" +#: src/stored/butil.c:49 +msgid "partial," msgstr "" -#: src/dird/ua_run.c:716 src/dird/ua_select.c:476 src/dird/ua_select.c:566 -#: src/dird/ua_update.c:400 src/dird/ua_update.c:475 -#: src/wx-console/wxbrestorepanel.cpp:320 -#: src/wx-console/wxbrestorepanel.cpp:506 -#: src/wx-console/wxbrestorepanel.cpp:516 -#: src/wx-console/wxbrestorepanel.cpp:1783 -msgid "Pool" +#: src/stored/butil.c:52 +msgid "empty," msgstr "" -#: src/dird/ua_run.c:718 -msgid "Verify Job" +#: src/stored/butil.c:55 +msgid "Nomatch," msgstr "" -#: src/dird/ua_run.c:721 src/wx-console/wxbrestorepanel.cpp:331 -#: src/wx-console/wxbrestorepanel.cpp:1848 -msgid "Bootstrap" +#: src/stored/butil.c:58 +msgid "cont," msgstr "" -#: src/dird/ua_run.c:722 src/wx-console/wxbrestorepanel.cpp:332 -#: src/wx-console/wxbrestorepanel.cpp:1072 -#: src/wx-console/wxbrestorepanel.cpp:1850 -msgid "Where" +#: src/stored/butil.c:130 +msgid "Volume name or names is too long. Please use a .bsr file.\n" msgstr "" -#: src/dird/ua_run.c:723 src/wx-console/wxbrestorepanel.cpp:334 -#: src/wx-console/wxbrestorepanel.cpp:1080 -#: src/wx-console/wxbrestorepanel.cpp:1854 -#: src/wx-console/wxbrestorepanel.cpp:1855 -#: src/wx-console/wxbrestorepanel.cpp:1856 -#: src/wx-console/wxbrestorepanel.cpp:1857 -#: src/wx-console/wxbrestorepanel.cpp:1858 -msgid "Replace" +#: src/stored/butil.c:150 +#, c-format +msgid "Cannot find device \"%s\" in config file %s.\n" msgstr "" -#: src/dird/ua_run.c:724 -msgid "JobId" +#: src/stored/butil.c:157 +#, c-format +msgid "Cannot init device %s\n" msgstr "" -#: src/dird/ua_run.c:726 src/dird/ua_update.c:479 -msgid "Select parameter to modify" +#: src/stored/butil.c:178 +#, c-format +msgid "Cannot open %s\n" msgstr "" -#: src/dird/ua_run.c:730 src/dird/ua_run.c:757 -msgid "Levels:\n" +#: src/stored/butil.c:261 +#, c-format +msgid "Could not find device \"%s\" in config file %s.\n" msgstr "" -#: src/dird/ua_run.c:736 src/dird/ua_run.c:763 -msgid "Select level" +#: src/stored/butil.c:266 +#, c-format +msgid "Using device: \"%s\" for reading.\n" msgstr "" -#: src/dird/ua_run.c:758 -msgid "Initialize Catalog" +#: src/stored/butil.c:269 +#, c-format +msgid "Using device: \"%s\" for writing.\n" msgstr "" -#: src/dird/ua_run.c:762 -msgid "Verify Volume Data (not yet implemented)" +#: src/stored/butil.c:285 +msgid "Unexpected End of Data\n" msgstr "" -#: src/dird/ua_run.c:784 -msgid "Level not appropriate for this Job. Cannot be changed.\n" +#: src/stored/butil.c:287 +msgid "Unexpected End of Tape\n" msgstr "" -#: src/dird/ua_run.c:822 -msgid "" -"Please enter desired start time as YYYY-MM-DD HH:MM:SS (return for now): " +#: src/stored/butil.c:289 +msgid "Unexpected End of File\n" msgstr "" -#: src/dird/ua_run.c:837 -msgid "Enter new Priority: " +#: src/stored/butil.c:291 +msgid "Tape Door is Open\n" msgstr "" -#: src/dird/ua_run.c:841 -msgid "Priority must be a positive integer.\n" +#: src/stored/butil.c:293 +msgid "Unexpected Tape is Off-line\n" msgstr "" -#: src/dird/ua_run.c:859 -msgid "Please enter the Bootstrap file name: " +#: src/stored/dev.c:112 +#, c-format +msgid "Unable to stat device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:870 +#: src/stored/dev.c:123 #, c-format -msgid "Warning cannot open %s: ERR=%s\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_run.c:889 -msgid "Please enter path prefix for restore (/ for none): " +#: src/stored/dev.c:179 +#, c-format +msgid "Unable to stat mount point %s: ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:903 -msgid "Replace:\n" +#: src/stored/dev.c:186 +msgid "" +"Mount and unmount commands must defined for a device which requires mount.\n" msgstr "" -#: src/dird/ua_run.c:907 -msgid "Select replace option" +#: src/stored/dev.c:189 +msgid "Write part command must be defined for a device which requires mount.\n" msgstr "" -#: src/dird/ua_run.c:917 -msgid "" -"You must set the bootstrap file to NULL to be able to specify a JobId.\n" +#: src/stored/dev.c:194 +#, c-format +msgid "Block size %u on device %s is too large, using default %u\n" msgstr "" -#: src/dird/ua_run.c:935 -msgid "Job failed.\n" +#: src/stored/dev.c:199 +#, c-format +msgid "Max block size %u not multiple of device %s block size.\n" msgstr "" -#: src/dird/ua_run.c:938 +#: src/stored/dev.c:215 src/stored/dev.c:221 #, c-format -msgid "Job started. JobId=%s\n" +msgid "Unable to init cond variable: ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:944 -msgid "Job not run.\n" +#: src/stored/dev.c:312 +msgid "Illegal mode given to open dev.\n" msgstr "" -#: src/dird/backup.c:88 src/dird/backup.c:94 src/dird/mac.c:121 -#: src/dird/ua_output.c:618 +#: src/stored/dev.c:355 src/stored/device.c:295 #, c-format -msgid "Pool %s not in database. %s" +msgid "Unable to open device %s: ERR=%s\n" msgstr "" -#: src/dird/backup.c:92 src/dird/mac.c:125 src/dird/ua_output.c:626 +#: src/stored/dev.c:423 src/stored/dev.c:481 #, c-format -msgid "Pool %s created in database.\n" +msgid "Could not open file device %s. No Volume name given.\n" msgstr "" -#: src/dird/backup.c:106 src/dird/mac.c:134 -msgid "No Storage specification found in Job or Pool.\n" +#: src/stored/dev.c:449 src/stored/dev.c:562 +#, c-format +msgid "Could not open: %s, ERR=%s\n" msgstr "" -#: src/dird/backup.c:131 +#: src/stored/dev.c:506 #, c-format -msgid "Start Backup JobId %s, Job=%s\n" +msgid "" +"The media in the device %s is not empty, please blank it before writing " +"anything to it.\n" msgstr "" -#: src/dird/backup.c:262 +#: src/stored/dev.c:523 #, c-format -msgid "Unexpected Client Job message: %s\n" +msgid "There is no valid media in the device %s.\n" msgstr "" -#: src/dird/backup.c:270 +#: src/stored/dev.c:530 #, c-format -msgid "Network error with FD during %s: ERR=%s\n" +msgid "Could not mount device %s.\n" msgstr "" -#: src/dird/backup.c:286 -msgid "No Job status returned from FD.\n" +#: src/stored/dev.c:588 +#, c-format +msgid "Could not fstat: %s, ERR=%s\n" msgstr "" -#: src/dird/backup.c:330 src/dird/admin.c:82 src/dird/mac.c:401 +#: src/stored/dev.c:631 #, c-format -msgid "Error getting job record for stats: %s" +msgid "Bad call to rewind. Device %s not open\n" msgstr "" -#: src/dird/backup.c:337 +#: src/stored/dev.c:677 #, c-format -msgid "Error getting client record for stats: %s" +msgid "Rewind error on %s. ERR=%s.\n" msgstr "" -#: src/dird/backup.c:343 src/dird/mac.c:408 +#: src/stored/dev.c:687 src/stored/dev.c:802 src/stored/dev.c:938 +#: src/stored/dev.c:1457 #, c-format -msgid "Error getting Media record for Volume \"%s\": ERR=%s" +msgid "lseek_dev error on %s. ERR=%s.\n" msgstr "" -#: src/dird/backup.c:355 -msgid "Backup OK -- with warnings" +#: src/stored/dev.c:727 +msgid "unknown blocked code" msgstr "" -#: src/dird/backup.c:422 +#: src/stored/dev.c:772 #, c-format -msgid "" -"Bacula %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\"\n" -" Storage: \"%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" -" 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" +msgid "Bad call to eod_dev. Device %s not open\n" msgstr "" -#: src/dird/backup.c:512 +#: src/stored/dev.c:838 #, c-format -msgid "Could not get Job Volume Parameters to update Bootstrap file. ERR=%s\n" +msgid "ioctl MTEOM error on %s. ERR=%s.\n" msgstr "" -#: src/dird/backup.c:546 +#: src/stored/dev.c:846 src/stored/dev.c:978 #, c-format -msgid "" -"Could not open WriteBootstrap file:\n" -"%s: ERR=%s\n" +msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:50 -#, c-format -msgid "Could not init job queue: ERR=%s\n" +#: src/stored/dev.c:924 +msgid "Bad device call. Device not open\n" msgstr "" -#: src/dird/job.c:81 +#: src/stored/dev.c:937 #, c-format -msgid "Could not add job queue: ERR=%s\n" +msgid "Seek error: ERR=%s\n" msgstr "" -#: src/dird/job.c:184 -msgid "Job canceled because max start delay time exceeded.\n" +#: src/stored/dev.c:973 +msgid " Bacula status:" msgstr "" -#: src/dird/job.c:235 src/dird/job.c:313 +#: src/stored/dev.c:974 src/stored/dev.c:1023 src/stored/dev.c:1025 #, c-format -msgid "Unimplemented job type: %d\n" +msgid " file=%d block=%d\n" msgstr "" -#: src/dird/job.c:260 -#, c-format -msgid "RunBefore: %s" +#: src/stored/dev.c:982 +msgid " Device status:" msgstr "" -#: src/dird/job.c:265 -#, c-format -msgid "RunBeforeJob error: ERR=%s\n" +#: src/stored/dev.c:1047 +msgid "Bad call to load_dev. Device not open\n" msgstr "" -#: src/dird/job.c:331 +#: src/stored/dev.c:1058 src/stored/dev.c:1071 #, c-format -msgid "RunAfter: %s" +msgid "ioctl MTLOAD error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:341 +#: src/stored/dev.c:1107 #, c-format -msgid "RunAfterJob error: ERR=%s\n" +msgid "ioctl MTOFFL error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:343 +#: src/stored/dev.c:1148 +msgid "Bad call to fsf_dev. Device not open\n" +msgstr "" + +#: src/stored/dev.c:1158 src/stored/dev.c:1279 #, c-format -msgid "RunAfterFailedJob error: ERR=%s\n" +msgid "Device %s at End of Tape.\n" msgstr "" -#: src/dird/job.c:382 +#: src/stored/dev.c:1183 src/stored/dev.c:1259 #, c-format -msgid "JobId %d, Job %s marked to be canceled.\n" +msgid "ioctl MTFSF error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:392 -msgid "Failed to connect to File daemon.\n" +#: src/stored/dev.c:1308 +msgid "Bad call to bsf_dev. Device not open\n" msgstr "" -#: src/dird/job.c:548 src/dird/job.c:596 +#: src/stored/dev.c:1314 #, c-format -msgid "Unhandled job status code %d\n" +msgid "Device %s cannot BSF because it is not a tape.\n" msgstr "" -#: src/dird/job.c:656 -msgid "FileSet MD5 digest not found.\n" +#: src/stored/dev.c:1329 +#, c-format +msgid "ioctl MTBSF error on %s. ERR=%s.\n" +msgstr "" + +#: src/stored/dev.c:1349 +msgid "Bad call to fsr. Device not open\n" msgstr "" -#: src/dird/job.c:661 +#: src/stored/dev.c:1358 #, c-format -msgid "Could not create FileSet \"%s\" record. ERR=%s\n" +msgid "ioctl MTFSR not permitted on %s.\n" msgstr "" -#: src/dird/job.c:700 +#: src/stored/dev.c:1386 #, c-format -msgid "Error updating job record. %s" +msgid "ioctl MTFSR %d error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:944 -msgid "Could not start clone job.\n" +#: src/stored/dev.c:1406 +msgid "Bad call to bsr_dev. Device not open\n" msgstr "" -#: src/dird/job.c:946 +#: src/stored/dev.c:1416 #, c-format -msgid "Clone JobId %d started.\n" +msgid "ioctl MTBSR not permitted on %s.\n" msgstr "" -#: src/dird/ua_input.c:82 -msgid "Enter slot" +#: src/stored/dev.c:1429 +#, c-format +msgid "ioctl MTBSR error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_input.c:86 src/dird/ua_input.c:92 -#, c-format -msgid "Expected a positive integer, got: %s\n" +#: src/stored/dev.c:1446 +msgid "Bad call to reposition_dev. Device not open\n" msgstr "" -#: src/dird/ua_input.c:127 -msgid "Invalid response. You must answer yes or no.\n" +#: src/stored/dev.c:1514 +msgid "Bad call to weof_dev. Device not open\n" msgstr "" -#: src/dird/bsr.c:176 -#, c-format -msgid "Unable to get Job record. ERR=%s\n" +#: src/stored/dev.c:1524 +msgid "Attempt to WEOF on non-appendable Volume\n" msgstr "" -#: src/dird/bsr.c:183 +#: src/stored/dev.c:1541 #, c-format -msgid "Unable to get Job Volume Parameters. ERR=%s\n" +msgid "ioctl MTWEOF error on %s. ERR=%s.\n" msgstr "" -#: src/dird/bsr.c:224 -#, c-format -msgid "Unable to create bootstrap file %s. ERR=%s\n" +#: src/stored/dev.c:1583 +msgid "Got ENOTTY on read/write!\n" msgstr "" -#: src/dird/bsr.c:233 -msgid "Error writing bsr file.\n" +#: src/stored/dev.c:1630 +#, c-format +msgid "unknown func code %d" msgstr "" -#: src/dird/bsr.c:239 +#: src/stored/dev.c:1636 #, c-format -msgid "Bootstrap records written to %s\n" +msgid "I/O function \"%s\" not supported on this device.\n" msgstr "" -#: src/dird/bsr.c:243 -msgid "The job will require the following Volumes:\n" +#: src/stored/dev.c:1761 src/stored/dvd.c:734 +#, c-format +msgid "Unable to truncate device %s. ERR=%s\n" msgstr "" -#: src/dird/bsr.c:275 -msgid "No Volumes found to restore.\n" +#: src/stored/dev.c:1800 +msgid "Bad call to term_dev. Device not open\n" msgstr "" -#: src/dird/run_conf.c:188 +#: src/stored/device.c:100 #, c-format -msgid "Expected an equals, got: %s" +msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" msgstr "" -#: src/dird/run_conf.c:201 src/dird/run_conf.c:213 +#: src/stored/device.c:114 #, c-format -msgid "Expect a YES or NO, got: %s" +msgid "New volume \"%s\" mounted on device %s at %s.\n" msgstr "" -#: src/dird/run_conf.c:227 +#: src/stored/device.c:126 #, c-format -msgid "Job level field: %s not found in run record" +msgid "write_block_to_device Volume label failed. ERR=%s" msgstr "" -#: src/dird/run_conf.c:245 +#: src/stored/device.c:162 #, c-format -msgid "Could not find specified Pool Resource: %s" +msgid "write_block_to_device overflow block failed. ERR=%s" msgstr "" -#: src/dird/run_conf.c:270 +#: src/stored/device.c:297 #, c-format -msgid "Could not find specified Storage Resource: %s" +msgid "Unable to open archive %s: ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:282 +#: src/stored/device.c:332 #, c-format -msgid "Could not find specified Messages Resource: %s" +msgid "Device write lock failure. ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:290 +#: src/stored/device.c:340 #, c-format -msgid "Expected a keyword name, got: %s" +msgid "Device write unlock failure. ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:327 -msgid "Day number out of range (1-31)" +#: src/stored/device.c:359 +#, c-format +msgid "pthread_cond_wait failure. ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:344 src/dird/run_conf.c:490 -msgid "Week number out of range (0-53)" +#: src/stored/dircmd.c:140 +msgid "Connection request failed.\n" msgstr "" -#: src/dird/run_conf.c:359 +#: src/stored/dircmd.c:149 #, c-format -msgid "Job type field: %s in run record not found" +msgid "Invalid connection. Len=%d\n" msgstr "" -#: src/dird/run_conf.c:366 +#: src/stored/dircmd.c:241 #, c-format -msgid "Unexpected token: %d:%s" -msgstr "" - -#: src/dird/run_conf.c:410 -msgid "Time must be preceded by keyword AT." +msgid "3991 Bad setdebug command: %s\n" msgstr "" -#: src/dird/run_conf.c:418 -msgid "Time logic error.\n" +#: src/stored/dircmd.c:262 +#, c-format +msgid "3904 Job %s not found.\n" msgstr "" -#: src/dird/run_conf.c:430 src/dird/run_conf.c:446 -msgid "Bad time specification." +#: src/stored/dircmd.c:283 +#, c-format +msgid "3000 Job %s marked to be canceled.\n" msgstr "" -#: src/dird/run_conf.c:459 -msgid "Range logic error.\n" +#: src/stored/dircmd.c:287 +msgid "3903 Error scanning cancel command.\n" msgstr "" -#: src/dird/run_conf.c:468 -msgid "Bad day range specification." +#: src/stored/dircmd.c:364 src/stored/dircmd.c:680 src/stored/dircmd.c:756 +#: src/stored/dircmd.c:819 src/stored/dircmd.c:874 src/stored/dircmd.c:918 +#, c-format +msgid "3999 Device \"%s\" not found or could not be opened.\n" msgstr "" -#: src/dird/run_conf.c:515 -msgid "Invalid month, week or position day range" +#: src/stored/dircmd.c:369 +#, c-format +msgid "3903 Error scanning label command: %s\n" msgstr "" -#: src/dird/run_conf.c:530 -msgid "Invalid month, weekday or position range" +#: src/stored/dircmd.c:412 +#, c-format +msgid "3920 Cannot label Volume because it is already labeled: \"%s\"\n" msgstr "" -#: src/dird/run_conf.c:589 -msgid "Unexpected run state\n" +#: src/stored/dircmd.c:419 +msgid "3921 Wrong volume mounted.\n" msgstr "" -#: src/dird/pythondir.c:137 -msgid "Pool record not found." +#: src/stored/dircmd.c:423 +msgid "3922 Cannot relabel an ANSI/IBM labeled Volume.\n" msgstr "" -#: src/dird/ua_restore.c:115 -msgid "" -"No Restore Job Resource found in bacula-dir.conf.\n" -"You must create at least one before running this command.\n" +#: src/stored/dircmd.c:431 src/stored/dircmd.c:440 +#, c-format +msgid "3912 Failed to label Volume: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:131 -msgid "Restore not done.\n" +#: src/stored/dircmd.c:443 +#, c-format +msgid "3913 Cannot label Volume. Unknown status %d from read_volume_label()\n" msgstr "" - -#: src/dird/ua_restore.c:142 -msgid "Unable to construct a valid BSR. Cannot continue.\n" + +#: src/stored/dircmd.c:476 +#, c-format +msgid "3001 Mounted Volume: %s\n" msgstr "" -#: src/dird/ua_restore.c:146 src/dird/ua_restore.c:160 -msgid "No files selected to be restored.\n" +#: src/stored/dircmd.c:480 src/stored/dircmd.c:954 +#, c-format +msgid "" +"3902 Cannot mount Volume on Storage Device %s because:\n" +"%s" msgstr "" -#: src/dird/ua_restore.c:154 +#: src/stored/dircmd.c:508 src/stored/reserve.c:634 +#, c-format msgid "" "\n" -"1 file selected to be restored.\n" -"\n" +" Device \"%s\" requested by DIR could not be opened or does not exist.\n" msgstr "" -#: src/dird/ua_restore.c:157 +#: src/stored/dircmd.c:529 src/stored/reserve.c:630 #, c-format msgid "" "\n" -"%u files selected to be restored.\n" -"\n" +" Device \"%s\" in changer \"%s\" requested by DIR could not be opened or " +"does not exist.\n" msgstr "" -#: src/dird/ua_restore.c:175 -msgid "No Restore Job resource found!\n" +#: src/stored/dircmd.c:593 src/stored/dircmd.c:646 +#, c-format +msgid "3901 open device failed: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:237 +#: src/stored/dircmd.c:613 src/stored/dircmd.c:637 #, c-format -msgid "Missing value for keyword: %s\n" +msgid "3001 Device %s is mounted with Volume \"%s\"\n" msgstr "" -#: src/dird/ua_restore.c:286 -msgid "List last 20 Jobs run" +#: src/stored/dircmd.c:616 src/stored/dircmd.c:640 src/stored/dircmd.c:655 +#, 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_restore.c:287 -msgid "List Jobs where a given File is saved" +#: src/stored/dircmd.c:625 +#, c-format +msgid "3001 Device %s is doing acquire.\n" msgstr "" -#: src/dird/ua_restore.c:288 -msgid "Enter list of comma separated JobIds to select" +#: src/stored/dircmd.c:630 src/stored/dircmd.c:730 +#, c-format +msgid "3903 Device %s is being labeled.\n" msgstr "" -#: src/dird/ua_restore.c:289 -msgid "Enter SQL list command" +#: src/stored/dircmd.c:652 +#, c-format +msgid "3001 Device %s is already mounted with Volume \"%s\"\n" msgstr "" -#: src/dird/ua_restore.c:290 -msgid "Select the most recent backup for a client" +#: src/stored/dircmd.c:661 +#, c-format +msgid "3002 Device %s is mounted.\n" msgstr "" -#: src/dird/ua_restore.c:291 -msgid "Select backup for a client before a specified time" +#: src/stored/dircmd.c:664 +#, c-format +msgid "3907 %s" msgstr "" -#: src/dird/ua_restore.c:292 -msgid "Enter a list of files to restore" +#: src/stored/dircmd.c:667 +#, c-format +msgid "3906 File device %s is always mounted.\n" msgstr "" -#: src/dird/ua_restore.c:293 -msgid "Enter a list of files to restore before a specified time" +#: src/stored/dircmd.c:673 +#, c-format +msgid "3905 Bizarre wait state %d\n" msgstr "" -#: src/dird/ua_restore.c:294 -msgid "Find the JobIds of the most recent backup for a client" +#: src/stored/dircmd.c:684 +#, c-format +msgid "3909 Error scanning mount command: %s\n" msgstr "" -#: src/dird/ua_restore.c:295 -msgid "Find the JobIds for a backup for a client before a specified time" +#: src/stored/dircmd.c:711 +#, c-format +msgid "3901 Device %s is already unmounted.\n" msgstr "" -#: src/dird/ua_restore.c:296 -msgid "Enter a list of directories to restore for found JobIds" +#: src/stored/dircmd.c:722 +#, c-format +msgid "3001 Device %s unmounted.\n" msgstr "" -#: src/dird/ua_restore.c:333 +#: src/stored/dircmd.c:726 #, c-format -msgid "Unknown keyword: %s\n" +msgid "3902 Device %s is busy in acquire.\n" msgstr "" -#: src/dird/ua_restore.c:357 +#: src/stored/dircmd.c:749 #, c-format -msgid "Improper date format: %s\n" +msgid "3002 Device %s unmounted.\n" msgstr "" -#: src/dird/ua_restore.c:397 src/dird/ua_select.c:590 +#: src/stored/dircmd.c:761 #, c-format -msgid "Error: Pool resource \"%s\" does not exist.\n" +msgid "3907 Error scanning unmount command: %s\n" msgstr "" -#: src/dird/ua_restore.c:402 +#: src/stored/dircmd.c:789 #, c-format -msgid "Error: Pool resource \"%s\" access not allowed.\n" +msgid "3921 Device %s already released.\n" msgstr "" -#: src/dird/ua_restore.c:421 -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/dircmd.c:796 +#, c-format +msgid "3922 Device %s waiting for mount.\n" msgstr "" -#: src/dird/ua_restore.c:433 -msgid "To select the JobIds, you have the following choices:\n" +#: src/stored/dircmd.c:800 +#, c-format +msgid "3923 Device %s is busy in acquire.\n" msgstr "" -#: src/dird/ua_restore.c:438 -msgid "Select item: " +#: src/stored/dircmd.c:804 +#, c-format +msgid "3914 Device %s is being labeled.\n" msgstr "" -#: src/dird/ua_restore.c:452 -msgid "Enter Filename (no path):" +#: src/stored/dircmd.c:812 +#, c-format +msgid "3022 Device %s released.\n" msgstr "" -#: src/dird/ua_restore.c:467 src/dird/ua_restore.c:567 -msgid "Enter JobId(s), comma separated, to restore: " +#: src/stored/dircmd.c:824 +#, c-format +msgid "3927 Error scanning release command: %s\n" msgstr "" -#: src/dird/ua_restore.c:473 -msgid "Enter SQL list command: " +#: src/stored/dircmd.c:860 +#, c-format +msgid "3995 Device %s is not an autochanger.\n" msgstr "" -#: src/dird/ua_restore.c:501 src/dird/ua_restore.c:526 -msgid "" -"Enter file names with paths, or < to enter a filename\n" -"containg a list of file names with paths, and terminate\n" -"them with a blank line.\n" +#: src/stored/dircmd.c:878 +#, c-format +msgid "3908 Error scanning autocharger drives/list/slots command: %s\n" msgstr "" -#: src/dird/ua_restore.c:505 src/dird/ua_restore.c:530 -msgid "Enter full filename: " +#: src/stored/dircmd.c:922 +#, c-format +msgid "3909 Error scanning readlabel command: %s\n" msgstr "" -#: src/dird/ua_restore.c:565 +#: src/stored/dircmd.c:950 #, c-format -msgid "You have already seleted the following JobIds: %s\n" +msgid "3001 Volume=%s Slot=%d\n" msgstr "" -#: src/dird/ua_restore.c:580 -msgid "" -"Enter full directory names or start the name\n" -"with a < to indicate it is a filename containg a list\n" -"of directories and terminate them with a blank line.\n" +#: src/stored/dircmd.c:979 +#, c-format +msgid "3910 Unable to open device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:584 -msgid "Enter directory name: " +#: src/stored/dircmd.c:991 +#, c-format +msgid "3931 Device %s is BLOCKED. user unmounted.\n" msgstr "" -#: src/dird/ua_restore.c:609 -msgid "No Jobs selected.\n" +#: src/stored/dircmd.c:995 +#, c-format +msgid "" +"3932 Device %s is BLOCKED. user unmounted during wait for media/mount.\n" msgstr "" -#: src/dird/ua_restore.c:613 +#: src/stored/dircmd.c:999 #, c-format -msgid "You have selected the following JobIds: %s\n" +msgid "3933 Device %s is BLOCKED waiting for media.\n" msgstr "" -#: src/dird/ua_restore.c:616 +#: src/stored/dircmd.c:1003 #, c-format -msgid "You have selected the following JobId: %s\n" +msgid "3934 Device %s is being initialized.\n" msgstr "" -#: src/dird/ua_restore.c:624 -msgid "Invalid JobId in list.\n" +#: src/stored/dircmd.c:1007 +#, c-format +msgid "3935 Device %s is blocked labeling a Volume.\n" msgstr "" -#: src/dird/ua_restore.c:637 +#: src/stored/dircmd.c:1011 #, c-format -msgid "Unable to get Job record for JobId=%s: ERR=%s\n" +msgid "3935 Device %s is blocked for unknown reason.\n" msgstr "" -#: src/dird/ua_restore.c:642 +#: src/stored/dircmd.c:1016 #, c-format -msgid "No authorization. Job \"%s\" not selected.\n" +msgid "3936 Device %s is busy reading.\n" msgstr "" -#: src/dird/ua_restore.c:656 -msgid "" -"The restored files will the most current backup\n" -"BEFORE the date you specify below.\n" -"\n" +#: src/stored/dircmd.c:1019 +#, c-format +msgid "3937 Device %s is busy with %d writer(s).\n" msgstr "" -#: src/dird/ua_restore.c:659 -msgid "Enter date as YYYY-MM-DD HH:MM:SS :" +#: src/stored/dvd.c:153 +#, c-format +msgid "Device %s cannot be mounted. ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:665 -msgid "Improper date format.\n" +#: src/stored/dvd.c:271 +#, c-format +msgid "Cannot run free space command (%s)\n" msgstr "" -#: src/dird/ua_restore.c:686 +#: src/stored/dvd.c:374 #, c-format -msgid "Cannot open file %s: ERR=%s\n" +msgid "Error while writing current part to the DVD: %s" msgstr "" -#: src/dird/ua_restore.c:694 src/dird/ua_restore.c:698 +#: src/stored/dvd.c:394 #, c-format -msgid "Error occurred on line %d of %s\n" +msgid "Remaining free space %s on %s\n" msgstr "" -#: src/dird/ua_restore.c:740 src/dird/ua_restore.c:778 -#: src/dird/ua_restore.c:809 src/dird/ua_dotcmds.c:231 +#: src/stored/dvd.c:464 #, c-format -msgid "Query failed: %s. ERR=%s\n" +msgid "Next Volume part already exists on DVD. Cannot continue: %s\n" msgstr "" -#: src/dird/ua_restore.c:744 src/dird/ua_restore.c:782 +#: src/stored/dvd.c:481 #, c-format -msgid "No database record found for: %s\n" +msgid "open_next_part can't unlink existing part %s, ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:769 -msgid "No JobId specified cannot continue.\n" +#: src/stored/dvd.c:700 +#, c-format +msgid "Unable to write part %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:813 +#: src/stored/fd_cmds.c:340 +msgid "Error parsing bootstrap file.\n" +msgstr "" + +#: src/stored/job.c:79 #, c-format -msgid "No table found: %s\n" +msgid "Bad Job Command from Director: %s\n" msgstr "" -#: src/dird/ua_restore.c:918 +#: src/stored/job.c:189 #, c-format -msgid "" -"\n" -"Building directory tree for JobId %s ... " +msgid "Job name not found: %s\n" msgstr "" -#: src/dird/ua_restore.c:937 -msgid "" -"\n" -"There were no files inserted into the tree, so file selection\n" -"is not possible.Most likely your retention policy pruned the files\n" +#: src/stored/job.c:200 +#, c-format +msgid "Hey!!!! JobId %u Job %s already authenticated.\n" msgstr "" -#: src/dird/ua_restore.c:939 -msgid "" -"\n" -"Do you want to restore all the files? (yes|no): " +#: src/stored/job.c:211 +msgid "Unable to authenticate File daemon\n" msgstr "" -#: src/dird/ua_restore.c:955 -#, c-format -msgid "" -"\n" -"1 Job, %s files inserted into the tree and marked for extraction.\n" +#: src/stored/job.c:338 +msgid "In free_jcr(), but still attached to device!!!!\n" msgstr "" -#: src/dird/ua_restore.c:959 +#: src/stored/label.c:74 +msgid "BAD call to read_dev_volume_label\n" +msgstr "" + +#: src/stored/label.c:79 src/stored/label.c:120 src/stored/label.c:208 #, c-format -msgid "" -"\n" -"1 Job, %s files inserted into the tree.\n" +msgid "Wrong Volume mounted on device %s: Wanted %s have %s\n" msgstr "" -#: src/dird/ua_restore.c:965 +#: src/stored/label.c:86 src/stored/label.c:123 src/stored/label.c:195 #, c-format -msgid "" -"\n" -"%d Jobs, %s files inserted into the tree and marked for extraction.\n" +msgid "Too many tries: %s" msgstr "" -#: src/dird/ua_restore.c:969 +#: src/stored/label.c:102 #, c-format -msgid "" -"\n" -"%d Jobs, %s files inserted into the tree.\n" +msgid "Couldn't rewind device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1046 +#: src/stored/label.c:140 #, c-format -msgid "Error getting FileSet \"%s\": ERR=%s\n" +msgid "" +"Requested Volume \"%s\" on %s is not a Bacula labeled Volume, because: ERR=%s" msgstr "" -#: src/dird/ua_restore.c:1054 src/dird/ua_select.c:167 -msgid "The defined FileSet resources are:\n" +#: src/stored/label.c:145 +msgid "Could not read Volume label from block.\n" msgstr "" -#: src/dird/ua_restore.c:1058 src/dird/ua_select.c:175 -msgid "Select FileSet resource" +#: src/stored/label.c:148 +#, c-format +msgid "Could not unserialize Volume label: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1065 +#: src/stored/label.c:153 #, c-format -msgid "Error getting FileSet record: %s\n" +msgid "Volume Header Id bad: %s\n" msgstr "" -#: src/dird/ua_restore.c:1066 -msgid "" -"This probably means you modified the FileSet.\n" -"Continuing anyway.\n" +#: src/stored/label.c:180 +#, c-format +msgid "Volume on %s has wrong Bacula version. Wanted %d got %d\n" msgstr "" -#: src/dird/ua_restore.c:1081 +#: src/stored/label.c:191 #, c-format -msgid "Pool \"%s\" not found, using any pool.\n" +msgid "Volume on %s has bad Bacula label type: %x\n" msgstr "" -#: src/dird/ua_restore.c:1107 src/dird/ua_restore.c:1123 +#: src/stored/label.c:272 #, c-format -msgid "No Full backup before %s found.\n" +msgid "Cannot write Volume label to block for device %s\n" msgstr "" -#: src/dird/ua_restore.c:1146 -msgid "No jobs found.\n" +#: src/stored/label.c:400 +#, c-format +msgid "Rewind error on device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1312 -msgid "" -"Warning, the JobIds that you selected refer to more than one MediaType.\n" -"Restore is not possible. The MediaTypes used are:\n" +#: src/stored/label.c:405 +#, c-format +msgid "Truncate error on device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1320 -msgid "No MediaType found for your JobIds.\n" +#: src/stored/label.c:427 +#, c-format +msgid "Unable to write device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1352 +#: src/stored/label.c:455 #, c-format -msgid "Warning default storage overridden by %s on command line.\n" +msgid "Recycled volume \"%s\" on device %s, all previous data lost.\n" msgstr "" -#: src/dird/ua_restore.c:1363 +#: src/stored/label.c:458 #, c-format -msgid "" -"\n" -"Warning. Unable to find Storage resource for\n" -"MediaType \"%s\", needed by the Jobs you selected.\n" -"You will be allowed to select a Storage device later.\n" +msgid "Wrote label to prelabeled Volume \"%s\" on device %s\n" msgstr "" -#: src/dird/jobq.c:67 +#: src/stored/label.c:657 #, c-format -msgid "pthread_attr_init: ERR=%s\n" +msgid "Bad session label = %d\n" msgstr "" -#: src/dird/jobq.c:76 +#: src/stored/label.c:675 src/stored/label.c:682 #, c-format -msgid "pthread_mutex_init: ERR=%s\n" +msgid "Error writing Session label to %s: %s\n" msgstr "" -#: src/dird/jobq.c:82 +#: src/stored/label.c:717 #, c-format -msgid "pthread_cond_init: ERR=%s\n" +msgid "Expecting Volume Label, got FI=%s Stream=%s len=%d\n" msgstr "" -#: src/dird/jobq.c:115 src/dird/jobq.c:242 src/dird/jobq.c:307 -#: src/dird/jobq.c:388 +#: src/stored/label.c:844 #, c-format -msgid "pthread_mutex_lock: ERR=%s\n" +msgid "Unknown %d" msgstr "" -#: src/dird/jobq.c:128 +#: src/stored/label.c:848 #, c-format -msgid "pthread_cond_broadcast: 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/jobq.c:136 +#: src/stored/label.c:870 #, c-format -msgid "pthread_cond_wait: ERR=%s\n" +msgid "Date label written: %s\n" msgstr "" -#: src/dird/jobq.c:144 +#: src/stored/label.c:876 #, c-format -msgid "pthread_mutex_unlock: ERR=%s\n" +msgid "Date label written: %04d-%02d-%02d at %02d:%02d\n" msgstr "" -#: src/dird/jobq.c:180 +#: src/stored/label.c:896 #, c-format -msgid "Job %s waiting %d seconds for scheduled start time.\n" +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/jobq.c:235 +#: src/stored/label.c:909 #, c-format -msgid "pthread_thread_create: ERR=%s\n" +msgid "" +"Job (unique name) : %s\n" +"FileSet : %s\n" +"JobType : %c\n" +"JobLevel : %c\n" msgstr "" -#: src/dird/jobq.c:353 +#: src/stored/label.c:918 #, c-format -msgid "pthread_cond_signal: ERR=%s\n" +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/jobq.c:362 +#: src/stored/label.c:939 #, c-format -msgid "pthread_create: ERR=%s\n" +msgid "Date written : %s\n" msgstr "" -#: src/dird/jobq.c:487 +#: src/stored/label.c:944 #, c-format -msgid "Rescheduled Job %s at %s to re-run in %d seconds.\n" +msgid "Date written : %04d-%02d-%02d at %02d:%02d\n" msgstr "" -#: src/dird/ua_prune.c:173 -msgid "Choose item to prune" +#: src/stored/label.c:963 +msgid "Fresh Volume" msgstr "" -#: src/dird/ua_prune.c:254 -msgid "No Files found to prune.\n" +#: src/stored/label.c:966 +msgid "Volume" msgstr "" -#: src/dird/ua_prune.c:286 -#, c-format -msgid "Pruned Files from %s Jobs for client %s from catalog.\n" +#: src/stored/label.c:975 src/stored/read_record.c:336 +msgid "End of Media" msgstr "" -#: src/dird/ua_prune.c:392 -msgid "No Jobs found to prune.\n" +#: src/stored/label.c:978 +msgid "End of Tape" msgstr "" -#: src/dird/ua_prune.c:453 +#: src/stored/label.c:998 src/stored/label.c:1006 src/stored/label.c:1039 #, c-format -msgid "Pruned %d %s for client %s from catalog.\n" +msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n" msgstr "" -#: src/dird/ua_prune.c:454 -msgid "Jobs" +#: src/stored/label.c:1003 +msgid "End of physical tape.\n" msgstr "" -#: src/dird/ua_prune.c:501 +#: src/stored/label.c:1018 src/stored/label.c:1027 #, c-format -msgid "There are no Jobs associated with Volume \"%s\". Prune not needed.\n" +msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d\n" msgstr "" -#: src/dird/ua_prune.c:508 src/dird/ua_purge.c:485 +#: src/stored/label.c:1020 #, c-format -msgid "There are no Jobs associated with Volume \"%s\". Marking it purged.\n" +msgid " Job=%s Date=%s Level=%c Type=%c\n" msgstr "" -#: src/dird/ua_prune.c:566 +#: src/stored/label.c:1029 #, c-format -msgid "Pruned %d %s on Volume \"%s\" from catalog.\n" +msgid " Date=%s Level=%c Type=%c Files=%s Bytes=%s Errors=%d Status=%c\n" msgstr "" -#: src/dird/next_vol.c:130 +#: src/stored/mount.c:198 src/stored/mount.c:295 #, c-format -msgid "Purging oldest volume \"%s\"\n" +msgid "Volume \"%s\" not on device %s.\n" msgstr "" -#: src/dird/next_vol.c:136 +#: src/stored/mount.c:231 #, c-format -msgid "Pruning oldest volume \"%s\"\n" -msgstr "" - -#: src/dird/next_vol.c:155 -msgid "We seem to be looping trying to find the next volume. I give up.\n" +msgid "" +"Director wanted Volume \"%s\".\n" +" Current Volume \"%s\" not acceptable because:\n" +" %s" msgstr "" -#: src/dird/next_vol.c:180 +#: src/stored/mount.c:285 #, c-format -msgid "Max Volume bytes exceeded. Marking Volume \"%s\" as Full.\n" +msgid "Labeled new Volume \"%s\" on device %s.\n" msgstr "" -#: src/dird/next_vol.c:187 +#: src/stored/mount.c:290 #, c-format -msgid "Volume used once. Marking Volume \"%s\" as Used.\n" +msgid "Warning device %s not configured to autolabel Volumes.\n" msgstr "" -#: src/dird/next_vol.c:194 +#: src/stored/mount.c:342 #, c-format -msgid "Max Volume jobs exceeded. Marking Volume \"%s\" as Used.\n" +msgid "Volume \"%s\" previously written, moving to end of data.\n" msgstr "" -#: src/dird/next_vol.c:201 +#: src/stored/mount.c:345 #, c-format -msgid "Max Volume files exceeded. Marking Volume \"%s\" as Used.\n" +msgid "Unable to position to end of data on device %s: ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:211 +#: src/stored/mount.c:357 #, c-format -msgid "Max configured use duration exceeded. Marking Volume \"%s\" as Used.\n" +msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" msgstr "" -#: src/dird/next_vol.c:221 +#: src/stored/mount.c:360 #, c-format -msgid "Catalog error updating volume \"%s\". ERR=%s" +msgid "" +"I cannot write on Volume \"%s\" because:\n" +"The number of files mismatch! Volume=%u Catalog=%u\n" msgstr "" -#: src/dird/next_vol.c:242 -msgid "volume has expired" +#: src/stored/mount.c:388 +#, c-format +msgid "Ready to append to end of Volume \"%s\" at file address=%u.\n" msgstr "" -#: src/dird/next_vol.c:260 src/dird/next_vol.c:296 +#: src/stored/mount.c:392 #, c-format -msgid "Recycled current volume \"%s\"\n" +msgid "" +"I cannot write on Volume \"%s\" because:\n" +"The EOD file address is wrong: Volume file address=%u != Catalog Endblock=%u" +"(+1)\n" +"You probably removed DVD last part in spool directory.\n" msgstr "" -#: src/dird/next_vol.c:265 -msgid "and recycling of current volume failed" +#: src/stored/mount.c:418 +#, c-format +msgid "Marking Volume \"%s\" in Error in Catalog.\n" msgstr "" -#: src/dird/next_vol.c:271 -msgid "but should be Append, Purged or Recycle" +#: src/stored/mount.c:434 +#, c-format +msgid "" +"Autochanger Volume \"%s\" not found in slot %d.\n" +" Setting InChanger to zero in catalog.\n" msgstr "" -#: src/dird/next_vol.c:299 -msgid "" -"but should be Append, Purged or Recycle (recycling of the current volume " -"failed)" +#: src/stored/mount.c:453 +msgid "Hey!!!!! WroteVol non-zero !!!!!\n" msgstr "" -#: src/dird/next_vol.c:303 +#: src/stored/parse_bsr.c:104 src/stored/parse_bsr.c:108 +#, c-format msgid "" -"but should be Append, Purged or Recycle (cannot automatically recycle " -"current volume, as it still contains unpruned data)" +"Bootstrap file error: %s\n" +" : Line %d, col %d of file %s\n" +"%s\n" msgstr "" -#: src/dird/next_vol.c:343 +#: src/stored/parse_bsr.c:130 #, c-format -msgid "Unable to get Pool record: ERR=%s" +msgid "Cannot open bootstrap file %s: %s\n" msgstr "" -#: src/dird/next_vol.c:348 +#: src/stored/parse_bsr.c:260 #, c-format -msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" +msgid "MediaType %s in bsr at inappropriate place.\n" msgstr "" -#: src/dird/next_vol.c:361 -#, c-format -msgid "Failed to move Scratch Volume. ERR=%s\n" +#: src/stored/parse_bsr.c:416 +msgid "JobType not yet implemented\n" msgstr "" -#: src/dird/next_vol.c:365 -#, c-format -msgid "Using Volume \"%s\" from 'Scratch' pool.\n" +#: src/stored/parse_bsr.c:424 +msgid "JobLevel not yet implemented\n" msgstr "" -#: src/dird/next_vol.c:373 +#: src/stored/parse_bsr.c:626 #, c-format -msgid "Unable to update Volume record: ERR=%s" +msgid "VolFile : %u-%u\n" msgstr "" -#: src/dird/recycle.c:99 +#: src/stored/parse_bsr.c:634 #, c-format -msgid "Recycled volume \"%s\"\n" +msgid "VolBlock : %u-%u\n" msgstr "" -#: src/dird/expand.c:240 +#: src/stored/parse_bsr.c:644 #, c-format -msgid "Count not update counter %s: ERR=%s\n" +msgid "FileIndex : %u\n" msgstr "" -#: src/dird/expand.c:412 +#: src/stored/parse_bsr.c:646 #, c-format -msgid "Cannot create var context: ERR=%s\n" +msgid "FileIndex : %u-%u\n" msgstr "" -#: src/dird/expand.c:417 +#: src/stored/parse_bsr.c:656 #, c-format -msgid "Cannot set var callback: ERR=%s\n" +msgid "JobId : %u\n" msgstr "" -#: src/dird/expand.c:423 +#: src/stored/parse_bsr.c:658 #, c-format -msgid "Cannot set var operate: ERR=%s\n" +msgid "JobId : %u-%u\n" msgstr "" -#: src/dird/expand.c:429 src/dird/expand.c:444 +#: src/stored/parse_bsr.c:668 #, c-format -msgid "Cannot unescape string: ERR=%s\n" +msgid "SessId : %u\n" msgstr "" -#: src/dird/expand.c:437 +#: src/stored/parse_bsr.c:670 #, c-format -msgid "Cannot expand expression \"%s\": ERR=%s\n" +msgid "SessId : %u-%u\n" msgstr "" -#: src/dird/expand.c:455 +#: src/stored/parse_bsr.c:679 #, c-format -msgid "Cannot destroy var context: ERR=%s\n" +msgid "VolumeName : %s\n" msgstr "" -#: src/dird/dird.c:71 -#, c-format -msgid "" -"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 set configuration file to file\n" -" -dnn set debug level to nn\n" -" -f run in foreground (for debugging)\n" -" -g groupid\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/stored/parse_bsr.c:688 +#, c-format +msgid "Client : %s\n" msgstr "" -#: src/dird/dird.c:396 -msgid "Too many open reload requests. Request ignored.\n" +#: src/stored/parse_bsr.c:696 +#, c-format +msgid "Job : %s\n" msgstr "" -#: src/dird/dird.c:411 -msgid "Out of reload table entries. Giving up.\n" +#: src/stored/parse_bsr.c:704 +#, c-format +msgid "SessTime : %u\n" msgstr "" -#: src/dird/dird.c:414 -msgid "Resetting previous configuration.\n" +#: src/stored/parse_bsr.c:718 +msgid "BSR is NULL\n" msgstr "" -#: src/dird/dird.c:586 src/dird/dird.c:599 +#: src/stored/parse_bsr.c:722 #, c-format -msgid "Hey something is wrong. p=0x%lu\n" +msgid "Next : 0x%x\n" msgstr "" -#: src/dird/dird.c:658 +#: src/stored/parse_bsr.c:723 #, c-format -msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" +msgid "Root bsr : 0x%x\n" msgstr "" -#: src/dird/dird.c:665 -msgid "Too many items in Job resource\n" +#: src/stored/parse_bsr.c:734 +#, c-format +msgid "Slot : %u\n" msgstr "" -#: src/dird/dird.c:686 +#: src/stored/parse_bsr.c:737 #, c-format -msgid "%s" +msgid "count : %u\n" msgstr "" -#: src/dird/dird.c:728 +#: src/stored/parse_bsr.c:738 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Storage \"%s\" in %s.\n" +msgid "found : %u\n" msgstr "" -#: src/dird/dird.c:795 +#: src/stored/parse_bsr.c:741 #, c-format -msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" +msgid "done : %s\n" msgstr "" -#: src/dird/dird.c:801 +#: src/stored/parse_bsr.c:742 #, c-format -msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" +msgid "positioning : %d\n" msgstr "" -#: src/dird/dird.c:807 +#: src/stored/parse_bsr.c:743 #, 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 "fast_reject : %d\n" msgstr "" -#: src/dird/dird.c:847 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon \"%s\" in %s.\n" +#: src/stored/pythonsd.c:202 +msgid "Error in ParseTuple\n" msgstr "" -#: src/dird/ua_label.c:89 -msgid "Negative numbers not permitted\n" +#: src/stored/pythonsd.c:218 +msgid "Parse tuple error in job_write\n" msgstr "" -#: src/dird/ua_label.c:95 -msgid "Range end is not integer.\n" +#: src/stored/pythonsd.c:254 +#, c-format +msgid "Error in Python method %s\n" msgstr "" -#: src/dird/ua_label.c:100 -msgid "Range start is not an integer.\n" +#: src/stored/read.c:55 +msgid "No Volume names found for restore.\n" msgstr "" -#: src/dird/ua_label.c:106 -msgid "Range end not bigger than start.\n" +#: src/stored/read.c:109 +#, c-format +msgid ">filed: Error Hdr=%s\n" msgstr "" -#: src/dird/ua_label.c:112 -msgid "Input value is not an integer.\n" +#: src/stored/read.c:110 src/stored/read.c:125 +#, c-format +msgid "Error sending to File daemon. ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:118 -msgid "Values must be be greater than zero.\n" +#: src/stored/read.c:124 +#, c-format +msgid "Error sending to FD. ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:122 -msgid "Slot too large.\n" +#: src/stored/read_record.c:68 +#, c-format +msgid "End of Volume at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/dird/ua_label.c:176 src/dird/ua_label.c:473 -msgid "No slots in changer to scan.\n" +#: src/stored/read_record.c:71 +msgid "End of all volumes.\n" msgstr "" -#: src/dird/ua_label.c:188 src/dird/ua_label.c:484 -msgid "No Volumes found to label, or no barcodes.\n" +#: src/stored/read_record.c:105 +#, c-format +msgid "Got EOF at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/dird/ua_label.c:198 +#: src/stored/read_record.c:119 +msgid "Did fsr\n" +msgstr "" + +#: src/stored/read_record.c:276 #, c-format -msgid "Slot %d greater than max %d ignored.\n" +msgid "Reposition from (file:block) %u:%u to %u:%u\n" msgstr "" -#: src/dird/ua_label.c:227 +#: src/stored/read_record.c:303 #, c-format -msgid "No VolName for Slot=%d InChanger set to zero.\n" +msgid "Forward spacing to file:block %u:%u.\n" msgstr "" -#: src/dird/ua_label.c:242 +#: src/stored/read_record.c:329 +msgid "Begin Session" +msgstr "" + +#: src/stored/read_record.c:333 +msgid "End Session" +msgstr "" + +#: src/stored/read_record.c:339 #, c-format -msgid "Catalog record for Volume \"%s\" updated to reference slot %d.\n" +msgid "Unknown code %d\n" msgstr "" -#: src/dird/ua_label.c:246 +#: src/stored/record.c:60 #, c-format -msgid "Catalog record for Volume \"%s\" is up to date.\n" +msgid "unknown: %d" msgstr "" -#: src/dird/ua_label.c:252 +#: src/stored/record.c:343 +msgid "Damaged buffer\n" +msgstr "" + +#: src/stored/reserve.c:467 src/stored/reserve.c:479 #, c-format -msgid "Volume \"%s\" not found in catalog. Slot=%d InChanger set to zero.\n" +msgid "Failed command: %s\n" msgstr "" -#: src/dird/ua_label.c:344 +#: src/stored/reserve.c:469 #, c-format msgid "" -"Volume \"%s\" has VolStatus %s. It must be Purged or Recycled before " -"relabeling.\n" +"\n" +" Device \"%s\" with MediaType \"%s\" requested by DIR not found in SD " +"Device resources.\n" msgstr "" -#: src/dird/ua_label.c:360 -msgid "Enter new Volume name: " +#: src/stored/reserve.c:647 +#, c-format +msgid "3926 Could not get dcr for device: %s\n" msgstr "" -#: src/dird/ua_label.c:373 +#: src/stored/reserve.c:709 #, c-format -msgid "Media record for new Volume \"%s\" already exists.\n" +msgid "3601 JobId=%u device %s is BLOCKED due to user unmount.\n" msgstr "" -#: src/dird/ua_label.c:388 -msgid "Enter slot (0 or Enter for none): " +#: src/stored/reserve.c:718 +#, c-format +msgid "3602 JobId=%u device %s is busy (already reading/writing).\n" msgstr "" -#: src/dird/ua_label.c:413 +#: src/stored/reserve.c:761 #, c-format -msgid "Delete of Volume \"%s\" failed. ERR=%s" +msgid "3603 JobId=%u device %s is busy reading.\n" msgstr "" -#: src/dird/ua_label.c:416 +#: src/stored/reserve.c:770 #, c-format -msgid "Old volume \"%s\" deleted from catalog.\n" +msgid "3604 JobId=%u device %s is BLOCKED due to user unmount.\n" msgstr "" -#: src/dird/ua_label.c:427 +#: src/stored/reserve.c:836 #, c-format -msgid "Requesting to mount %s ...\n" +msgid "3605 JobId=%u wants free drive but device %s is busy.\n" msgstr "" -#: src/dird/ua_label.c:449 -msgid "Do not forget to mount the drive!!!\n" +#: src/stored/reserve.c:844 +#, c-format +msgid "3606 JobId=%u wants mounted, but drive %s has no Volume.\n" msgstr "" -#: src/dird/ua_label.c:489 -msgid "" -"The following Volumes will be labeled:\n" -"Slot Volume\n" -"==============\n" +#: src/stored/reserve.c:854 +#, c-format +msgid "3607 JobId=%u wants Vol=\"%s\" drive has Vol=\"%s\" on drive %s.\n" msgstr "" -#: src/dird/ua_label.c:519 +#: src/stored/reserve.c:890 #, c-format -msgid "Media record for Slot %d Volume \"%s\" already exists.\n" +msgid "3608 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" on drive %s.\n" msgstr "" -#: src/dird/ua_label.c:525 +#: src/stored/reserve.c:933 #, c-format -msgid "Error setting InChanger: ERR=%s" +msgid "3609 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" on drive %s.\n" msgstr "" -#: src/dird/ua_label.c:548 -#, c-format -msgid "Maximum pool Volumes=%d reached.\n" +#: src/stored/reserve.c:941 src/stored/reserve.c:945 +msgid "Logic error!!!! Should not get here.\n" msgstr "" -#: src/dird/ua_label.c:555 +#: src/stored/reserve.c:942 #, c-format -msgid "Catalog record for cleaning tape \"%s\" successfully created.\n" +msgid "3910 JobId=%u Logic error!!!! drive %s Should not get here.\n" msgstr "" -#: src/dird/ua_label.c:562 +#: src/stored/reserve.c:948 #, c-format -msgid "Catalog error on cleaning tape: %s" +msgid "3911 JobId=%u failed reserve drive %s.\n" msgstr "" -#: src/dird/ua_label.c:598 +#: src/stored/spool.c:69 #, c-format -msgid "Illegal character \"%c\" in a volume name.\n" +msgid "" +"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" msgstr "" -#: src/dird/ua_label.c:643 +#: src/stored/spool.c:75 #, c-format -msgid "Sending relabel command from \"%s\" to \"%s\" ...\n" +msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" msgstr "" -#: src/dird/ua_label.c:650 -#, c-format -msgid "Sending label command for Volume \"%s\" Slot %d ...\n" +#: src/stored/spool.c:91 +msgid "Spooling data ...\n" msgstr "" -#: src/dird/ua_label.c:682 +#: src/stored/spool.c:117 #, c-format -msgid "Catalog record for Volume \"%s\", Slot %d successfully created.\n" +msgid "Bad return from despool WroteVol=%d\n" msgstr "" -#: src/dird/ua_label.c:695 +#: src/stored/spool.c:150 #, c-format -msgid "Label command failed for Volume %s.\n" +msgid "Open data spool file %s failed: ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:705 +#: src/stored/spool.c:199 #, c-format -msgid "Connecting to Storage daemon %s at %s:%d ...\n" +msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" msgstr "" -#: src/dird/ua_label.c:733 -msgid "Could not open SD socket.\n" +#: src/stored/spool.c:204 +#, c-format +msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" msgstr "" -#: src/dird/ua_label.c:739 +#: src/stored/spool.c:258 src/stored/spool.c:432 src/stored/spool.c:470 #, c-format -msgid "readlabel %s Slot=%d drive=%d\n" +msgid "Ftruncate spool file failed: ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:781 +#: src/stored/spool.c:260 #, c-format -msgid "autochanger list %s \n" +msgid "Bad return from ftruncate. ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:805 src/dird/ua_label.c:815 +#: src/stored/spool.c:309 #, c-format -msgid "Invalid Slot number: %s\n" +msgid "Spool header read error. ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:824 +#: src/stored/spool.c:312 #, c-format -msgid "Invalid Volume name: %s\n" +msgid "Spool read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/ua_label.c:893 +#: src/stored/spool.c:313 #, c-format -msgid "autochanger slots %s\n" +msgid "Spool header read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/ua_label.c:903 +#: src/stored/spool.c:319 src/stored/spool.c:320 #, c-format -msgid "Device \"%s\" has %d slots.\n" +msgid "Spool block too big. Max %u bytes, got %u\n" msgstr "" -#: src/dird/ua_label.c:925 +#: src/stored/spool.c:325 src/stored/spool.c:326 #, c-format -msgid "autochanger drives %s\n" +msgid "Spool data read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/ua_label.c:952 +#: src/stored/spool.c:383 +msgid "User specified spool size reached.\n" +msgstr "" + +#: src/stored/spool.c:385 +msgid "Bad return from despool in write_block.\n" +msgstr "" + +#: src/stored/spool.c:393 +msgid "Spooling data again ...\n" +msgstr "" + +#: src/stored/spool.c:424 #, c-format -msgid "Pool \"%s\" resource not found!\n" +msgid "Error writing header to spool file. ERR=%s\n" msgstr "" -#: src/dird/authenticate.c:93 -msgid "Director and Storage daemon passwords or names not the same.\n" +#: src/stored/spool.c:438 src/stored/spool.c:476 +msgid "Fatal despooling error." msgstr "" -#: src/dird/authenticate.c:95 -msgid "" -"Director unable to authenticate with Storage daemon. 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 http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +#: src/stored/spool.c:445 +msgid "Retrying after header spooling error failed.\n" +msgstr "" + +#: src/stored/spool.c:459 +#, c-format +msgid "Error writing data to spool file. ERR=%s\n" msgstr "" -#: src/dird/authenticate.c:193 -msgid "Director and File daemon passwords or names not the same.\n" +#: src/stored/spool.c:486 +msgid "Retrying after data spooling error failed.\n" msgstr "" -#: src/dird/authenticate.c:195 -msgid "" -"Unable to authenticate with File daemon. Possible causes:\n" -"Passwords or names not the same or\n" -"Maximum Concurrent Jobs exceeded on the FD or\n" -"FD networking messed up (restart daemon).\n" -"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +#: src/stored/spool.c:541 src/stored/spool.c:548 +#, c-format +msgid "Fseek on attributes file failed: ERR=%s\n" msgstr "" -#: src/dird/authenticate.c:268 +#: src/stored/spool.c:558 #, c-format -msgid "UA Hello from %s:%s:%d is invalid. Len=%d\n" +msgid "Sending spooled attrs to the Director. Despooling %s bytes ...\n" msgstr "" -#: src/dird/authenticate.c:275 +#: src/stored/spool.c:585 #, c-format -msgid "UA Hello from %s:%s:%d is invalid. Got: %s\n" +msgid "fopen attr spool file %s failed: ERR=%s\n" msgstr "" -#: src/dird/authenticate.c:332 +#: src/stored/status.c:67 +#, c-format msgid "" -"Authorization problem: Remote client did not advertise required TLS " -"support.\n" +"\n" +"%s Version: %s (%s) %s %s %s\n" msgstr "" -#: src/dird/authenticate.c:340 -msgid "Authorization problem: Remote client requires TLS.\n" +#: src/stored/status.c:103 +msgid "" +"\n" +"Device status:\n" msgstr "" -#: src/dird/authenticate.c:368 +#: src/stored/status.c:105 #, c-format -msgid "Unable to authenticate console \"%s\" at %s:%s:%d.\n" +msgid "Autochanger \"%s\" with devices:\n" msgstr "" -#: src/dird/authenticate.c:373 +#: src/stored/status.c:119 #, c-format -msgid "1000 OK: %s Version: %s (%s)\n" +msgid "Device %s is mounted with Volume=\"%s\" Pool=\"%s\"\n" msgstr "" -#: src/dird/ua_select.c:39 +#: src/stored/status.c:123 #, c-format -msgid "The current %s retention period is: %s\n" +msgid "Device %s open but no Bacula volume is mounted.\n" msgstr "" -#: src/dird/ua_select.c:41 -msgid "Continue? (yes/mod/no): " +#: src/stored/status.c:133 +#, c-format +msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" msgstr "" -#: src/dird/ua_select.c:45 -msgid "Enter new retention period: " +#: src/stored/status.c:147 +#, c-format +msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" msgstr "" -#: src/dird/ua_select.c:49 -msgid "Invalid period.\n" +#: src/stored/status.c:152 +#, c-format +msgid " Positioned at File=%s Block=%s\n" msgstr "" -#: src/dird/ua_select.c:128 -msgid "You have the following choices:\n" +#: src/stored/status.c:158 +#, c-format +msgid "Device %s is not open or does not exist.\n" msgstr "" -#: src/dird/ua_select.c:144 -msgid "The defined Storage resources are:\n" +#: src/stored/status.c:160 +#, c-format +msgid "Device \"%s\" is not open or does not exist.\n" msgstr "" -#: src/dird/ua_select.c:152 -msgid "Select Storage resource" +#: src/stored/status.c:165 src/stored/status.c:168 src/stored/status.c:172 +#: src/stored/status.c:174 +msgid "" +"====\n" +"\n" msgstr "" -#: src/dird/ua_select.c:193 -msgid "catalog" +#: src/stored/status.c:166 +msgid "In Use Volume status:\n" msgstr "" -#: src/dird/ua_select.c:201 -msgid "The defined Catalog resources are:\n" +#: src/stored/status.c:190 +msgid "" +"No DEVICE structure.\n" +"\n" msgstr "" -#: src/dird/ua_select.c:209 -msgid "Catalog" +#: src/stored/status.c:195 +msgid " Device is BLOCKED. User unmounted.\n" msgstr "" -#: src/dird/ua_select.c:209 -msgid "Select Catalog resource" +#: src/stored/status.c:198 +msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" msgstr "" -#: src/dird/ua_select.c:226 -msgid "The defined Job resources are:\n" +#: src/stored/status.c:202 +#, c-format +msgid " Device is BLOCKED waiting for mount of volume \"%s\".\n" msgstr "" -#: src/dird/ua_select.c:234 -msgid "Select Job resource" +#: src/stored/status.c:205 +msgid " Device is BLOCKED waiting for media.\n" msgstr "" -#: src/dird/ua_select.c:249 -msgid "The defined Restore Job resources are:\n" +#: src/stored/status.c:209 +msgid " Device is being initialized.\n" msgstr "" -#: src/dird/ua_select.c:257 -msgid "Select Restore Job" +#: src/stored/status.c:212 +msgid " Device is blocked labeling a Volume.\n" msgstr "" -#: src/dird/ua_select.c:274 -msgid "The defined Client resources are:\n" +#: src/stored/status.c:220 +#, c-format +msgid " Slot %d is loaded in drive %d.\n" msgstr "" -#: src/dird/ua_select.c:282 -msgid "Select Client (File daemon) resource" +#: src/stored/status.c:223 +#, c-format +msgid " Drive %d is not loaded.\n" msgstr "" -#: src/dird/ua_select.c:309 -#, c-format -msgid "Error: Client resource %s does not exist.\n" +#: src/stored/status.c:242 +msgid "Device state:\n" msgstr "" -#: src/dird/ua_select.c:334 +#: src/stored/status.c:256 #, c-format -msgid "Could not find Client %s: ERR=%s" +msgid "" +"num_writers=%d JobStatus=%c block=%d\n" +"\n" msgstr "" -#: src/dird/ua_select.c:338 -msgid "fd" +#: src/stored/status.c:260 +#, c-format +msgid "Archive name: %s Device name: %s\n" msgstr "" -#: src/dird/ua_select.c:344 src/dird/ua_select.c:398 +#: src/stored/status.c:262 #, c-format -msgid "Could not find Client \"%s\": ERR=%s" +msgid "File=%u block=%u\n" msgstr "" -#: src/dird/ua_select.c:373 +#: src/stored/status.c:263 #, c-format -msgid "Error obtaining client ids. ERR=%s\n" +msgid "Min block=%u Max block=%u\n" msgstr "" -#: src/dird/ua_select.c:377 -msgid "No clients defined. You must run a job before using this command.\n" +#: src/stored/status.c:280 +#, c-format +msgid "%s Job %s waiting for Client connection.\n" msgstr "" -#: src/dird/ua_select.c:381 -msgid "Defined Clients:\n" +#: src/stored/status.c:295 +#, c-format +msgid "" +"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=\"%s\"\n" msgstr "" -#: src/dird/ua_select.c:391 -msgid "Select the Client" +#: src/stored/status.c:307 +#, c-format +msgid "" +"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=\"%s\"\n" msgstr "" -#: src/dird/ua_select.c:424 src/dird/ua_select.c:447 src/dird/ua_select.c:483 +#: src/stored/status.c:330 #, c-format -msgid "Could not find Pool \"%s\": ERR=%s" +msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" msgstr "" -#: src/dird/ua_select.c:458 src/dird/ua_output.c:394 -#, c-format -msgid "Error obtaining pool ids. ERR=%s\n" +#: src/stored/status.c:335 +msgid " FDSocket closed\n" msgstr "" -#: src/dird/ua_select.c:462 -msgid "No pools defined. Use the \"create\" command to create one.\n" +#: src/stored/status.c:352 +msgid "" +"\n" +"Jobs waiting to reserve a drive:\n" msgstr "" -#: src/dird/ua_select.c:466 -msgid "Defined Pools:\n" +#: src/stored/status.c:380 +msgid " JobId Level Files Bytes Status Finished Name \n" msgstr "" -#: src/dird/ua_select.c:476 -msgid "Select the Pool" +#: src/stored/status.c:514 +msgid "3900 Bad .status command, missing argument.\n" msgstr "" -#: src/dird/ua_select.c:506 -#, c-format -msgid "No access to Pool \"%s\"\n" +#: src/stored/status.c:537 +msgid "3900 Bad .status command, wrong argument.\n" msgstr "" -#: src/dird/ua_select.c:532 -msgid "Enter MediaId or Volume name: " +#: src/stored/stored.c:65 +#, c-format +msgid "" +"Copyright (C) 2000-2005 Kern Sibbald.\n" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: stored [options] [-c config_file] [config_file]\n" +" -c use as configuration file\n" +" -dnn set debug level to nn\n" +" -f run in foreground (for debugging)\n" +" -g set groupid to group\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_select.c:558 -msgid "The defined Pool resources are:\n" +#: src/stored/stored.c:220 +msgid "Volume Session Time is ZERO!\n" msgstr "" -#: src/dird/ua_select.c:566 -msgid "Select Pool resource" +#: src/stored/stored.c:233 +#, c-format +msgid "Unable to create thread. ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:601 -msgid "Enter the JobId to select: " +#: src/stored/stored.c:271 +#, c-format +msgid "Only one Storage resource permitted in %s\n" msgstr "" -#: src/dird/ua_select.c:639 +#: src/stored/stored.c:276 #, c-format -msgid "Could not find Job \"%s\": ERR=%s" +msgid "No Director resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_select.c:716 +#: src/stored/stored.c:281 #, c-format -msgid "Automatically selected %s: %s\n" +msgid "No Device resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_select.c:721 +#: src/stored/stored.c:289 #, c-format -msgid "Cannot select %s in batch mode.\n" +msgid "No Messages resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_select.c:735 -msgid "Selection is empty!\n" +#: src/stored/stored.c:316 +#, c-format +msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_select.c:741 -msgid "Item 1 selected automatically.\n" +#: src/stored/stored.c:322 +#, c-format +msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_select.c:752 -msgid "Selection aborted, nothing done.\n" +#: src/stored/stored.c:328 +#, 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 "" -#: src/dird/ua_select.c:757 +#: src/stored/stored.c:455 #, c-format -msgid "Please enter a number between 1 and %d\n" +msgid "Could not initialize %s\n" msgstr "" -#: src/dird/ua_select.c:806 -msgid "Storage name given twice.\n" +#: src/stored/stored.c:468 +#, c-format +msgid "Could not open device %s\n" msgstr "" -#: src/dird/ua_select.c:823 +#: src/stored/stored.c:481 #, c-format -msgid "Expecting jobid=nn command, got: %s\n" +msgid "Could not mount device %s\n" msgstr "" -#: src/dird/ua_select.c:827 +#: src/stored/stored_conf.c:216 #, c-format -msgid "JobId %s is not running.\n" +msgid "Expected a Device Type keyword, got: %s" msgstr "" -#: src/dird/ua_select.c:836 +#: src/stored/stored_conf.c:231 #, c-format -msgid "Expecting job=xxx, got: %s.\n" +msgid "Warning: no \"%s\" resource (%d) defined.\n" msgstr "" -#: src/dird/ua_select.c:840 +#: src/stored/stored_conf.c:234 #, c-format -msgid "Job \"%s\" is not running.\n" +msgid "dump_resource type=%d\n" msgstr "" -#: src/dird/ua_select.c:856 +#: src/stored/stored_conf.c:350 #, c-format -msgid "Storage resource \"%s\": not found\n" +msgid "Warning: unknown resource type %d\n" msgstr "" -#: src/dird/ua_select.c:888 -msgid "Enter autochanger drive[0]: " +#: src/stored/stored_conf.c:539 +#, c-format +msgid "\"%s\" item is required in \"%s\" resource, but not found.\n" msgstr "" -#: src/dird/ua_select.c:918 -msgid "Media Types defined in conf file:\n" +#: src/stored/stored_conf.c:545 +#, c-format +msgid "Too many items in \"%s\" resource\n" msgstr "" -#: src/dird/ua_select.c:924 -msgid "Media Type" +#: src/stored/stored_conf.c:579 +#, c-format +msgid "Cannot find AutoChanger resource %s\n" msgstr "" -#: src/dird/ua_select.c:924 -msgid "Select the Media Type" +#: src/stored/stored_conf.c:650 +#, c-format +msgid "" +"Attempt to define second \"%s\" resource named \"%s\" is not permitted.\n" msgstr "" -#: src/dird/catreq.c:110 src/dird/catreq.c:303 +#: src/stored/wait.c:114 #, c-format -msgid "1990 Invalid Catalog Request: %s" +msgid "pthread timedwait error. ERR=%s\n" msgstr "" -#: src/dird/catreq.c:111 +#: src/stored/wait.c:199 #, c-format -msgid "Invalid Catalog request; DB not open: %s" +msgid "Job %s waiting to reserve a device.\n" msgstr "" -#: src/dird/catreq.c:136 -msgid "1901 No Media.\n" +#: src/tools/bsmtp.c:85 +#, c-format +msgid "Fatal malformed reply from %s: %s\n" msgstr "" -#: src/dird/catreq.c:164 -msgid "not in Pool" +#: src/tools/bsmtp.c:121 +#, c-format +msgid "" +"\n" +"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" +" -c set the Cc: field\n" +" -dnn set debug level to nn\n" +" -f set the From: field\n" +" -h use mailhost:port as the SMTP server\n" +" -s set the Subject: field\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/dird/catreq.c:166 -msgid "not correct MediaType" +#: src/tools/bsmtp.c:204 +msgid "Fatal error: no recipient given.\n" msgstr "" -#: src/dird/catreq.c:182 +#: src/tools/bsmtp.c:225 #, c-format -msgid "1998 Volume \"%s\" status is %s, %s.\n" +msgid "Fatal gethostname error: ERR=%s\n" msgstr "" -#: src/dird/catreq.c:187 +#: src/tools/bsmtp.c:229 #, c-format -msgid "1997 Volume \"%s\" not in catalog.\n" +msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" msgstr "" -#: src/dird/catreq.c:208 +#: src/tools/bsmtp.c:254 #, c-format -msgid "Unable to get Media record for Volume %s: ERR=%s\n" +msgid "Error unknown mail host \"%s\": ERR=%s\n" msgstr "" -#: src/dird/catreq.c:210 -#, c-format -msgid "1991 Catalog Request for vol=%s failed: %s" +#: src/tools/bsmtp.c:257 +msgid "Retrying connection using \"localhost\".\n" msgstr "" -#: src/dird/catreq.c:230 +#: src/tools/bsmtp.c:265 #, c-format -msgid "" -"Volume Files at %u being set to %u for Volume \"%s\". This is incorrect.\n" +msgid "Fatal error: Unknown address family for smtp host: %d\n" msgstr "" -#: src/dird/catreq.c:233 +#: src/tools/bsmtp.c:273 #, c-format -msgid "1992 Update Media error. VolFiles=%u, CatFiles=%u\n" +msgid "Fatal socket error: ERR=%s\n" msgstr "" -#: src/dird/catreq.c:265 +#: src/tools/bsmtp.c:277 #, c-format -msgid "Catalog error updating Media record. %s" -msgstr "" - -#: src/dird/catreq.c:267 -msgid "1993 Update Media error\n" +msgid "Fatal connect error to %s: ERR=%s\n" msgstr "" -#: src/dird/catreq.c:292 +#: src/tools/bsmtp.c:282 #, c-format -msgid "Catalog error creating JobMedia record. %s" +msgid "Fatal dup error: ERR=%s\n" msgstr "" -#: src/dird/catreq.c:294 -msgid "1991 Update JobMedia error\n" +#: src/tools/bsmtp.c:286 src/tools/bsmtp.c:290 +#, c-format +msgid "Fatal fdopen error: ERR=%s\n" msgstr "" -#: src/dird/catreq.c:304 -#, c-format -msgid "Invalid Catalog request: %s" +#: src/tools/dbcheck.c:158 +msgid "" +"Warning skipping the additional parameters for working directory/dbname/user/" +"password/host.\n" msgstr "" -#: src/dird/catreq.c:338 +#: src/tools/dbcheck.c:174 #, c-format -msgid "1991 Invalid Catalog Update: %s" +msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" msgstr "" -#: src/dird/catreq.c:339 +#: src/tools/dbcheck.c:176 #, c-format -msgid "Invalid Catalog Update; DB not open: %s" +msgid "Error there is no Catalog section in the given config file [%s]\n" msgstr "" -#: src/dird/catreq.c:412 -#, c-format -msgid "Got %s but not same File as attributes\n" +#: src/tools/dbcheck.c:185 +msgid "Error no Director resource defined.\n" msgstr "" -#: src/dird/catreq.c:438 -#, c-format -msgid "Catalog error updating file digest. Unsupported digest stream type: %d" +#: src/tools/dbcheck.c:199 +msgid "Wrong number of arguments.\n" msgstr "" -#: src/dird/catreq.c:454 -#, c-format -msgid "Catalog error updating file digest. %s" +#: src/tools/dbcheck.c:204 +msgid "Working directory not supplied.\n" msgstr "" -#: src/dird/getmsg.c:130 +#: src/tools/dbcheck.c:269 #, c-format -msgid "bget_dirmsg: unknown bnet signal %d\n" +msgid "Hello, this is the database check/correct program.\n" msgstr "" -#: src/dird/getmsg.c:148 src/dird/getmsg.c:161 src/dird/getmsg.c:173 -#: src/dird/getmsg.c:220 src/dird/getmsg.c:244 +#: src/tools/dbcheck.c:271 #, c-format -msgid "Malformed message: %s\n" +msgid "Modify database is on." msgstr "" -#: src/dird/getmsg.c:154 +#: src/tools/dbcheck.c:273 #, c-format -msgid "Job not found: %s\n" +msgid "Modify database is off." msgstr "" -#: src/dird/getmsg.c:311 +#: src/tools/dbcheck.c:275 src/tools/dbcheck.c:336 #, c-format -msgid "Bad response to %s command: wanted %s, got %s\n" +msgid " Verbose is on.\n" msgstr "" -#: src/dird/getmsg.c:316 +#: src/tools/dbcheck.c:277 src/tools/dbcheck.c:338 #, c-format -msgid "Socket error on %s command: ERR=%s\n" +msgid " Verbose is off.\n" msgstr "" -#: src/dird/newvol.c:77 +#: src/tools/dbcheck.c:279 #, c-format -msgid "Illegal character in Volume name \"%s\"\n" +msgid "Please select the fuction you want to perform.\n" msgstr "" -#: src/dird/newvol.c:89 +#: src/tools/dbcheck.c:283 #, c-format -msgid "Created new Volume \"%s\" in catalog.\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/dird/newvol.c:117 +#: src/tools/dbcheck.c:302 #, c-format -msgid "Wanted to create Volume \"%s\", but it already exists. Trying again.\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/dird/newvol.c:126 -msgid "Too many failures. Giving up creating Volume name.\n" +#: src/tools/dbcheck.c:322 +msgid "Select function number: " msgstr "" -#: src/dird/autoprune.c:57 -msgid "Begin pruning Jobs.\n" +#: src/tools/dbcheck.c:329 +#, c-format +msgid "Database will be modified.\n" msgstr "" -#: src/dird/autoprune.c:65 -msgid "Begin pruning Files.\n" +#: src/tools/dbcheck.c:331 +#, c-format +msgid "Database will NOT be modified.\n" msgstr "" -#: src/dird/autoprune.c:70 -msgid "" -"End auto prune.\n" -"\n" +#: src/tools/dbcheck.c:421 +#, c-format +msgid "JobId=%s Name=\"%s\" StartTime=%s\n" msgstr "" -#: src/dird/ua_server.c:61 +#: src/tools/dbcheck.c:429 #, c-format -msgid "Cannot create UA thread: %s\n" +msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" msgstr "" -#: src/dird/ua_server.c:142 -msgid "You have messages.\n" +#: src/tools/dbcheck.c:436 +#, c-format +msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" msgstr "" -#: src/dird/inc_conf.c:251 +#: src/tools/dbcheck.c:443 #, c-format -msgid "Expected a FileSet option keyword, got:%s:" +msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" msgstr "" -#: src/dird/inc_conf.c:284 -msgid "Old style Include/Exclude not supported\n" +#: src/tools/dbcheck.c:450 +#, c-format +msgid "Orphaned ClientId=%s Name=\"%s\"\n" msgstr "" -#: src/dird/inc_conf.c:312 src/dird/inc_conf.c:579 +#: src/tools/dbcheck.c:503 #, c-format -msgid "Expecting keyword, got: %s\n" +msgid "Deleting: %s\n" msgstr "" -#: src/dird/inc_conf.c:330 src/dird/inc_conf.c:594 +#: src/tools/dbcheck.c:577 #, c-format -msgid "Keyword %s not permitted in this resource" +msgid "Checking for duplicate Filename entries.\n" msgstr "" -#: src/dird/inc_conf.c:383 +#: src/tools/dbcheck.c:586 #, c-format -msgid "Regex compile error. ERR=%s\n" +msgid "Found %d duplicate Filename records.\n" msgstr "" -#: src/dird/inc_conf.c:404 -#, c-format -msgid "Expected a regex string, got: %s\n" +#: src/tools/dbcheck.c:587 +msgid "Print the list? (yes/no): " msgstr "" -#: src/dird/inc_conf.c:490 +#: src/tools/dbcheck.c:603 src/tools/dbcheck.c:657 #, c-format -msgid "Expected a wild-card string, got: %s\n" +msgid "Found %d for: %s\n" msgstr "" -#: src/dird/inc_conf.c:513 +#: src/tools/dbcheck.c:630 #, c-format -msgid "Expected an fstype string, got: %s\n" +msgid "Checking for duplicate Path entries.\n" msgstr "" -#: src/dird/inc_conf.c:548 +#: src/tools/dbcheck.c:640 #, c-format -msgid "Expected a filename, got: %s" +msgid "Found %d duplicate Path records.\n" msgstr "" -#: src/dird/inc_conf.c:564 -#, c-format -msgid "Expecting open brace. Got %s" +#: src/tools/dbcheck.c:641 src/tools/dbcheck.c:691 src/tools/dbcheck.c:723 +#: src/tools/dbcheck.c:755 src/tools/dbcheck.c:783 src/tools/dbcheck.c:811 +#: src/tools/dbcheck.c:849 src/tools/dbcheck.c:887 src/tools/dbcheck.c:918 +#: src/tools/dbcheck.c:948 src/tools/dbcheck.c:982 src/tools/dbcheck.c:1040 +msgid "Print them? (yes/no): " msgstr "" -#: src/dird/inc_conf.c:619 +#: src/tools/dbcheck.c:683 #, c-format -msgid "Expected a FileSet keyword, got: %s" +msgid "Checking for orphaned JobMedia entries.\n" msgstr "" -#: src/dird/fd_cmds.c:104 +#: src/tools/dbcheck.c:690 #, c-format -msgid "File daemon \"%s\" rejected Job command: %s\n" +msgid "Found %d orphaned JobMedia records.\n" msgstr "" -#: src/dird/fd_cmds.c:117 +#: src/tools/dbcheck.c:703 #, c-format -msgid "Error updating Client record. ERR=%s\n" +msgid "Deleting %d orphaned JobMedia records.\n" msgstr "" -#: src/dird/fd_cmds.c:122 +#: src/tools/dbcheck.c:712 #, c-format -msgid "FD gave bad response to JobId command: %s\n" +msgid "Checking for orphaned File entries. This may take some time!\n" msgstr "" -#: src/dird/fd_cmds.c:144 src/dird/fd_cmds.c:180 -msgid ", since=" +#: src/tools/dbcheck.c:722 +#, c-format +msgid "Found %d orphaned File records.\n" msgstr "" -#: src/dird/fd_cmds.c:164 -msgid "No prior or suitable Full backup found. Doing FULL backup.\n" +#: src/tools/dbcheck.c:735 +#, c-format +msgid "Deleting %d orphaned File records.\n" msgstr "" -#: src/dird/fd_cmds.c:165 src/dird/fd_cmds.c:173 +#: src/tools/dbcheck.c:744 #, c-format -msgid " (upgraded from %s)" +msgid "Checking for orphaned Path entries. This may take some time!\n" msgstr "" -#: src/dird/fd_cmds.c:171 +#: src/tools/dbcheck.c:754 #, c-format -msgid "Prior failed job found. Upgrading to %s.\n" +msgid "Found %d orphaned Path records.\n" msgstr "" -#: src/dird/fd_cmds.c:196 -msgid "since_utime " +#: src/tools/dbcheck.c:763 +#, c-format +msgid "Deleting %d orphaned Path records.\n" msgstr "" -#: src/dird/fd_cmds.c:232 +#: src/tools/dbcheck.c:772 #, c-format -msgid "Unimplemented backup level %d %c\n" +msgid "Checking for orphaned Filename entries. This may take some time!\n" msgstr "" -#: src/dird/fd_cmds.c:331 src/dird/fd_cmds.c:356 src/dird/fd_cmds.c:370 -msgid ">filed: write error on socket\n" +#: src/tools/dbcheck.c:782 +#, c-format +msgid "Found %d orphaned Filename records.\n" msgstr "" -#: src/dird/fd_cmds.c:337 +#: src/tools/dbcheck.c:791 #, c-format -msgid "Error running program: %s. ERR=%s\n" +msgid "Deleting %d orphaned Filename records.\n" msgstr "" -#: src/dird/fd_cmds.c:346 +#: src/tools/dbcheck.c:800 #, c-format -msgid "Cannot open included file: %s. ERR=%s\n" +msgid "Checking for orphaned FileSet entries. This takes some time!\n" msgstr "" -#: src/dird/fd_cmds.c:522 +#: src/tools/dbcheck.c:810 #, c-format -msgid "" -"= 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/dird/ua_query.c:64 -msgid "Available queries:\n" +#: src/tools/testfind.c:134 src/tools/testls.c:130 +#, c-format +msgid "Could not open include file: %s\n" msgstr "" -#: src/dird/ua_query.c:71 -msgid "Choose a query" +#: src/tools/testfind.c:147 src/tools/testls.c:143 +#, c-format +msgid "Could not open exclude file: %s\n" msgstr "" -#: src/dird/ua_query.c:85 -msgid "Could not find query.\n" +#: src/tools/testfind.c:160 +#, c-format +msgid "" +"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/dird/ua_query.c:103 -msgid "Too many prompts in query, max is 9.\n" +#: src/tools/testfind.c:199 +#, c-format +msgid "Reg: %s\n" msgstr "" -#: src/dird/ua_query.c:206 -#, c-format -msgid "Warning prompt %d missing.\n" +#: src/tools/testfind.c:220 +msgid "\t[will not descend: recursion turned off]" msgstr "" -#: src/dird/ua_query.c:252 -msgid "" -"Entering SQL query mode.\n" -"Terminate each query with a semicolon.\n" -"Terminate query mode with a blank line.\n" +#: src/tools/testfind.c:222 +msgid "\t[will not descend: file system change not allowed]" msgstr "" -#: src/dird/ua_query.c:255 src/dird/ua_query.c:272 -msgid "Enter SQL query: " +#: src/tools/testfind.c:224 +msgid "\t[will not descend: disallowed file system]" msgstr "" -#: src/dird/ua_query.c:274 -msgid "Add to SQL query: " +#: src/tools/testfind.c:240 src/tools/testls.c:178 +#, c-format +msgid "Err: Could not access %s: %s\n" msgstr "" -#: src/dird/ua_query.c:278 -msgid "End query mode.\n" +#: src/tools/testfind.c:243 src/tools/testls.c:181 +#, c-format +msgid "Err: Could not follow ff->link %s: %s\n" msgstr "" -#: src/dird/ua_update.c:79 -msgid "Update choice:\n" +#: src/tools/testfind.c:246 src/tools/testls.c:184 +#, c-format +msgid "Err: Could not stat %s: %s\n" msgstr "" -#: src/dird/ua_update.c:80 -msgid "Volume parameters" +#: src/tools/testfind.c:249 src/tools/testls.c:187 +#, c-format +msgid "Skip: File not saved. No change. %s\n" msgstr "" -#: src/dird/ua_update.c:81 -msgid "Pool from resource" +#: src/tools/testfind.c:252 src/tools/testls.c:190 +#, c-format +msgid "Err: Attempt to backup archive. Not saved. %s\n" msgstr "" -#: src/dird/ua_update.c:82 -msgid "Slots from autochanger" +#: src/tools/testfind.c:255 src/tools/testls.c:199 +#, c-format +msgid "Err: Could not open directory %s: %s\n" msgstr "" -#: src/dird/ua_update.c:83 -msgid "item" +#: src/tools/testfind.c:258 src/tools/testls.c:202 +#, c-format +msgid "Err: Unknown file ff->type %d: %s\n" msgstr "" -#: src/dird/ua_update.c:83 -msgid "Choose catalog item to update" +#: src/tools/testfind.c:308 +#, c-format +msgid "===== Filename truncated to 255 chars: %s\n" msgstr "" -#: src/dird/ua_update.c:122 +#: src/tools/testfind.c:325 #, c-format -msgid "Invalid VolStatus specified: %s\n" +msgid "========== Path name truncated to 255 chars: %s\n" msgstr "" -#: src/dird/ua_update.c:131 +#: src/tools/testfind.c:334 #, c-format -msgid "New Volume status is: %s\n" +msgid "========== Path length is zero. File=%s\n" msgstr "" -#: src/dird/ua_update.c:141 +#: src/tools/testfind.c:337 #, c-format -msgid "Invalid retention period specified: %s\n" +msgid "Path: %s\n" msgstr "" -#: src/dird/ua_update.c:149 +#: src/tools/testls.c:45 #, c-format -msgid "New retention period is: %s\n" +msgid "" +"\n" +"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" +" -a print extended attributes (Win32 debug)\n" +" -dnn set debug level to nn\n" +" -e specify file of exclude patterns\n" +" -i specify file of include patterns\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/dird/ua_update.c:160 +#: src/tools/testls.c:193 #, c-format -msgid "Invalid use duration specified: %s\n" +msgid "Recursion turned off. Directory not entered. %s\n" msgstr "" -#: src/dird/ua_update.c:168 +#: src/tools/testls.c:196 #, c-format -msgid "New use duration is: %s\n" +msgid "Skip: File system change prohibited. Directory not entered. %s\n" msgstr "" -#: src/dird/ua_update.c:182 -#, c-format -msgid "New max jobs is: %s\n" +#: src/tray-monitor/authenticate.c:78 +msgid "" +"Director authorization problem.\n" +"Most likely the passwords do not agree.\n" +"Please see http://www.bacula.org/html-manual/faq.html#AuthorizationErrors " +"for help.\n" msgstr "" -#: src/dird/ua_update.c:195 -#, c-format -msgid "New max files is: %s\n" +#: src/tray-monitor/authenticate.c:127 +msgid "" +"Director and Storage daemon passwords or names not the same.\n" +"Please see http://www.bacula.org/html-manual/faq.html#AuthorizationErrors " +"for help.\n" msgstr "" -#: src/dird/ua_update.c:206 -#, c-format -msgid "Invalid max. bytes specification: %s\n" +#: src/tray-monitor/authenticate.c:172 +msgid "" +"Director and File daemon passwords or names not the same.\n" +"Please see http://www.bacula.org/html-manual/faq.html#AuthorizationErrors " +"for help.\n" msgstr "" -#: src/dird/ua_update.c:214 +#: src/tray-monitor/tray-monitor.c:102 #, c-format -msgid "New Max bytes is: %s\n" -msgstr "" - -#: src/dird/ua_update.c:228 src/dird/ua_update.c:252 -msgid "Invalid value. It must be yes or no.\n" +msgid "" +"Copyright (C) 2000-2004 Kern Sibbald and John Walker\n" +"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" +" -dnn set debug level to nn\n" +" -t test - read configuration and exit\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/dird/ua_update.c:236 +#: src/tray-monitor/tray-monitor.c:251 #, c-format -msgid "New Recycle flag is: %s\n" +msgid "" +"Error: %d Monitor resource defined in %s. You must define one and only one " +"Monitor resource.\n" msgstr "" -#: src/dird/ua_update.c:260 +#: src/tray-monitor/tray-monitor.c:282 #, c-format -msgid "New InChanger flag is: %s\n" +msgid "" +"No Client, Storage nor 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/dird/ua_update.c:278 +#: src/tray-monitor/tray-monitor.c:304 #, c-format -msgid "Invalid slot, it must be between 0 and MaxVols=%d\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/dird/ua_update.c:287 src/dird/ua_update.c:577 -#, c-format -msgid "Error updating media record Slot: ERR=%s" +#: src/tray-monitor/tray-monitor.c:319 +msgid "Open status window..." msgstr "" -#: src/dird/ua_update.c:289 -#, c-format -msgid "New Slot is: %d\n" +#: src/tray-monitor/tray-monitor.c:325 +msgid "Exit" msgstr "" -#: src/dird/ua_update.c:316 -#, c-format -msgid "New Pool is: %s\n" +#: src/tray-monitor/tray-monitor.c:337 +msgid "Bacula tray monitor" msgstr "" -#: src/dird/ua_update.c:345 -#, c-format -msgid "Error updating Volume record: ERR=%s" +#: src/tray-monitor/tray-monitor.c:362 +msgid " (DIR)" msgstr "" -#: src/dird/ua_update.c:347 -#, c-format -msgid "Volume defaults updated from \"%s\" Pool record.\n" +#: src/tray-monitor/tray-monitor.c:366 +msgid " (FD)" msgstr "" -#: src/dird/ua_update.c:369 -#, c-format -msgid "Error updating Volume records: ERR=%s" +#: src/tray-monitor/tray-monitor.c:370 +msgid " (SD)" msgstr "" -#: src/dird/ua_update.c:371 -msgid "All Volume defaults updated from Pool record.\n" +#: src/tray-monitor/tray-monitor.c:383 +msgid "Unknown status." msgstr "" -#: src/dird/ua_update.c:391 -msgid "VolStatus" +#: src/tray-monitor/tray-monitor.c:424 +msgid "Refresh interval in seconds: " msgstr "" -#: src/dird/ua_update.c:392 -msgid "VolRetention" +#: src/tray-monitor/tray-monitor.c:432 +msgid "Refresh now" msgstr "" -#: src/dird/ua_update.c:393 -msgid "VolUse" +#: src/tray-monitor/tray-monitor.c:436 +msgid "About" msgstr "" -#: src/dird/ua_update.c:394 -msgid "MaxVolJobs" +#: src/tray-monitor/tray-monitor.c:440 +msgid "Close" msgstr "" -#: src/dird/ua_update.c:395 -msgid "MaxVolFiles" +#: src/tray-monitor/tray-monitor.c:460 +#, c-format +msgid "Disconnecting from Director %s:%d\n" msgstr "" -#: src/dird/ua_update.c:396 -msgid "MaxVolBytes" +#: src/tray-monitor/tray-monitor.c:463 +#, c-format +msgid "Disconnecting from Client %s:%d\n" msgstr "" -#: src/dird/ua_update.c:397 -msgid "Recycle" +#: src/tray-monitor/tray-monitor.c:466 +#, c-format +msgid "Disconnecting from Storage %s:%d\n" msgstr "" -#: src/dird/ua_update.c:398 -msgid "InChanger" +#: src/tray-monitor/tray-monitor.c:502 src/tray-monitor/tray-monitor.c:512 +msgid "Bacula Tray Monitor" msgstr "" -#: src/dird/ua_update.c:399 src/dird/ua_update.c:472 -msgid "Slot" +#: src/tray-monitor/tray-monitor.c:503 src/tray-monitor/tray-monitor.c:513 +msgid "" +"Copyright (C) 2004-2005 Kern Sibbald\n" +"Written by Nicolas Boichat\n" msgstr "" -#: src/dird/ua_update.c:401 -msgid "FromPool" +#: src/tray-monitor/tray-monitor.c:505 src/tray-monitor/tray-monitor.c:515 +msgid "Version:" msgstr "" -#: src/dird/ua_update.c:402 -msgid "AllFromPool" +#: src/tray-monitor/tray-monitor.c:583 +#, c-format +msgid "Error, currentitem is not a Client or a Storage..\n" msgstr "" -#: src/dird/ua_update.c:463 +#: src/tray-monitor/tray-monitor.c:656 #, c-format -msgid "Updating Volume \"%s\"\n" +msgid "" +"Current job: %s\n" +"Last job: %s" msgstr "" -#: src/dird/ua_update.c:465 -msgid "Volume Status" +#: src/tray-monitor/tray-monitor.c:668 +#, c-format +msgid " (%d errors)" msgstr "" -#: src/dird/ua_update.c:466 -msgid "Volume Retention Period" +#: src/tray-monitor/tray-monitor.c:671 +#, c-format +msgid " (%d error)" msgstr "" -#: src/dird/ua_update.c:467 -msgid "Volume Use Duration" +#: src/tray-monitor/tray-monitor.c:708 +msgid "No current job." msgstr "" -#: src/dird/ua_update.c:468 -msgid "Maximum Volume Jobs" +#: src/tray-monitor/tray-monitor.c:711 +msgid "No last job." msgstr "" -#: src/dird/ua_update.c:469 -msgid "Maximum Volume Files" +#: src/tray-monitor/tray-monitor.c:719 +msgid "Job status: Created" msgstr "" -#: src/dird/ua_update.c:470 -msgid "Maximum Volume Bytes" +#: src/tray-monitor/tray-monitor.c:724 +msgid "Job status: Running" msgstr "" -#: src/dird/ua_update.c:471 -msgid "Recycle Flag" +#: src/tray-monitor/tray-monitor.c:728 +msgid "Job status: Blocked" msgstr "" -#: src/dird/ua_update.c:473 -msgid "InChanger Flag" +#: src/tray-monitor/tray-monitor.c:733 +msgid "Job status: Terminated" msgstr "" -#: src/dird/ua_update.c:474 -msgid "Volume Files" +#: src/tray-monitor/tray-monitor.c:738 +msgid "Job status: Terminated in error" msgstr "" -#: src/dird/ua_update.c:476 -msgid "Volume from Pool" +#: src/tray-monitor/tray-monitor.c:744 +msgid "Job status: Error" msgstr "" -#: src/dird/ua_update.c:477 -msgid "All Volumes from Pool" +#: src/tray-monitor/tray-monitor.c:748 +msgid "Job status: Fatal error" msgstr "" -#: src/dird/ua_update.c:478 -msgid "Done" +#: src/tray-monitor/tray-monitor.c:753 +msgid "Job status: Verify differences" msgstr "" -#: src/dird/ua_update.c:489 -#, c-format -msgid "Current Volume status is: %s\n" +#: src/tray-monitor/tray-monitor.c:758 +msgid "Job status: Canceled" msgstr "" -#: src/dird/ua_update.c:490 -msgid "Possible Values are:\n" +#: src/tray-monitor/tray-monitor.c:763 +msgid "Job status: Waiting on File daemon" msgstr "" -#: src/dird/ua_update.c:501 -msgid "Choose new Volume Status" +#: src/tray-monitor/tray-monitor.c:768 +msgid "Job status: Waiting on the Storage daemon" msgstr "" -#: src/dird/ua_update.c:507 -#, c-format -msgid "Current retention period is: %s\n" +#: src/tray-monitor/tray-monitor.c:773 +msgid "Job status: Waiting for new media" msgstr "" -#: src/dird/ua_update.c:509 -msgid "Enter Volume Retention period: " +#: src/tray-monitor/tray-monitor.c:778 +msgid "Job status: Waiting for Mount" msgstr "" -#: src/dird/ua_update.c:516 -#, c-format -msgid "Current use duration is: %s\n" +#: src/tray-monitor/tray-monitor.c:783 +msgid "Job status: Waiting for storage resource" msgstr "" -#: src/dird/ua_update.c:518 -msgid "Enter Volume Use Duration: " +#: src/tray-monitor/tray-monitor.c:788 +msgid "Job status: Waiting for job resource" msgstr "" -#: src/dird/ua_update.c:525 -#, c-format -msgid "Current max jobs is: %u\n" +#: src/tray-monitor/tray-monitor.c:793 +msgid "Job status: Waiting for Client resource" msgstr "" -#: src/dird/ua_update.c:526 -msgid "Enter new Maximum Jobs: " +#: src/tray-monitor/tray-monitor.c:798 +msgid "Job status: Waiting for maximum jobs" msgstr "" -#: src/dird/ua_update.c:533 -#, c-format -msgid "Current max files is: %u\n" +#: src/tray-monitor/tray-monitor.c:803 +msgid "Job status: Waiting for start time" msgstr "" -#: src/dird/ua_update.c:534 -msgid "Enter new Maximum Files: " +#: src/tray-monitor/tray-monitor.c:808 +msgid "Job status: Waiting for higher priority jobs to finish" msgstr "" -#: src/dird/ua_update.c:541 +#: src/tray-monitor/tray-monitor.c:813 #, c-format -msgid "Current value is: %s\n" +msgid "Unknown job status %c." msgstr "" -#: src/dird/ua_update.c:542 -msgid "Enter new Maximum Bytes: " +#: src/tray-monitor/tray-monitor.c:814 +#, c-format +msgid "Job status: Unknown(%c)" msgstr "" -#: src/dird/ua_update.c:550 +#: src/tray-monitor/tray-monitor.c:821 #, c-format -msgid "Current recycle flag is: %s\n" +msgid "Bad scan : '%s' %d\n" msgstr "" -#: src/dird/ua_update.c:552 -msgid "Enter new Recycle status: " +#: src/tray-monitor/tray-monitor.c:859 +#, c-format +msgid "Connecting to Director %s:%d" msgstr "" -#: src/dird/ua_update.c:559 +#: src/tray-monitor/tray-monitor.c:865 #, c-format -msgid "Current Slot is: %d\n" +msgid "Connecting to Client %s:%d\n" msgstr "" -#: src/dird/ua_update.c:560 -msgid "Enter new Slot: " +#: src/tray-monitor/tray-monitor.c:866 +#, c-format +msgid "Connecting to Client %s:%d" msgstr "" -#: src/dird/ua_update.c:567 +#: src/tray-monitor/tray-monitor.c:872 #, c-format -msgid "Current InChanger flag is: %d\n" +msgid "Connecting to Storage %s:%d\n" msgstr "" -#: src/dird/ua_update.c:568 -msgid "Set InChanger flag? yes/no: " +#: src/tray-monitor/tray-monitor.c:873 +#, c-format +msgid "Connecting to Storage %s:%d" msgstr "" -#: src/dird/ua_update.c:579 +#: src/tray-monitor/tray-monitor.c:878 src/tray-monitor/tray-monitor.c:916 #, c-format -msgid "New InChanger flag is: %d\n" +msgid "Error, currentitem is not a Client, a Storage or a Director..\n" msgstr "" -#: src/dird/ua_update.c:586 -msgid "" -"Warning changing Volume Files can result\n" -"in loss of data on your Volume\n" -"\n" +#: src/tray-monitor/tray-monitor.c:884 +msgid "Cannot connect to daemon.\n" msgstr "" -#: src/dird/ua_update.c:588 -#, c-format -msgid "Current Volume Files is: %u\n" +#: src/tray-monitor/tray-monitor.c:885 +msgid "Cannot connect to daemon." msgstr "" -#: src/dird/ua_update.c:589 -msgid "Enter new number of Files for Volume: " +#: src/tray-monitor/tray-monitor.c:897 +#, c-format +msgid "Authentication error : %s" msgstr "" -#: src/dird/ua_update.c:594 -msgid "Normally, you should only increase Volume Files by one!\n" +#: src/tray-monitor/tray-monitor.c:904 +msgid "Opened connection with Director daemon.\n" msgstr "" -#: src/dird/ua_update.c:595 -msgid "Continue? (yes/no): " +#: src/tray-monitor/tray-monitor.c:905 +msgid "Opened connection with Director daemon." msgstr "" -#: src/dird/ua_update.c:605 -#, c-format -msgid "New Volume Files is: %u\n" +#: src/tray-monitor/tray-monitor.c:908 +msgid "Opened connection with File daemon.\n" msgstr "" -#: src/dird/ua_update.c:617 -#, c-format -msgid "Current Pool is: %s\n" +#: src/tray-monitor/tray-monitor.c:909 +msgid "Opened connection with File daemon." msgstr "" -#: src/dird/ua_update.c:618 -msgid "Enter new Pool name: " +#: src/tray-monitor/tray-monitor.c:912 +msgid "Opened connection with Storage daemon.\n" msgstr "" -#: src/dird/ua_update.c:631 -msgid "Selection terminated.\n" +#: src/tray-monitor/tray-monitor.c:913 +msgid "Opened connection with Storage daemon." msgstr "" -#: src/dird/ua_update.c:664 -#, c-format -msgid "db_update_pool_record returned %d. ERR=%s\n" +#: src/tray-monitor/tray-monitor.c:948 +msgid "<< Error: BNET_PROMPT signal received. >>\n" msgstr "" -#: src/dird/ua_update.c:671 -msgid "Pool DB record updated from resource.\n" +#: src/tray-monitor/tray-monitor.c:953 src/wx-console/console_thread.cpp:465 +msgid "<< Heartbeat signal received, answered. >>\n" msgstr "" -#: src/dird/ua_dotcmds.c:131 -msgid "The Director will segment fault.\n" +#: src/tray-monitor/tray-monitor.c:957 +#, c-format +msgid "<< Unexpected signal received : %s >>\n" msgstr "" -#: src/dird/ua_purge.c:177 -msgid "" -"\n" -"This command is 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" -"for retention periods. Normally you should use the\n" -"PRUNE command, which respects retention periods.\n" +#: src/tray-monitor/tray-monitor.c:962 +msgid "\n" msgstr "" -#: src/dird/ua_purge.c:237 -msgid "Choose item to purge" +#: src/tray-monitor/tray-monitor.c:966 +msgid "Error : BNET_HARDEOF or BNET_ERROR" msgstr "" -#: src/dird/ua_purge.c:282 -#, c-format -msgid "Begin purging files for Client \"%s\"\n" +#: src/tray-monitor/tray-monitor.c:972 +msgid "\n" msgstr "" -#: src/dird/ua_purge.c:294 -#, c-format -msgid "No Files found for client %s to purge from %s catalog.\n" +#: src/tray-monitor/tray-monitor.c:976 +msgid "Error : Connection closed." msgstr "" -#: src/dird/ua_purge.c:325 +#: src/tray-monitor/tray_conf.c:161 #, c-format -msgid "%d Files for client \"%s\" purged from %s catalog.\n" +msgid "Monitor: name=%s FDtimeout=%s SDtimeout=%s\n" msgstr "" -#: src/dird/ua_purge.c:361 +#: src/tray-monitor/tray_conf.c:167 #, c-format -msgid "Begin purging jobs from Client \"%s\"\n" +msgid "Director: name=%s address=%s FDport=%d\n" msgstr "" -#: src/dird/ua_purge.c:372 +#: src/tray-monitor/tray_conf.c:171 #, c-format -msgid "No Jobs found for client %s to purge from %s catalog.\n" +msgid "Client: name=%s address=%s FDport=%d\n" msgstr "" -#: src/dird/ua_purge.c:416 +#: src/tray-monitor/tray_conf.c:175 #, c-format -msgid "%d Jobs for client %s purged from %s catalog.\n" +msgid "Storage: name=%s address=%s SDport=%d\n" msgstr "" -#: src/dird/ua_purge.c:467 -#, c-format -msgid "" -"Volume \"%s\" has VolStatus \"%s\" and cannot be purged.\n" -"The VolStatus must be: Append, Full, Used, or Error to be purged.\n" +#: src/wx-console/authenticate.c:129 +msgid "Bad response to Hello command: ERR=" msgstr "" -#: src/dird/ua_purge.c:540 +#: src/baconfig.h:55 #, c-format -msgid "%d File%s on Volume \"%s\" purged from catalog.\n" +msgid "Failed ASSERT: %s\n" msgstr "" -#: src/dird/ua_purge.c:554 -#, c-format -msgid "" -"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" +#: src/baconfig.h:62 +msgid "*None*" msgstr "" -#: src/dird/ua_purge.c:586 -#, c-format -msgid "Cannot purge Volume with VolStatus=%s\n" +#: src/filed/win32/winmain.cpp:228 src/filed/win32/winmain.cpp:236 +msgid "Bacula Usage" msgstr "" -#: src/dird/ua_output.c:64 src/dird/ua_output.c:88 -msgid "ON or OFF keyword missing.\n" +#: src/filed/win32/winmain.cpp:233 +msgid "Bad Command Line Options" msgstr "" -#: src/dird/ua_output.c:176 -msgid "Keywords for the show command are:\n" +#: src/filed/win32/winmain.cpp:326 +msgid "Another instance of Bacula is already running" msgstr "" -#: src/dird/ua_output.c:182 -#, c-format -msgid "%s resource %s not found.\n" +#: src/filed/win32/winservice.cpp:131 src/filed/win32/winservice.cpp:145 +msgid "No existing instance of Bacula could be contacted" msgstr "" -#: src/dird/ua_output.c:185 -#, c-format -msgid "Resource %s not found\n" +#: src/filed/win32/winservice.cpp:218 +msgid "KERNEL32.DLL not found: Bacula service not started" msgstr "" -#: src/dird/ua_output.c:251 -msgid "Hey! DB is NULL\n" +#: src/filed/win32/winservice.cpp:228 +msgid "Registry service not found: Bacula service not started" msgstr "" -#: src/dird/ua_output.c:365 -#, c-format -msgid "Jobid %d used %d Volume(s): %s\n" +#: src/filed/win32/winservice.cpp:230 +msgid "Registry service not found" msgstr "" -#: src/dird/ua_output.c:383 -msgid "No Pool specified.\n" +#: src/filed/win32/winservice.cpp:260 +msgid "StartServiceCtrlDispatcher failed." msgstr "" -#: src/dird/ua_output.c:404 -#, c-format -msgid "Pool: %s\n" +#: src/filed/win32/winservice.cpp:278 +msgid "RegisterServiceCtlHandler failed" msgstr "" -#: src/dird/ua_output.c:420 src/dird/ua_status.c:452 -msgid "Ignoring illegal value for days.\n" +#: src/filed/win32/winservice.cpp:279 +msgid "Contact Register Service Handler failure" msgstr "" -#: src/dird/ua_output.c:429 -#, c-format -msgid "Unknown list keyword: %s\n" +#: src/filed/win32/winservice.cpp:295 +msgid "ReportStatus STOPPED failed 1" msgstr "" -#: src/dird/ua_output.c:455 -#, c-format -msgid "%s is not a job name.\n" +#: src/filed/win32/winservice.cpp:318 +msgid "Report Service failure" msgstr "" -#: src/dird/ua_output.c:476 -#, c-format -msgid "Could not find next Volume for Job %s (%s, %s).\n" +#: src/filed/win32/winservice.cpp:355 +msgid "Unable to install Bacula service" msgstr "" -#: src/dird/ua_output.c:480 -#, c-format -msgid "The next Volume to be used by Job \"%s\" (%s, %s) will be %s\n" +#: src/filed/win32/winservice.cpp:373 +msgid "Service command length too long" msgstr "" -#: src/dird/ua_output.c:490 -#, c-format -msgid "Could not find next Volume for Job %s.\n" +#: src/filed/win32/winservice.cpp:374 +msgid "Service command length too long. Service not registered." msgstr "" -#: src/dird/ua_output.c:679 -msgid "You have no messages.\n" +#: src/filed/win32/winservice.cpp:389 +msgid "Cannot write System Registry" msgstr "" -#: src/dird/ua_status.c:126 -msgid "Status available for:\n" +#: src/filed/win32/winservice.cpp:390 +msgid "" +"The System Registry could not be updated - the Bacula service was not " +"installed" msgstr "" -#: src/dird/ua_status.c:132 -msgid "Select daemon type for status" +#: src/filed/win32/winservice.cpp:397 +msgid "Cannot add Bacula key to System Registry" msgstr "" -#: src/dird/ua_status.c:245 -#, c-format -msgid "%s Version: %s (%s) %s %s %s\n" +#: src/filed/win32/winservice.cpp:398 src/filed/win32/winservice.cpp:449 +msgid "The Bacula service could not be installed" msgstr "" -#: src/dird/ua_status.c:289 -#, c-format +#: src/filed/win32/winservice.cpp:406 msgid "" -"\n" -"Failed to connect to Storage daemon %s.\n" -"====\n" +"The Bacula File service was successfully installed.\n" +"The service may be started by double clicking on the\n" +"Bacula \"Start\" icon and will be automatically\n" +"be run the next time this machine is rebooted. " msgstr "" -#: src/dird/ua_status.c:327 -#, c-format +#: src/filed/win32/winservice.cpp:424 msgid "" -"Failed to connect to Client %s.\n" -"====\n" -msgstr "" - -#: src/dird/ua_status.c:335 -msgid "Connected to file daemon\n" +"The Service Control Manager could not be contacted - the Bacula service was " +"not installed" msgstr "" -#: src/dird/ua_status.c:350 +#: src/filed/win32/winservice.cpp:455 msgid "" -"\n" -"Scheduled Jobs:\n" +"Provides file backup and restore services. Bacula -- the network backup " +"solution." msgstr "" -#: src/dird/ua_status.c:351 +#: src/filed/win32/winservice.cpp:462 msgid "" -"Level Type Pri Scheduled Name Volume\n" +"The Bacula File service was successfully installed.\n" +"The service may be started from the Control Panel and will\n" +"automatically be run the next time this machine is rebooted." msgstr "" -#: src/dird/ua_status.c:352 -msgid "===================================================================================\n" +#: src/filed/win32/winservice.cpp:471 +msgid "" +"Unknown Windows operating system.\n" +"Cannot install Bacula service.\n" msgstr "" -#: src/dird/ua_status.c:399 -#, c-format -msgid "%-14s %-8s %3d %-18s %-18s %s\n" +#: src/filed/win32/winservice.cpp:496 +msgid "" +"Could not find registry entry.\n" +"Service probably not registerd - the Bacula service was not removed" msgstr "" -#: src/dird/ua_status.c:491 -msgid "No Scheduled Jobs.\n" +#: src/filed/win32/winservice.cpp:501 +msgid "" +"Could not delete Registry key.\n" +"The Bacula service could not be removed" msgstr "" -#: src/dird/ua_status.c:516 -#, c-format -msgid "Console connected at %s\n" +#: src/filed/win32/winservice.cpp:511 +msgid "Bacula could not be contacted, probably not running" msgstr "" -#: src/dird/ua_status.c:526 -msgid "" -"No Jobs running.\n" -"====\n" +#: src/filed/win32/winservice.cpp:517 src/filed/win32/winservice.cpp:553 +msgid "The Bacula service has been removed" msgstr "" -#: src/dird/ua_status.c:531 -msgid " JobId Level Name Status\n" +#: src/filed/win32/winservice.cpp:547 +msgid "The Bacula service could not be stopped" msgstr "" -#: src/dird/ua_status.c:540 -msgid "is waiting execution" +#: src/filed/win32/winservice.cpp:555 +msgid "The Bacula service could not be removed" msgstr "" -#: src/dird/ua_status.c:543 -msgid "is running" +#: src/filed/win32/winservice.cpp:560 +msgid "The Bacula service could not be found" msgstr "" -#: src/dird/ua_status.c:546 -msgid "is blocked" +#: src/filed/win32/winservice.cpp:565 +msgid "The SCM could not be contacted - the Bacula service was not removed" msgstr "" -#: src/dird/ua_status.c:549 -msgid "has terminated" +#: src/filed/win32/winservice.cpp:629 +msgid "SetServiceStatus failed" msgstr "" -#: src/dird/ua_status.c:552 -msgid "has erred" +#: src/filed/win32/winservice.cpp:657 +#, c-format +msgid "" +"\n" +"\n" +"%s error: %ld at %s:%d" msgstr "" -#: src/dird/ua_status.c:555 -msgid "has errors" +#: src/filed/win32/winservice.cpp:732 +#, c-format +msgid "Locked by: %s, duration: %ld seconds\n" msgstr "" -#: src/dird/ua_status.c:558 -msgid "has a fatal error" +#: src/filed/win32/winservice.cpp:736 +#, c-format +msgid "No longer locked\n" msgstr "" -#: src/dird/ua_status.c:561 -msgid "has verify differences" +#: src/filed/win32/winservice.cpp:740 +msgid "Could not lock database" msgstr "" -#: src/dird/ua_status.c:564 -msgid "has been canceled" +#: src/wx-console/console_thread.cpp:101 +#, 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 "" -#: src/dird/ua_status.c:568 -#, c-format -msgid "is waiting on Client %s" +#: src/wx-console/console_thread.cpp:108 +msgid "" +"No Director resource defined in config file.\n" +"Without that I don't how to speak to the Director :-(\n" msgstr "" -#: src/dird/ua_status.c:574 +#: src/wx-console/console_thread.cpp:127 #, c-format -msgid "is waiting on Storage %s" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in config file.\n" msgstr "" -#: src/dird/ua_status.c:579 -msgid "is waiting on max Storage jobs" +#: src/wx-console/console_thread.cpp:148 +msgid "Error while initializing windows sockets...\n" msgstr "" -#: src/dird/ua_status.c:582 -msgid "is waiting on max Client jobs" +#: src/wx-console/console_thread.cpp:163 +msgid "Error while cleaning up windows sockets...\n" msgstr "" -#: src/dird/ua_status.c:585 -msgid "is waiting on max Job jobs" +#: src/wx-console/console_thread.cpp:201 +msgid "Error while initializing library." msgstr "" -#: src/dird/ua_status.c:588 -msgid "is waiting on max total jobs" +#: src/wx-console/console_thread.cpp:227 +msgid "Cryptographic library initialization failed.\n" msgstr "" -#: src/dird/ua_status.c:591 -msgid "is waiting for its start time" +#: src/wx-console/console_thread.cpp:231 +msgid "Please correct configuration file.\n" msgstr "" -#: src/dird/ua_status.c:594 -msgid "is waiting for higher priority jobs to finish" +#: src/wx-console/console_thread.cpp:273 +msgid "Error : Library not initialized\n" msgstr "" -#: src/dird/ua_status.c:599 -#, c-format -msgid "is in unknown state %c" +#: src/wx-console/console_thread.cpp:284 +msgid "Error : No configuration file loaded\n" msgstr "" -#: src/dird/ua_status.c:613 -msgid "is waiting for a mount request" +#: src/wx-console/console_thread.cpp:294 +msgid "Connecting...\n" msgstr "" -#: src/dird/ua_status.c:620 -msgid "is waiting for an appendable Volume" +#: src/wx-console/console_thread.cpp:310 +msgid "Error : No director defined in config file.\n" msgstr "" -#: src/dird/ua_status.c:627 -#, c-format -msgid "is waiting for Client %s to connect to Storage %s" +#: src/wx-console/console_thread.cpp:322 +msgid "Multiple directors found in your config file.\n" msgstr "" -#: src/dird/ua_status.c:643 +#: src/wx-console/console_thread.cpp:331 #, c-format -msgid "%6d %-6s %-20s %s\n" +msgid "Please choose a director (1-%d): " msgstr "" -#: src/dird/ua_status.c:671 -msgid " JobId Level Files Bytes Status Finished Name \n" +#: src/wx-console/console_thread.cpp:403 +msgid "Failed to connect to the director\n" msgstr "" -#: src/dird/ua_status.c:672 -msgid "========================================================================\n" +#: src/wx-console/console_thread.cpp:413 +msgid "Connected\n" msgstr "" -#: src/baconfig.h:59 -#, c-format -msgid "Failed ASSERT: %s\n" +#: src/wx-console/console_thread.cpp:470 +msgid "<< Unexpected signal received : " msgstr "" -#: src/baconfig.h:66 -msgid "*None*" +#: src/wx-console/console_thread.cpp:490 +msgid "Connection terminated\n" msgstr "" #: src/wx-console/main.cpp:101 @@ -14289,6 +13868,10 @@ msgstr "" msgid "Error while saving" msgstr "" +#: src/wx-console/wxbconfigpanel.cpp:184 +msgid "Apply" +msgstr "" + #: src/wx-console/wxbhistorytextctrl.cpp:61 #: src/wx-console/wxbhistorytextctrl.cpp:132 #: src/wx-console/wxbmainframe.cpp:272 @@ -14303,10 +13886,6 @@ msgstr "" msgid "Possible completions: " msgstr "" -#: src/wx-console/wxbconfigpanel.cpp:184 -msgid "Apply" -msgstr "" - #: src/wx-console/wxbmainframe.cpp:227 msgid "&About...\tF1" msgstr "" @@ -14424,161 +14003,79 @@ msgid "Configuration file read successfully" msgstr "" #: src/wx-console/wxbmainframe.cpp:454 -#, c-format -msgid "Using this configuration file: %s\n" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:459 -msgid "Connecting to the director..." -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:474 -msgid "Failed to unregister a data parser !" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:482 -msgid "Quitting.\n" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:497 -msgid "" -"Welcome to Bacula wx-console.\n" -"Written by Nicolas Boichat \n" -"(C) 2005 Kern Sibbald\n" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:499 -msgid "About Bacula wx-console" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:505 -msgid "Please choose your default configuration file" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:509 -msgid "Use this configuration file as default?" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:510 -msgid "Configuration file" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:581 -msgid "Console thread terminated." -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:589 -msgid "Connection to the director lost. Quit program?" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:590 -msgid "Connection lost" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:606 -msgid "Connected to the director." -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:629 -msgid "Reconnect" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:630 -msgid "Reconnect to the director" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:644 -msgid "Disconnected of the director." -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:663 src/wx-console/wxbrestorepanel.cpp:689 -msgid "Unexpected question has been received.\n" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:686 src/wx-console/wxbmainframe.cpp:703 -msgid "wx-console: unexpected director's question." -msgstr "" - -#: src/wx-console/console_thread.cpp:101 -#, 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" +#, c-format +msgid "Using this configuration file: %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:108 -msgid "" -"No Director resource defined in config file.\n" -"Without that I don't how to speak to the Director :-(\n" +#: src/wx-console/wxbmainframe.cpp:459 +msgid "Connecting to the director..." msgstr "" -#: src/wx-console/console_thread.cpp:127 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in config file.\n" +#: src/wx-console/wxbmainframe.cpp:474 +msgid "Failed to unregister a data parser !" msgstr "" -#: src/wx-console/console_thread.cpp:148 -msgid "Error while initializing windows sockets...\n" +#: src/wx-console/wxbmainframe.cpp:482 +msgid "Quitting.\n" msgstr "" -#: src/wx-console/console_thread.cpp:163 -msgid "Error while cleaning up windows sockets...\n" +#: src/wx-console/wxbmainframe.cpp:497 +msgid "" +"Welcome to Bacula wx-console.\n" +"Written by Nicolas Boichat \n" +"(C) 2005 Kern Sibbald\n" msgstr "" -#: src/wx-console/console_thread.cpp:201 -msgid "Error while initializing library." +#: src/wx-console/wxbmainframe.cpp:499 +msgid "About Bacula wx-console" msgstr "" -#: src/wx-console/console_thread.cpp:227 -msgid "Cryptographic library initialization failed.\n" +#: src/wx-console/wxbmainframe.cpp:505 +msgid "Please choose your default configuration file" msgstr "" -#: src/wx-console/console_thread.cpp:231 -msgid "Please correct configuration file.\n" +#: src/wx-console/wxbmainframe.cpp:509 +msgid "Use this configuration file as default?" msgstr "" -#: src/wx-console/console_thread.cpp:273 -msgid "Error : Library not initialized\n" +#: src/wx-console/wxbmainframe.cpp:510 +msgid "Configuration file" msgstr "" -#: src/wx-console/console_thread.cpp:284 -msgid "Error : No configuration file loaded\n" +#: src/wx-console/wxbmainframe.cpp:581 +msgid "Console thread terminated." msgstr "" -#: src/wx-console/console_thread.cpp:294 -msgid "Connecting...\n" +#: src/wx-console/wxbmainframe.cpp:589 +msgid "Connection to the director lost. Quit program?" msgstr "" -#: src/wx-console/console_thread.cpp:310 -msgid "Error : No director defined in config file.\n" +#: src/wx-console/wxbmainframe.cpp:590 +msgid "Connection lost" msgstr "" -#: src/wx-console/console_thread.cpp:322 -msgid "Multiple directors found in your config file.\n" +#: src/wx-console/wxbmainframe.cpp:606 +msgid "Connected to the director." msgstr "" -#: src/wx-console/console_thread.cpp:331 -#, c-format -msgid "Please choose a director (1-%d): " +#: src/wx-console/wxbmainframe.cpp:629 +msgid "Reconnect" msgstr "" -#: src/wx-console/console_thread.cpp:403 -msgid "Failed to connect to the director\n" +#: src/wx-console/wxbmainframe.cpp:630 +msgid "Reconnect to the director" msgstr "" -#: src/wx-console/console_thread.cpp:413 -msgid "Connected\n" +#: src/wx-console/wxbmainframe.cpp:644 +msgid "Disconnected of the director." msgstr "" -#: src/wx-console/console_thread.cpp:470 -msgid "<< Unexpected signal received : " +#: src/wx-console/wxbmainframe.cpp:663 src/wx-console/wxbrestorepanel.cpp:689 +msgid "Unexpected question has been received.\n" msgstr "" -#: src/wx-console/console_thread.cpp:490 -msgid "Connection terminated\n" +#: src/wx-console/wxbmainframe.cpp:686 src/wx-console/wxbmainframe.cpp:703 +msgid "wx-console: unexpected director's question." msgstr "" #: src/wx-console/wxbrestorepanel.cpp:216 @@ -14591,6 +14088,11 @@ msgstr "" msgid "Cancel restore" msgstr "" +#: src/wx-console/wxbrestorepanel.cpp:245 +#: src/wx-console/wxbrestorepanel.cpp:299 +msgid "Add" +msgstr "" + #: src/wx-console/wxbrestorepanel.cpp:247 #: src/wx-console/wxbrestorepanel.cpp:301 msgid "Remove" @@ -14960,176 +14462,3 @@ msgstr "" #: src/wx-console/wxbrestorepanel.cpp:1976 msgid "Restoring..." msgstr "" - -#: src/filed/win32/winservice.cpp:131 src/filed/win32/winservice.cpp:145 -msgid "No existing instance of Bacula could be contacted" -msgstr "" - -#: src/filed/win32/winservice.cpp:218 -msgid "KERNEL32.DLL not found: Bacula service not started" -msgstr "" - -#: src/filed/win32/winservice.cpp:228 -msgid "Registry service not found: Bacula service not started" -msgstr "" - -#: src/filed/win32/winservice.cpp:230 -msgid "Registry service not found" -msgstr "" - -#: src/filed/win32/winservice.cpp:260 -msgid "StartServiceCtrlDispatcher failed." -msgstr "" - -#: src/filed/win32/winservice.cpp:278 -msgid "RegisterServiceCtlHandler failed" -msgstr "" - -#: src/filed/win32/winservice.cpp:279 -msgid "Contact Register Service Handler failure" -msgstr "" - -#: src/filed/win32/winservice.cpp:295 -msgid "ReportStatus STOPPED failed 1" -msgstr "" - -#: src/filed/win32/winservice.cpp:318 -msgid "Report Service failure" -msgstr "" - -#: src/filed/win32/winservice.cpp:355 -msgid "Unable to install Bacula service" -msgstr "" - -#: src/filed/win32/winservice.cpp:373 -msgid "Service command length too long" -msgstr "" - -#: src/filed/win32/winservice.cpp:374 -msgid "Service command length too long. Service not registered." -msgstr "" - -#: src/filed/win32/winservice.cpp:389 -msgid "Cannot write System Registry" -msgstr "" - -#: src/filed/win32/winservice.cpp:390 -msgid "" -"The System Registry could not be updated - the Bacula service was not " -"installed" -msgstr "" - -#: src/filed/win32/winservice.cpp:397 -msgid "Cannot add Bacula key to System Registry" -msgstr "" - -#: src/filed/win32/winservice.cpp:398 src/filed/win32/winservice.cpp:449 -msgid "The Bacula service could not be installed" -msgstr "" - -#: src/filed/win32/winservice.cpp:406 -msgid "" -"The Bacula File service was successfully installed.\n" -"The service may be started by double clicking on the\n" -"Bacula \"Start\" icon and will be automatically\n" -"be run the next time this machine is rebooted. " -msgstr "" - -#: src/filed/win32/winservice.cpp:424 -msgid "" -"The Service Control Manager could not be contacted - the Bacula service was " -"not installed" -msgstr "" - -#: src/filed/win32/winservice.cpp:455 -msgid "" -"Provides file backup and restore services. Bacula -- the network backup " -"solution." -msgstr "" - -#: src/filed/win32/winservice.cpp:462 -msgid "" -"The Bacula File service was successfully installed.\n" -"The service may be started from the Control Panel and will\n" -"automatically be run the next time this machine is rebooted." -msgstr "" - -#: src/filed/win32/winservice.cpp:471 -msgid "" -"Unknown Windows operating system.\n" -"Cannot install Bacula service.\n" -msgstr "" - -#: src/filed/win32/winservice.cpp:496 -msgid "" -"Could not find registry entry.\n" -"Service probably not registerd - the Bacula service was not removed" -msgstr "" - -#: src/filed/win32/winservice.cpp:501 -msgid "" -"Could not delete Registry key.\n" -"The Bacula service could not be removed" -msgstr "" - -#: src/filed/win32/winservice.cpp:511 -msgid "Bacula could not be contacted, probably not running" -msgstr "" - -#: src/filed/win32/winservice.cpp:517 src/filed/win32/winservice.cpp:553 -msgid "The Bacula service has been removed" -msgstr "" - -#: src/filed/win32/winservice.cpp:547 -msgid "The Bacula service could not be stopped" -msgstr "" - -#: src/filed/win32/winservice.cpp:555 -msgid "The Bacula service could not be removed" -msgstr "" - -#: src/filed/win32/winservice.cpp:560 -msgid "The Bacula service could not be found" -msgstr "" - -#: src/filed/win32/winservice.cpp:565 -msgid "The SCM could not be contacted - the Bacula service was not removed" -msgstr "" - -#: src/filed/win32/winservice.cpp:629 -msgid "SetServiceStatus failed" -msgstr "" - -#: src/filed/win32/winservice.cpp:657 -#, c-format -msgid "" -"\n" -"\n" -"%s error: %ld at %s:%d" -msgstr "" - -#: src/filed/win32/winservice.cpp:732 -#, c-format -msgid "Locked by: %s, duration: %ld seconds\n" -msgstr "" - -#: src/filed/win32/winservice.cpp:736 -#, c-format -msgid "No longer locked\n" -msgstr "" - -#: src/filed/win32/winservice.cpp:740 -msgid "Could not lock database" -msgstr "" - -#: src/filed/win32/winmain.cpp:228 src/filed/win32/winmain.cpp:236 -msgid "Bacula Usage" -msgstr "" - -#: src/filed/win32/winmain.cpp:233 -msgid "Bad Command Line Options" -msgstr "" - -#: src/filed/win32/winmain.cpp:326 -msgid "Another instance of Bacula is already running" -msgstr "" diff --git a/bacula/po/de.gmo b/bacula/po/de.gmo index 8148f4a5c551b15e099f38163df4da307dc4127f..2b0c096353355305b568c6de8daaa50f5bcf598a 100644 GIT binary patch delta 13 Ucmcc5e4ly3W+p>}ja#)C0Vg{I`~Uy| delta 13 Ucmcc5e4ly3W+nskja#)C0Vh}m0ssI2 diff --git a/bacula/po/de.po b/bacula/po/de.po index 1cfa8e0c11..0651566e5e 100644 --- a/bacula/po/de.po +++ b/bacula/po/de.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Bacula 1.38\n" "Report-Msgid-Bugs-To: bacula-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2006-02-26 13:07+0100\n" +"POT-Creation-Date: 2006-02-26 13:10+0100\n" "PO-Revision-Date: 2005-08-11 14:05+0200\n" "Last-Translator: \n" @@ -17,6954 +17,6831 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/stored/block.c:79 -#, c-format -msgid "" -"Dump block %s %x: size=%d BlkNum=%d\n" -" Hdrcksum=%x cksum=%x\n" +#: src/cats/bdb.c:128 +msgid "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" msgstr "" -#: src/stored/block.c:92 -#, c-format -msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d p=%x\n" +#: src/cats/bdb.c:129 +msgid "WARNING!!!! The Internal Database is NOT OPERATIONAL!\n" msgstr "" -#: src/stored/block.c:148 +#: src/cats/bdb.c:130 +msgid "You should use SQLite, PostgreSQL, or MySQL\n" +msgstr "" + +#: src/cats/bdb.c:152 src/cats/mysql.c:124 src/cats/postgresql.c:128 +#: src/cats/sqlite.c:122 #, c-format -msgid "%d block read errors not printed.\n" +msgid "Unable to initialize DB lock. ERR=%s\n" msgstr "" -#: src/stored/block.c:236 src/stored/block.c:252 src/stored/block.c:262 +#: src/cats/bdb.c:162 #, c-format -msgid "" -"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " -"discarded.\n" +msgid "Unable to open Catalog DB control file %s: ERR=%s\n" msgstr "" -#: src/stored/block.c:276 +#: src/cats/bdb.c:217 #, c-format -msgid "" -"Volume data error at %u:%u! Block length %u is insane (too large), probably " -"due to a bad archive.\n" +msgid "Error reading catalog DB control file. ERR=%s\n" msgstr "" -#: src/stored/block.c:302 +#: src/cats/bdb.c:220 #, c-format msgid "" -"Volume data error at %u:%u!\n" -"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" +"Error, catalog DB control file wrong version. Wanted %d, got %d\n" +"Please reinitialize the working directory.\n" msgstr "" -#: src/stored/block.c:354 src/stored/block.c:677 src/stored/block.c:746 -#: src/stored/acquire.c:437 +#: src/cats/bdb_update.c:83 src/cats/bdb_update.c:114 #, c-format -msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" +msgid "Error updating DB Job file. ERR=%s\n" msgstr "" -#: src/stored/block.c:410 -msgid "Cannot write block. Device at EOM.\n" +#: src/cats/bdb_update.c:153 src/cats/bdb_update.c:189 +#, c-format +msgid "Error updating DB Media file. ERR=%s\n" msgstr "" -#: src/stored/block.c:415 -msgid "Attempt to write on read-only Volume.\n" +#: src/cats/mysql.c:60 +msgid "A user name for MySQL must be supplied.\n" msgstr "" -#: src/stored/block.c:467 +#: src/cats/mysql.c:161 #, c-format -msgid "User defined maximum volume capacity %s exceeded on device %s.\n" +msgid "" +"Unable to connect to MySQL server. \n" +"Database=%s User=%s\n" +"It is probably not running or your password is incorrect.\n" msgstr "" -#: src/stored/block.c:482 +#: src/cats/mysql.c:320 src/cats/postgresql.c:264 src/cats/sqlite.c:323 #, c-format -msgid "Unable to write EOF. ERR=%s\n" +msgid "Query failed: %s: ERR=%s\n" msgstr "" -#: src/stored/block.c:508 src/stored/block.c:519 -msgid "Write block header zeroed.\n" +#: src/cats/postgresql.c:62 +msgid "A user name for PostgreSQL must be supplied.\n" msgstr "" -#: src/stored/block.c:537 +#: src/cats/postgresql.c:165 #, c-format -msgid "Write error at %u:%u on device %s. ERR=%s.\n" +msgid "" +"Unable to connect to PostgreSQL server.\n" +"Database=%s User=%s\n" +"It is probably not running or your password is incorrect.\n" msgstr "" -#: src/stored/block.c:544 +#: src/cats/postgresql.c:506 #, c-format -msgid "End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n" +msgid "error fetching currval: %s\n" msgstr "" -#: src/stored/block.c:619 src/stored/block.c:625 +#: src/cats/sql.c:96 #, c-format -msgid "Backspace file at EOT failed. ERR=%s\n" +msgid "" +"query %s failed:\n" +"%s\n" msgstr "" -#: src/stored/block.c:632 +#: src/cats/sql.c:118 #, c-format -msgid "Backspace record at EOT failed. ERR=%s\n" +msgid "" +"insert %s failed:\n" +"%s\n" msgstr "" -#: src/stored/block.c:649 +#: src/cats/sql.c:132 #, c-format -msgid "Re-read last block at EOT failed. ERR=%s" +msgid "Insertion problem: affected_rows=%s\n" msgstr "" -#: src/stored/block.c:653 -msgid "Re-read of last block succeeded.\n" +#: src/cats/sql.c:152 +#, c-format +msgid "" +"update %s failed:\n" +"%s\n" msgstr "" -#: src/stored/block.c:656 +#: src/cats/sql.c:162 #, c-format -msgid "Re-read of last block failed. Last block=%u Current block=%u.\n" +msgid "Update problem: affected_rows=%s\n" msgstr "" -#: src/stored/block.c:685 +#: src/cats/sql.c:183 #, c-format msgid "" -"Error writing final EOF to tape. This Volume may not be readable.\n" -"%s" +"delete %s failed:\n" +"%s\n" msgstr "" -#: src/stored/block.c:795 src/stored/dvd.c:694 +#: src/cats/sql.c:209 src/cats/sql.c:216 src/cats/sql_create.c:773 +#: src/cats/sql_get.c:180 src/cats/sql_get.c:231 src/cats/sql_get.c:564 +#: src/cats/sql_get.c:639 src/cats/sql_get.c:866 #, c-format -msgid "" -"Error while writing, current part number is less than the total number of " -"parts (%d/%d, device=%s)\n" +msgid "error fetching row: %s\n" msgstr "" -#: src/stored/block.c:803 src/stored/block.c:913 +#: src/cats/sql.c:326 src/dird/catreq.c:369 src/dird/catreq.c:401 +#: src/dird/catreq.c:426 #, c-format -msgid "Unable to open device next part %s: ERR=%s\n" +msgid "Attribute create error. %s" msgstr "" -#: src/stored/block.c:821 +#: src/cats/sql.c:407 #, 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 "Path length is zero. File=%s\n" msgstr "" -#: src/stored/block.c:834 -#, c-format -msgid "" -"End of Volume \"%s\" at %u:%u on device %s (part_size=%s, free_space=%s, " -"free_space_errno=%d).\n" +#: src/cats/sql.c:451 +msgid "No results to list.\n" msgstr "" -#: src/stored/block.c:888 +#: src/cats/sql_create.c:86 #, c-format -msgid "Block buffer size looping problem on device %s\n" +msgid "Create DB Job record %s failed. ERR=%s\n" msgstr "" -#: src/stored/block.c:939 +#: src/cats/sql_create.c:132 #, c-format -msgid "Read error at file:blk %u:%u on device %s. ERR=%s.\n" +msgid "Create JobMedia record %s failed: ERR=%s\n" msgstr "" -#: src/stored/block.c:952 +#: src/cats/sql_create.c:141 #, c-format -msgid "Read zero bytes at %u:%u on device %s.\n" +msgid "Update Media record %s failed: ERR=%s\n" msgstr "" -#: src/stored/block.c:965 +#: src/cats/sql_create.c:171 #, c-format -msgid "" -"Volume data error at %u:%u! Very short block of %d bytes on device %s " -"discarded.\n" +msgid "pool record %s already exists\n" msgstr "" -#: src/stored/block.c:990 +#: src/cats/sql_create.c:197 #, c-format -msgid "Block length %u is greater than buffer %u. Attempting recovery.\n" +msgid "Create db Pool record %s failed: ERR=%s\n" msgstr "" -#: src/stored/block.c:1009 +#: src/cats/sql_create.c:228 #, c-format -msgid "Setting block buffer size to %u bytes.\n" +msgid "Device record %s already exists\n" msgstr "" -#: src/stored/block.c:1024 +#: src/cats/sql_create.c:244 #, c-format -msgid "" -"Volume data error at %u:%u! Short block of %d bytes on device %s discarded.\n" +msgid "Create db Device record %s failed: ERR=%s\n" msgstr "" -#: src/stored/spool.c:69 +#: src/cats/sql_create.c:277 #, c-format -msgid "" -"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" +msgid "More than one Storage record!: %d\n" msgstr "" -#: src/stored/spool.c:75 +#: src/cats/sql_create.c:282 #, c-format -msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" +msgid "error fetching Storage row: %s\n" msgstr "" -#: src/stored/spool.c:91 -msgid "Spooling data ...\n" +#: src/cats/sql_create.c:302 +#, c-format +msgid "Create DB Storage record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:117 +#: src/cats/sql_create.c:334 #, c-format -msgid "Bad return from despool WroteVol=%d\n" +msgid "mediatype record %s already exists\n" msgstr "" -#: src/stored/spool.c:150 +#: src/cats/sql_create.c:350 #, c-format -msgid "Open data spool file %s failed: ERR=%s\n" +msgid "Create db mediatype record %s failed: ERR=%s\n" msgstr "" -#: src/stored/spool.c:199 +#: src/cats/sql_create.c:384 #, c-format -msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" +msgid "Volume \"%s\" already exists.\n" msgstr "" -#: src/stored/spool.c:204 +#: src/cats/sql_create.c:422 #, c-format -msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" +msgid "Create DB Media record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:248 src/stored/append.c:207 src/stored/append.c:274 -#: src/stored/mac.c:98 src/stored/mac.c:176 +#: src/cats/sql_create.c:470 #, c-format -msgid "Fatal append error on device %s: ERR=%s\n" +msgid "More than one Client!: %d\n" msgstr "" -#: src/stored/spool.c:258 src/stored/spool.c:432 src/stored/spool.c:470 +#: src/cats/sql_create.c:475 #, c-format -msgid "Ftruncate spool file failed: ERR=%s\n" +msgid "error fetching Client row: %s\n" msgstr "" -#: src/stored/spool.c:260 +#: src/cats/sql_create.c:502 #, c-format -msgid "Bad return from ftruncate. ERR=%s\n" +msgid "Create DB Client record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:309 +#: src/cats/sql_create.c:545 #, c-format -msgid "Spool header read error. ERR=%s\n" +msgid "Create DB Counters record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:312 +#: src/cats/sql_create.c:578 #, c-format -msgid "Spool read error. Wanted %u bytes, got %d\n" +msgid "More than one FileSet!: %d\n" msgstr "" -#: src/stored/spool.c:313 +#: src/cats/sql_create.c:583 #, c-format -msgid "Spool header read error. Wanted %u bytes, got %d\n" +msgid "error fetching FileSet row: ERR=%s\n" msgstr "" -#: src/stored/spool.c:319 src/stored/spool.c:320 +#: src/cats/sql_create.c:613 #, c-format -msgid "Spool block too big. Max %u bytes, got %u\n" +msgid "Create DB FileSet record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:325 src/stored/spool.c:326 +#: src/cats/sql_create.c:670 #, c-format -msgid "Spool data read error. Wanted %u bytes, got %d\n" +msgid "Attempt to put non-attributes into catalog. Stream=%d\n" msgstr "" -#: src/stored/spool.c:383 -msgid "User specified spool size reached.\n" +#: src/cats/sql_create.c:733 +#, c-format +msgid "Create db File record %s failed. ERR=%s" msgstr "" -#: src/stored/spool.c:385 -msgid "Bad return from despool in write_block.\n" +#: src/cats/sql_create.c:766 src/cats/sql_get.c:224 +#, c-format +msgid "More than one Path!: %s for path: %s\n" msgstr "" -#: src/stored/spool.c:393 -msgid "Spooling data again ...\n" +#: src/cats/sql_create.c:797 +#, c-format +msgid "Create db Path record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:424 +#: src/cats/sql_create.c:830 #, c-format -msgid "Error writing header to spool file. ERR=%s\n" +msgid "More than one Filename! %s for file: %s\n" msgstr "" -#: src/stored/spool.c:438 src/stored/spool.c:476 -msgid "Fatal despooling error." +#: src/cats/sql_create.c:836 +#, c-format +msgid "Error fetching row for file=%s: ERR=%s\n" msgstr "" -#: src/stored/spool.c:445 -msgid "Retrying after header spooling error failed.\n" +#: src/cats/sql_create.c:852 +#, c-format +msgid "Create db Filename record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:459 +#: src/cats/sql_delete.c:79 #, c-format -msgid "Error writing data to spool file. ERR=%s\n" +msgid "No pool record %s exists\n" msgstr "" -#: src/stored/spool.c:486 -msgid "Retrying after data spooling error failed.\n" +#: src/cats/sql_delete.c:84 +#, c-format +msgid "Expecting one pool record, got %d\n" msgstr "" -#: src/stored/spool.c:541 src/stored/spool.c:548 +#: src/cats/sql_delete.c:90 #, c-format -msgid "Fseek on attributes file failed: ERR=%s\n" +msgid "Error fetching row %s\n" msgstr "" -#: src/stored/spool.c:558 +#: src/cats/sql_find.c:90 src/cats/sql_find.c:119 #, c-format -msgid "Sending spooled attrs to the Director. Despooling %s bytes ...\n" +msgid "" +"Query error for start time request: ERR=%s\n" +"CMD=%s\n" msgstr "" -#: src/stored/spool.c:585 -#, c-format -msgid "fopen attr spool file %s failed: ERR=%s\n" +#: src/cats/sql_find.c:96 +msgid "No prior Full backup Job record found.\n" msgstr "" -#: src/stored/reserve.c:430 src/stored/reserve.c:442 +#: src/cats/sql_find.c:108 #, c-format -msgid "Failed command: %s\n" +msgid "Unknown level=%d\n" msgstr "" -#: src/stored/reserve.c:432 +#: src/cats/sql_find.c:125 #, c-format msgid "" -"\n" -" Device \"%s\" with MediaType \"%s\" requested by DIR not found in SD " -"Device resources.\n" +"No Job record found: ERR=%s\n" +"CMD=%s\n" msgstr "" -#: src/stored/reserve.c:607 src/stored/dircmd.c:543 +#: src/cats/sql_find.c:224 #, c-format -msgid "" -"\n" -" Device \"%s\" in changer \"%s\" requested by DIR could not be opened or " -"does not exist.\n" +msgid "Unknown Job level=%d\n" msgstr "" -#: src/stored/reserve.c:611 src/stored/dircmd.c:521 +#: src/cats/sql_find.c:234 #, c-format -msgid "" -"\n" -" Device \"%s\" requested by DIR could not be opened or does not exist.\n" +msgid "No Job found for: %s.\n" msgstr "" -#: src/stored/reserve.c:624 +#: src/cats/sql_find.c:245 #, c-format -msgid "3926 Could not get dcr for device: %s\n" +msgid "No Job found for: %s\n" msgstr "" -#: src/stored/reserve.c:686 +#: src/cats/sql_find.c:317 #, c-format -msgid "3601 JobId=%u device %s is BLOCKED due to user unmount.\n" +msgid "Request for Volume item %d greater than max %d\n" msgstr "" -#: src/stored/reserve.c:695 +#: src/cats/sql_find.c:329 #, c-format -msgid "3602 JobId=%u device %s is busy (already reading/writing).\n" +msgid "No Volume record found for item %d.\n" msgstr "" -#: src/stored/reserve.c:742 +#: src/cats/sql_get.c:130 #, c-format -msgid "3603 JobId=%u device %s is busy reading.\n" +msgid "get_file_record want 1 got rows=%d\n" msgstr "" -#: src/stored/reserve.c:751 +#: src/cats/sql_get.c:135 #, c-format -msgid "3604 JobId=%u device %s is BLOCKED due to user unmount.\n" +msgid "Error fetching row: %s\n" msgstr "" -#: src/stored/reserve.c:817 +#: src/cats/sql_get.c:143 #, c-format -msgid "3605 JobId=%u wants free drive but device %s is busy.\n" +msgid "File record for PathId=%s FilenameId=%s not found.\n" msgstr "" -#: src/stored/reserve.c:825 -#, c-format -msgid "3606 JobId=%u wants mounted, but drive %s has no Volume.\n" +#: src/cats/sql_get.c:149 +msgid "File record not found in Catalog.\n" msgstr "" -#: src/stored/reserve.c:835 +#: src/cats/sql_get.c:174 #, c-format -msgid "3607 JobId=%u wants Vol=\"%s\" drive has Vol=\"%s\" on drive %s.\n" +msgid "More than one Filename!: %s for file: %s\n" msgstr "" -#: src/stored/reserve.c:871 +#: src/cats/sql_get.c:184 #, c-format -msgid "3608 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" on drive %s.\n" +msgid "Get DB Filename record %s found bad record: %d\n" msgstr "" -#: src/stored/reserve.c:914 +#: src/cats/sql_get.c:190 #, c-format -msgid "3609 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" on drive %s.\n" -msgstr "" - -#: src/stored/reserve.c:922 src/stored/reserve.c:926 -msgid "Logic error!!!! Should not get here.\n" +msgid "Filename record: %s not found.\n" msgstr "" -#: src/stored/reserve.c:923 +#: src/cats/sql_get.c:194 #, c-format -msgid "3910 JobId=%u Logic error!!!! drive %s Should not get here.\n" +msgid "Filename record: %s not found in Catalog.\n" msgstr "" -#: src/stored/reserve.c:929 +#: src/cats/sql_get.c:235 #, c-format -msgid "3911 JobId=%u failed reserve drive %s.\n" -msgstr "" - -#: src/stored/askdir.c:161 -msgid "Network error on bnet_recv in req_vol_info.\n" +msgid "Get DB path record %s found bad record: %s\n" msgstr "" -#: src/stored/askdir.c:178 +#: src/cats/sql_get.c:248 #, c-format -msgid "Error getting Volume info: %s" -msgstr "" - -#: src/stored/askdir.c:294 src/stored/askdir.c:295 src/stored/append.c:80 -#: src/stored/append.c:89 src/stored/append.c:101 src/stored/append.c:269 -#: src/stored/append.c:281 -msgid "NULL Volume name. This shouldn't happen!!!\n" -msgstr "" - -#: src/stored/askdir.c:299 src/stored/askdir.c:300 -msgid "Attempt to update_volume_info in read mode!!!\n" +msgid "Path record: %s not found.\n" msgstr "" -#: src/stored/askdir.c:328 +#: src/cats/sql_get.c:252 #, c-format -msgid "Didn't get vol info vol=%s: ERR=%s" +msgid "Path record: %s not found in Catalog.\n" msgstr "" -#: src/stored/askdir.c:359 +#: src/cats/sql_get.c:287 #, c-format -msgid "Error creating JobMedia record: ERR=%s\n" +msgid "No Job found for JobId %s\n" msgstr "" -#: src/stored/askdir.c:366 +#: src/cats/sql_get.c:344 src/cats/sql_get.c:399 #, c-format -msgid "Error creating JobMedia record: %s\n" +msgid "No volumes found for JobId=%d\n" msgstr "" -#: src/stored/askdir.c:432 +#: src/cats/sql_get.c:350 src/cats/sql_get.c:408 #, c-format -msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" +msgid "Error fetching row %d: ERR=%s\n" msgstr "" -#: src/stored/askdir.c:445 +#: src/cats/sql_get.c:364 #, c-format -msgid "" -"Job %s waiting. Cannot find any appendable volumes.\n" -"Please use the \"label\" command to create a new Volume for:\n" -" Storage: %s\n" -" Media type: %s\n" -" Pool: %s\n" +msgid "No Volume for JobId %d found in Catalog.\n" msgstr "" -#: src/stored/askdir.c:469 src/stored/askdir.c:551 +#: src/cats/sql_get.c:480 #, c-format -msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" -msgstr "" - -#: src/stored/askdir.c:479 -msgid "pthread error in mount_next_volume.\n" -msgstr "" - -#: src/stored/askdir.c:511 -msgid "Cannot request another volume: no volume name given.\n" +msgid "Pool id select failed: ERR=%s\n" msgstr "" -#: src/stored/askdir.c:517 +#: src/cats/sql_get.c:517 #, c-format -msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" +msgid "Client id select failed: ERR=%s\n" msgstr "" -#: src/stored/askdir.c:532 +#: src/cats/sql_get.c:559 #, c-format -msgid "Please mount Volume \"%s\" on Storage Device %s for Job %s\n" +msgid "More than one Pool!: %s\n" msgstr "" -#: src/stored/askdir.c:561 -msgid "pthread error in mount_volume\n" +#: src/cats/sql_get.c:600 +msgid "Pool record not found in Catalog.\n" msgstr "" -#: src/stored/job.c:80 +#: src/cats/sql_get.c:634 #, c-format -msgid "Bad Job Command from Director: %s\n" +msgid "More than one Client!: %s\n" msgstr "" -#: src/stored/job.c:190 -#, c-format -msgid "Job name not found: %s\n" +#: src/cats/sql_get.c:651 src/cats/sql_get.c:655 +msgid "Client record not found in Catalog.\n" msgstr "" -#: src/stored/job.c:201 +#: src/cats/sql_get.c:680 #, c-format -msgid "Hey!!!! JobId %u Job %s already authenticated.\n" -msgstr "" - -#: src/stored/job.c:212 -msgid "Unable to authenticate File daemon\n" +msgid "More than one Counter!: %d\n" msgstr "" -#: src/stored/job.c:335 -msgid "In free_jcr(), but still attached to device!!!!\n" +#: src/cats/sql_get.c:685 +#, c-format +msgid "error fetching Counter row: %s\n" msgstr "" -#: src/stored/bls.c:68 +#: src/cats/sql_get.c:705 #, c-format -msgid "" -"Copyright (C) 2000-2005 Kern Sibbald.\n" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bls [options] \n" -" -b specify a bootstrap file\n" -" -c specify a config file\n" -" -d specify debug level\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 "Counter record: %s not found in Catalog.\n" msgstr "" -#: src/stored/bls.c:128 src/stored/bextract.c:127 +#: src/cats/sql_get.c:741 #, c-format -msgid "Could not open exclude file: %s, ERR=%s\n" +msgid "Error got %s FileSets but expected only one!\n" msgstr "" -#: src/stored/bls.c:142 src/stored/bextract.c:142 +#: src/cats/sql_get.c:746 #, c-format -msgid "Could not open include file: %s, ERR=%s\n" +msgid "FileSet record \"%s\" not found.\n" msgstr "" -#: src/stored/bls.c:189 -msgid "No archive name specified\n" +#: src/cats/sql_get.c:756 +msgid "FileSet record not found in Catalog.\n" msgstr "" -#: src/stored/bls.c:224 +#: src/cats/sql_get.c:813 #, c-format -msgid "" -"\n" -"Warning, this Volume is a continuation of Volume %s\n" +msgid "Media id select failed: ERR=%s\n" msgstr "" -#: src/stored/bls.c:267 +#: src/cats/sql_get.c:861 #, c-format -msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" +msgid "More than one Volume!: %s\n" msgstr "" -#: src/stored/bls.c:278 +#: src/cats/sql_get.c:906 #, c-format -msgid "Mounted Volume \"%s\".\n" +msgid "Media record MediaId=%s not found.\n" msgstr "" -#: src/stored/bls.c:280 +#: src/cats/sql_get.c:909 #, c-format -msgid "Got EOF at file %u on device %s, Volume \"%s\"\n" +msgid "Media record for Volume \"%s\" not found.\n" msgstr "" -#: src/stored/bls.c:304 +#: src/cats/sql_get.c:916 #, 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" +msgid "Media record for MediaId=%u not found in Catalog.\n" msgstr "" -#: src/stored/bls.c:313 +#: src/cats/sql_get.c:919 #, c-format -msgid "Block: %d size=%d\n" +msgid "Media record for Vol=%s not found in Catalog.\n" msgstr "" -#: src/stored/bls.c:364 src/stored/bscan.c:648 src/stored/bextract.c:285 -msgid "Cannot continue.\n" +#: src/cats/sql_list.c:53 +#, c-format +msgid "Query failed: %s\n" msgstr "" -#: src/stored/bls.c:371 src/stored/bscan.c:652 src/stored/bextract.c:289 -#: src/filed/restore.c:256 src/filed/verify_vol.c:143 +#: src/cats/sqlite.c:136 #, c-format -msgid "Record header file index %ld not equal record index %ld\n" +msgid "Database %s does not exist, please create it.\n" msgstr "" -#: src/stored/bls.c:380 +#: src/cats/sqlite.c:161 #, c-format -msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" +msgid "Unable to open Database=%s. ERR=%s\n" msgstr "" -#: src/stored/bls.c:397 src/stored/read_record.c:327 -msgid "Fresh Volume Label" +#: src/cats/sqlite.c:162 src/lib/bnet_server.c:371 +msgid "unknown" msgstr "" -#: src/stored/bls.c:400 src/stored/read_record.c:330 -msgid "Volume Label" +#: src/cats/sqlite.c:221 +#, c-format +msgid "next_index query error: ERR=%s\n" msgstr "" -#: src/stored/bls.c:404 src/stored/label.c:972 -msgid "Begin Job Session" +#: src/cats/sqlite.c:226 +#, c-format +msgid "Error fetching index: ERR=%s\n" msgstr "" -#: src/stored/bls.c:408 src/stored/label.c:975 -msgid "End Job Session" +#: src/cats/sqlite.c:236 +#, c-format +msgid "next_index update error: ERR=%s\n" msgstr "" -#: src/stored/bls.c:412 -msgid "End of Medium" +#: src/console/authenticate.c:100 src/dird/authenticate.c:106 +#: src/dird/authenticate.c:206 src/filed/authenticate.c:119 +#: src/filed/authenticate.c:215 src/stored/authenticate.c:128 +#: src/stored/authenticate.c:232 src/wx-console/authenticate.c:106 +msgid "" +"Authorization problem: Remote server did not advertise required TLS " +"support.\n" msgstr "" -#: src/stored/bls.c:415 src/stored/label.c:984 -msgid "Unknown" +#: src/console/authenticate.c:107 src/dird/authenticate.c:113 +#: src/dird/authenticate.c:213 src/filed/authenticate.c:127 +#: src/filed/authenticate.c:223 src/stored/authenticate.c:136 +#: src/stored/authenticate.c:240 src/wx-console/authenticate.c:112 +msgid "Authorization problem: Remote server requires TLS.\n" msgstr "" -#: src/stored/bls.c:421 src/stored/read_record.c:348 -#, c-format -msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" +#: src/console/authenticate.c:117 src/wx-console/authenticate.c:121 +msgid "TLS negotiation failed\n" msgstr "" -#: src/stored/bls.c:441 src/stored/bscan.c:1256 src/stored/bextract.c:477 -#: src/stored/btape.c:2684 src/stored/bcopy.c:287 +#: src/console/authenticate.c:129 src/gnome2-console/authenticate.c:85 +#: src/tray-monitor/authenticate.c:87 #, c-format -msgid "Mount Volume \"%s\" on device %s and press return when ready: " +msgid "Bad response to Hello command: ERR=%s\n" msgstr "" -#: src/stored/read.c:55 -msgid "No Volume names found for restore.\n" +#: src/console/authenticate.c:136 src/gnome2-console/authenticate.c:95 +#: src/tray-monitor/authenticate.c:94 src/wx-console/authenticate.c:136 +msgid "Director rejected Hello command\n" msgstr "" -#: src/stored/read.c:109 -#, c-format -msgid ">filed: Error Hdr=%s\n" +#: src/console/authenticate.c:146 src/wx-console/authenticate.c:146 +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 http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " +"help.\n" msgstr "" -#: src/stored/read.c:110 src/stored/read.c:125 +#: src/console/console.c:102 #, c-format -msgid "Error sending to File daemon. ERR=%s\n" +msgid "" +"Copyright (C) 2000-2005 Kern Sibbald\n" +"\n" +"Version: " msgstr "" -#: src/stored/read.c:124 +#: src/console/console.c:103 src/dird/admin.c:108 #, c-format -msgid "Error sending to FD. ERR=%s\n" +msgid " (" msgstr "" -#: src/stored/status.c:67 +#: src/console/console.c:103 #, c-format msgid "" +") %s %s %s\n" +"\n" +"Usage: bconsole [-s] [-c config_file] [-d debug_level]\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" -"%s Version: %s (%s) %s %s %s\n" msgstr "" -#: src/stored/status.c:71 src/dird/ua_status.c:249 -#, c-format -msgid "Daemon started %s, 1 Job run since started.\n" +#: src/console/console.c:150 +msgid "input from file" msgstr "" -#: src/stored/status.c:74 src/dird/ua_status.c:252 -#, c-format -msgid "Daemon started %s, %d Jobs run since started.\n" +#: src/console/console.c:151 +msgid "output to file" msgstr "" -#: src/stored/status.c:78 src/filed/status.c:121 src/dird/ua_status.c:257 -#, c-format -msgid " Heap: bytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" +#: src/console/console.c:152 src/dird/ua_cmds.c:110 +msgid "quit" msgstr "" -#: src/stored/status.c:103 -msgid "" -"\n" -"Device status:\n" +#: src/console/console.c:153 +msgid "output to file and terminal" msgstr "" -#: src/stored/status.c:105 -#, c-format -msgid "Autochanger \"%s\" with devices:\n" +#: src/console/console.c:154 +msgid "sleep specified time" msgstr "" -#: src/stored/status.c:119 -#, c-format -msgid "Device %s is mounted with Volume=\"%s\" Pool=\"%s\"\n" +#: src/console/console.c:155 src/dird/ua_cmds.c:122 +msgid "print current time" msgstr "" -#: src/stored/status.c:123 -#, c-format -msgid "Device %s open but no Bacula volume is mounted.\n" +#: src/console/console.c:156 +msgid "print Console's version" msgstr "" -#: src/stored/status.c:133 -#, c-format -msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" +#: src/console/console.c:157 src/dird/ua_cmds.c:99 +msgid "exit = quit" msgstr "" -#: src/stored/status.c:147 -#, c-format -msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" +#: src/console/console.c:158 +msgid "zed_keys = use zed keys instead of bash keys" msgstr "" -#: src/stored/status.c:152 -#, c-format -msgid " Positioned at File=%s Block=%s\n" +#: src/console/console.c:191 src/dird/ua_dotcmds.c:108 +msgid ": is an illegal command\n" msgstr "" -#: src/stored/status.c:158 -#, c-format -msgid "Device %s is not open.\n" +#: src/console/console.c:400 src/filed/filed.c:183 +#: src/gnome2-console/console.c:271 +msgid "TLS library initialization failed.\n" msgstr "" -#: src/stored/status.c:160 +#: src/console/console.c:404 src/dird/dird.c:200 src/dird/dird.c:410 +#: src/dird/dird.c:413 src/filed/filed.c:188 src/gnome2-console/console.c:275 +#: src/stored/stored.c:193 #, c-format -msgid "Device \"%s\" is not open or does not exist.\n" +msgid "Please correct configuration file: %s\n" msgstr "" -#: src/stored/status.c:165 src/stored/status.c:168 src/stored/status.c:172 -#: src/stored/status.c:174 -msgid "" -"====\n" -"\n" +#: src/console/console.c:421 +msgid "Available Directors:\n" msgstr "" -#: src/stored/status.c:166 -msgid "In Use Volume status:\n" +#: src/console/console.c:425 +#, c-format +msgid "%d %s at %s:%d\n" msgstr "" -#: src/stored/status.c:190 -msgid "" -"No DEVICE structure.\n" -"\n" +#: src/console/console.c:429 +msgid "Select Director: " msgstr "" -#: src/stored/status.c:195 -msgid " Device is BLOCKED. User unmounted.\n" +#: src/console/console.c:435 +#, c-format +msgid "You must enter a number between 1 and %d\n" msgstr "" -#: src/stored/status.c:198 -msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" +#: src/console/console.c:455 src/tray-monitor/tray-monitor.c:858 +#, c-format +msgid "Connecting to Director %s:%d\n" msgstr "" -#: src/stored/status.c:202 +#: src/console/console.c:471 src/gnome2-console/console.c:504 +#: src/wx-console/console_thread.cpp:370 #, c-format -msgid " Device is BLOCKED waiting for mount of volume \"%s\".\n" +msgid "Failed to initialize TLS context for Console \"%s\".\n" msgstr "" -#: src/stored/status.c:205 -msgid " Device is BLOCKED waiting for media.\n" +#: src/console/console.c:492 src/gnome2-console/console.c:526 +#: src/wx-console/console_thread.cpp:391 +#, c-format +msgid "Failed to initialize TLS context for Director \"%s\".\n" msgstr "" -#: src/stored/status.c:209 -msgid " Device is being initialized.\n" +#: src/console/console.c:515 +msgid "Enter a period to cancel a command.\n" msgstr "" -#: src/stored/status.c:212 -msgid " Device is blocked labeling a Volume.\n" +#: src/console/console.c:582 src/console/console.c:611 src/dird/dird.c:496 +#: src/dird/dird.c:711 src/dird/dird.c:777 src/dird/dird.c:829 +#: src/filed/filed.c:302 src/filed/filed.c:348 +#: src/gnome2-console/console.c:140 src/gnome2-console/console.c:169 +#: src/stored/stored.c:309 src/wx-console/console_thread.cpp:94 +#: src/wx-console/console_thread.cpp:120 +msgid "TLS required but not configured in Bacula.\n" msgstr "" -#: src/stored/status.c:220 +#: src/console/console.c:589 src/gnome2-console/console.c:147 #, c-format -msgid " Slot %d is loaded in drive %d.\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.\n" msgstr "" -#: src/stored/status.c:223 +#: src/console/console.c:598 src/gnome2-console/console.c:156 #, c-format -msgid " Drive %d is not loaded.\n" +msgid "" +"No Director resource defined in %s\n" +"Without that I don't how to speak to the Director :-(\n" msgstr "" -#: src/stored/status.c:227 src/stored/btape.c:548 +#: src/console/console.c:618 src/gnome2-console/console.c:176 #, c-format -msgid "Configured device capabilities:\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in %s.\n" msgstr "" -#: src/stored/status.c:242 -msgid "Device state:\n" +#: src/console/console.c:763 +msgid "Too many arguments on input command.\n" msgstr "" -#: src/stored/status.c:256 -#, c-format -msgid "" -"num_writers=%d JobStatus=%c block=%d\n" -"\n" +#: src/console/console.c:767 +msgid "First argument to input command must be a filename.\n" msgstr "" -#: src/stored/status.c:259 src/stored/btape.c:580 +#: src/console/console.c:772 #, c-format -msgid "Device parameters:\n" +msgid "Cannot open file %s for input. ERR=%s\n" msgstr "" -#: src/stored/status.c:260 +#: src/console/console.c:802 +msgid "Too many arguments on output/tee command.\n" +msgstr "" + +#: src/console/console.c:818 #, c-format -msgid "Archive name: %s Device name: %s\n" +msgid "Cannot open file %s for output. ERR=%s\n" msgstr "" -#: src/stored/status.c:262 +#: src/console/console_conf.c:123 src/gnome2-console/console_conf.c:122 +#: src/wx-console/console_conf.c:128 #, c-format -msgid "File=%u block=%u\n" +msgid "No record for %d %s\n" msgstr "" -#: src/stored/status.c:263 +#: src/console/console_conf.c:132 src/wx-console/console_conf.c:137 #, c-format -msgid "Min block=%u Max block=%u\n" +msgid "Console: name=%s rcfile=%s histfile=%s\n" msgstr "" -#: src/stored/status.c:277 src/dird/ua_status.c:508 -msgid "" -"\n" -"Running Jobs:\n" +#: src/console/console_conf.c:136 src/gnome2-console/console_conf.c:131 +#: src/wx-console/console_conf.c:141 +#, c-format +msgid "Director: name=%s address=%s DIRport=%d\n" msgstr "" -#: src/stored/status.c:280 +#: src/console/console_conf.c:140 src/console/console_conf.c:216 +#: src/console/console_conf.c:261 src/console/console_conf.c:288 +#: src/filed/filed_conf.c:268 src/filed/filed_conf.c:327 +#: src/filed/filed_conf.c:357 src/gnome2-console/console_conf.c:142 +#: src/gnome2-console/console_conf.c:220 src/gnome2-console/console_conf.c:268 +#: src/gnome2-console/console_conf.c:298 src/stored/stored_conf.c:510 +#: src/stored/stored_conf.c:598 src/stored/stored_conf.c:633 +#: src/wx-console/console_conf.c:145 src/wx-console/console_conf.c:220 +#: src/wx-console/console_conf.c:265 src/wx-console/console_conf.c:292 #, c-format -msgid "%s Job %s waiting for Client connection.\n" +msgid "Unknown resource type %d\n" msgstr "" -#: src/stored/status.c:295 +#: src/console/console_conf.c:242 src/dird/dird_conf.c:1112 +#: src/dird/dird_conf.c:1127 src/filed/filed_conf.c:296 +#: src/gnome2-console/console_conf.c:246 src/tray-monitor/tray_conf.c:262 +#: src/wx-console/console_conf.c:246 #, c-format -msgid "" -"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=\"%s\"\n" +msgid "%s item is required in %s resource, but not found.\n" msgstr "" -#: src/stored/status.c:307 +#: src/console/console_conf.c:304 src/dird/dird_conf.c:1299 +#: src/filed/filed_conf.c:374 src/gnome2-console/console_conf.c:314 +#: src/tray-monitor/tray_conf.c:341 src/wx-console/console_conf.c:308 #, c-format -msgid "" -"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=\"%s\"\n" +msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" msgstr "" -#: src/stored/status.c:323 src/filed/status.c:166 +#: src/dird/admin.c:55 #, c-format -msgid " Files=%s Bytes=%s Bytes/sec=%s\n" +msgid "Start Admin JobId %d, Job=%s\n" msgstr "" -#: src/stored/status.c:330 +#: src/dird/admin.c:82 src/dird/backup.c:343 src/dird/mac.c:287 #, c-format -msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" +msgid "Error getting job record for stats: %s" msgstr "" -#: src/stored/status.c:335 -msgid " FDSocket closed\n" +#: src/dird/admin.c:90 +msgid "Admin OK" msgstr "" -#: src/stored/status.c:343 src/filed/status.c:195 src/dird/ua_cmds.c:416 -msgid "No Jobs running.\n" +#: src/dird/admin.c:94 +msgid "*** Admin Error ***" msgstr "" -#: src/stored/status.c:345 src/stored/status.c:361 src/stored/status.c:438 -#: src/filed/status.c:198 src/filed/status.c:277 src/dird/ua_status.c:277 -#: src/dird/ua_status.c:493 src/dird/ua_status.c:655 -msgid "====\n" +#: src/dird/admin.c:98 +msgid "Admin Canceled" msgstr "" -#: src/stored/status.c:352 -msgid "" -"\n" -"Jobs waiting to reserve a drive:\n" +#: src/dird/admin.c:102 src/dird/backup.c:455 src/dird/mac.c:389 +#: src/dird/restore.c:246 +#, c-format +msgid "Inappropriate term code: %c\n" msgstr "" -#: src/stored/status.c:373 src/filed/status.c:211 src/dird/ua_status.c:665 -msgid "No Terminated Jobs.\n" +#: src/dird/admin.c:108 +msgid "Bacula " msgstr "" -#: src/stored/status.c:378 src/dird/ua_status.c:670 +#: src/dird/admin.c:108 +#, c-format msgid "" +"): %s\n" +" JobId: %d\n" +" Job: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Termination: %s\n" "\n" -"Terminated Jobs:\n" msgstr "" -#: src/stored/status.c:380 -msgid " JobId Level Files Bytes Status Finished Name \n" +#: src/dird/authenticate.c:67 src/dird/authenticate.c:68 +#: src/tray-monitor/authenticate.c:121 +#, c-format +msgid "Error sending Hello to Storage daemon. ERR=%s\n" msgstr "" -#: src/stored/status.c:382 src/filed/status.c:221 src/dird/ua_status.c:532 -msgid "======================================================================\n" +#: src/dird/authenticate.c:93 +msgid "Director and Storage daemon passwords or names not the same.\n" msgstr "" -#: src/stored/status.c:402 src/lib/util.c:178 src/filed/status.c:241 -#: src/dird/ua_status.c:703 -msgid "Created" +#: src/dird/authenticate.c:95 +msgid "" +"Director unable to authenticate with Storage daemon. 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 http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " +"help.\n" msgstr "" -#: src/stored/status.c:406 src/lib/util.c:191 src/lib/util.c:258 -#: src/filed/status.c:245 src/dird/ua_status.c:707 -msgid "Error" +#: src/dird/authenticate.c:123 src/dird/authenticate.c:223 +#: src/dird/authenticate.c:356 src/filed/authenticate.c:136 +#: src/filed/authenticate.c:232 src/stored/authenticate.c:145 +#: src/stored/authenticate.c:249 +msgid "TLS negotiation failed.\n" msgstr "" -#: src/stored/status.c:409 src/filed/status.c:248 src/dird/ua_status.c:710 -msgid "Diffs" +#: src/dird/authenticate.c:132 src/tray-monitor/authenticate.c:134 +#, c-format +msgid "bdird set configuration file to file\n" +" -dnn set debug level to nn\n" +" -f run in foreground (for debugging)\n" +" -g groupid\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/stored/parse_bsr.c:262 -#, c-format -msgid "MediaType %s in bsr at inappropriate place.\n" +#: src/dird/dird.c:196 src/stored/stored.c:189 +msgid "Cryptography library initialization failed.\n" msgstr "" -#: src/stored/parse_bsr.c:283 -#, c-format -msgid "Device \"%s\" in bsr at inappropriate place.\n" +#: src/dird/dird.c:396 +msgid "Too many open reload requests. Request ignored.\n" msgstr "" -#: src/stored/parse_bsr.c:440 -msgid "JobType not yet implemented\n" +#: src/dird/dird.c:411 +msgid "Out of reload table entries. Giving up.\n" msgstr "" -#: src/stored/parse_bsr.c:448 -msgid "JobLevel not yet implemented\n" +#: src/dird/dird.c:414 +msgid "Resetting previous configuration.\n" msgstr "" -#: src/stored/parse_bsr.c:631 +#: src/dird/dird.c:474 #, c-format -msgid "Slot %d in bsr at inappropriate place.\n" +msgid "" +"No Director resource defined in %s\n" +"Without that I don't know who I am :-(\n" msgstr "" -#: src/stored/parse_bsr.c:655 +#: src/dird/dird.c:482 src/filed/filed.c:295 #, c-format -msgid "VolFile : %u-%u\n" +msgid "No Messages resource defined in %s\n" msgstr "" -#: src/stored/parse_bsr.c:663 +#: src/dird/dird.c:487 #, c-format -msgid "VolBlock : %u-%u\n" +msgid "Only one Director resource permitted in %s\n" msgstr "" -#: src/stored/parse_bsr.c:673 +#: src/dird/dird.c:502 src/filed/filed.c:357 src/stored/stored.c:361 #, c-format -msgid "FileIndex : %u\n" +msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:675 +#: src/dird/dird.c:508 src/filed/filed.c:363 src/stored/stored.c:367 #, c-format -msgid "FileIndex : %u-%u\n" +msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:685 +#: src/dird/dird.c:514 src/filed/filed.c:369 src/stored/stored.c:373 #, c-format -msgid "JobId : %u\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/stored/parse_bsr.c:687 +#: src/dird/dird.c:533 src/filed/filed.c:388 src/stored/stored.c:392 #, c-format -msgid "JobId : %u-%u\n" +msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:697 +#: src/dird/dird.c:541 #, c-format -msgid "SessId : %u\n" +msgid "No Job records defined in %s\n" msgstr "" -#: src/stored/parse_bsr.c:699 +#: src/dird/dird.c:585 src/dird/dird.c:598 #, c-format -msgid "SessId : %u-%u\n" +msgid "Hey something is wrong. p=0x%lu\n" msgstr "" -#: src/stored/parse_bsr.c:708 +#: src/dird/dird.c:647 #, c-format -msgid "VolumeName : %s\n" +msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" msgstr "" -#: src/stored/parse_bsr.c:709 -#, c-format -msgid " MediaType : %s\n" +#: src/dird/dird.c:654 +msgid "Too many items in Job resource\n" msgstr "" -#: src/stored/parse_bsr.c:710 +#: src/dird/dird.c:672 src/dird/job.c:101 src/dird/ua_cmds.c:1480 +#: src/dird/ua_output.c:600 #, c-format -msgid " Device : %s\n" +msgid "Could not open database \"%s\".\n" msgstr "" -#: src/stored/parse_bsr.c:711 +#: src/dird/dird.c:675 #, c-format -msgid " Slot : %d\n" +msgid "%s" msgstr "" -#: src/stored/parse_bsr.c:720 +#: src/dird/dird.c:717 #, c-format -msgid "Client : %s\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Storage \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:728 +#: src/dird/dird.c:733 src/stored/stored.c:347 #, c-format -msgid "Job : %s\n" +msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:736 +#: src/dird/dird.c:784 #, c-format -msgid "SessTime : %u\n" +msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:750 -msgid "BSR is NULL\n" +#: src/dird/dird.c:790 +#, c-format +msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:754 +#: src/dird/dird.c:796 #, c-format -msgid "Next : 0x%x\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/stored/parse_bsr.c:755 +#: src/dird/dird.c:813 src/dird/dird.c:853 src/filed/filed.c:326 #, c-format -msgid "Root bsr : 0x%x\n" +msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:766 +#: src/dird/dird.c:836 #, c-format -msgid "count : %u\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:767 +#: src/dird/dird_conf.c:443 src/tray-monitor/tray_conf.c:152 #, c-format -msgid "found : %u\n" +msgid "No %s resource defined\n" msgstr "" -#: src/stored/parse_bsr.c:770 +#: src/dird/dird_conf.c:452 #, c-format -msgid "done : %s\n" +msgid "Director: name=%s MaxJobs=%d FDtimeout=%s SDtimeout=%s\n" msgstr "" -#: src/stored/parse_bsr.c:770 src/tools/dbcheck.c:1098 src/dird/ua_run.c:928 -#: src/dird/ua_input.c:120 src/dird/ua_select.c:54 src/dird/ua_update.c:223 -#: src/dird/ua_update.c:237 src/dird/ua_update.c:247 src/dird/ua_update.c:261 -#: src/dird/ua_update.c:551 -msgid "yes" +#: src/dird/dird_conf.c:457 +#, c-format +msgid " query_file=%s\n" msgstr "" -#: src/stored/parse_bsr.c:770 src/dird/ua_input.c:124 src/dird/ua_select.c:57 -#: src/dird/ua_update.c:225 src/dird/ua_update.c:237 src/dird/ua_update.c:249 -#: src/dird/ua_update.c:261 src/dird/ua_update.c:551 -msgid "no" +#: src/dird/dird_conf.c:460 src/dird/dird_conf.c:485 src/dird/dird_conf.c:499 +#: src/dird/dird_conf.c:544 src/dird/dird_conf.c:548 src/dird/dird_conf.c:552 +#: src/dird/dird_conf.c:576 src/dird/dird_conf.c:581 src/dird/dird_conf.c:585 +#: src/dird/dird_conf.c:589 src/dird/dird_conf.c:593 src/dird/dird_conf.c:597 +#: src/dird/dird_conf.c:607 +msgid " --> " msgstr "" -#: src/stored/parse_bsr.c:771 +#: src/dird/dird_conf.c:466 src/dird/dird_conf.c:469 #, c-format -msgid "positioning : %d\n" +msgid "Console: name=%s SSL=%d\n" msgstr "" -#: src/stored/parse_bsr.c:772 +#: src/dird/dird_conf.c:475 #, c-format -msgid "fast_reject : %d\n" +msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" msgstr "" -#: src/stored/wait.c:114 +#: src/dird/dird_conf.c:480 #, c-format -msgid "pthread timedwait error. ERR=%s\n" +msgid "Counter: name=%s min=%d max=%d\n" msgstr "" -#: src/stored/wait.c:199 +#: src/dird/dird_conf.c:491 #, c-format -msgid "Job %s waiting to reserve a device.\n" +msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" msgstr "" -#: src/stored/acquire.c:54 +#: src/dird/dird_conf.c:494 #, c-format -msgid "Num_writers=%d not zero. Job %d canceled.\n" +msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" msgstr "" -#: src/stored/acquire.c:62 +#: src/dird/dird_conf.c:506 #, c-format -msgid "No volumes specified. Job %d canceled.\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/stored/acquire.c:122 +#: src/dird/dird_conf.c:516 #, c-format -msgid "Media Type change. New device %s chosen.\n" +msgid "" +"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" +" DeviceName=%s MediaType=%s StorageId=%s\n" msgstr "" -#: src/stored/acquire.c:133 +#: src/dird/dird_conf.c:525 #, c-format -msgid "No suitable device found to read Volume \"%s\"\n" +msgid "" +"Catalog: name=%s address=%s DBport=%d db_name=%s\n" +" db_user=%s MutliDBConn=%d\n" msgstr "" -#: src/stored/acquire.c:155 src/stored/mount.c:83 +#: src/dird/dird_conf.c:533 #, c-format -msgid "Job %d canceled.\n" +msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" msgstr "" -#: src/stored/acquire.c:166 -#, c-format -msgid "Read open device %s Volume \"%s\" failed (EIO): ERR=%s\n" +#: src/dird/dird_conf.c:534 src/dird/ua_cmds.c:430 src/dird/ua_prune.c:454 +#: src/dird/ua_run.c:643 src/dird/ua_select.c:234 src/dird/ua_select.c:257 +msgid "Job" msgstr "" -#: src/stored/acquire.c:171 -#, c-format -msgid "Read open device %s Volume \"%s\" failed: ERR=%s\n" +#: src/dird/dird_conf.c:534 +msgid "JobDefs" msgstr "" -#: src/stored/acquire.c:237 src/stored/mount.c:77 +#: src/dird/dird_conf.c:538 #, c-format -msgid "Too many errors trying to mount device %s.\n" +msgid "" +" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=%" +"d\n" msgstr "" -#: src/stored/acquire.c:246 +#: src/dird/dird_conf.c:556 #, c-format -msgid "Ready to read from volume \"%s\" on device %s.\n" +msgid " --> Where=%s\n" msgstr "" -#: src/stored/acquire.c:289 +#: src/dird/dird_conf.c:559 #, c-format -msgid "Device %s is busy reading.\n" +msgid " --> Bootstrap=%s\n" msgstr "" -#: src/stored/acquire.c:319 +#: src/dird/dird_conf.c:562 #, c-format -msgid "Wanted Volume \"%s\", but device %s is busy writing on \"%s\" .\n" +msgid " --> RunBefore=%s\n" msgstr "" -#: src/stored/acquire.c:338 +#: src/dird/dird_conf.c:565 #, c-format -msgid "" -"Cannot recycle volume \"%s\" on device %s because it is in use by another " -"job.\n" +msgid " --> RunAfter=%s\n" msgstr "" -#: src/stored/acquire.c:360 +#: src/dird/dird_conf.c:568 #, c-format -msgid "Could not ready device %s for append.\n" +msgid " --> RunAfterFailed=%s\n" msgstr "" -#: src/stored/acquire.c:478 +#: src/dird/dird_conf.c:571 #, c-format -msgid "Alert: %s" +msgid " --> WriteBootstrap=%s\n" msgstr "" -#: src/stored/acquire.c:486 +#: src/dird/dird_conf.c:603 #, c-format -msgid "3997 Bad alert command: %s: ERR=%s.\n" +msgid " --> Run=%s\n" msgstr "" -#: src/stored/acquire.c:570 +#: src/dird/dird_conf.c:614 #, c-format -msgid "Hey! num_writers=%d!!!!\n" +msgid "FileSet: name=%s\n" msgstr "" -#: src/stored/bscan.c:109 +#: src/dird/dird_conf.c:676 src/dird/dird_conf.c:755 #, c-format -msgid "" -"Copyright (C) 2001-2005 Kern Sibbald.\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 nn\n" -" -m update media info in database\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\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 "Schedule: name=%s\n" msgstr "" -#: src/stored/bscan.c:221 src/stored/bextract.c:177 src/stored/bcopy.c:137 -msgid "Wrong number of arguments: \n" +#: src/dird/dird_conf.c:681 +#, c-format +msgid " --> Run Level=%s\n" msgstr "" -#: src/stored/bscan.c:234 src/stored/stored.c:265 -#, c-format -msgid "No Storage resource defined in %s. Cannot continue.\n" +#: src/dird/dird_conf.c:682 +msgid " hour=" msgstr "" -#: src/stored/bscan.c:242 src/stored/stored.c:296 -#, c-format -msgid "No Working Directory defined in %s. Cannot continue.\n" +#: src/dird/dird_conf.c:691 +msgid " mday=" msgstr "" -#: src/stored/bscan.c:250 -#, c-format -msgid "Working Directory: %s not found. Cannot continue.\n" +#: src/dird/dird_conf.c:700 +msgid " month=" msgstr "" -#: src/stored/bscan.c:254 -#, c-format -msgid "Working Directory: %s is not a directory. Cannot continue.\n" +#: src/dird/dird_conf.c:709 +msgid " wday=" msgstr "" -#: src/stored/bscan.c:268 src/stored/bscan.c:341 -#, c-format -msgid "First Volume Size = %sn" +#: src/dird/dird_conf.c:718 +msgid " wom=" msgstr "" -#: src/stored/bscan.c:274 -msgid "Could not init Bacula database\n" +#: src/dird/dird_conf.c:727 +msgid " woy=" msgstr "" -#: src/stored/bscan.c:281 +#: src/dird/dird_conf.c:736 #, c-format -msgid "Using Database: %s, User: %s\n" +msgid " mins=%d\n" msgstr "" -#: src/stored/bscan.c:315 -#, c-format -msgid "Create JobMedia for Job %s\n" +#: src/dird/dird_conf.c:738 src/dird/dird_conf.c:742 src/dird/dird_conf.c:746 +msgid " --> " msgstr "" -#: src/stored/bscan.c:326 +#: src/dird/dird_conf.c:759 #, c-format -msgid "Could not create JobMedia record for Volume=%s Job=%s\n" +msgid "Pool: name=%s PoolType=%s\n" msgstr "" -#: src/stored/bscan.c:383 +#: src/dird/dird_conf.c:761 #, c-format -msgid "done: %d%%\n" +msgid " use_cat=%d use_once=%d acpt_any=%d cat_files=%d\n" msgstr "" -#: src/stored/bscan.c:391 src/stored/bcopy.c:205 +#: src/dird/dird_conf.c:764 #, c-format -msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" +msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" msgstr "" -#: src/stored/bscan.c:407 -msgid "Volume is prelabeled. This tape cannot be scanned.\n" +#: src/dird/dird_conf.c:767 +#, c-format +msgid " VolUse=%s recycle=%d LabelFormat=%s\n" msgstr "" -#: src/stored/bscan.c:419 +#: src/dird/dird_conf.c:771 #, c-format -msgid "Pool record for %s found in DB.\n" +msgid " CleaningPrefix=%s LabelType=%d\n" msgstr "" -#: src/stored/bscan.c:423 +#: src/dird/dird_conf.c:773 #, c-format -msgid "VOL_LABEL: Pool record not found for Pool: %s\n" +msgid " RecyleOldest=%d PurgeOldest=%d MaxVolJobs=%d MaxVolFiles=%d\n" msgstr "" -#: src/stored/bscan.c:429 +#: src/dird/dird_conf.c:779 #, c-format -msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" +msgid "Messages: name=%s\n" msgstr "" -#: src/stored/bscan.c:433 +#: src/dird/dird_conf.c:781 #, c-format -msgid "Pool type \"%s\" is OK.\n" +msgid " mailcmd=%s\n" msgstr "" -#: src/stored/bscan.c:443 +#: src/dird/dird_conf.c:783 #, c-format -msgid "Media record for %s found in DB.\n" +msgid " opcmd=%s\n" msgstr "" -#: src/stored/bscan.c:450 +#: src/dird/dird_conf.c:786 src/tray-monitor/tray_conf.c:179 #, c-format -msgid "VOL_LABEL: Media record not found for Volume: %s\n" +msgid "Unknown resource type %d in dump_resource.\n" msgstr "" -#: src/stored/bscan.c:457 +#: src/dird/dird_conf.c:1080 src/tray-monitor/tray_conf.c:232 #, c-format -msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" +msgid "Unknown resource type %d in free_resource.\n" msgstr "" -#: src/stored/bscan.c:461 +#: src/dird/dird_conf.c:1118 src/lib/parse_conf.c:211 +#: src/tray-monitor/tray_conf.c:268 #, c-format -msgid "Media type \"%s\" is OK.\n" +msgid "Too many items in %s resource\n" msgstr "" -#: src/stored/bscan.c:470 +#: src/dird/dird_conf.c:1152 #, c-format -msgid "VOL_LABEL: OK for Volume: %s\n" +msgid "Cannot find Console resource %s\n" msgstr "" -#: src/stored/bscan.c:477 +#: src/dird/dird_conf.c:1158 src/filed/filed_conf.c:316 +#: src/stored/stored_conf.c:566 #, c-format -msgid "%d \"errors\" ignored before first Start of Session record.\n" +msgid "Cannot find Director resource %s\n" msgstr "" -#: src/stored/bscan.c:488 +#: src/dird/dird_conf.c:1165 src/stored/stored_conf.c:572 #, c-format -msgid "SOS_LABEL: Found Job record for JobId: %d\n" +msgid "Cannot find Storage resource %s\n" msgstr "" -#: src/stored/bscan.c:493 +#: src/dird/dird_conf.c:1174 #, c-format -msgid "SOS_LABEL: Job record not found for JobId: %d\n" +msgid "Cannot find Job resource %s\n" msgstr "" -#: src/stored/bscan.c:533 +#: src/dird/dird_conf.c:1192 #, c-format -msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" +msgid "Cannot find Counter resource %s\n" msgstr "" -#: src/stored/bscan.c:539 +#: src/dird/dird_conf.c:1200 src/filed/filed_conf.c:322 #, c-format -msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" +msgid "Cannot find Client resource %s\n" msgstr "" -#: src/stored/bscan.c:545 +#: src/dird/dird_conf.c:1212 #, c-format -msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" +msgid "Cannot find Schedule resource %s\n" msgstr "" -#: src/stored/bscan.c:563 src/stored/bscan.c:1041 +#: src/dird/dird_conf.c:1217 src/tray-monitor/tray_conf.c:287 #, c-format -msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" +msgid "Unknown resource type %d in save_resource.\n" msgstr "" -#: src/stored/bscan.c:607 +#: src/dird/dird_conf.c:1277 src/tray-monitor/tray_conf.c:322 #, c-format -msgid "Could not update job record. ERR=%s\n" +msgid "Unknown resource type %d in save_resrouce.\n" msgstr "" -#: src/stored/bscan.c:618 +#: src/dird/dird_conf.c:1292 #, c-format -msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" +msgid "Name item is required in %s resource, but not found.\n" msgstr "" -#: src/stored/bscan.c:630 +#: src/dird/dird_conf.c:1304 #, c-format -msgid "Could not find Job for SessId=%d SessTime=%d record.\n" +msgid "Inserting %s res: %s index=%d pass=%d\n" msgstr "" -#: src/stored/bscan.c:666 +#: src/dird/dird_conf.c:1377 #, c-format -msgid "%s file records. At file:blk=%s:%s bytes=%s\n" +msgid "Expected a Job Type keyword, got: %s" msgstr "" -#: src/stored/bscan.c:708 +#: src/dird/dird_conf.c:1401 #, c-format -msgid "Got MD5 record: %s\n" +msgid "Expected a Job Level keyword, got: %s" msgstr "" -#: src/stored/bscan.c:716 +#: src/dird/dird_conf.c:1421 #, c-format -msgid "Got SHA1 record: %s\n" +msgid "Expected a Restore replacement option, got: %s" msgstr "" -#: src/stored/bscan.c:724 +#: src/dird/expand.c:240 #, c-format -msgid "Got SHA256 record: %s\n" +msgid "Count not update counter %s: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:732 +#: src/dird/expand.c:412 #, c-format -msgid "Got SHA512 record: %s\n" +msgid "Cannot create var context: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:740 src/stored/bscan.c:747 -msgid "Got signed digest record\n" +#: src/dird/expand.c:417 +#, c-format +msgid "Cannot set var callback: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:753 +#: src/dird/expand.c:423 #, c-format -msgid "Got Prog Names Stream: %s\n" +msgid "Cannot set var operate: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:759 -msgid "Got Prog Data Stream record.\n" +#: src/dird/expand.c:429 src/dird/expand.c:444 +#, c-format +msgid "Cannot unescape string: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:763 +#: src/dird/expand.c:437 #, c-format -msgid "Unknown stream type!!! stream=%d data=%s\n" +msgid "Cannot expand expression \"%s\": ERR=%s\n" msgstr "" -#: src/stored/bscan.c:827 +#: src/dird/expand.c:455 #, c-format -msgid "Could not create File Attributes record. ERR=%s\n" +msgid "Cannot destroy var context: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:833 -#, c-format -msgid "Created File record: %s\n" +#: src/dird/fd_cmds.c:73 src/tray-monitor/tray-monitor.c:867 +msgid "File daemon" msgstr "" -#: src/stored/bscan.c:870 +#: src/dird/fd_cmds.c:104 #, c-format -msgid "Could not create media record. ERR=%s\n" +msgid "File daemon \"%s\" rejected Job command: %s\n" msgstr "" -#: src/stored/bscan.c:874 src/stored/bscan.c:895 +#: src/dird/fd_cmds.c:117 #, c-format -msgid "Could not update media record. ERR=%s\n" +msgid "Error updating Client record. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:878 +#: src/dird/fd_cmds.c:122 #, c-format -msgid "Created Media record for Volume: %s\n" +msgid "FD gave bad response to JobId command: %s\n" msgstr "" -#: src/stored/bscan.c:899 -#, c-format -msgid "Updated Media record at end of Volume: %s\n" +#: src/dird/fd_cmds.c:144 src/dird/fd_cmds.c:180 +msgid ", since=" msgstr "" -#: src/stored/bscan.c:916 -#, c-format -msgid "Could not create pool record. ERR=%s\n" +#: src/dird/fd_cmds.c:164 +msgid "No prior or suitable Full backup found. Doing FULL backup.\n" msgstr "" -#: src/stored/bscan.c:920 +#: src/dird/fd_cmds.c:165 src/dird/fd_cmds.c:173 #, c-format -msgid "Created Pool record for Pool: %s\n" +msgid " (upgraded from %s)" msgstr "" -#: src/stored/bscan.c:936 src/dird/job.c:624 +#: src/dird/fd_cmds.c:171 #, c-format -msgid "Could not create Client record. ERR=%s\n" +msgid "Prior failed job found. Upgrading to %s.\n" msgstr "" -#: src/stored/bscan.c:940 -#, c-format -msgid "Created Client record for Client: %s\n" +#: src/dird/fd_cmds.c:196 +msgid "since_utime " msgstr "" -#: src/stored/bscan.c:957 +#: src/dird/fd_cmds.c:232 #, c-format -msgid "Fileset \"%s\" already exists.\n" +msgid "Unimplemented backup level %d %c\n" msgstr "" -#: src/stored/bscan.c:961 +#: src/dird/fd_cmds.c:320 src/filed/job.c:566 #, c-format -msgid "Could not create FileSet record \"%s\". ERR=%s\n" +msgid "Cannot run program: %s. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:966 -#, c-format -msgid "Created FileSet record \"%s\"\n" +#: src/dird/fd_cmds.c:331 src/dird/fd_cmds.c:356 src/dird/fd_cmds.c:370 +msgid ">filed: write error on socket\n" msgstr "" -#: src/stored/bscan.c:1013 +#: src/dird/fd_cmds.c:337 #, c-format -msgid "Could not create JobId record. ERR=%s\n" +msgid "Error running program: %s. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1019 +#: src/dird/fd_cmds.c:346 #, c-format -msgid "Could not update job start record. ERR=%s\n" +msgid "Cannot open included file: %s. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1022 +#: src/dird/fd_cmds.c:441 src/filed/job.c:1622 #, c-format -msgid "Created new JobId=%u record for original JobId=%u\n" +msgid "Could not open bootstrap file %s: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1072 +#: src/dird/fd_cmds.c:526 #, c-format -msgid "Could not update JobId=%u record. ERR=%s\n" +msgid "" +" \n" -" -b specify a bootstrap file\n" -" -c specify a configuration file\n" -" -d set debug level to nn\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/stored/bextract.c:198 -#, c-format -msgid "%d Program Name and/or Program Data Stream records ignored.\n" +#: src/dird/next_vol.c:242 +msgid "volume has expired" msgstr "" -#: src/stored/bextract.c:202 +#: src/dird/next_vol.c:260 src/dird/next_vol.c:296 #, c-format -msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" +msgid "Recycled current volume \"%s\"\n" msgstr "" -#: src/stored/bextract.c:226 -#, c-format -msgid "Cannot stat %s. It must exist. ERR=%s\n" +#: src/dird/next_vol.c:265 +msgid "and recycling of current volume failed" msgstr "" -#: src/stored/bextract.c:230 -#, c-format -msgid "%s must be a directory.\n" +#: src/dird/next_vol.c:271 +msgid "but should be Append, Purged or Recycle" msgstr "" -#: src/stored/bextract.c:251 -#, c-format -msgid "%u files restored.\n" +#: src/dird/next_vol.c:299 +msgid "" +"but should be Append, Purged or Recycle (recycling of the current volume " +"failed)" msgstr "" -#: src/stored/bextract.c:278 src/stored/bextract.c:451 -msgid "Logic error output file should be open but is not.\n" +#: src/dird/next_vol.c:303 +msgid "" +"but should be Append, Purged or Recycle (cannot automatically recycle " +"current volume, as it still contains unpruned data)" msgstr "" -#: src/stored/bextract.c:298 src/filed/restore.c:269 +#: src/dird/next_vol.c:343 #, c-format -msgid "%s stream not supported on this Client.\n" +msgid "Unable to get Pool record: ERR=%s" msgstr "" -#: src/stored/bextract.c:347 +#: src/dird/next_vol.c:348 #, c-format -msgid "Seek error on %s: %s\n" +msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" msgstr "" -#: src/stored/bextract.c:359 src/stored/bextract.c:409 src/filed/restore.c:810 -#: src/filed/restore.c:855 +#: src/dird/next_vol.c:361 #, c-format -msgid "Write error on %s: %s\n" +msgid "Failed to move Scratch Volume. ERR=%s\n" msgstr "" -#: src/stored/bextract.c:387 src/filed/restore.c:728 +#: src/dird/next_vol.c:365 #, c-format -msgid "Seek to %s error on %s: ERR=%s\n" +msgid "Using Volume \"%s\" from 'Scratch' pool.\n" msgstr "" -#: src/stored/bextract.c:400 +#: src/dird/next_vol.c:373 #, c-format -msgid "Uncompression error. ERR=%d\n" +msgid "Unable to update Volume record: ERR=%s" msgstr "" -#: src/stored/bextract.c:408 -msgid "===Write error===\n" +#: src/dird/pythondir.c:105 src/filed/pythonfd.c:102 src/filed/pythonfd.c:156 +#: src/filed/pythonfd.c:220 src/stored/pythonsd.c:95 src/stored/pythonsd.c:160 +msgid "Job pointer not found." msgstr "" -#: src/stored/bextract.c:421 src/filed/restore.c:764 -msgid "GZIP data stream found, but GZIP not configured!\n" +#: src/dird/pythondir.c:137 +msgid "Pool record not found." msgstr "" -#: src/stored/bextract.c:442 -msgid "Got Program Name or Data Stream. Ignored.\n" +#: src/dird/pythondir.c:166 src/filed/pythonfd.c:133 src/stored/pythonsd.c:137 +#, c-format +msgid "Attribute %s not found." msgstr "" -#: src/stored/bextract.c:456 src/filed/restore.c:518 -#, c-format -msgid "Unknown stream=%d ignored. This shouldn't happen!\n" +#: src/dird/pythondir.c:209 src/dird/pythondir.c:215 src/filed/pythonfd.c:175 +#: src/stored/pythonsd.c:177 +msgid "Read-only attribute" msgstr "" -#: src/stored/stored.c:65 +#: src/dird/recycle.c:99 #, c-format -msgid "" -"Copyright (C) 2000-2005 Kern Sibbald.\n" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: stored [options] [-c config_file] [config_file]\n" -" -c use as configuration file\n" -" -dnn set debug level to nn\n" -" -f run in foreground (for debugging)\n" -" -g set groupid to group\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 "Recycled volume \"%s\"\n" msgstr "" -#: src/stored/stored.c:107 src/stored/btape.c:157 -#, c-format -msgid "Tape block size (%d) not multiple of system size (%d)\n" +#: src/dird/restore.c:70 +msgid "Cannot restore without bootstrap file.\n" msgstr "" -#: src/stored/stored.c:111 src/stored/btape.c:161 +#: src/dird/restore.c:77 #, c-format -msgid "Tape block size (%d) is not a power of 2\n" +msgid "Start Restore Job %s\n" msgstr "" -#: src/stored/stored.c:189 src/console/console.c:400 -#: src/gnome2-console/console.c:271 src/filed/filed.c:183 src/dird/dird.c:196 -msgid "Cryptography library initialization failed.\n" +#: src/dird/restore.c:219 +msgid "Restore OK -- warning file count mismatch" msgstr "" -#: src/stored/stored.c:193 src/console/console.c:404 -#: src/gnome2-console/console.c:275 src/filed/filed.c:188 src/dird/dird.c:200 -#: src/dird/dird.c:410 src/dird/dird.c:413 -#, c-format -msgid "Please correct configuration file: %s\n" +#: src/dird/restore.c:221 +msgid "Restore OK" msgstr "" -#: src/stored/stored.c:220 -msgid "Volume Session Time is ZERO!\n" +#: src/dird/restore.c:226 +msgid "*** Restore Error ***" msgstr "" -#: src/stored/stored.c:233 -#, c-format -msgid "Unable to create thread. ERR=%s\n" +#: src/dird/restore.c:236 +msgid "Restore Canceled" msgstr "" -#: src/stored/stored.c:271 +#: src/dird/restore.c:263 #, c-format -msgid "Only one Storage resource permitted in %s\n" +msgid "" +"Bacula %s (%s): %s\n" +" JobId: %d\n" +" Job: %s\n" +" 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/stored.c:276 +#: src/dird/run_conf.c:188 #, c-format -msgid "No Director resource defined in %s. Cannot continue.\n" +msgid "Expected an equals, got: %s" msgstr "" -#: src/stored/stored.c:281 +#: src/dird/run_conf.c:201 src/dird/run_conf.c:213 #, c-format -msgid "No Device resource defined in %s. Cannot continue.\n" +msgid "Expect a YES or NO, got: %s" msgstr "" -#: src/stored/stored.c:289 +#: src/dird/run_conf.c:227 #, c-format -msgid "No Messages resource defined in %s. Cannot continue.\n" -msgstr "" - -#: src/stored/stored.c:309 src/console/console.c:582 src/console/console.c:611 -#: src/gnome2-console/console.c:140 src/gnome2-console/console.c:169 -#: src/filed/filed.c:302 src/filed/filed.c:470 src/dird/dird.c:496 -#: src/dird/dird.c:722 src/dird/dird.c:788 src/dird/dird.c:840 -#: src/wx-console/console_thread.cpp:94 src/wx-console/console_thread.cpp:120 -msgid "TLS required but not configured in Bacula.\n" +msgid "Job level field: %s not found in run record" msgstr "" -#: src/stored/stored.c:316 +#: src/dird/run_conf.c:245 #, c-format -msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" +msgid "Could not find specified Pool Resource: %s" msgstr "" -#: src/stored/stored.c:322 +#: src/dird/run_conf.c:270 #, c-format -msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" +msgid "Could not find specified Storage Resource: %s" msgstr "" -#: src/stored/stored.c:328 +#: src/dird/run_conf.c:282 #, 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 "Could not find specified Messages Resource: %s" msgstr "" -#: src/stored/stored.c:347 src/dird/dird.c:744 +#: src/dird/run_conf.c:290 #, c-format -msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" +msgid "Expected a keyword name, got: %s" msgstr "" -#: src/stored/stored.c:361 src/filed/filed.c:479 src/dird/dird.c:502 -#, c-format -msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" +#: src/dird/run_conf.c:327 +msgid "Day number out of range (1-31)" msgstr "" -#: src/stored/stored.c:367 src/filed/filed.c:485 src/dird/dird.c:508 -#, c-format -msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" +#: src/dird/run_conf.c:344 src/dird/run_conf.c:490 +msgid "Week number out of range (0-53)" msgstr "" -#: src/stored/stored.c:373 src/filed/filed.c:491 src/dird/dird.c:514 +#: src/dird/run_conf.c:359 #, 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 "Job type field: %s in run record not found" msgstr "" -#: src/stored/stored.c:392 src/filed/filed.c:510 src/dird/dird.c:533 +#: src/dird/run_conf.c:366 #, c-format -msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" +msgid "Unexpected token: %d:%s" msgstr "" -#: src/stored/stored.c:455 -#, c-format -msgid "Could not initialize %s\n" +#: src/dird/run_conf.c:410 +msgid "Time must be preceded by keyword AT." msgstr "" -#: src/stored/stored.c:468 -#, c-format -msgid "Could not open device %s\n" +#: src/dird/run_conf.c:418 +msgid "Time logic error.\n" msgstr "" -#: src/stored/stored.c:481 -#, c-format -msgid "Could not mount device %s\n" +#: src/dird/run_conf.c:430 src/dird/run_conf.c:446 +msgid "Bad time specification." msgstr "" -#: src/stored/btape.c:164 -#, c-format -msgid "" -"\n" -"\n" -"!!!! Warning large disk addressing disabled. off_t=%d should be 8 or " -"more !!!!!\n" -"\n" -"\n" +#: src/dird/run_conf.c:459 +msgid "Range logic error.\n" msgstr "" -#: src/stored/btape.c:171 -#, c-format -msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" +#: src/dird/run_conf.c:468 +msgid "Bad day range specification." msgstr "" -#: src/stored/btape.c:180 -msgid "64 bit printf/scanf problem. i=%d x64=%" +#: src/dird/run_conf.c:515 +msgid "Invalid month, week or position day range" msgstr "" -#: src/stored/btape.c:180 -msgid " y64=%" +#: src/dird/run_conf.c:530 +msgid "Invalid month, weekday or position range" msgstr "" -#: src/stored/btape.c:180 src/dird/ua_status.c:730 -msgid "\n" +#: src/dird/run_conf.c:589 +msgid "Unexpected run state\n" msgstr "" -#: src/stored/btape.c:184 +#: src/dird/scheduler.c:80 #, c-format -msgid "Tape block granularity is %d bytes.\n" +msgid "Job %s not found\n" msgstr "" -#: src/stored/btape.c:251 -msgid "No archive name specified.\n" +#: src/dird/scheduler.c:103 +msgid "Walk queue" msgstr "" -#: src/stored/btape.c:255 -msgid "Improper number of arguments specified.\n" +#: src/dird/scheduler.c:113 +msgid "Dequeued job" msgstr "" -#: src/stored/btape.c:333 src/stored/bcopy.c:172 src/stored/device.c:266 -#, c-format -msgid "dev open failed: %s\n" +#: src/dird/scheduler.c:116 +msgid "Scheduler logic error\n" msgstr "" -#: src/stored/btape.c:338 -#, c-format -msgid "open device %s: OK\n" +#: src/dird/scheduler.c:132 +msgid "Run job" msgstr "" -#: src/stored/btape.c:359 -msgid "Enter Volume Name: " +#: src/dird/scheduler.c:349 +msgid "Inserted job" msgstr "" -#: src/stored/btape.c:366 -#, c-format -msgid "Device open failed. ERR=%s\n" +#: src/dird/scheduler.c:357 +msgid "Appended job" msgstr "" -#: src/stored/btape.c:371 -#, c-format -msgid "Wrote Volume label for volume \"%s\".\n" +#: src/dird/scheduler.c:361 +msgid "Run queue" msgstr "" -#: src/stored/btape.c:385 -msgid "Volume has no label.\n" +#: src/dird/ua_cmds.c:90 +msgid "add media to a pool" msgstr "" -#: src/stored/btape.c:388 -msgid "Volume label read correctly.\n" +#: src/dird/ua_cmds.c:91 +msgid "autodisplay [on|off] -- console messages" msgstr "" -#: src/stored/btape.c:391 -#, c-format -msgid "I/O error on device: ERR=%s" +#: src/dird/ua_cmds.c:92 +msgid "automount [on|off] -- after label" msgstr "" -#: src/stored/btape.c:394 -msgid "Volume name error\n" +#: src/dird/ua_cmds.c:93 +msgid "cancel [ | ] -- cancel a job" msgstr "" -#: src/stored/btape.c:397 -#, c-format -msgid "Error creating label. ERR=%s" +#: src/dird/ua_cmds.c:94 +msgid "create DB Pool from resource" msgstr "" -#: src/stored/btape.c:400 -msgid "Volume version error.\n" +#: src/dird/ua_cmds.c:95 +msgid "delete [pool= | media volume=]" msgstr "" -#: src/stored/btape.c:403 -msgid "Bad Volume label type.\n" +#: src/dird/ua_cmds.c:96 +msgid "disable -- disable a job" msgstr "" -#: src/stored/btape.c:406 -msgid "Unknown error.\n" +#: src/dird/ua_cmds.c:97 +msgid "enable -- enable a job" msgstr "" -#: src/stored/btape.c:424 -#, c-format -msgid "Bad status from load. ERR=%s\n" +#: src/dird/ua_cmds.c:98 +msgid "performs FileSet estimate, listing gives full listing" msgstr "" -#: src/stored/btape.c:426 -#, c-format -msgid "Loaded %s\n" +#: src/dird/ua_cmds.c:100 +msgid "gui [on|off] -- non-interactive gui mode" msgstr "" -#: src/stored/btape.c:435 src/stored/btape.c:775 src/stored/btape.c:817 -#: src/stored/btape.c:887 src/stored/btape.c:929 src/stored/btape.c:1197 -#, c-format -msgid "Bad status from rewind. ERR=%s\n" +#: src/dird/ua_cmds.c:101 src/stored/btape.c:2540 +msgid "print this command" msgstr "" -#: src/stored/btape.c:438 src/stored/btape.c:1205 -#, c-format -msgid "Rewound %s\n" +#: src/dird/ua_cmds.c:102 +msgid "" +"list [pools | jobs | jobtotals | media | files ]; " +"from catalog" msgstr "" -#: src/stored/btape.c:465 src/stored/btape.c:1209 -#, c-format -msgid "Bad status from weof %d. ERR=%s\n" +#: src/dird/ua_cmds.c:103 +msgid "label a tape" msgstr "" -#: src/stored/btape.c:469 -#, c-format -msgid "Wrote 1 EOF to %s\n" +#: src/dird/ua_cmds.c:104 +msgid "full or long list like list command" msgstr "" -#: src/stored/btape.c:472 -#, c-format -msgid "Wrote %d EOFs to %s\n" +#: src/dird/ua_cmds.c:105 +msgid "messages" msgstr "" -#: src/stored/btape.c:490 -msgid "Moved to end of medium.\n" +#: src/dird/ua_cmds.c:106 +msgid "mount " msgstr "" -#: src/stored/btape.c:517 -#, c-format -msgid "Bad status from bsf. ERR=%s\n" +#: src/dird/ua_cmds.c:107 +msgid "prune expired records from catalog" msgstr "" -#: src/stored/btape.c:519 -#, c-format -msgid "Backspaced %d file%s.\n" +#: src/dird/ua_cmds.c:108 +msgid "purge records from catalog" msgstr "" -#: src/stored/btape.c:536 -#, c-format -msgid "Bad status from bsr. ERR=%s\n" +#: src/dird/ua_cmds.c:109 +msgid "python control commands" msgstr "" -#: src/stored/btape.c:538 -#, c-format -msgid "Backspaced %d record%s.\n" +#: src/dird/ua_cmds.c:111 +msgid "query catalog" msgstr "" -#: src/stored/btape.c:566 -#, c-format -msgid "Device status:\n" +#: src/dird/ua_cmds.c:112 +msgid "restore files" msgstr "" -#: src/stored/btape.c:585 -#, c-format -msgid "Status:\n" +#: src/dird/ua_cmds.c:113 +msgid "relabel a tape" msgstr "" -#: src/stored/btape.c:600 -msgid "" -"Test writting 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/ua_cmds.c:114 +msgid "release " msgstr "" -#: src/stored/btape.c:606 src/dird/ua_label.c:498 -msgid "Do you want to continue? (y/n): " +#: src/dird/ua_cmds.c:115 +msgid "reload conf file" msgstr "" -#: src/stored/btape.c:608 src/stored/btape.c:1814 -msgid "Command aborted.\n" +#: src/dird/ua_cmds.c:116 +msgid "run " msgstr "" -#: src/stored/btape.c:624 -#, c-format -msgid "Block %d i=%d\n" +#: src/dird/ua_cmds.c:117 +msgid "status [storage | client]=" msgstr "" -#: src/stored/btape.c:650 -msgid "Skipping read backwards test because BSR turned off.\n" +#: src/dird/ua_cmds.c:118 +msgid "sets debug level" msgstr "" -#: src/stored/btape.c:654 -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_cmds.c:119 +msgid "sets new client address -- if authorized" msgstr "" -#: src/stored/btape.c:667 src/stored/btape.c:678 src/stored/btape.c:689 -#: src/stored/btape.c:787 src/stored/btape.c:803 src/stored/btape.c:899 -#: src/stored/btape.c:915 src/stored/btape.c:1523 src/stored/btape.c:2405 -msgid "Error writing record to block.\n" +#: src/dird/ua_cmds.c:120 +msgid "show (resource records) [jobs | pools | ... | all]" msgstr "" -#: src/stored/btape.c:671 src/stored/btape.c:682 src/stored/btape.c:693 -#: src/stored/btape.c:791 src/stored/btape.c:807 src/stored/btape.c:903 -#: src/stored/btape.c:919 src/stored/btape.c:1527 src/stored/btape.c:2409 -msgid "Error writing block to device.\n" +#: src/dird/ua_cmds.c:121 +msgid "use SQL to query catalog" msgstr "" -#: src/stored/btape.c:674 -#, c-format -msgid "Wrote first record of %d bytes.\n" +#: src/dird/ua_cmds.c:123 +msgid "turn on/off trace to file" msgstr "" -#: src/stored/btape.c:685 -#, c-format -msgid "Wrote second record of %d bytes.\n" +#: src/dird/ua_cmds.c:124 +msgid "unmount " msgstr "" -#: src/stored/btape.c:696 -#, c-format -msgid "Wrote third record of %d bytes.\n" +#: src/dird/ua_cmds.c:125 +msgid "umount for old-time Unix guys" msgstr "" -#: src/stored/btape.c:703 src/stored/btape.c:708 -#, c-format -msgid "Backspace file failed! ERR=%s\n" +#: src/dird/ua_cmds.c:126 +msgid "update Volume, Pool or slots" msgstr "" -#: src/stored/btape.c:712 -msgid "Backspaced over EOF OK.\n" +#: src/dird/ua_cmds.c:127 +msgid "use catalog xxx" msgstr "" -#: src/stored/btape.c:714 -#, c-format -msgid "Backspace record failed! ERR=%s\n" +#: src/dird/ua_cmds.c:128 +msgid "does variable expansion" msgstr "" -#: src/stored/btape.c:717 -msgid "Backspace record OK.\n" +#: src/dird/ua_cmds.c:129 +msgid "print Director version" msgstr "" -#: src/stored/btape.c:720 src/stored/btape.c:726 -#, c-format -msgid "Read block failed! ERR=%s\n" +#: src/dird/ua_cmds.c:130 +msgid "wait until no jobs are running" msgstr "" -#: src/stored/btape.c:731 -msgid "Bad data in record. Test failed!\n" +#: src/dird/ua_cmds.c:168 +#, c-format +msgid "%s: is an illegal command.\n" msgstr "" -#: src/stored/btape.c:735 +#: src/dird/ua_cmds.c:206 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" -"Block re-read correct. Test succeeded!\n" msgstr "" -#: src/stored/btape.c:736 -msgid "" -"=== End Write, backup, and re-read test ===\n" -"\n" +#: src/dird/ua_cmds.c:225 +#, c-format +msgid "Pool already has maximum volumes = %d\n" msgstr "" -#: src/stored/btape.c:743 -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_cmds.c:227 +msgid "Enter new maximum (zero for unlimited): " msgstr "" -#: src/stored/btape.c:767 -msgid "" -"\n" -"=== Write, rewind, and re-read test ===\n" -"\n" -"I'm going to write 1000 records and an EOF\n" -"then write 1000 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_cmds.c:248 +#, c-format +msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " msgstr "" -#: src/stored/btape.c:795 src/stored/btape.c:811 src/stored/btape.c:907 -#: src/stored/btape.c:923 +#: src/dird/ua_cmds.c:254 #, c-format -msgid "Wrote 1000 blocks of %d bytes.\n" +msgid "The number must be between 0 and %d\n" msgstr "" -#: src/stored/btape.c:820 src/stored/btape.c:932 -msgid "Rewind OK.\n" +#: src/dird/ua_cmds.c:261 +msgid "Enter Volume name: " msgstr "" -#: src/stored/btape.c:827 src/stored/btape.c:981 -msgid "Got EOF on tape.\n" +#: src/dird/ua_cmds.c:265 +msgid "Enter base volume name: " msgstr "" -#: src/stored/btape.c:832 -#, c-format -msgid "Read block %d failed! ERR=%s\n" +#: src/dird/ua_cmds.c:274 src/dird/ua_label.c:605 +msgid "Volume name too long.\n" msgstr "" -#: src/stored/btape.c:838 -#, c-format -msgid "Read record failed. Block %d! ERR=%s\n" +#: src/dird/ua_cmds.c:278 src/dird/ua_label.c:611 src/lib/edit.c:413 +msgid "Volume name must be at least one character long.\n" msgstr "" -#: src/stored/btape.c:844 src/stored/btape.c:1011 -#, c-format -msgid "Bad data in record. Expected %d, got %d at byte %d. Test failed!\n" +#: src/dird/ua_cmds.c:287 +msgid "Enter the starting number: " msgstr "" -#: src/stored/btape.c:851 -msgid "1000 blocks re-read correctly.\n" +#: src/dird/ua_cmds.c:292 +msgid "Start number must be greater than zero.\n" msgstr "" -#: src/stored/btape.c:854 src/stored/btape.c:1018 -msgid "" -"=== Test Succeeded. End Write, rewind, and re-read test ===\n" -"\n" +#: src/dird/ua_cmds.c:303 +msgid "Enter slot (0 for none): " msgstr "" -#: src/stored/btape.c:879 -msgid "" -"\n" -"=== Write, rewind, and position test ===\n" -"\n" -"I'm going to write 1000 records and an EOF\n" -"then write 1000 records and an EOF, then rewind,\n" -"and position to a few blocks and verify that it is correct.\n" -"\n" -"This is an *essential* feature ...\n" -"\n" +#: src/dird/ua_cmds.c:307 +msgid "InChanger? yes/no: " msgstr "" -#: src/stored/btape.c:972 +#: src/dird/ua_cmds.c:334 #, c-format -msgid "Reposition to file:block %d:%d\n" +msgid "%d Volumes created in pool %s\n" msgstr "" -#: src/stored/btape.c:974 -msgid "Reposition error.\n" +#: src/dird/ua_cmds.c:350 src/dird/ua_cmds.c:917 +msgid "Turn on or off? " msgstr "" -#: src/stored/btape.c:987 -#, c-format -msgid "" -"Read block %d failed! file=%d blk=%d. ERR=%s\n" -"\n" +#: src/dird/ua_cmds.c:358 src/dird/ua_cmds.c:925 +msgid "off" msgstr "" -#: src/stored/btape.c:989 -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_cmds.c:378 +msgid "jobid" msgstr "" -#: src/stored/btape.c:1005 +#: src/dird/ua_cmds.c:385 #, c-format -msgid "Read record failed! ERR=%s\n" +msgid "JobId %s is not running. Use Job name to cancel inactive jobs.\n" msgstr "" -#: src/stored/btape.c:1016 +#: src/dird/ua_cmds.c:389 +msgid "job" +msgstr "" + +#: src/dird/ua_cmds.c:394 #, c-format -msgid "Block %d re-read correctly.\n" +msgid "Warning Job %s is not running. Continuing anyway ...\n" msgstr "" -#: src/stored/btape.c:1037 -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_cmds.c:416 src/filed/status.c:195 src/stored/status.c:343 +msgid "No Jobs running.\n" msgstr "" -#: src/stored/btape.c:1061 -msgid "Now moving to end of medium.\n" +#: src/dird/ua_cmds.c:419 +msgid "Select Job:\n" msgstr "" -#: src/stored/btape.c:1063 src/stored/btape.c:1292 +#: src/dird/ua_cmds.c:425 #, c-format -msgid "We should be in file 3. I am at file %d. %s\n" +msgid "JobId=%s Job=%s" msgstr "" -#: src/stored/btape.c:1064 src/stored/btape.c:1082 src/stored/btape.c:1281 -#: src/stored/btape.c:1293 src/stored/btape.c:1306 src/stored/btape.c:1323 -msgid "This is correct!" +#: src/dird/ua_cmds.c:430 +msgid "Choose Job to cancel" msgstr "" -#: src/stored/btape.c:1064 src/stored/btape.c:1082 src/stored/btape.c:1281 -#: src/stored/btape.c:1293 src/stored/btape.c:1306 src/stored/btape.c:1323 -msgid "This is NOT correct!!!!" +#: src/dird/ua_cmds.c:434 +msgid "Confirm cancel (yes/no): " msgstr "" -#: src/stored/btape.c:1070 -msgid "" -"\n" -"Now the important part, I am going to attempt to append to the tape.\n" -"\n" +#: src/dird/ua_cmds.c:442 +#, c-format +msgid "Job %s not found.\n" msgstr "" -#: src/stored/btape.c:1077 +#: src/dird/ua_cmds.c:547 +#, c-format msgid "" -"Done appending, there should be no I/O errors\n" -"\n" -msgstr "" - -#: src/stored/btape.c:1078 -msgid "Doing Bacula scan of blocks:\n" +"Error: Pool %s already exists.\n" +"Use update to change it.\n" msgstr "" -#: src/stored/btape.c:1080 -msgid "End scanning the tape.\n" +#: src/dird/ua_cmds.c:558 +#, c-format +msgid "Pool %s created.\n" msgstr "" -#: src/stored/btape.c:1081 src/stored/btape.c:1305 -#, c-format -msgid "We should be in file 4. I am at file %d. %s\n" +#: src/dird/ua_cmds.c:571 +msgid "restart" msgstr "" -#: src/stored/btape.c:1106 -msgid "" -"\n" -"Autochanger enabled, but no name or no command device specified.\n" +#: src/dird/ua_cmds.c:575 +msgid "Python interpreter restarted.\n" msgstr "" -#: src/stored/btape.c:1110 -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_cmds.c:577 src/dird/ua_cmds.c:1145 +msgid "Nothing done.\n" msgstr "" -#: src/stored/btape.c:1113 -msgid "" -"\n" -"Do you wish to continue with the Autochanger test? (y/n): " +#: src/dird/ua_cmds.c:593 src/dird/ua_cmds.c:639 +msgid "Illegal command from this console.\n" msgstr "" -#: src/stored/btape.c:1120 -msgid "" -"\n" -"\n" -"=== Autochanger test ===\n" -"\n" +#: src/dird/ua_cmds.c:600 src/dird/ua_run.c:353 +#, c-format +msgid "Client \"%s\" not found.\n" msgstr "" -#: src/stored/btape.c:1129 -msgid "3301 Issuing autochanger \"loaded\" command.\n" +#: src/dird/ua_cmds.c:609 +#, c-format +msgid "Client \"%s\" address set to %s\n" msgstr "" -#: src/stored/btape.c:1138 +#: src/dird/ua_cmds.c:634 #, c-format -msgid "3991 Bad autochanger command: %s\n" +msgid "Job \"%s\" not found.\n" msgstr "" -#: src/stored/btape.c:1139 +#: src/dird/ua_cmds.c:643 #, c-format -msgid "3991 result=\"%s\": ERR=%s\n" +msgid "Job \"%s\" %sabled\n" msgstr "" -#: src/stored/btape.c:1143 +#: src/dird/ua_cmds.c:667 src/dird/ua_status.c:286 #, c-format -msgid "Slot %d loaded. I am going to unload it.\n" +msgid "Connecting to Storage daemon %s at %s:%d\n" msgstr "" -#: src/stored/btape.c:1145 -msgid "Nothing loaded in the drive. OK.\n" +#: src/dird/ua_cmds.c:673 src/dird/ua_status.c:297 +msgid "Connected to storage daemon\n" msgstr "" -#: src/stored/btape.c:1152 +#: src/dird/ua_cmds.c:693 src/dird/ua_cmds.c:1032 src/dird/ua_status.c:324 #, c-format -msgid "3302 Issuing autochanger \"unload %d %d\" command.\n" +msgid "Connecting to Client %s at %s:%d\n" msgstr "" -#: src/stored/btape.c:1157 -#, c-format -msgid "unload status=%s %d\n" +#: src/dird/ua_cmds.c:696 src/dird/ua_cmds.c:1035 +msgid "Failed to connect to Client.\n" msgstr "" -#: src/stored/btape.c:1157 -msgid "Bad" +#: src/dird/ua_cmds.c:812 +msgid "Enter new debug level: " msgstr "" -#: src/stored/btape.c:1160 -#, c-format -msgid "3992 Bad autochanger command: %s\n" +#: src/dird/ua_cmds.c:878 +msgid "Available daemons are: \n" msgstr "" -#: src/stored/btape.c:1161 -#, c-format -msgid "3992 result=\"%s\": ERR=%s\n" +#: src/dird/ua_cmds.c:883 +msgid "Select daemon type to set debug level" msgstr "" -#: src/stored/btape.c:1171 +#: src/dird/ua_cmds.c:987 src/dird/ua_run.c:478 #, c-format -msgid "3303 Issuing autochanger \"load %d %d\" command.\n" +msgid "Level %s not valid.\n" msgstr "" -#: src/stored/btape.c:1179 -#, c-format -msgid "3303 Autochanger \"load %d %d\" status is OK.\n" +#: src/dird/ua_cmds.c:1000 +msgid "No job specified.\n" msgstr "" -#: src/stored/btape.c:1183 -#, c-format -msgid "3993 Bad autochanger command: %s\n" +#: src/dird/ua_cmds.c:1040 +msgid "Error sending include list.\n" msgstr "" -#: src/stored/btape.c:1184 -#, c-format -msgid "3993 result=\"%s\": ERR=%s\n" +#: src/dird/ua_cmds.c:1045 +msgid "Error sending exclude list.\n" msgstr "" -#: src/stored/btape.c:1199 +#: src/dird/ua_cmds.c:1131 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 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/stored/btape.c:1212 -#, c-format -msgid "Wrote EOF to %s\n" +#: src/dird/ua_cmds.c:1134 +msgid "Choose catalog item to delete" +msgstr "" + +#: src/dird/ua_cmds.c:1202 +msgid "Enter JobId to delete: " msgstr "" -#: src/stored/btape.c:1216 +#: src/dird/ua_cmds.c:1245 #, 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" +msgid "Job %s and associated records deleted from the catalog.\n" msgstr "" -#: src/stored/btape.c:1221 +#: src/dird/ua_cmds.c:1258 +#, c-format msgid "" "\n" -"The test autochanger worked!!\n" -"\n" -msgstr "" - -#: src/stored/btape.c:1232 -msgid "You must correct this error or the Autochanger will not work.\n" +"This command will delete volume %s\n" +"and all Jobs saved on that volume from the Catalog\n" msgstr "" -#: src/stored/btape.c:1250 -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_cmds.c:1262 +msgid "Are you sure you want to delete this Volume? (yes/no): " msgstr "" -#: src/stored/btape.c:1275 -msgid "Now forward spacing 1 file.\n" +#: src/dird/ua_cmds.c:1283 +msgid "Are you sure you want to delete this Pool? (yes/no): " msgstr "" -#: src/stored/btape.c:1277 src/stored/btape.c:1289 src/stored/btape.c:1302 -#: src/stored/btape.c:1320 src/stored/btape.c:1489 +#: src/dird/ua_cmds.c:1380 #, c-format -msgid "Bad status from fsr. ERR=%s\n" +msgid "Using Catalog name=%s DB=%s\n" msgstr "" -#: src/stored/btape.c:1280 +#: src/dird/ua_cmds.c:1421 src/dird/ua_tree.c:622 src/stored/btape.c:2587 #, c-format -msgid "We should be in file 1. I am at file %d. %s\n" -msgstr "" - -#: src/stored/btape.c:1287 -msgid "Now forward spacing 2 files.\n" +msgid "" +" Command Description\n" +" ======= ===========\n" msgstr "" -#: src/stored/btape.c:1300 -msgid "Now forward spacing 4 files.\n" +#: src/dird/ua_cmds.c:1423 +#, c-format +msgid " %-10s %s\n" msgstr "" -#: src/stored/btape.c:1312 +#: src/dird/ua_cmds.c:1425 msgid "" -"The test worked this time. Please add:\n" "\n" -" Fast Forward Space File = no\n" +"When at a prompt, entering a period cancels the command.\n" "\n" -"to your Device resource for this drive.\n" -msgstr "" - -#: src/stored/btape.c:1318 -msgid "Now forward spacing 1 more file.\n" msgstr "" -#: src/stored/btape.c:1322 +#: src/dird/ua_cmds.c:1441 #, c-format -msgid "We should be in file 5. I am at file %d. %s\n" -msgstr "" - -#: src/stored/btape.c:1327 -msgid "" -"\n" -"=== End Forward space files test ===\n" -"\n" +msgid "%s Version: %s (%s)\n" msgstr "" -#: src/stored/btape.c:1331 -msgid "" -"\n" -"The forward space file test failed.\n" +#: src/dird/ua_cmds.c:1460 +msgid "Could not find a Catalog resource\n" msgstr "" -#: src/stored/btape.c:1333 -msgid "" -"You have Fast Forward Space File enabled.\n" -"I am turning it off then retrying the test.\n" +#: src/dird/ua_cmds.c:1463 +msgid "You must specify a \"use \" command before continuing.\n" msgstr "" -#: src/stored/btape.c:1339 -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_cmds.c:1467 +#, c-format +msgid "Using default Catalog name=%s DB=%s\n" msgstr "" -#: src/stored/btape.c:1371 -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_dotcmds.c:131 +msgid "The Director will segment fault.\n" msgstr "" -#: src/stored/btape.c:1379 -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_dotcmds.c:231 src/dird/ua_restore.c:740 +#: src/dird/ua_restore.c:778 src/dird/ua_restore.c:809 +#, c-format +msgid "Query failed: %s. ERR=%s\n" msgstr "" -#: src/stored/btape.c:1386 -msgid "" -"\n" -"\n" -"That appears *NOT* to have corrected the problem.\n" +#: src/dird/ua_input.c:82 +msgid "Enter slot" msgstr "" -#: src/stored/btape.c:1391 -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_input.c:86 src/dird/ua_input.c:92 +#, c-format +msgid "Expected a positive integer, got: %s\n" msgstr "" -#: src/stored/btape.c:1396 -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_input.c:120 src/dird/ua_run.c:862 src/dird/ua_select.c:54 +#: src/dird/ua_update.c:223 src/dird/ua_update.c:237 src/dird/ua_update.c:247 +#: src/dird/ua_update.c:261 src/dird/ua_update.c:551 +#: src/stored/parse_bsr.c:741 src/tools/dbcheck.c:1098 +msgid "yes" msgstr "" -#: src/stored/btape.c:1407 -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_input.c:124 src/dird/ua_select.c:57 src/dird/ua_update.c:225 +#: src/dird/ua_update.c:237 src/dird/ua_update.c:249 src/dird/ua_update.c:261 +#: src/dird/ua_update.c:551 src/stored/parse_bsr.c:741 +msgid "no" msgstr "" -#: src/stored/btape.c:1428 -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_input.c:127 +msgid "Invalid response. You must answer yes or no.\n" msgstr "" -#: src/stored/btape.c:1467 -#, c-format -msgid "Bad status from fsf. ERR=%s\n" +#: src/dird/ua_label.c:89 +msgid "Negative numbers not permitted\n" msgstr "" -#: src/stored/btape.c:1471 -msgid "Forward spaced 1 file.\n" +#: src/dird/ua_label.c:95 +msgid "Range end is not integer.\n" msgstr "" -#: src/stored/btape.c:1474 -#, c-format -msgid "Forward spaced %d files.\n" +#: src/dird/ua_label.c:100 +msgid "Range start is not an integer.\n" msgstr "" -#: src/stored/btape.c:1493 -msgid "Forward spaced 1 record.\n" +#: src/dird/ua_label.c:106 +msgid "Range end not bigger than start.\n" msgstr "" -#: src/stored/btape.c:1496 -#, c-format -msgid "Forward spaced %d records.\n" +#: src/dird/ua_label.c:112 +msgid "Input value is not an integer.\n" msgstr "" -#: src/stored/btape.c:1530 -#, c-format -msgid "Wrote one record of %d bytes.\n" +#: src/dird/ua_label.c:118 +msgid "Values must be be greater than zero.\n" msgstr "" -#: src/stored/btape.c:1532 -msgid "Wrote block to device.\n" +#: src/dird/ua_label.c:122 +msgid "Slot too large.\n" msgstr "" -#: src/stored/btape.c:1547 -msgid "Enter length to read: " +#: src/dird/ua_label.c:176 src/dird/ua_label.c:473 +msgid "No slots in changer to scan.\n" msgstr "" -#: src/stored/btape.c:1552 -msgid "Bad length entered, using default of 1024 bytes.\n" +#: src/dird/ua_label.c:188 src/dird/ua_label.c:484 +msgid "No Volumes found to label, or no barcodes.\n" msgstr "" -#: src/stored/btape.c:1561 +#: src/dird/ua_label.c:198 #, c-format -msgid "Read of %d bytes gives stat=%d. ERR=%s\n" +msgid "Slot %d greater than max %d ignored.\n" msgstr "" -#: src/stored/btape.c:1584 src/stored/btape.c:1633 +#: src/dird/ua_label.c:227 #, c-format -msgid "End of tape\n" +msgid "No VolName for Slot=%d InChanger set to zero.\n" msgstr "" -#: src/stored/btape.c:1589 +#: src/dird/ua_label.c:242 #, c-format -msgid "Starting scan at file %u\n" +msgid "Catalog record for Volume \"%s\" updated to reference slot %d.\n" msgstr "" -#: src/stored/btape.c:1594 src/stored/dev.c:1228 +#: src/dird/ua_label.c:246 #, c-format -msgid "read error on %s. ERR=%s.\n" +msgid "Catalog record for Volume \"%s\" is up to date.\n" msgstr "" -#: src/stored/btape.c:1596 +#: src/dird/ua_label.c:252 #, c-format -msgid "Bad status from read %d. ERR=%s\n" +msgid "Volume \"%s\" not found in catalog. Slot=%d InChanger set to zero.\n" msgstr "" -#: src/stored/btape.c:1599 src/stored/btape.c:1613 src/stored/btape.c:1677 -#: src/stored/btape.c:1689 src/stored/btape.c:1702 src/stored/btape.c:1718 +#: src/dird/ua_label.c:344 #, c-format -msgid "1 block of %d bytes in file %d\n" +msgid "" +"Volume \"%s\" has VolStatus %s. It must be Purged or Recycled before " +"relabeling.\n" msgstr "" -#: src/stored/btape.c:1602 src/stored/btape.c:1616 src/stored/btape.c:1680 -#: src/stored/btape.c:1692 src/stored/btape.c:1705 src/stored/btape.c:1721 -#, c-format -msgid "%d blocks of %d bytes in file %d\n" +#: src/dird/ua_label.c:360 +msgid "Enter new Volume name: " msgstr "" -#: src/stored/btape.c:1624 src/stored/btape.c:1696 +#: src/dird/ua_label.c:373 #, c-format -msgid "End of File mark.\n" +msgid "Media record for new Volume \"%s\" already exists.\n" msgstr "" -#: src/stored/btape.c:1645 src/stored/btape.c:1749 -#, c-format -msgid "Total files=%d, blocks=%d, bytes = %s\n" +#: src/dird/ua_label.c:388 +msgid "Enter slot (0 or Enter for none): " msgstr "" -#: src/stored/btape.c:1709 +#: src/dird/ua_label.c:413 #, c-format -msgid "Short block read.\n" +msgid "Delete of Volume \"%s\" failed. ERR=%s" msgstr "" -#: src/stored/btape.c:1712 +#: src/dird/ua_label.c:416 #, c-format -msgid "Error reading block. ERR=%s\n" +msgid "Old volume \"%s\" deleted from catalog.\n" msgstr "" -#: src/stored/btape.c:1736 +#: src/dird/ua_label.c:427 #, c-format -msgid "" -"Blk_block: %u dev_blk=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=%" -"s rlen=%d\n" +msgid "Requesting to mount %s ...\n" msgstr "" -#: src/stored/btape.c:1758 -#, c-format -msgid "Device status: %u. ERR=%s\n" +#: src/dird/ua_label.c:449 +msgid "Do not forget to mount the drive!!!\n" msgstr "" -#: src/stored/btape.c:1788 +#: src/dird/ua_label.c:489 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 3.2 GB. 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" +"The following Volumes will be labeled:\n" +"Slot Volume\n" +"==============\n" msgstr "" -#: src/stored/btape.c:1805 -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_label.c:498 src/stored/btape.c:606 +msgid "Do you want to continue? (y/n): " msgstr "" -#: src/stored/btape.c:1808 -msgid "Simple test (single tape) selected.\n" +#: src/dird/ua_label.c:519 +#, c-format +msgid "Media record for Slot %d Volume \"%s\" already exists.\n" msgstr "" -#: src/stored/btape.c:1811 -msgid "Multiple tape test selected.\n" +#: src/dird/ua_label.c:525 +#, c-format +msgid "Error setting InChanger: ERR=%s" msgstr "" -#: src/stored/btape.c:1827 -msgid "Rewind failed.\n" +#: src/dird/ua_label.c:548 +#, c-format +msgid "Maximum pool Volumes=%d reached.\n" msgstr "" -#: src/stored/btape.c:1830 -msgid "Write EOF failed.\n" +#: src/dird/ua_label.c:555 +#, c-format +msgid "Catalog record for cleaning tape \"%s\" successfully created.\n" msgstr "" -#: src/stored/btape.c:1857 -msgid "Wrote Start of Session label.\n" +#: src/dird/ua_label.c:562 +#, c-format +msgid "Catalog error on cleaning tape: %s" msgstr "" -#: src/stored/btape.c:1888 +#: src/dird/ua_label.c:598 #, c-format -msgid "%s Begin writing Bacula records to tape ...\n" +msgid "Illegal character \"%c\" in a volume name.\n" msgstr "" -#: src/stored/btape.c:1890 +#: src/dird/ua_label.c:643 #, c-format -msgid "%s Begin writing Bacula records to first tape ...\n" +msgid "Sending relabel command from \"%s\" to \"%s\" ...\n" msgstr "" -#: src/stored/btape.c:1931 +#: src/dird/ua_label.c:650 #, c-format -msgid "Wrote blk_block=%u, dev_blk_num=%u VolBytes=%s rate=%.1f KB/s\n" +msgid "Sending label command for Volume \"%s\" Slot %d ...\n" msgstr "" -#: src/stored/btape.c:1941 +#: src/dird/ua_label.c:682 #, c-format -msgid "%s Flush block, write EOF\n" +msgid "Catalog record for Volume \"%s\", Slot %d successfully created.\n" msgstr "" -#: src/stored/btape.c:1952 -msgid "Not OK\n" +#: src/dird/ua_label.c:695 +#, c-format +msgid "Label command failed for Volume %s.\n" msgstr "" -#: src/stored/btape.c:1980 -msgid "Set ok=false after write_block_to_device.\n" +#: src/dird/ua_label.c:705 +#, c-format +msgid "Connecting to Storage daemon %s at %s:%d ...\n" msgstr "" -#: src/stored/btape.c:1983 -msgid "Wrote End of Session label.\n" +#: src/dird/ua_label.c:733 +msgid "Could not open SD socket.\n" msgstr "" -#: src/stored/btape.c:2007 +#: src/dird/ua_label.c:739 #, c-format -msgid "Wrote state file last_block_num1=%d last_block_num2=%d\n" +msgid "readlabel %s Slot=%d drive=%d\n" msgstr "" -#: src/stored/btape.c:2011 +#: src/dird/ua_label.c:781 #, c-format -msgid "Could not create state file: %s ERR=%s\n" +msgid "autochanger list %s \n" msgstr "" -#: src/stored/btape.c:2019 +#: src/dird/ua_label.c:805 src/dird/ua_label.c:815 #, c-format -msgid "" -"\n" -"\n" -"%s Done filling tape at %d:%d. Now beginning re-read of tape ...\n" +msgid "Invalid Slot number: %s\n" msgstr "" -#: src/stored/btape.c:2023 +#: src/dird/ua_label.c:824 #, c-format -msgid "" -"\n" -"\n" -"%s Done filling tapes at %d:%d. Now beginning re-read of first tape ...\n" +msgid "Invalid Volume name: %s\n" msgstr "" -#: src/stored/btape.c:2062 -msgid "" -"\n" -"The state file level has changed. You must redo\n" -"the fill command.\n" +#: src/dird/ua_label.c:893 +#, c-format +msgid "autochanger slots %s\n" msgstr "" -#: src/stored/btape.c:2068 +#: src/dird/ua_label.c:903 #, c-format -msgid "" -"\n" -"Could not find the state file: %s ERR=%s\n" -"You must redo the fill command.\n" +msgid "Device \"%s\" has %d slots.\n" msgstr "" -#: src/stored/btape.c:2110 -msgid "Mount first tape. Press enter when ready: " +#: src/dird/ua_label.c:925 +#, c-format +msgid "autochanger drives %s\n" msgstr "" -#: src/stored/btape.c:2129 -msgid "Rewinding.\n" +#: src/dird/ua_label.c:952 +#, c-format +msgid "Pool \"%s\" resource not found!\n" msgstr "" -#: src/stored/btape.c:2134 -#, c-format -msgid "Reading the first 10000 records from %u:%u.\n" +#: src/dird/ua_output.c:64 src/dird/ua_output.c:88 +msgid "ON or OFF keyword missing.\n" msgstr "" -#: src/stored/btape.c:2138 src/stored/btape.c:2205 -#, c-format -msgid "Reposition from %u:%u to %u:%u\n" +#: src/dird/ua_output.c:176 +msgid "Keywords for the show command are:\n" msgstr "" -#: src/stored/btape.c:2141 src/stored/btape.c:2192 src/stored/btape.c:2208 +#: src/dird/ua_output.c:182 #, c-format -msgid "Reposition error. ERR=%s\n" +msgid "%s resource %s not found.\n" msgstr "" -#: src/stored/btape.c:2144 +#: src/dird/ua_output.c:185 #, c-format -msgid "Reading block %u.\n" +msgid "Resource %s not found\n" msgstr "" -#: src/stored/btape.c:2146 src/stored/btape.c:2197 src/stored/btape.c:2213 +#: src/dird/ua_output.c:251 +msgid "Hey! DB is NULL\n" +msgstr "" + +#: src/dird/ua_output.c:358 #, c-format -msgid "Error reading block: ERR=%s\n" +msgid "Jobid %d used %d Volume(s): %s\n" msgstr "" -#: src/stored/btape.c:2151 -msgid "" -"\n" -"The last block on the tape matches. Test succeeded.\n" -"\n" +#: src/dird/ua_output.c:376 +msgid "No Pool specified.\n" msgstr "" -#: src/stored/btape.c:2153 -msgid "" -"\n" -"The last block of the first tape matches.\n" -"\n" +#: src/dird/ua_output.c:387 src/dird/ua_select.c:458 +#, c-format +msgid "Error obtaining pool ids. ERR=%s\n" msgstr "" -#: src/stored/btape.c:2178 -msgid "Mount second tape. Press enter when ready: " +#: src/dird/ua_output.c:397 +#, c-format +msgid "Pool: %s\n" +msgstr "" + +#: src/dird/ua_output.c:413 src/dird/ua_status.c:452 +msgid "Ignoring illegal value for days.\n" msgstr "" -#: src/stored/btape.c:2190 +#: src/dird/ua_output.c:422 #, c-format -msgid "Reposition from %u:%u to 0:1\n" +msgid "Unknown list keyword: %s\n" msgstr "" -#: src/stored/btape.c:2195 src/stored/btape.c:2211 +#: src/dird/ua_output.c:448 #, c-format -msgid "Reading block %d.\n" +msgid "%s is not a job name.\n" msgstr "" -#: src/stored/btape.c:2201 -msgid "" -"\n" -"The first block on the second tape matches.\n" -"\n" +#: src/dird/ua_output.c:469 +#, c-format +msgid "Could not find next Volume for Job %s (%s, %s).\n" msgstr "" -#: src/stored/btape.c:2217 -msgid "" -"\n" -"The last block on the second tape matches. Test succeeded.\n" -"\n" +#: src/dird/ua_output.c:473 +#, c-format +msgid "The next Volume to be used by Job \"%s\" (%s, %s) will be %s\n" msgstr "" -#: src/stored/btape.c:2232 +#: src/dird/ua_output.c:483 #, c-format -msgid "10000 records read now at %d:%d\n" +msgid "Could not find next Volume for Job %s.\n" msgstr "" -#: src/stored/btape.c:2255 src/stored/btape.c:2266 src/stored/btape.c:2314 -msgid "Last block written" +#: src/dird/ua_output.c:673 +msgid "You have no messages.\n" msgstr "" -#: src/stored/btape.c:2257 src/stored/btape.c:2267 -msgid "Block read back" +#: src/dird/ua_prune.c:173 +msgid "Choose item to prune" +msgstr "" + +#: src/dird/ua_prune.c:254 +msgid "No Files found to prune.\n" msgstr "" -#: src/stored/btape.c:2258 +#: src/dird/ua_prune.c:286 #, c-format -msgid "" -"\n" -"\n" -"The blocks differ at byte %u\n" +msgid "Pruned Files from %s Jobs for client %s from catalog.\n" msgstr "" -#: src/stored/btape.c:2259 -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_prune.c:392 +msgid "No Jobs found to prune.\n" msgstr "" -#: src/stored/btape.c:2298 +#: src/dird/ua_prune.c:453 #, c-format -msgid "Last block at: %u:%u this_dev_block_num=%d\n" +msgid "Pruned %d %s for client %s from catalog.\n" msgstr "" -#: src/stored/btape.c:2312 -#, c-format -msgid "Block not written: FileIndex=%u blk_block=%u Size=%u\n" +#: src/dird/ua_prune.c:454 +msgid "Jobs" msgstr "" -#: src/stored/btape.c:2316 -msgid "Block not written" +#: src/dird/ua_prune.c:501 +#, c-format +msgid "There are no Jobs associated with Volume \"%s\". Prune not needed.\n" msgstr "" -#: src/stored/btape.c:2331 +#: src/dird/ua_prune.c:508 src/dird/ua_purge.c:482 #, c-format -msgid "End of tape %d:%d. VolumeCapacity=%s. Write rate = %.1f KB/s\n" +msgid "There are no Jobs associated with Volume \"%s\". Marking it purged.\n" msgstr "" -#: src/stored/btape.c:2340 src/stored/bcopy.c:235 src/stored/bcopy.c:242 -#: src/stored/bcopy.c:265 +#: src/dird/ua_prune.c:566 #, c-format -msgid "Cannot fixup device error. %s\n" +msgid "Pruned %d %s on Volume \"%s\" from catalog.\n" msgstr "" -#: src/stored/btape.c:2381 -msgid "Test writing blocks of 64512 bytes to tape.\n" +#: src/dird/ua_purge.c:177 +msgid "" +"\n" +"This command is 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" +"for retention periods. Normally you should use the\n" +"PRUNE command, which respects retention periods.\n" msgstr "" -#: src/stored/btape.c:2383 -msgid "How many blocks do you want to write? (1000): " +#: src/dird/ua_purge.c:237 +msgid "Choose item to purge" msgstr "" -#: src/stored/btape.c:2398 +#: src/dird/ua_purge.c:282 #, c-format -msgid "Begin writing %d Bacula blocks to tape ...\n" +msgid "Begin purging files for Client \"%s\"\n" msgstr "" -#: src/stored/btape.c:2450 +#: src/dird/ua_purge.c:294 #, c-format -msgid "Begin writing raw blocks of %u bytes.\n" +msgid "No Files found for client %s to purge from %s catalog.\n" msgstr "" -#: src/stored/btape.c:2470 +#: src/dird/ua_purge.c:325 #, c-format -msgid "Write failed at block %u. stat=%d ERR=%s\n" +msgid "%d Files for client \"%s\" purged from %s catalog.\n" msgstr "" -#: src/stored/btape.c:2500 +#: src/dird/ua_purge.c:362 #, c-format -msgid "Begin writing Bacula blocks of %u bytes.\n" +msgid "Begin purging jobs from Client \"%s\"\n" msgstr "" -#: src/stored/btape.c:2519 +#: src/dird/ua_purge.c:373 #, c-format -msgid "Write failed at block %u.\n" +msgid "No Jobs found for client %s to purge from %s catalog.\n" msgstr "" -#: src/stored/btape.c:2526 -msgid "test autochanger" +#: src/dird/ua_purge.c:413 +#, c-format +msgid "%d Jobs for client %s purged from %s catalog.\n" msgstr "" -#: src/stored/btape.c:2527 -msgid "backspace file" +#: src/dird/ua_purge.c:464 +#, c-format +msgid "" +"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/stored/btape.c:2528 -msgid "backspace record" +#: src/dird/ua_purge.c:535 +#, c-format +msgid "%d File%s on Volume \"%s\" purged from catalog.\n" msgstr "" -#: src/stored/btape.c:2529 -msgid "fill tape using Bacula writes" +#: src/dird/ua_purge.c:549 +#, c-format +msgid "" +"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" msgstr "" -#: src/stored/btape.c:2530 -msgid "list device capabilities" +#: src/dird/ua_purge.c:581 +#, c-format +msgid "Cannot purge Volume with VolStatus=%s\n" msgstr "" -#: src/stored/btape.c:2531 -msgid "clear tape errors" +#: src/dird/ua_query.c:59 src/findlib/create_file.c:282 +#: src/findlib/create_file.c:339 +#, c-format +msgid "Could not open %s: ERR=%s\n" msgstr "" -#: src/stored/btape.c:2532 -msgid "go to end of Bacula data for append" +#: src/dird/ua_query.c:64 +msgid "Available queries:\n" msgstr "" -#: src/stored/btape.c:2533 -msgid "go to the physical end of medium" +#: src/dird/ua_query.c:71 +msgid "Choose a query" msgstr "" -#: src/stored/btape.c:2534 -msgid "fill tape, write onto second volume" +#: src/dird/ua_query.c:85 +msgid "Could not find query.\n" msgstr "" -#: src/stored/btape.c:2535 -msgid "read filled tape" +#: src/dird/ua_query.c:103 +msgid "Too many prompts in query, max is 9.\n" msgstr "" -#: src/stored/btape.c:2536 -msgid "forward space a file" +#: src/dird/ua_query.c:206 +#, c-format +msgid "Warning prompt %d missing.\n" msgstr "" -#: src/stored/btape.c:2537 -msgid "forward space a record" +#: src/dird/ua_query.c:252 +msgid "" +"Entering SQL query mode.\n" +"Terminate each query with a semicolon.\n" +"Terminate query mode with a blank line.\n" msgstr "" -#: src/stored/btape.c:2538 src/dird/ua_cmds.c:101 -msgid "print this command" +#: src/dird/ua_query.c:255 src/dird/ua_query.c:272 +msgid "Enter SQL query: " msgstr "" -#: src/stored/btape.c:2539 -msgid "write a Bacula label to the tape" +#: src/dird/ua_query.c:274 +msgid "Add to SQL query: " msgstr "" -#: src/stored/btape.c:2540 -msgid "load a tape" +#: src/dird/ua_query.c:278 +msgid "End query mode.\n" msgstr "" -#: src/stored/btape.c:2541 -msgid "quit btape" -msgstr "" +#: src/dird/ua_restore.c:115 +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/btape.c:2542 -msgid "use write() to fill tape" +#: src/dird/ua_restore.c:131 +msgid "Restore not done.\n" msgstr "" -#: src/stored/btape.c:2543 -msgid "read and print the Bacula tape label" +#: src/dird/ua_restore.c:142 +msgid "Unable to construct a valid BSR. Cannot continue.\n" msgstr "" -#: src/stored/btape.c:2544 -msgid "test record handling functions" +#: src/dird/ua_restore.c:146 src/dird/ua_restore.c:160 +msgid "No files selected to be restored.\n" msgstr "" -#: src/stored/btape.c:2545 -msgid "rewind the tape" +#: src/dird/ua_restore.c:154 +msgid "" +"\n" +"1 file selected to be restored.\n" +"\n" msgstr "" -#: src/stored/btape.c:2546 -msgid "read() tape block by block to EOT and report" +#: src/dird/ua_restore.c:157 +#, c-format +msgid "" +"\n" +"%u files selected to be restored.\n" +"\n" msgstr "" -#: src/stored/btape.c:2547 -msgid "Bacula read block by block to EOT and report" +#: src/dird/ua_restore.c:175 +msgid "No Restore Job resource found!\n" msgstr "" -#: src/stored/btape.c:2548 -msgid "print tape status" +#: src/dird/ua_restore.c:237 +#, c-format +msgid "Missing value for keyword: %s\n" msgstr "" -#: src/stored/btape.c:2549 -msgid "General test Bacula tape functions" +#: src/dird/ua_restore.c:286 +msgid "List last 20 Jobs run" msgstr "" -#: src/stored/btape.c:2550 -msgid "write an EOF on the tape" +#: src/dird/ua_restore.c:287 +msgid "List Jobs where a given File is saved" msgstr "" -#: src/stored/btape.c:2551 -msgid "write a single Bacula block" +#: src/dird/ua_restore.c:288 +msgid "Enter list of comma separated JobIds to select" msgstr "" -#: src/stored/btape.c:2552 -msgid "read a single record" +#: src/dird/ua_restore.c:289 +msgid "Enter SQL list command" msgstr "" -#: src/stored/btape.c:2553 -msgid "quick fill command" +#: src/dird/ua_restore.c:290 +msgid "Select the most recent backup for a client" msgstr "" -#: src/stored/btape.c:2574 -#, c-format -msgid "%s is an illegal command\n" +#: src/dird/ua_restore.c:291 +msgid "Select backup for a client before a specified time" msgstr "" -#: src/stored/btape.c:2584 -#, c-format -msgid "Interactive commands:\n" +#: src/dird/ua_restore.c:292 +msgid "Enter a list of files to restore" msgstr "" -#: src/stored/btape.c:2585 src/dird/ua_tree.c:622 src/dird/ua_cmds.c:1423 -#, c-format -msgid "" -" Command Description\n" -" ======= ===========\n" +#: src/dird/ua_restore.c:293 +msgid "Enter a list of files to restore before a specified time" msgstr "" -#: src/stored/btape.c:2594 -#, c-format -msgid "" -"Copyright (C) 2000-2005 Kern Sibbald.\n" -"\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 nn\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_restore.c:294 +msgid "Find the JobIds of the most recent backup for a client" msgstr "" -#: src/stored/btape.c:2681 -#, c-format -msgid "Mount second Volume on device %s and press return when ready: " +#: src/dird/ua_restore.c:295 +msgid "Find the JobIds for a backup for a client before a specified time" msgstr "" -#: src/stored/btape.c:2708 -#, c-format -msgid "Mount blank Volume on device %s and press return when ready: " +#: src/dird/ua_restore.c:296 +msgid "Enter a list of directories to restore for found JobIds" msgstr "" -#: src/stored/btape.c:2726 -#, c-format -msgid "End of Volume \"%s\"\n" +#: src/dird/ua_restore.c:297 src/dird/ua_status.c:713 src/filed/status.c:251 +#: src/stored/status.c:412 src/wx-console/wxbconfigpanel.cpp:191 +msgid "Cancel" msgstr "" -#: src/stored/btape.c:2738 +#: src/dird/ua_restore.c:333 #, c-format -msgid "Read block=%u, VolBytes=%s rate=%.1f KB/s\n" +msgid "Unknown keyword: %s\n" msgstr "" -#: src/stored/btape.c:2752 src/stored/mount.c:540 +#: src/dird/ua_restore.c:357 #, c-format -msgid "Cannot open Dev=%s, Vol=%s\n" +msgid "Improper date format: %s\n" msgstr "" -#: src/stored/autochanger.c:53 +#: src/dird/ua_restore.c:397 src/dird/ua_select.c:590 #, c-format -msgid "No Changer Name given for device %s. Cannot continue.\n" +msgid "Error: Pool resource \"%s\" does not exist.\n" msgstr "" -#: src/stored/autochanger.c:59 +#: src/dird/ua_restore.c:402 #, c-format -msgid "No Changer Command given for device %s. Cannot continue.\n" +msgid "Error: Pool resource \"%s\" access not allowed.\n" msgstr "" -#: src/stored/autochanger.c:72 -#, c-format +#: src/dird/ua_restore.c:421 msgid "" -"Media Type not the same for all devices in changer %s. Cannot continue.\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" +"\n" msgstr "" -#: src/stored/autochanger.c:153 -#, c-format -msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" +#: src/dird/ua_restore.c:433 +msgid "To select the JobIds, you have the following choices:\n" msgstr "" -#: src/stored/autochanger.c:162 -#, c-format -msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" +#: src/dird/ua_restore.c:438 +msgid "Select item: " msgstr "" -#: src/stored/autochanger.c:168 -#, c-format -msgid "3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" +#: src/dird/ua_restore.c:452 +msgid "Enter Filename (no path):" msgstr "" -#: src/stored/autochanger.c:209 -msgid "3992 Missing Changer command.\n" +#: src/dird/ua_restore.c:467 src/dird/ua_restore.c:567 +msgid "Enter JobId(s), comma separated, to restore: " msgstr "" -#: src/stored/autochanger.c:219 -#, c-format -msgid "3301 Issuing autochanger \"loaded drive %d\" command.\n" +#: src/dird/ua_restore.c:473 +msgid "Enter SQL list command: " msgstr "" -#: src/stored/autochanger.c:229 -#, c-format -msgid "3302 Autochanger \"loaded drive %d\", result is Slot %d.\n" +#: src/dird/ua_restore.c:501 src/dird/ua_restore.c:526 +msgid "" +"Enter file names with paths, or < to enter a filename\n" +"containg a list of file names with paths, and terminate\n" +"them with a blank line.\n" msgstr "" -#: src/stored/autochanger.c:233 -#, c-format -msgid "3302 Autochanger \"loaded drive %d\", result: nothing loaded.\n" +#: src/dird/ua_restore.c:505 src/dird/ua_restore.c:530 +msgid "Enter full filename: " msgstr "" -#: src/stored/autochanger.c:240 +#: src/dird/ua_restore.c:565 #, c-format -msgid "3991 Bad autochanger \"loaded drive %d\" command: ERR=%s.\n" +msgid "You have already seleted the following JobIds: %s\n" msgstr "" -#: src/stored/autochanger.c:299 src/stored/autochanger.c:381 -#, c-format -msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" +#: src/dird/ua_restore.c:580 +msgid "" +"Enter full directory names or start the name\n" +"with a < to indicate it is a filename containg a list\n" +"of directories and terminate them with a blank line.\n" msgstr "" -#: src/stored/autochanger.c:312 src/stored/autochanger.c:403 -#, c-format -msgid "3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" +#: src/dird/ua_restore.c:584 +msgid "Enter directory name: " msgstr "" -#: src/stored/autochanger.c:370 -#, c-format -msgid "Volume \"%s\" is in use by device %s\n" +#: src/dird/ua_restore.c:609 +msgid "No Jobs selected.\n" msgstr "" -#: src/stored/autochanger.c:441 +#: src/dird/ua_restore.c:613 #, c-format -msgid "3993 Device %s not an autochanger device.\n" +msgid "You have selected the following JobIds: %s\n" msgstr "" -#: src/stored/autochanger.c:466 +#: src/dird/ua_restore.c:616 #, c-format -msgid "3306 Issuing autochanger \"%s\" command.\n" +msgid "You have selected the following JobId: %s\n" msgstr "" -#: src/stored/autochanger.c:469 -msgid "3996 Open bpipe failed.\n" +#: src/dird/ua_restore.c:624 +msgid "Invalid JobId in list.\n" msgstr "" -#: src/stored/autochanger.c:496 +#: src/dird/ua_restore.c:637 #, c-format -msgid "Autochanger error: ERR=%s\n" +msgid "Unable to get Job record for JobId=%s: ERR=%s\n" msgstr "" -#: src/stored/dvd.c:155 src/stored/dev.c:1822 +#: src/dird/ua_restore.c:642 #, c-format -msgid "Device %s cannot be mounted. ERR=%s\n" +msgid "No authorization. Job \"%s\" not selected.\n" msgstr "" -#: src/stored/dvd.c:276 -#, c-format -msgid "Cannot run free space command (%s)\n" +#: src/dird/ua_restore.c:656 +msgid "" +"The restored files will the most current backup\n" +"BEFORE the date you specify below.\n" +"\n" msgstr "" -#: src/stored/dvd.c:379 -#, c-format -msgid "Error while writing current part to the DVD: %s" +#: src/dird/ua_restore.c:659 +msgid "Enter date as YYYY-MM-DD HH:MM:SS :" msgstr "" -#: src/stored/dvd.c:399 -#, c-format -msgid "Remaining free space %s on %s\n" +#: src/dird/ua_restore.c:665 +msgid "Improper date format.\n" msgstr "" -#: src/stored/dvd.c:469 +#: src/dird/ua_restore.c:686 #, c-format -msgid "Next Volume part already exists on DVD. Cannot continue: %s\n" +msgid "Cannot open file %s: ERR=%s\n" msgstr "" -#: src/stored/dvd.c:486 +#: src/dird/ua_restore.c:694 src/dird/ua_restore.c:698 #, c-format -msgid "open_next_part can't unlink existing part %s, ERR=%s\n" +msgid "Error occurred on line %d of %s\n" msgstr "" -#: src/stored/dvd.c:705 +#: src/dird/ua_restore.c:744 src/dird/ua_restore.c:782 #, c-format -msgid "Unable to write part %s: ERR=%s\n" +msgid "No database record found for: %s\n" msgstr "" -#: src/stored/dvd.c:739 src/stored/dev.c:1734 -#, c-format -msgid "Unable to truncate device %s. ERR=%s\n" +#: src/dird/ua_restore.c:769 +msgid "No JobId specified cannot continue.\n" msgstr "" -#: src/stored/fd_cmds.c:334 src/filed/job.c:991 +#: src/dird/ua_restore.c:813 #, c-format -msgid "Could not create bootstrap file %s: ERR=%s\n" +msgid "No table found: %s\n" msgstr "" -#: src/stored/fd_cmds.c:345 -msgid "Error parsing bootstrap file.\n" +#: src/dird/ua_restore.c:918 +#, c-format +msgid "" +"\n" +"Building directory tree for JobId %s ... " msgstr "" -#: src/stored/mount.c:223 src/stored/mount.c:445 -#, c-format -msgid "Volume \"%s\" not on device %s.\n" +#: src/dird/ua_restore.c:937 +msgid "" +"\n" +"There were no files inserted into the tree, so file selection\n" +"is not possible.Most likely your retention policy pruned the files\n" msgstr "" -#: src/stored/mount.c:255 -#, c-format +#: src/dird/ua_restore.c:939 msgid "" -"Director wanted Volume \"%s\".\n" -" Current Volume \"%s\" not acceptable because:\n" -" %s" +"\n" +"Do you want to restore all the files? (yes|no): " msgstr "" -#: src/stored/mount.c:334 +#: src/dird/ua_restore.c:955 #, c-format -msgid "Volume \"%s\" previously written, moving to end of data.\n" +msgid "" +"\n" +"1 Job, %s files inserted into the tree and marked for extraction.\n" msgstr "" -#: src/stored/mount.c:337 +#: src/dird/ua_restore.c:959 #, c-format -msgid "Unable to position to end of data on device %s: ERR=%s\n" +msgid "" +"\n" +"1 Job, %s files inserted into the tree.\n" msgstr "" -#: src/stored/mount.c:349 +#: src/dird/ua_restore.c:965 #, c-format -msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" +msgid "" +"\n" +"%d Jobs, %s files inserted into the tree and marked for extraction.\n" msgstr "" -#: src/stored/mount.c:352 +#: src/dird/ua_restore.c:969 #, c-format msgid "" -"I cannot write on Volume \"%s\" because:\n" -"The number of files mismatch! Volume=%u Catalog=%u\n" +"\n" +"%d Jobs, %s files inserted into the tree.\n" msgstr "" -#: src/stored/mount.c:380 +#: src/dird/ua_restore.c:1046 #, c-format -msgid "Ready to append to end of Volume \"%s\" at file address=%u.\n" +msgid "Error getting FileSet \"%s\": ERR=%s\n" msgstr "" -#: src/stored/mount.c:384 -#, c-format -msgid "" -"I cannot write on Volume \"%s\" because:\n" -"The EOD file address is wrong: Volume file address=%u != Catalog Endblock=%u" -"(+1)\n" -"You probably removed DVD last part in spool directory.\n" +#: src/dird/ua_restore.c:1054 src/dird/ua_select.c:167 +msgid "The defined FileSet resources are:\n" msgstr "" -#: src/stored/mount.c:435 -#, c-format -msgid "Labeled new Volume \"%s\" on device %s.\n" +#: src/dird/ua_restore.c:1058 src/dird/ua_run.c:644 src/dird/ua_select.c:175 +msgid "FileSet" msgstr "" -#: src/stored/mount.c:440 -#, c-format -msgid "Warning device %s not configured to autolabel Volumes.\n" +#: src/dird/ua_restore.c:1058 src/dird/ua_select.c:175 +msgid "Select FileSet resource" msgstr "" -#: src/stored/mount.c:460 +#: src/dird/ua_restore.c:1065 #, c-format -msgid "Marking Volume \"%s\" in Error in Catalog.\n" +msgid "Error getting FileSet record: %s\n" msgstr "" -#: src/stored/mount.c:476 -#, c-format +#: src/dird/ua_restore.c:1066 msgid "" -"Autochanger Volume \"%s\" not found in slot %d.\n" -" Setting InChanger to zero in catalog.\n" -msgstr "" - -#: src/stored/mount.c:495 -msgid "Hey!!!!! WroteVol non-zero !!!!!\n" +"This probably means you modified the FileSet.\n" +"Continuing anyway.\n" msgstr "" -#: src/stored/label.c:81 src/stored/label.c:122 src/stored/label.c:210 +#: src/dird/ua_restore.c:1081 #, c-format -msgid "Wrong Volume mounted on device %s: Wanted %s have %s\n" +msgid "Pool \"%s\" not found, using any pool.\n" msgstr "" -#: src/stored/label.c:88 src/stored/label.c:125 src/stored/label.c:197 +#: src/dird/ua_restore.c:1107 src/dird/ua_restore.c:1123 #, c-format -msgid "Too many tries: %s" +msgid "No Full backup before %s found.\n" msgstr "" -#: src/stored/label.c:104 -#, c-format -msgid "Couldn't rewind device %s: ERR=%s\n" +#: src/dird/ua_restore.c:1146 +msgid "No jobs found.\n" msgstr "" -#: src/stored/label.c:142 -#, c-format +#: src/dird/ua_restore.c:1312 msgid "" -"Requested Volume \"%s\" on %s is not a Bacula labeled Volume, because: ERR=%s" +"Warning, the JobIds that you selected refer to more than one MediaType.\n" +"Restore is not possible. The MediaTypes used are:\n" msgstr "" -#: src/stored/label.c:147 -msgid "Could not read Volume label from block.\n" +#: src/dird/ua_restore.c:1320 +msgid "No MediaType found for your JobIds.\n" msgstr "" -#: src/stored/label.c:150 +#: src/dird/ua_restore.c:1352 #, c-format -msgid "Could not unserialize Volume label: ERR=%s\n" +msgid "Warning default storage overridden by %s on command line.\n" msgstr "" -#: src/stored/label.c:155 +#: src/dird/ua_restore.c:1363 #, c-format -msgid "Volume Header Id bad: %s\n" +msgid "" +"\n" +"Warning. Unable to find Storage resource for\n" +"MediaType \"%s\", needed by the Jobs you selected.\n" +"You will be allowed to select a Storage device later.\n" msgstr "" -#: src/stored/label.c:182 +#: src/dird/ua_run.c:112 #, c-format -msgid "Volume on %s has wrong Bacula version. Wanted %d got %d\n" +msgid "Value missing for keyword %s\n" msgstr "" -#: src/stored/label.c:193 -#, c-format -msgid "Volume on %s has bad Bacula label type: %x\n" +#: src/dird/ua_run.c:119 +msgid "Job name specified twice.\n" msgstr "" -#: src/stored/label.c:274 -#, c-format -msgid "Cannot write Volume label to block for device %s\n" +#: src/dird/ua_run.c:127 +msgid "JobId specified twice.\n" msgstr "" -#: src/stored/label.c:403 -#, c-format -msgid "Rewind error on device %s: ERR=%s\n" +#: src/dird/ua_run.c:136 +msgid "Client specified twice.\n" msgstr "" -#: src/stored/label.c:408 -#, c-format -msgid "Truncate error on device %s: ERR=%s\n" +#: src/dird/ua_run.c:144 +msgid "FileSet specified twice.\n" msgstr "" -#: src/stored/label.c:430 -#, c-format -msgid "Unable to write device %s: ERR=%s\n" +#: src/dird/ua_run.c:152 +msgid "Level specified twice.\n" msgstr "" -#: src/stored/label.c:458 -#, c-format -msgid "Recycled volume \"%s\" on device %s, all previous data lost.\n" +#: src/dird/ua_run.c:161 +msgid "Storage specified twice.\n" msgstr "" -#: src/stored/label.c:461 -#, c-format -msgid "Wrote label to prelabeled Volume \"%s\" on device %s\n" +#: src/dird/ua_run.c:169 +msgid "Pool specified twice.\n" msgstr "" -#: src/stored/label.c:660 -#, c-format -msgid "Bad session label = %d\n" +#: src/dird/ua_run.c:177 +msgid "Where specified twice.\n" msgstr "" -#: src/stored/label.c:678 src/stored/label.c:685 -#, c-format -msgid "Error writing Session label to %s: %s\n" +#: src/dird/ua_run.c:185 +msgid "Bootstrap specified twice.\n" msgstr "" -#: src/stored/label.c:720 -#, c-format -msgid "Expecting Volume Label, got FI=%s Stream=%s len=%d\n" +#: src/dird/ua_run.c:193 +msgid "Replace specified twice.\n" msgstr "" -#: src/stored/label.c:847 -#, c-format -msgid "Unknown %d" +#: src/dird/ua_run.c:201 +msgid "When specified twice.\n" msgstr "" -#: src/stored/label.c:851 -#, 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/dird/ua_run.c:209 +msgid "Priority specified twice.\n" msgstr "" -#: src/stored/label.c:873 -#, c-format -msgid "Date label written: %s\n" +#: src/dird/ua_run.c:214 +msgid "Priority must be positive nonzero setting it to 10.\n" msgstr "" -#: src/stored/label.c:879 -#, c-format -msgid "Date label written: %04d-%02d-%02d at %02d:%02d\n" +#: src/dird/ua_run.c:224 +msgid "Verify Job specified twice.\n" msgstr "" -#: src/stored/label.c:899 +#: src/dird/ua_run.c:268 #, 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 "Invalid keyword: %s\n" msgstr "" -#: src/stored/label.c:912 +#: src/dird/ua_run.c:280 #, c-format -msgid "" -"Job (unique name) : %s\n" -"FileSet : %s\n" -"JobType : %c\n" -"JobLevel : %c\n" +msgid "Catalog \"%s\" not found\n" msgstr "" -#: src/stored/label.c:921 +#: src/dird/ua_run.c:291 #, 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 "Job \"%s\" not found\n" msgstr "" -#: src/stored/label.c:942 -#, c-format -msgid "Date written : %s\n" +#: src/dird/ua_run.c:298 +msgid "A job name must be specified.\n" msgstr "" -#: src/stored/label.c:947 +#: src/dird/ua_run.c:304 #, c-format -msgid "Date written : %04d-%02d-%02d at %02d:%02d\n" -msgstr "" - -#: src/stored/label.c:966 -msgid "Fresh Volume" +msgid "No authorization. Job \"%s\".\n" msgstr "" -#: src/stored/label.c:969 -msgid "Volume" +#: src/dird/ua_run.c:313 +#, c-format +msgid "Storage \"%s\" not found.\n" msgstr "" -#: src/stored/label.c:978 src/stored/read_record.c:341 -msgid "End of Media" +#: src/dird/ua_run.c:323 +#, c-format +msgid "No authorization. Storage \"%s\".\n" msgstr "" -#: src/stored/label.c:981 -msgid "End of Tape" +#: src/dird/ua_run.c:333 +#, c-format +msgid "Pool \"%s\" not found.\n" msgstr "" -#: src/stored/label.c:1001 src/stored/label.c:1009 src/stored/label.c:1042 +#: src/dird/ua_run.c:343 #, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n" +msgid "No authorization. Pool \"%s\".\n" msgstr "" -#: src/stored/label.c:1006 -msgid "End of physical tape.\n" +#: src/dird/ua_run.c:363 +#, c-format +msgid "No authorization. Client \"%s\".\n" msgstr "" -#: src/stored/label.c:1021 src/stored/label.c:1030 +#: src/dird/ua_run.c:372 #, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d\n" +msgid "FileSet \"%s\" not found.\n" msgstr "" -#: src/stored/label.c:1023 +#: src/dird/ua_run.c:381 #, c-format -msgid " Job=%s Date=%s Level=%c Type=%c\n" +msgid "No authorization. FileSet \"%s\".\n" msgstr "" -#: src/stored/label.c:1032 +#: src/dird/ua_run.c:389 #, c-format -msgid " Date=%s Level=%c Type=%c Files=%s Bytes=%s Errors=%d Status=%c\n" +msgid "Verify Job \"%s\" not found.\n" msgstr "" -#: src/stored/butil.c:46 -msgid "Nohdr," +#: src/dird/ua_run.c:422 src/dird/ua_run.c:764 +msgid "Invalid time, using current time.\n" msgstr "" -#: src/stored/butil.c:49 -msgid "partial," +#: src/dird/ua_run.c:442 +#, c-format +msgid "Invalid replace option: %s\n" msgstr "" -#: src/stored/butil.c:52 -msgid "empty," +#: src/dird/ua_run.c:500 +#, c-format +msgid "" +"Run %s job\n" +"JobName: %s\n" +"FileSet: %s\n" +"Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/stored/butil.c:55 -msgid "Nomatch," +#: src/dird/ua_run.c:507 src/lib/util.c:295 +msgid "Admin" msgstr "" -#: src/stored/butil.c:58 -msgid "cont," +#: src/dird/ua_run.c:519 +#, c-format +msgid "" +"Run %s job\n" +"JobName: %s\n" +"FileSet: %s\n" +"Level: %s\n" +"Client: %s\n" +"Storage: %s\n" +"Pool: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/stored/butil.c:131 -msgid "Volume name or names is too long. Please use a .bsr file.\n" +#: src/dird/ua_run.c:528 src/lib/util.c:286 +msgid "Backup" msgstr "" -#: src/stored/butil.c:151 +#: src/dird/ua_run.c:544 #, c-format -msgid "Cannot find device \"%s\" in config file %s.\n" +msgid "" +"Run %s job\n" +"JobName: %s\n" +"FileSet: %s\n" +"Level: %s\n" +"Client: %s\n" +"Storage: %s\n" +"Pool: %s\n" +"Verify Job: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/stored/butil.c:158 -#, c-format -msgid "Cannot init device %s\n" +#: src/dird/ua_run.c:554 src/lib/util.c:289 +msgid "Verify" msgstr "" -#: src/stored/butil.c:179 -#, c-format -msgid "Cannot open %s\n" +#: src/dird/ua_run.c:571 +msgid "Please enter a JobId for restore: " msgstr "" -#: src/stored/butil.c:262 +#: src/dird/ua_run.c:580 #, c-format -msgid "Could not find device \"%s\" in config file %s.\n" +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"Where: %s\n" +"Replace: %s\n" +"FileSet: %s\n" +"Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/stored/butil.c:267 +#: src/dird/ua_run.c:602 #, c-format -msgid "Using device: \"%s\" for reading.\n" +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"Where: %s\n" +"Replace: %s\n" +"Client: %s\n" +"Storage: %s\n" +"JobId: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/stored/butil.c:270 +#: src/dird/ua_run.c:626 #, c-format -msgid "Using device: \"%s\" for writing.\n" +msgid "Unknown Job Type=%d\n" msgstr "" -#: src/stored/butil.c:286 -msgid "Unexpected End of Data\n" +#: src/dird/ua_run.c:631 +msgid "OK to run? (yes/mod/no): " msgstr "" -#: src/stored/butil.c:288 -msgid "Unexpected End of Tape\n" +#: src/dird/ua_run.c:637 src/dird/ua_select.c:44 +msgid "mod" msgstr "" -#: src/stored/butil.c:290 -msgid "Unexpected End of File\n" +#: src/dird/ua_run.c:640 src/dird/ua_update.c:464 +msgid "Parameters to modify:\n" msgstr "" -#: src/stored/butil.c:292 -msgid "Tape Door is Open\n" +#: src/dird/ua_run.c:641 +msgid "Level" msgstr "" -#: src/stored/butil.c:294 -msgid "Unexpected Tape is Off-line\n" +#: src/dird/ua_run.c:642 src/dird/ua_select.c:152 +#: src/wx-console/wxbrestorepanel.cpp:321 +#: src/wx-console/wxbrestorepanel.cpp:337 +#: src/wx-console/wxbrestorepanel.cpp:458 +#: src/wx-console/wxbrestorepanel.cpp:459 +#: src/wx-console/wxbrestorepanel.cpp:469 +#: src/wx-console/wxbrestorepanel.cpp:470 +#: src/wx-console/wxbrestorepanel.cpp:1133 +#: src/wx-console/wxbrestorepanel.cpp:1794 +#: src/wx-console/wxbrestorepanel.cpp:1865 +msgid "Storage" msgstr "" -#: src/stored/dev.c:112 -#, c-format -msgid "Unable to stat device %s: ERR=%s\n" +#: src/dird/ua_run.c:645 src/dird/ua_select.c:282 src/dird/ua_select.c:391 +#: src/wx-console/wxbrestorepanel.cpp:318 +#: src/wx-console/wxbrestorepanel.cpp:336 +#: src/wx-console/wxbrestorepanel.cpp:410 +#: src/wx-console/wxbrestorepanel.cpp:411 +#: src/wx-console/wxbrestorepanel.cpp:421 +#: src/wx-console/wxbrestorepanel.cpp:422 +#: src/wx-console/wxbrestorepanel.cpp:669 +#: src/wx-console/wxbrestorepanel.cpp:1103 +#: src/wx-console/wxbrestorepanel.cpp:1190 +#: src/wx-console/wxbrestorepanel.cpp:1787 +#: src/wx-console/wxbrestorepanel.cpp:1789 +#: src/wx-console/wxbrestorepanel.cpp:1863 +#: src/wx-console/wxbrestorepanel.cpp:1918 +msgid "Client" msgstr "" -#: src/stored/dev.c:123 -#, 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_run.c:646 src/wx-console/wxbrestorepanel.cpp:338 +#: src/wx-console/wxbrestorepanel.cpp:823 +#: src/wx-console/wxbrestorepanel.cpp:1867 +msgid "When" msgstr "" -#: src/stored/dev.c:181 -#, c-format -msgid "Unable to stat mount point %s: ERR=%s\n" +#: src/dird/ua_run.c:647 src/wx-console/wxbrestorepanel.cpp:339 +#: src/wx-console/wxbrestorepanel.cpp:1096 +#: src/wx-console/wxbrestorepanel.cpp:1869 +msgid "Priority" msgstr "" -#: src/stored/dev.c:188 -msgid "" -"Mount and unmount commands must defined for a device which requires mount.\n" +#: src/dird/ua_run.c:650 src/dird/ua_select.c:476 src/dird/ua_select.c:566 +#: src/dird/ua_update.c:400 src/dird/ua_update.c:475 +#: src/wx-console/wxbrestorepanel.cpp:320 +#: src/wx-console/wxbrestorepanel.cpp:506 +#: src/wx-console/wxbrestorepanel.cpp:516 +#: src/wx-console/wxbrestorepanel.cpp:1783 +msgid "Pool" msgstr "" -#: src/stored/dev.c:191 -msgid "Write part command must be defined for a device which requires mount.\n" +#: src/dird/ua_run.c:652 +msgid "Verify Job" msgstr "" -#: src/stored/dev.c:196 -#, c-format -msgid "Block size %u on device %s is too large, using default %u\n" +#: src/dird/ua_run.c:655 src/wx-console/wxbrestorepanel.cpp:331 +#: src/wx-console/wxbrestorepanel.cpp:1848 +msgid "Bootstrap" msgstr "" -#: src/stored/dev.c:201 -#, c-format -msgid "Max block size %u not multiple of device %s block size.\n" +#: src/dird/ua_run.c:656 src/wx-console/wxbrestorepanel.cpp:332 +#: src/wx-console/wxbrestorepanel.cpp:1072 +#: src/wx-console/wxbrestorepanel.cpp:1850 +msgid "Where" msgstr "" -#: src/stored/dev.c:217 src/stored/dev.c:223 -#, c-format -msgid "Unable to init cond variable: ERR=%s\n" +#: src/dird/ua_run.c:657 src/wx-console/wxbrestorepanel.cpp:334 +#: src/wx-console/wxbrestorepanel.cpp:1080 +#: src/wx-console/wxbrestorepanel.cpp:1854 +#: src/wx-console/wxbrestorepanel.cpp:1855 +#: src/wx-console/wxbrestorepanel.cpp:1856 +#: src/wx-console/wxbrestorepanel.cpp:1857 +#: src/wx-console/wxbrestorepanel.cpp:1858 +msgid "Replace" msgstr "" -#: src/stored/dev.c:313 -msgid "Illegal mode given to open dev.\n" +#: src/dird/ua_run.c:658 +msgid "JobId" msgstr "" -#: src/stored/dev.c:356 src/stored/device.c:295 -#, c-format -msgid "Unable to open device %s: ERR=%s\n" +#: src/dird/ua_run.c:660 src/dird/ua_update.c:479 +msgid "Select parameter to modify" msgstr "" -#: src/stored/dev.c:428 src/stored/dev.c:483 -#, c-format -msgid "Could not open file device %s. No Volume name given.\n" +#: src/dird/ua_run.c:664 src/dird/ua_run.c:691 +msgid "Levels:\n" msgstr "" -#: src/stored/dev.c:451 src/stored/dev.c:563 -#, c-format -msgid "Could not open: %s, ERR=%s\n" +#: src/dird/ua_run.c:665 src/filed/status.c:368 src/lib/util.c:319 +#: src/stored/status.c:451 +msgid "Base" msgstr "" -#: src/stored/dev.c:508 -#, c-format -msgid "" -"The media in the device %s is not empty, please blank it before writing " -"anything to it.\n" +#: src/dird/ua_run.c:666 src/filed/status.c:370 src/lib/util.c:321 +#: src/stored/status.c:453 +msgid "Full" msgstr "" -#: src/stored/dev.c:524 -#, c-format -msgid "There is no valid media in the device %s.\n" +#: src/dird/ua_run.c:667 src/filed/status.c:373 src/lib/util.c:324 +#: src/stored/status.c:456 +msgid "Incremental" msgstr "" -#: src/stored/dev.c:531 -#, c-format -msgid "Could not mount device %s.\n" +#: src/dird/ua_run.c:668 src/filed/status.c:376 src/lib/util.c:327 +#: src/stored/status.c:459 +msgid "Differential" msgstr "" -#: src/stored/dev.c:589 -#, c-format -msgid "Could not fstat: %s, ERR=%s\n" +#: src/dird/ua_run.c:669 src/filed/status.c:379 src/lib/util.c:330 +#: src/stored/status.c:462 +msgid "Since" msgstr "" -#: src/stored/dev.c:632 -#, c-format -msgid "Bad call to rewind. Device %s not open\n" +#: src/dird/ua_run.c:670 src/dird/ua_run.c:697 +msgid "Select level" msgstr "" -#: src/stored/dev.c:678 -#, c-format -msgid "Rewind error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:692 +msgid "Initialize Catalog" msgstr "" -#: src/stored/dev.c:688 src/stored/dev.c:801 src/stored/dev.c:937 -#: src/stored/dev.c:1453 -#, c-format -msgid "lseek_dev error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:693 src/filed/status.c:382 src/lib/util.c:333 +#: src/stored/status.c:465 +msgid "Verify Catalog" msgstr "" -#: src/stored/dev.c:728 -msgid "unknown blocked code" +#: src/dird/ua_run.c:694 src/lib/util.c:339 +msgid "Verify Volume to Catalog" msgstr "" -#: src/stored/dev.c:772 -#, c-format -msgid "Bad call to eod_dev. Device %s not open\n" +#: src/dird/ua_run.c:695 src/lib/util.c:342 +msgid "Verify Disk to Catalog" msgstr "" -#: src/stored/dev.c:837 -#, c-format -msgid "ioctl MTEOM error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:696 +msgid "Verify Volume Data (not yet implemented)" msgstr "" -#: src/stored/dev.c:845 src/stored/dev.c:977 -#, c-format -msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:718 +msgid "Level not appropriate for this Job. Cannot be changed.\n" msgstr "" -#: src/stored/dev.c:923 -msgid "Bad device call. Device not open\n" +#: src/dird/ua_run.c:756 +msgid "" +"Please enter desired start time as YYYY-MM-DD HH:MM:SS (return for now): " msgstr "" -#: src/stored/dev.c:936 -#, c-format -msgid "Seek error: ERR=%s\n" +#: src/dird/ua_run.c:771 +msgid "Enter new Priority: " msgstr "" -#: src/stored/dev.c:972 -msgid " Bacula status:" +#: src/dird/ua_run.c:775 +msgid "Priority must be a positive integer.\n" +msgstr "" + +#: src/dird/ua_run.c:793 +msgid "Please enter the Bootstrap file name: " msgstr "" -#: src/stored/dev.c:973 src/stored/dev.c:1022 src/stored/dev.c:1024 +#: src/dird/ua_run.c:804 #, c-format -msgid " file=%d block=%d\n" +msgid "Warning cannot open %s: ERR=%s\n" msgstr "" -#: src/stored/dev.c:981 -msgid " Device status:" +#: src/dird/ua_run.c:823 +msgid "Please enter path prefix for restore (/ for none): " msgstr "" -#: src/stored/dev.c:1046 -msgid "Bad call to load_dev. Device not open\n" +#: src/dird/ua_run.c:837 +msgid "Replace:\n" msgstr "" -#: src/stored/dev.c:1057 src/stored/dev.c:1070 -#, c-format -msgid "ioctl MTLOAD error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:841 +msgid "Select replace option" msgstr "" -#: src/stored/dev.c:1106 -#, c-format -msgid "ioctl MTOFFL error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:851 +msgid "" +"You must set the bootstrap file to NULL to be able to specify a JobId.\n" msgstr "" -#: src/stored/dev.c:1147 -msgid "Bad call to fsf_dev. Device not open\n" +#: src/dird/ua_run.c:869 +msgid "Job failed.\n" msgstr "" -#: src/stored/dev.c:1157 src/stored/dev.c:1278 +#: src/dird/ua_run.c:872 #, c-format -msgid "Device %s at End of Tape.\n" +msgid "Job started. JobId=%s\n" +msgstr "" + +#: src/dird/ua_run.c:878 +msgid "Job not run.\n" msgstr "" -#: src/stored/dev.c:1182 src/stored/dev.c:1258 +#: src/dird/ua_select.c:39 #, c-format -msgid "ioctl MTFSF error on %s. ERR=%s.\n" +msgid "The current %s retention period is: %s\n" msgstr "" -#: src/stored/dev.c:1306 -msgid "Bad call to bsf. Device not open\n" +#: src/dird/ua_select.c:41 +msgid "Continue? (yes/mod/no): " msgstr "" -#: src/stored/dev.c:1312 -#, c-format -msgid "Device %s cannot BSF because it is not a tape.\n" +#: src/dird/ua_select.c:45 +msgid "Enter new retention period: " msgstr "" -#: src/stored/dev.c:1327 -#, c-format -msgid "ioctl MTBSF error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:49 +msgid "Invalid period.\n" msgstr "" -#: src/stored/dev.c:1347 -msgid "Bad call to fsr. Device not open\n" +#: src/dird/ua_select.c:128 +msgid "You have the following choices:\n" msgstr "" -#: src/stored/dev.c:1356 -#, c-format -msgid "ioctl MTFSR not permitted on %s.\n" +#: src/dird/ua_select.c:144 +msgid "The defined Storage resources are:\n" msgstr "" -#: src/stored/dev.c:1384 -#, c-format -msgid "ioctl MTFSR %d error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:152 +msgid "Select Storage resource" msgstr "" -#: src/stored/dev.c:1403 -msgid "Bad call to bsr_dev. Device not open\n" +#: src/dird/ua_select.c:193 +msgid "catalog" msgstr "" -#: src/stored/dev.c:1413 -#, c-format -msgid "ioctl MTBSR not permitted on %s.\n" +#: src/dird/ua_select.c:201 +msgid "The defined Catalog resources are:\n" msgstr "" -#: src/stored/dev.c:1426 -#, c-format -msgid "ioctl MTBSR error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:209 +msgid "Catalog" msgstr "" -#: src/stored/dev.c:1442 -msgid "Bad call to reposition. Device not open\n" +#: src/dird/ua_select.c:209 +msgid "Select Catalog resource" msgstr "" -#: src/stored/dev.c:1510 -msgid "Bad call to weof_dev. Device not open\n" +#: src/dird/ua_select.c:226 +msgid "The defined Job resources are:\n" msgstr "" -#: src/stored/dev.c:1520 -msgid "Attempt to WEOF on non-appendable Volume\n" +#: src/dird/ua_select.c:234 +msgid "Select Job resource" msgstr "" -#: src/stored/dev.c:1537 -#, c-format -msgid "ioctl MTWEOF error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:249 +msgid "The defined Restore Job resources are:\n" msgstr "" -#: src/stored/dev.c:1567 -msgid "Got ENOTTY on read/write!\n" +#: src/dird/ua_select.c:257 +msgid "Select Restore Job" msgstr "" -#: src/stored/dev.c:1614 +#: src/dird/ua_select.c:274 +msgid "The defined Client resources are:\n" +msgstr "" + +#: src/dird/ua_select.c:282 +msgid "Select Client (File daemon) resource" +msgstr "" + +#: src/dird/ua_select.c:309 #, c-format -msgid "unknown func code %d" +msgid "Error: Client resource %s does not exist.\n" msgstr "" -#: src/stored/dev.c:1620 +#: src/dird/ua_select.c:334 #, c-format -msgid "I/O function \"%s\" not supported on this device.\n" +msgid "Could not find Client %s: ERR=%s" msgstr "" -#: src/stored/pythonsd.c:95 src/stored/pythonsd.c:160 src/filed/pythonfd.c:102 -#: src/filed/pythonfd.c:156 src/filed/pythonfd.c:220 src/dird/pythondir.c:105 -msgid "Job pointer not found." +#: src/dird/ua_select.c:337 src/lib/bnet_server.c:284 +#: src/lib/bnet_server.c:378 +msgid "client" msgstr "" -#: src/stored/pythonsd.c:137 src/filed/pythonfd.c:133 src/dird/pythondir.c:166 -#, c-format -msgid "Attribute %s not found." +#: src/dird/ua_select.c:338 +msgid "fd" msgstr "" -#: src/stored/pythonsd.c:154 src/filed/pythonfd.c:150 +#: src/dird/ua_select.c:344 src/dird/ua_select.c:398 #, c-format -msgid "Cannot delete attribute %s" +msgid "Could not find Client \"%s\": ERR=%s" msgstr "" -#: src/stored/pythonsd.c:177 src/filed/pythonfd.c:175 src/dird/pythondir.c:209 -#: src/dird/pythondir.c:215 -msgid "Read-only attribute" +#: src/dird/ua_select.c:373 +#, c-format +msgid "Error obtaining client ids. ERR=%s\n" msgstr "" -#: src/stored/pythonsd.c:187 src/filed/pythonfd.c:168 src/filed/pythonfd.c:184 -#, c-format -msgid "Cannot find attribute %s" +#: src/dird/ua_select.c:377 +msgid "No clients defined. You must run a job before using this command.\n" msgstr "" -#: src/stored/pythonsd.c:202 -msgid "Error in ParseTuple\n" +#: src/dird/ua_select.c:381 +msgid "Defined Clients:\n" msgstr "" -#: src/stored/pythonsd.c:218 -msgid "Parse tuple error in job_write\n" +#: src/dird/ua_select.c:391 +msgid "Select the Client" msgstr "" -#: src/stored/pythonsd.c:254 +#: src/dird/ua_select.c:424 src/dird/ua_select.c:447 src/dird/ua_select.c:483 #, c-format -msgid "Error in Python method %s\n" +msgid "Could not find Pool \"%s\": ERR=%s" msgstr "" -#: src/stored/bcopy.c:58 -#, c-format -msgid "" -"Copyright (C) 2002-2005 Kern Sibbald.\n" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bcopy [-d debug_level] \n" -" -b bootstrap specify a bootstrap file\n" -" -c specify configuration file\n" -" -d set debug level to nn\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/stored/bcopy.c:185 -msgid "Write of last block failed.\n" +#: src/dird/ua_select.c:462 +msgid "No pools defined. Use the \"create\" command to create one.\n" msgstr "" -#: src/stored/bcopy.c:188 -#, c-format -msgid "%u Jobs copied. %u records copied.\n" +#: src/dird/ua_select.c:466 +msgid "Defined Pools:\n" msgstr "" -#: src/stored/bcopy.c:220 -msgid "Volume is prelabeled. This volume cannot be copied.\n" +#: src/dird/ua_select.c:476 +msgid "Select the Pool" msgstr "" -#: src/stored/bcopy.c:223 -msgid "Volume label not copied.\n" +#: src/dird/ua_select.c:506 +#, c-format +msgid "No access to Pool \"%s\"\n" msgstr "" -#: src/stored/bcopy.c:247 -msgid "EOM label not copied.\n" +#: src/dird/ua_select.c:532 +msgid "Enter MediaId or Volume name: " msgstr "" -#: src/stored/bcopy.c:250 -msgid "EOT label not copied.\n" +#: src/dird/ua_select.c:558 +msgid "The defined Pool resources are:\n" msgstr "" -#: src/stored/record.c:60 -#, c-format -msgid "unknown: %d" +#: src/dird/ua_select.c:566 +msgid "Select Pool resource" msgstr "" -#: src/stored/record.c:367 -msgid "Damaged buffer\n" +#: src/dird/ua_select.c:601 +msgid "Enter the JobId to select: " msgstr "" -#: src/stored/device.c:100 +#: src/dird/ua_select.c:638 #, c-format -msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" +msgid "Could not find Job \"%s\": ERR=%s" msgstr "" -#: src/stored/device.c:114 +#: src/dird/ua_select.c:705 #, c-format -msgid "New volume \"%s\" mounted on device %s at %s.\n" +msgid "Automatically selected %s: %s\n" msgstr "" -#: src/stored/device.c:126 +#: src/dird/ua_select.c:710 #, c-format -msgid "write_block_to_device Volume label failed. ERR=%s" +msgid "Cannot select %s in batch mode.\n" msgstr "" -#: src/stored/device.c:162 -#, c-format -msgid "write_block_to_device overflow block failed. ERR=%s" +#: src/dird/ua_select.c:722 +msgid "Selection is empty!\n" msgstr "" -#: src/stored/device.c:297 -#, c-format -msgid "Unable to open archive %s: ERR=%s\n" +#: src/dird/ua_select.c:728 +msgid "Item 1 selected automatically.\n" msgstr "" -#: src/stored/device.c:311 -#, c-format -msgid "Device write lock failure. ERR=%s\n" +#: src/dird/ua_select.c:739 +msgid "Selection aborted, nothing done.\n" msgstr "" -#: src/stored/device.c:319 +#: src/dird/ua_select.c:744 #, c-format -msgid "Device write unlock failure. ERR=%s\n" +msgid "Please enter a number between 1 and %d\n" msgstr "" -#: src/stored/device.c:338 -#, c-format -msgid "pthread_cond_wait failure. ERR=%s\n" +#: src/dird/ua_select.c:793 +msgid "Storage name given twice.\n" msgstr "" -#: src/stored/read_record.c:68 +#: src/dird/ua_select.c:810 #, c-format -msgid "End of Volume at file %u on device %s, Volume \"%s\"\n" -msgstr "" - -#: src/stored/read_record.c:71 -msgid "End of all volumes.\n" +msgid "Expecting jobid=nn command, got: %s\n" msgstr "" -#: src/stored/read_record.c:110 +#: src/dird/ua_select.c:814 #, c-format -msgid "Got EOF at file %u on device %s, Volume \"%s\"\n" -msgstr "" - -#: src/stored/read_record.c:124 -msgid "Did fsr\n" +msgid "JobId %s is not running.\n" msgstr "" -#: src/stored/read_record.c:281 +#: src/dird/ua_select.c:823 #, c-format -msgid "Reposition from (file:block) %u:%u to %u:%u\n" +msgid "Expecting job=xxx, got: %s.\n" msgstr "" -#: src/stored/read_record.c:308 +#: src/dird/ua_select.c:827 #, c-format -msgid "Forward spacing to file:block %u:%u.\n" +msgid "Job \"%s\" is not running.\n" msgstr "" -#: src/stored/read_record.c:334 -msgid "Begin Session" +#: src/dird/ua_select.c:843 +#, c-format +msgid "Storage resource \"%s\": not found\n" msgstr "" -#: src/stored/read_record.c:338 -msgid "End Session" +#: src/dird/ua_select.c:875 +msgid "Enter autochanger drive[0]: " msgstr "" -#: src/stored/read_record.c:344 -#, c-format -msgid "Unknown code %d\n" +#: src/dird/ua_select.c:905 +msgid "Media Types defined in conf file:\n" msgstr "" -#: src/stored/mac.c:68 -#, c-format -msgid "No Volume names found for %s.\n" +#: src/dird/ua_select.c:911 +msgid "Media Type" msgstr "" -#: src/testprogs/schedule.c:37 -#, c-format -msgid "" -"\n" -"Version: " +#: src/dird/ua_select.c:911 +msgid "Select the Media Type" msgstr "" -#: src/testprogs/schedule.c:37 src/console/console.c:103 src/dird/admin.c:108 +#: src/dird/ua_server.c:61 #, c-format -msgid " (" +msgid "Cannot create UA thread: %s\n" msgstr "" -#: src/testprogs/schedule.c:37 -#, c-format -msgid "" -")\n" -"\n" -"Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c set configuration file to file\n" -" -dnn set debug level to nn\n" -" -f run in foreground (for debugging)\n" -" -r run now\n" -" -s no signals\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" +#: src/dird/ua_server.c:142 +msgid "You have messages.\n" msgstr "" -#: src/testprogs/schedule.c:192 src/dird/dird.c:474 -#, c-format -msgid "" -"No Director resource defined in %s\n" -"Without that I don't know who I am :-(\n" +#: src/dird/ua_status.c:126 +msgid "Status available for:\n" msgstr "" -#: src/testprogs/schedule.c:197 -msgid "No working directory specified. Cannot continue.\n" +#: src/dird/ua_status.c:132 +msgid "Select daemon type for status" msgstr "" -#: src/testprogs/schedule.c:204 src/filed/filed.c:295 src/dird/dird.c:482 +#: src/dird/ua_status.c:245 #, c-format -msgid "No Messages resource defined in %s\n" +msgid "%s Version: %s (%s) %s %s %s\n" msgstr "" -#: src/testprogs/schedule.c:209 src/dird/dird.c:487 +#: src/dird/ua_status.c:249 src/stored/status.c:71 #, c-format -msgid "Only one Director resource permitted in %s\n" +msgid "Daemon started %s, 1 Job run since started.\n" msgstr "" -#: src/testprogs/schedule.c:216 src/dird/dird.c:541 +#: src/dird/ua_status.c:252 src/stored/status.c:74 #, c-format -msgid "No Job records defined in %s\n" +msgid "Daemon started %s, %d Jobs run since started.\n" msgstr "" -#: src/testprogs/schedule.c:221 +#: src/dird/ua_status.c:257 src/filed/status.c:121 src/stored/status.c:78 #, c-format -msgid "No Client record defined for job %s\n" +msgid " Heap: bytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" msgstr "" -#: src/testprogs/schedule.c:225 -#, c-format -msgid "No FileSet record defined for job %s\n" +#: src/dird/ua_status.c:277 src/dird/ua_status.c:493 src/dird/ua_status.c:655 +#: src/filed/status.c:198 src/filed/status.c:277 src/stored/status.c:345 +#: src/stored/status.c:361 src/stored/status.c:438 +msgid "====\n" msgstr "" -#: src/testprogs/schedule.c:229 +#: src/dird/ua_status.c:289 #, c-format -msgid "No Storage resource defined for job %s\n" +msgid "" +"\n" +"Failed to connect to Storage daemon %s.\n" +"====\n" msgstr "" -#: src/testprogs/schedule.c:233 +#: src/dird/ua_status.c:327 #, c-format -msgid "No Pool resource defined for job %s\n" +msgid "" +"Failed to connect to Client %s.\n" +"====\n" msgstr "" -#: src/testprogs/schedule.c:242 -#, c-format -msgid "No Catalog resource defined for client %s\n" +#: src/dird/ua_status.c:335 +msgid "Connected to file daemon\n" msgstr "" -#: src/testprogs/testfind.c:46 src/testprogs/testfind.map.c:48 -#, c-format +#: src/dird/ua_status.c:350 msgid "" "\n" -"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -dnn set debug level to nn\n" -" -e specify file of exclude patterns\n" -" -i specify file of include patterns\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" +"Scheduled Jobs:\n" msgstr "" -#: src/testprogs/testfind.c:155 src/testprogs/testfind.map.c:160 -#: src/tools/testfind.c:160 -#, c-format +#: src/dird/ua_status.c:351 msgid "" -"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" +"Level Type Pri Scheduled Name Volume\n" msgstr "" -#: src/testprogs/testfind.c:292 src/testprogs/testfind.map.c:256 -#: src/tools/testls.c:178 src/tools/testfind.c:240 -#, c-format -msgid "Err: Could not access %s: %s\n" +#: src/dird/ua_status.c:352 +msgid "===================================================================================\n" msgstr "" -#: src/testprogs/testfind.c:295 src/testprogs/testfind.map.c:259 -#: src/tools/testls.c:181 src/tools/testfind.c:243 +#: src/dird/ua_status.c:399 #, c-format -msgid "Err: Could not follow ff->link %s: %s\n" +msgid "%-14s %-8s %3d %-18s %-18s %s\n" msgstr "" -#: src/testprogs/testfind.c:298 src/testprogs/testfind.map.c:262 -#: src/tools/testls.c:184 src/tools/testfind.c:246 -#, c-format -msgid "Err: Could not stat %s: %s\n" +#: src/dird/ua_status.c:491 +msgid "No Scheduled Jobs.\n" msgstr "" -#: src/testprogs/testfind.c:301 src/testprogs/testfind.map.c:265 -#: src/tools/testls.c:187 src/tools/testfind.c:249 -#, c-format -msgid "Skip: File not saved. No change. %s\n" +#: src/dird/ua_status.c:508 src/stored/status.c:277 +msgid "" +"\n" +"Running Jobs:\n" msgstr "" -#: src/testprogs/testfind.c:304 src/testprogs/testfind.map.c:268 -#: src/tools/testls.c:190 src/tools/testfind.c:252 +#: src/dird/ua_status.c:516 #, c-format -msgid "Err: Attempt to backup archive. Not saved. %s\n" +msgid "Console connected at %s\n" msgstr "" -#: src/testprogs/testfind.c:307 src/testprogs/testfind.map.c:271 -#: src/tools/testls.c:193 -#, c-format -msgid "Recursion turned off. Directory not entered. %s\n" +#: src/dird/ua_status.c:526 +msgid "" +"No Jobs running.\n" +"====\n" msgstr "" -#: src/testprogs/testfind.c:310 src/testprogs/testfind.map.c:274 -#: src/tools/testls.c:196 -#, c-format -msgid "Skip: File system change prohibited. Directory not entered. %s\n" +#: src/dird/ua_status.c:531 +msgid " JobId Level Name Status\n" msgstr "" -#: src/testprogs/testfind.c:313 src/testprogs/testfind.map.c:277 -#: src/tools/testls.c:199 src/tools/testfind.c:255 -#, c-format -msgid "Err: Could not open directory %s: %s\n" +#: src/dird/ua_status.c:532 src/filed/status.c:221 src/stored/status.c:382 +msgid "======================================================================\n" msgstr "" -#: src/testprogs/testfind.c:316 src/testprogs/testfind.map.c:280 -#: src/tools/testls.c:202 src/tools/testfind.c:258 -#, c-format -msgid "Err: Unknown file ff->type %d: %s\n" +#: src/dird/ua_status.c:540 +msgid "is waiting execution" msgstr "" -#: src/testprogs/testfind.c:366 src/testprogs/testfind.map.c:330 -#: src/tools/testfind.c:308 -#, c-format -msgid "===== Filename truncated to 255 chars: %s\n" +#: src/dird/ua_status.c:543 +msgid "is running" msgstr "" -#: src/testprogs/testfind.c:383 src/testprogs/testfind.map.c:347 -#: src/tools/testfind.c:325 -#, c-format -msgid "========== Path name truncated to 255 chars: %s\n" +#: src/dird/ua_status.c:546 +msgid "is blocked" msgstr "" -#: src/testprogs/testfind.c:392 src/testprogs/testfind.map.c:356 -#: src/tools/testfind.c:334 -#, c-format -msgid "========== Path length is zero. File=%s\n" +#: src/dird/ua_status.c:549 +msgid "has terminated" msgstr "" -#: src/testprogs/window.c:608 -msgid "Folder" +#: src/dird/ua_status.c:552 +msgid "has erred" msgstr "" -#: src/testprogs/window.c:744 src/testprogs/window.c:753 -#: src/testprogs/window.c:2449 src/testprogs/window.c:4167 -msgid "File Roller" +#: src/dird/ua_status.c:555 +msgid "has errors" msgstr "" -#: src/testprogs/window.c:752 -msgid "[read only]" +#: src/dird/ua_status.c:558 +msgid "has a fatal error" msgstr "" -#: src/testprogs/window.c:846 -#, c-format -msgid "1 file (%s)" +#: src/dird/ua_status.c:561 +msgid "has verify differences" msgstr "" -#: src/testprogs/window.c:849 -#, c-format -msgid "%d files (%s)" +#: src/dird/ua_status.c:564 +msgid "has been canceled" msgstr "" -#: src/testprogs/window.c:857 +#: src/dird/ua_status.c:568 #, c-format -msgid "1 file selected (%s)" +msgid "is waiting on Client %s" msgstr "" -#: src/testprogs/window.c:860 +#: src/dird/ua_status.c:574 #, c-format -msgid "%d files selected (%s)" +msgid "is waiting on Storage %s" msgstr "" -#: src/testprogs/window.c:1149 -msgid "Reading archive" +#: src/dird/ua_status.c:579 +msgid "is waiting on max Storage jobs" msgstr "" -#: src/testprogs/window.c:1152 -msgid "Deleting files from archive" +#: src/dird/ua_status.c:582 +msgid "is waiting on max Client jobs" msgstr "" -#: src/testprogs/window.c:1155 -msgid "Adding files to archive" -msgstr "" +#: src/dird/ua_status.c:585 +msgid "is waiting on max Job jobs" +msgstr "" -#: src/testprogs/window.c:1158 -msgid "Extracting files from archive" +#: src/dird/ua_status.c:588 +msgid "is waiting on max total jobs" msgstr "" -#: src/testprogs/window.c:1161 -msgid "Testing archive" +#: src/dird/ua_status.c:591 +msgid "is waiting for its start time" msgstr "" -#: src/testprogs/window.c:1167 -msgid "wait please..." +#: src/dird/ua_status.c:594 +msgid "is waiting for higher priority jobs to finish" msgstr "" -#: src/testprogs/window.c:1253 -msgid "Operation stopped" +#: src/dird/ua_status.c:599 +#, c-format +msgid "is in unknown state %c" msgstr "" -#: src/testprogs/window.c:1271 -msgid "An error occurred while extracting files." +#: src/dird/ua_status.c:613 +msgid "is waiting for a mount request" msgstr "" -#: src/testprogs/window.c:1275 -msgid "An error occurred while loading the archive." +#: src/dird/ua_status.c:620 +msgid "is waiting for an appendable Volume" msgstr "" -#: src/testprogs/window.c:1279 -msgid "An error occurred while deleting files from the archive." +#: src/dird/ua_status.c:627 +#, c-format +msgid "is waiting for Client %s to connect to Storage %s" msgstr "" -#: src/testprogs/window.c:1283 -msgid "An error occurred while adding files to the archive." +#: src/dird/ua_status.c:643 +#, c-format +msgid "%6d %-6s %-20s %s\n" msgstr "" -#: src/testprogs/window.c:1287 -msgid "An error occurred while testing archive." +#: src/dird/ua_status.c:665 src/filed/status.c:211 src/stored/status.c:373 +msgid "No Terminated Jobs.\n" msgstr "" -#: src/testprogs/window.c:1293 -msgid "Command not found." +#: src/dird/ua_status.c:670 src/stored/status.c:378 +msgid "" +"\n" +"Terminated Jobs:\n" msgstr "" -#: src/testprogs/window.c:1296 -msgid "Command exited abnormally." +#: src/dird/ua_status.c:671 +msgid " JobId Level Files Bytes Status Finished Name \n" msgstr "" -#: src/testprogs/window.c:1588 -msgid "You don't have permissions to add files to this archive." +#: src/dird/ua_status.c:672 +msgid "========================================================================\n" msgstr "" -#: src/testprogs/window.c:1610 -msgid "You can't add an archive to itself." +#: src/dird/ua_status.c:703 src/filed/status.c:241 src/lib/util.c:178 +#: src/stored/status.c:402 +msgid "Created" msgstr "" -#: src/testprogs/window.c:1770 -msgid "" -"Do you want to add this file to the current archive or open it as a new " -"archive?" +#: src/dird/ua_status.c:707 src/filed/status.c:245 src/lib/util.c:191 +#: src/lib/util.c:258 src/stored/status.c:406 +msgid "Error" msgstr "" -#: src/testprogs/window.c:1813 -msgid "Do you want to create a new archive with these files?" +#: src/dird/ua_status.c:710 src/filed/status.c:248 src/stored/status.c:409 +msgid "Diffs" msgstr "" -#: src/testprogs/window.c:1815 -msgid "Create _Archive" +#: src/dird/ua_status.c:716 src/filed/status.c:254 src/lib/util.c:187 +#: src/lib/util.c:254 src/stored/btape.c:1158 src/stored/status.c:415 +#: src/wx-console/wxbconfigpanel.cpp:180 +msgid "OK" msgstr "" -#: src/testprogs/window.c:2158 -msgid "Name" +#: src/dird/ua_status.c:719 src/filed/status.c:257 src/stored/status.c:418 +msgid "Other" msgstr "" -#: src/testprogs/window.c:2617 -msgid "_Up" +#: src/dird/ua_status.c:722 src/filed/status.c:268 src/stored/status.c:429 +#, c-format +msgid "%6d %-6s %8s %14s %-7s %-8s %s\n" msgstr "" -#: src/testprogs/window.c:2639 -msgid "Current Location:" +#: src/dird/ua_status.c:730 src/stored/btape.c:180 +msgid "\n" msgstr "" -#: src/testprogs/window.c:2671 src/wx-console/wxbrestorepanel.cpp:245 -#: src/wx-console/wxbrestorepanel.cpp:299 -msgid "Add" +#: src/dird/ua_tree.c:58 +msgid "change current directory" msgstr "" -#: src/testprogs/window.c:2672 -msgid "Add files to the archive" +#: src/dird/ua_tree.c:59 +msgid "count marked files in and below the cd" msgstr "" -#: src/testprogs/window.c:2682 -msgid "Extract" +#: src/dird/ua_tree.c:60 src/dird/ua_tree.c:61 +msgid "long list current directory, wildcards allowed" msgstr "" -#: src/testprogs/window.c:2683 -msgid "Extract files from the archive" +#: src/dird/ua_tree.c:62 +msgid "leave file selection mode" msgstr "" -#: src/testprogs/window.c:2693 -msgid "View" +#: src/dird/ua_tree.c:63 +msgid "estimate restore size" msgstr "" -#: src/testprogs/window.c:2694 -msgid "View selected file" +#: src/dird/ua_tree.c:64 +msgid "same as done command" msgstr "" -#: src/testprogs/window.c:3093 -msgid "File type not supported." +#: src/dird/ua_tree.c:65 +msgid "find files, wildcards allowed" msgstr "" -#: src/testprogs/window.c:3162 -msgid "Cannot load archive." +#: src/dird/ua_tree.c:66 src/dird/ua_tree.c:75 +msgid "print help" msgstr "" -#: src/testprogs/window.c:3227 -msgid "Destination folder does not exist. Do you want to create it?" +#: src/dird/ua_tree.c:67 +msgid "list current directory, wildcards allowed" msgstr "" -#: src/testprogs/window.c:3229 -msgid "Create _Folder" +#: src/dird/ua_tree.c:68 +msgid "list the marked files in and below the cd" msgstr "" -#: src/testprogs/window.c:3249 -#, c-format -msgid "" -"Could not create the destination folder: %s.\n" -"Extraction not performed." +#: src/dird/ua_tree.c:69 +msgid "mark dir/file to be restored recursively, wildcards allowed" msgstr "" -#: src/testprogs/window.c:3264 -msgid "Extraction not performed." +#: src/dird/ua_tree.c:70 +msgid "mark directory name to be restored (no files)" msgstr "" -#: src/testprogs/window.c:3576 -msgid "Last Output" +#: src/dird/ua_tree.c:71 +msgid "print current working directory" msgstr "" -#: src/testprogs/window.c:4102 -msgid "Add files to an archive" +#: src/dird/ua_tree.c:72 +msgid "unmark dir/file to be restored recursively in dir" msgstr "" -#: src/testprogs/window.c:4127 -msgid "Extract archive" +#: src/dird/ua_tree.c:73 +msgid "unmark directory name only no recursion" msgstr "" -#: src/cats/sql_list.c:53 -#, c-format -msgid "Query failed: %s\n" +#: src/dird/ua_tree.c:74 +msgid "quit and do not do restore" msgstr "" -#: src/cats/sql.c:96 -#, c-format +#: src/dird/ua_tree.c:94 msgid "" -"query %s failed:\n" -"%s\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/cats/sql.c:118 +#: src/dird/ua_tree.c:104 src/dird/ua_tree.c:664 src/dird/ua_tree.c:672 #, c-format -msgid "" -"insert %s failed:\n" -"%s\n" +msgid "cwd is: %s\n" msgstr "" -#: src/cats/sql.c:132 -#, c-format -msgid "Insertion problem: affected_rows=%s\n" +#: src/dird/ua_tree.c:125 +msgid "Illegal command. Enter \"done\" to exit.\n" msgstr "" -#: src/cats/sql.c:152 -#, c-format -msgid "" -"update %s failed:\n" -"%s\n" +#: src/dird/ua_tree.c:298 src/dird/ua_tree.c:309 src/dird/ua_tree.c:326 +msgid "No files marked.\n" msgstr "" -#: src/cats/sql.c:162 -#, c-format -msgid "Update problem: affected_rows=%s\n" +#: src/dird/ua_tree.c:311 +msgid "1 file marked.\n" msgstr "" -#: src/cats/sql.c:183 +#: src/dird/ua_tree.c:313 #, c-format -msgid "" -"delete %s failed:\n" -"%s\n" +msgid "%s files marked.\n" msgstr "" -#: src/cats/sql.c:209 src/cats/sql.c:216 src/cats/sql_create.c:823 -#: src/cats/sql_get.c:180 src/cats/sql_get.c:231 src/cats/sql_get.c:624 -#: src/cats/sql_get.c:699 src/cats/sql_get.c:926 -#, c-format -msgid "error fetching row: %s\n" +#: src/dird/ua_tree.c:340 +msgid "No directories marked.\n" msgstr "" -#: src/cats/sql.c:326 src/dird/catreq.c:375 src/dird/catreq.c:449 -#, c-format -msgid "Attribute create error. %s" +#: src/dird/ua_tree.c:342 +msgid "1 directory marked.\n" msgstr "" -#: src/cats/sql.c:407 +#: src/dird/ua_tree.c:344 #, c-format -msgid "Path length is zero. File=%s\n" +msgid "%s directories marked.\n" msgstr "" -#: src/cats/sql.c:451 -msgid "No results to list.\n" +#: src/dird/ua_tree.c:365 +#, c-format +msgid "%s total files/dirs. %s marked to be restored.\n" msgstr "" -#: src/cats/mysql.c:60 -msgid "A user name for MySQL must be supplied.\n" +#: src/dird/ua_tree.c:376 +msgid "No file specification given.\n" msgstr "" -#: src/cats/mysql.c:124 src/cats/postgresql.c:128 src/cats/sqlite.c:122 -#: src/cats/bdb.c:152 +#: src/dird/ua_tree.c:520 #, c-format -msgid "Unable to initialize DB lock. ERR=%s\n" +msgid "Node %s has no children.\n" msgstr "" -#: src/cats/mysql.c:161 +#: src/dird/ua_tree.c:611 #, c-format -msgid "" -"Unable to connect to MySQL server. \n" -"Database=%s User=%s\n" -"It is probably not running or your password is incorrect.\n" +msgid "%d total files; %d marked to be restored; %s bytes.\n" msgstr "" -#: src/cats/mysql.c:320 src/cats/postgresql.c:264 src/cats/sqlite.c:323 -#, c-format -msgid "Query failed: %s: ERR=%s\n" +#: src/dird/ua_tree.c:656 +msgid "Invalid path given.\n" msgstr "" -#: src/cats/postgresql.c:62 -msgid "A user name for PostgreSQL must be supplied.\n" +#: src/dird/ua_tree.c:683 src/dird/ua_tree.c:694 +msgid "No files unmarked.\n" msgstr "" -#: src/cats/postgresql.c:165 -#, c-format -msgid "" -"Unable to connect to PostgreSQL server.\n" -"Database=%s User=%s\n" -"It is probably not running or your password is incorrect.\n" +#: src/dird/ua_tree.c:696 +msgid "1 file unmarked.\n" msgstr "" -#: src/cats/postgresql.c:506 +#: src/dird/ua_tree.c:698 #, c-format -msgid "error fetching currval: %s\n" +msgid "%d files unmarked.\n" msgstr "" -#: src/cats/sql_delete.c:79 -#, c-format -msgid "No pool record %s exists\n" +#: src/dird/ua_tree.c:709 src/dird/ua_tree.c:725 +msgid "No directories unmarked.\n" msgstr "" -#: src/cats/sql_delete.c:84 -#, c-format -msgid "Expecting one pool record, got %d\n" +#: src/dird/ua_tree.c:727 +msgid "1 directory unmarked.\n" msgstr "" -#: src/cats/sql_delete.c:90 +#: src/dird/ua_tree.c:729 #, c-format -msgid "Error fetching row %s\n" +msgid "%d directories unmarked.\n" msgstr "" -#: src/cats/sql_create.c:86 -#, c-format -msgid "Create DB Job record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:79 +msgid "Update choice:\n" msgstr "" -#: src/cats/sql_create.c:135 -#, c-format -msgid "Create DB MAC record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:80 +msgid "Volume parameters" msgstr "" -#: src/cats/sql_create.c:182 -#, c-format -msgid "Create JobMedia record %s failed: ERR=%s\n" +#: src/dird/ua_update.c:81 +msgid "Pool from resource" msgstr "" -#: src/cats/sql_create.c:191 -#, c-format -msgid "Update Media record %s failed: ERR=%s\n" +#: src/dird/ua_update.c:82 +msgid "Slots from autochanger" msgstr "" -#: src/cats/sql_create.c:221 -#, c-format -msgid "pool record %s already exists\n" +#: src/dird/ua_update.c:83 +msgid "item" msgstr "" -#: src/cats/sql_create.c:247 -#, c-format -msgid "Create db Pool record %s failed: ERR=%s\n" +#: src/dird/ua_update.c:83 +msgid "Choose catalog item to update" msgstr "" -#: src/cats/sql_create.c:278 +#: src/dird/ua_update.c:122 #, c-format -msgid "Device record %s already exists\n" +msgid "Invalid VolStatus specified: %s\n" msgstr "" -#: src/cats/sql_create.c:294 +#: src/dird/ua_update.c:131 #, c-format -msgid "Create db Device record %s failed: ERR=%s\n" +msgid "New Volume status is: %s\n" msgstr "" -#: src/cats/sql_create.c:327 +#: src/dird/ua_update.c:141 #, c-format -msgid "More than one Storage record!: %d\n" +msgid "Invalid retention period specified: %s\n" msgstr "" -#: src/cats/sql_create.c:332 +#: src/dird/ua_update.c:149 #, c-format -msgid "error fetching Storage row: %s\n" +msgid "New retention period is: %s\n" msgstr "" -#: src/cats/sql_create.c:352 +#: src/dird/ua_update.c:160 #, c-format -msgid "Create DB Storage record %s failed. ERR=%s\n" +msgid "Invalid use duration specified: %s\n" msgstr "" -#: src/cats/sql_create.c:384 +#: src/dird/ua_update.c:168 #, c-format -msgid "mediatype record %s already exists\n" +msgid "New use duration is: %s\n" msgstr "" -#: src/cats/sql_create.c:400 +#: src/dird/ua_update.c:182 #, c-format -msgid "Create db mediatype record %s failed: ERR=%s\n" +msgid "New max jobs is: %s\n" msgstr "" -#: src/cats/sql_create.c:434 +#: src/dird/ua_update.c:195 #, c-format -msgid "Volume \"%s\" already exists.\n" +msgid "New max files is: %s\n" msgstr "" -#: src/cats/sql_create.c:472 +#: src/dird/ua_update.c:206 #, c-format -msgid "Create DB Media record %s failed. ERR=%s\n" +msgid "Invalid max. bytes specification: %s\n" msgstr "" -#: src/cats/sql_create.c:520 +#: src/dird/ua_update.c:214 #, c-format -msgid "More than one Client!: %d\n" +msgid "New Max bytes is: %s\n" msgstr "" -#: src/cats/sql_create.c:525 -#, c-format -msgid "error fetching Client row: %s\n" +#: src/dird/ua_update.c:228 src/dird/ua_update.c:252 +msgid "Invalid value. It must be yes or no.\n" msgstr "" -#: src/cats/sql_create.c:552 +#: src/dird/ua_update.c:236 #, c-format -msgid "Create DB Client record %s failed. ERR=%s\n" +msgid "New Recycle flag is: %s\n" msgstr "" -#: src/cats/sql_create.c:595 +#: src/dird/ua_update.c:260 #, c-format -msgid "Create DB Counters record %s failed. ERR=%s\n" +msgid "New InChanger flag is: %s\n" msgstr "" -#: src/cats/sql_create.c:628 +#: src/dird/ua_update.c:278 #, c-format -msgid "More than one FileSet!: %d\n" +msgid "Invalid slot, it must be between 0 and MaxVols=%d\n" msgstr "" -#: src/cats/sql_create.c:633 +#: src/dird/ua_update.c:287 src/dird/ua_update.c:577 #, c-format -msgid "error fetching FileSet row: ERR=%s\n" +msgid "Error updating media record Slot: ERR=%s" msgstr "" -#: src/cats/sql_create.c:663 +#: src/dird/ua_update.c:289 #, c-format -msgid "Create DB FileSet record %s failed. ERR=%s\n" +msgid "New Slot is: %d\n" msgstr "" -#: src/cats/sql_create.c:720 +#: src/dird/ua_update.c:316 #, c-format -msgid "Attempt to put non-attributes into catalog. Stream=%d\n" +msgid "New Pool is: %s\n" msgstr "" -#: src/cats/sql_create.c:783 +#: src/dird/ua_update.c:345 #, c-format -msgid "Create db File record %s failed. ERR=%s" +msgid "Error updating Volume record: ERR=%s" msgstr "" -#: src/cats/sql_create.c:816 src/cats/sql_get.c:224 +#: src/dird/ua_update.c:347 #, c-format -msgid "More than one Path!: %s for path: %s\n" +msgid "Volume defaults updated from \"%s\" Pool record.\n" msgstr "" -#: src/cats/sql_create.c:847 +#: src/dird/ua_update.c:369 #, c-format -msgid "Create db Path record %s failed. ERR=%s\n" +msgid "Error updating Volume records: ERR=%s" msgstr "" -#: src/cats/sql_create.c:880 -#, c-format -msgid "More than one Filename! %s for file: %s\n" +#: src/dird/ua_update.c:371 +msgid "All Volume defaults updated from Pool record.\n" msgstr "" -#: src/cats/sql_create.c:886 -#, c-format -msgid "Error fetching row for file=%s: ERR=%s\n" +#: src/dird/ua_update.c:391 +msgid "VolStatus" msgstr "" -#: src/cats/sql_create.c:902 -#, c-format -msgid "Create db Filename record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:392 +msgid "VolRetention" msgstr "" -#: src/cats/bdb_update.c:83 src/cats/bdb_update.c:114 -#, c-format -msgid "Error updating DB Job file. ERR=%s\n" +#: src/dird/ua_update.c:393 +msgid "VolUse" msgstr "" -#: src/cats/bdb_update.c:153 src/cats/bdb_update.c:189 -#, c-format -msgid "Error updating DB Media file. ERR=%s\n" +#: src/dird/ua_update.c:394 +msgid "MaxVolJobs" msgstr "" -#: src/cats/sqlite.c:136 -#, c-format -msgid "Database %s does not exist, please create it.\n" +#: src/dird/ua_update.c:395 +msgid "MaxVolFiles" msgstr "" -#: src/cats/sqlite.c:161 -#, c-format -msgid "Unable to open Database=%s. ERR=%s\n" +#: src/dird/ua_update.c:396 +msgid "MaxVolBytes" msgstr "" -#: src/cats/sqlite.c:162 src/lib/bnet_server.c:371 -msgid "unknown" +#: src/dird/ua_update.c:397 +msgid "Recycle" msgstr "" -#: src/cats/sqlite.c:221 -#, c-format -msgid "next_index query error: ERR=%s\n" +#: src/dird/ua_update.c:398 +msgid "InChanger" msgstr "" -#: src/cats/sqlite.c:226 -#, c-format -msgid "Error fetching index: ERR=%s\n" +#: src/dird/ua_update.c:399 src/dird/ua_update.c:472 +msgid "Slot" msgstr "" -#: src/cats/sqlite.c:236 -#, c-format -msgid "next_index update error: ERR=%s\n" +#: src/dird/ua_update.c:401 +msgid "FromPool" msgstr "" -#: src/cats/sql_find.c:90 src/cats/sql_find.c:119 -#, c-format -msgid "" -"Query error for start time request: ERR=%s\n" -"CMD=%s\n" +#: src/dird/ua_update.c:402 +msgid "AllFromPool" msgstr "" -#: src/cats/sql_find.c:96 -msgid "No prior Full backup Job record found.\n" +#: src/dird/ua_update.c:463 +#, c-format +msgid "Updating Volume \"%s\"\n" msgstr "" -#: src/cats/sql_find.c:108 -#, c-format -msgid "Unknown level=%d\n" +#: src/dird/ua_update.c:465 +msgid "Volume Status" msgstr "" -#: src/cats/sql_find.c:125 -#, c-format -msgid "" -"No Job record found: ERR=%s\n" -"CMD=%s\n" +#: src/dird/ua_update.c:466 +msgid "Volume Retention Period" msgstr "" -#: src/cats/sql_find.c:224 -#, c-format -msgid "Unknown Job level=%d\n" +#: src/dird/ua_update.c:467 +msgid "Volume Use Duration" msgstr "" -#: src/cats/sql_find.c:234 -#, c-format -msgid "No Job found for: %s.\n" +#: src/dird/ua_update.c:468 +msgid "Maximum Volume Jobs" msgstr "" -#: src/cats/sql_find.c:245 -#, c-format -msgid "No Job found for: %s\n" +#: src/dird/ua_update.c:469 +msgid "Maximum Volume Files" msgstr "" -#: src/cats/sql_find.c:317 -#, c-format -msgid "Request for Volume item %d greater than max %d\n" +#: src/dird/ua_update.c:470 +msgid "Maximum Volume Bytes" msgstr "" -#: src/cats/sql_find.c:329 -#, c-format -msgid "No Volume record found for item %d.\n" +#: src/dird/ua_update.c:471 +msgid "Recycle Flag" msgstr "" -#: src/cats/sql_get.c:130 -#, c-format -msgid "get_file_record want 1 got rows=%d\n" +#: src/dird/ua_update.c:473 +msgid "InChanger Flag" msgstr "" -#: src/cats/sql_get.c:135 -#, c-format -msgid "Error fetching row: %s\n" +#: src/dird/ua_update.c:474 +msgid "Volume Files" msgstr "" -#: src/cats/sql_get.c:143 -#, c-format -msgid "File record for PathId=%s FilenameId=%s not found.\n" +#: src/dird/ua_update.c:476 +msgid "Volume from Pool" msgstr "" -#: src/cats/sql_get.c:149 -msgid "File record not found in Catalog.\n" +#: src/dird/ua_update.c:477 +msgid "All Volumes from Pool" msgstr "" -#: src/cats/sql_get.c:174 -#, c-format -msgid "More than one Filename!: %s for file: %s\n" +#: src/dird/ua_update.c:478 +msgid "Done" msgstr "" -#: src/cats/sql_get.c:184 +#: src/dird/ua_update.c:489 #, c-format -msgid "Get DB Filename record %s found bad record: %d\n" +msgid "Current Volume status is: %s\n" msgstr "" -#: src/cats/sql_get.c:190 -#, c-format -msgid "Filename record: %s not found.\n" +#: src/dird/ua_update.c:490 +msgid "Possible Values are:\n" msgstr "" -#: src/cats/sql_get.c:194 -#, c-format -msgid "Filename record: %s not found in Catalog.\n" +#: src/dird/ua_update.c:501 +msgid "Choose new Volume Status" msgstr "" -#: src/cats/sql_get.c:235 +#: src/dird/ua_update.c:507 #, c-format -msgid "Get DB path record %s found bad record: %s\n" +msgid "Current retention period is: %s\n" msgstr "" -#: src/cats/sql_get.c:248 -#, c-format -msgid "Path record: %s not found.\n" +#: src/dird/ua_update.c:509 +msgid "Enter Volume Retention period: " msgstr "" -#: src/cats/sql_get.c:252 +#: src/dird/ua_update.c:516 #, c-format -msgid "Path record: %s not found in Catalog.\n" +msgid "Current use duration is: %s\n" msgstr "" -#: src/cats/sql_get.c:287 -#, c-format -msgid "No Job found for JobId %s\n" +#: src/dird/ua_update.c:518 +msgid "Enter Volume Use Duration: " msgstr "" -#: src/cats/sql_get.c:334 +#: src/dird/ua_update.c:525 #, c-format -msgid "No MAC record found for JobId %s\n" +msgid "Current max jobs is: %u\n" msgstr "" -#: src/cats/sql_get.c:385 src/cats/sql_get.c:441 -#, c-format -msgid "No volumes found for JobId=%d\n" +#: src/dird/ua_update.c:526 +msgid "Enter new Maximum Jobs: " msgstr "" -#: src/cats/sql_get.c:391 src/cats/sql_get.c:452 +#: src/dird/ua_update.c:533 #, c-format -msgid "Error fetching row %d: ERR=%s\n" +msgid "Current max files is: %u\n" msgstr "" -#: src/cats/sql_get.c:405 -#, c-format -msgid "No Volume for JobId %d found in Catalog.\n" +#: src/dird/ua_update.c:534 +msgid "Enter new Maximum Files: " msgstr "" -#: src/cats/sql_get.c:540 +#: src/dird/ua_update.c:541 #, c-format -msgid "Pool id select failed: ERR=%s\n" +msgid "Current value is: %s\n" msgstr "" -#: src/cats/sql_get.c:577 -#, c-format -msgid "Client id select failed: ERR=%s\n" +#: src/dird/ua_update.c:542 +msgid "Enter new Maximum Bytes: " msgstr "" -#: src/cats/sql_get.c:619 +#: src/dird/ua_update.c:550 #, c-format -msgid "More than one Pool!: %s\n" +msgid "Current recycle flag is: %s\n" msgstr "" -#: src/cats/sql_get.c:660 -msgid "Pool record not found in Catalog.\n" +#: src/dird/ua_update.c:552 +msgid "Enter new Recycle status: " msgstr "" -#: src/cats/sql_get.c:694 +#: src/dird/ua_update.c:559 #, c-format -msgid "More than one Client!: %s\n" +msgid "Current Slot is: %d\n" msgstr "" -#: src/cats/sql_get.c:711 src/cats/sql_get.c:715 -msgid "Client record not found in Catalog.\n" +#: src/dird/ua_update.c:560 +msgid "Enter new Slot: " msgstr "" -#: src/cats/sql_get.c:740 +#: src/dird/ua_update.c:567 #, c-format -msgid "More than one Counter!: %d\n" +msgid "Current InChanger flag is: %d\n" msgstr "" -#: src/cats/sql_get.c:745 -#, c-format -msgid "error fetching Counter row: %s\n" +#: src/dird/ua_update.c:568 +msgid "Set InChanger flag? yes/no: " msgstr "" -#: src/cats/sql_get.c:765 +#: src/dird/ua_update.c:579 #, c-format -msgid "Counter record: %s not found in Catalog.\n" +msgid "New InChanger flag is: %d\n" msgstr "" -#: src/cats/sql_get.c:801 -#, c-format -msgid "Error got %s FileSets but expected only one!\n" +#: src/dird/ua_update.c:586 +msgid "" +"Warning changing Volume Files can result\n" +"in loss of data on your Volume\n" +"\n" msgstr "" -#: src/cats/sql_get.c:806 +#: src/dird/ua_update.c:588 #, c-format -msgid "FileSet record \"%s\" not found.\n" +msgid "Current Volume Files is: %u\n" msgstr "" -#: src/cats/sql_get.c:816 -msgid "FileSet record not found in Catalog.\n" +#: src/dird/ua_update.c:589 +msgid "Enter new number of Files for Volume: " msgstr "" -#: src/cats/sql_get.c:873 -#, c-format -msgid "Media id select failed: ERR=%s\n" +#: src/dird/ua_update.c:594 +msgid "Normally, you should only increase Volume Files by one!\n" msgstr "" -#: src/cats/sql_get.c:921 -#, c-format -msgid "More than one Volume!: %s\n" +#: src/dird/ua_update.c:595 +msgid "Continue? (yes/no): " msgstr "" -#: src/cats/sql_get.c:966 +#: src/dird/ua_update.c:605 #, c-format -msgid "Media record MediaId=%s not found.\n" +msgid "New Volume Files is: %u\n" msgstr "" -#: src/cats/sql_get.c:969 +#: src/dird/ua_update.c:617 #, c-format -msgid "Media record for Volume \"%s\" not found.\n" +msgid "Current Pool is: %s\n" msgstr "" -#: src/cats/sql_get.c:976 -#, c-format -msgid "Media record for MediaId=%u not found in Catalog.\n" +#: src/dird/ua_update.c:618 +msgid "Enter new Pool name: " +msgstr "" + +#: src/dird/ua_update.c:631 +msgid "Selection terminated.\n" msgstr "" -#: src/cats/sql_get.c:979 +#: src/dird/ua_update.c:664 #, c-format -msgid "Media record for Vol=%s not found in Catalog.\n" +msgid "db_update_pool_record returned %d. ERR=%s\n" msgstr "" -#: src/cats/bdb.c:128 -msgid "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +#: src/dird/ua_update.c:671 +msgid "Pool DB record updated from resource.\n" msgstr "" -#: src/cats/bdb.c:129 -msgid "WARNING!!!! The Internal Database is NOT OPERATIONAL!\n" -msgstr "" - -#: src/cats/bdb.c:130 -msgid "You should use SQLite, PostgreSQL, or MySQL\n" +#: src/dird/verify.c:87 +msgid "" +"Unable to find JobId of previous InitCatalog Job.\n" +"Please run a Verify with Level=InitCatalog before\n" +"running the current Job.\n" msgstr "" -#: src/cats/bdb.c:162 +#: src/dird/verify.c:117 #, c-format -msgid "Unable to open Catalog DB control file %s: ERR=%s\n" +msgid "Verifying against JobId=%d Job=%s\n" msgstr "" -#: src/cats/bdb.c:217 +#: src/dird/verify.c:187 #, c-format -msgid "Error reading catalog DB control file. ERR=%s\n" +msgid "Start Verify JobId=%s Level=%s Job=%s\n" msgstr "" -#: src/cats/bdb.c:220 -#, c-format -msgid "" -"Error, catalog DB control file wrong version. Wanted %d, got %d\n" -"Please reinitialize the working directory.\n" +#: src/dird/verify.c:266 +msgid "Deprecated feature ... use bootstrap.\n" msgstr "" -#: src/console/authenticate.c:117 src/wx-console/authenticate.c:121 -msgid "TLS negotiation failed\n" +#: src/dird/verify.c:279 +#, c-format +msgid "Unimplemented Verify level %d(%c)\n" msgstr "" -#: src/console/authenticate.c:129 src/gnome2-console/authenticate.c:85 -#: src/tray-monitor/authenticate.c:87 src/pyqt/pconsole.cpp:97 -#: src/pyqt/bacula-gui-gtk/pconsole.cpp:97 src/pyqt/save/pconsole.cpp:97 +#: src/dird/verify.c:331 #, c-format -msgid "Bad response to Hello command: ERR=%s\n" +msgid "Unimplemented verify level %d\n" msgstr "" -#: src/console/authenticate.c:136 src/wx-console/authenticate.c:136 -#: src/gnome2-console/authenticate.c:95 src/tray-monitor/authenticate.c:94 -#: src/pyqt/pconsole.cpp:103 src/pyqt/bacula-gui-gtk/pconsole.cpp:103 -#: src/pyqt/save/pconsole.cpp:103 -msgid "Director rejected Hello command\n" +#: src/dird/verify.c:386 +msgid "Verify OK" msgstr "" -#: src/console/authenticate.c:146 src/wx-console/authenticate.c:146 -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 http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +#: src/dird/verify.c:390 +msgid "*** Verify Error ***" msgstr "" -#: src/console/console_conf.c:123 src/wx-console/console_conf.c:128 -#: src/gnome2-console/console_conf.c:122 -#, c-format -msgid "No record for %d %s\n" +#: src/dird/verify.c:394 +msgid "Verify warnings" msgstr "" -#: src/console/console_conf.c:132 src/wx-console/console_conf.c:137 -#, c-format -msgid "Console: name=%s rcfile=%s histfile=%s\n" +#: src/dird/verify.c:397 +msgid "Verify Canceled" msgstr "" -#: src/console/console_conf.c:136 src/wx-console/console_conf.c:141 -#: src/gnome2-console/console_conf.c:131 -#, c-format -msgid "Director: name=%s address=%s DIRport=%d\n" +#: src/dird/verify.c:400 +msgid "Verify Differences" msgstr "" -#: src/console/console_conf.c:242 src/wx-console/console_conf.c:246 -#: src/gnome2-console/console_conf.c:246 src/tray-monitor/tray_conf.c:262 -#: src/filed/filed_conf.c:332 src/dird/dird_conf.c:1137 -#: src/dird/dird_conf.c:1152 +#: src/dird/verify.c:405 #, c-format -msgid "%s item is required in %s resource, but not found.\n" +msgid "Inappropriate term code: %d %c\n" msgstr "" -#: src/console/console_conf.c:304 src/wx-console/console_conf.c:308 -#: src/gnome2-console/console_conf.c:314 src/tray-monitor/tray_conf.c:341 -#: src/filed/filed_conf.c:416 src/dird/dird_conf.c:1338 +#: src/dird/verify.c:419 #, c-format -msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" +msgid "" +"Bacula %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 "" -#: src/console/console.c:102 +#: src/dird/verify.c:454 #, c-format msgid "" -"Copyright (C) 2000-2005 Kern Sibbald\n" +"Bacula %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" -"Version: " msgstr "" -#: src/console/console.c:103 +#: src/dird/verify.c:530 #, c-format msgid "" -") %s %s %s\n" -"\n" -"Usage: bconsole [-s] [-c config_file] [-d debug_level]\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" +"birdSD.\n" +msgstr "" + +#: src/filed/backup.c:155 #, c-format -msgid "Cannot open file %s for input. ERR=%s\n" +msgid " Recursion turned off. Will not descend into %s\n" msgstr "" -#: src/console/console.c:802 -msgid "Too many arguments on output/tee command.\n" +#: src/filed/backup.c:162 +#, c-format +msgid " Filesystem change prohibited. Will not descend into %s\n" msgstr "" -#: src/console/console.c:818 +#: src/filed/backup.c:168 #, c-format -msgid "Cannot open file %s for output. ERR=%s\n" +msgid " Disallowed filesystem. Will not descend into %s\n" msgstr "" -#: src/wx-console/authenticate.c:129 -msgid "Bad response to Hello command: ERR=" +#: src/filed/backup.c:186 src/filed/verify.c:113 +#, c-format +msgid " Could not access %s: ERR=%s\n" msgstr "" -#: src/lib/bshm.c:69 +#: src/filed/backup.c:193 src/filed/verify.c:120 #, c-format -msgid "shmget failure key = %x\n" +msgid " Could not follow link %s: ERR=%s\n" msgstr "" -#: src/lib/bshm.c:77 +#: src/filed/backup.c:200 src/filed/verify.c:127 #, c-format -msgid "Could not get %d bytes of shared memory: %s\n" +msgid " Could not stat %s: ERR=%s\n" msgstr "" -#: src/lib/bshm.c:102 +#: src/filed/backup.c:207 src/filed/verify.c:133 #, c-format -msgid "Could not attach shared memory: %s\n" +msgid " Unchanged file skipped: %s\n" msgstr "" -#: src/lib/bshm.c:123 +#: src/filed/backup.c:210 #, c-format -msgid "Error detaching shared memory: %s\n" +msgid " Archive file not saved: %s\n" msgstr "" -#: src/lib/bshm.c:139 +#: src/filed/backup.c:214 src/filed/verify.c:147 #, c-format -msgid "Could not destroy shared memory: %s\n" +msgid " Could not open directory %s: ERR=%s\n" msgstr "" -#: src/lib/lex.c:79 src/wx-console/console_thread.cpp:186 +#: src/filed/backup.c:220 #, c-format -msgid "Problem probably begins at line %d.\n" +msgid " Unknown file type %d; not saved: %s\n" msgstr "" -#: src/lib/lex.c:84 src/wx-console/console_thread.cpp:191 +#: src/filed/backup.c:240 #, c-format -msgid "" -"Config error: %s\n" -" : line %d, col %d of file %s\n" -"%s\n" -"%s" +msgid "Python reader program \"%s\" not found.\n" msgstr "" -#: src/lib/lex.c:88 +#: src/filed/backup.c:269 src/filed/verify.c:214 #, c-format -msgid "Config error: %s\n" +msgid " Cannot open %s: ERR=%s.\n" msgstr "" -#: src/lib/lex.c:108 -msgid "Close of NULL file\n" +#: src/filed/backup.c:298 src/filed/verify.c:229 +#, c-format +msgid " Cannot open resource fork for %s: ERR=%s.\n" msgstr "" -#: src/lib/lex.c:181 -msgid "get_char: called after EOF\n" +#: src/filed/backup.c:349 +#, c-format +msgid "Unknown signature type %i.\n" msgstr "" -#: src/lib/lex.c:220 +#: src/filed/backup.c:414 src/filed/backup.c:499 src/filed/backup.c:525 +#: src/filed/backup.c:557 src/filed/backup.c:570 src/filed/backup.c:578 +#: src/filed/backup.c:619 src/filed/backup.c:653 #, c-format -msgid "Config token too long, file: %s, line %d, begins at line %d\n" +msgid "Network send error to SD. ERR=%s\n" msgstr "" -#: src/lib/lex.c:244 -msgid "none" +#: src/filed/backup.c:479 +#, c-format +msgid "Compression error: %d\n" msgstr "" -#: src/lib/lex.c:245 -msgid "comment" +#: src/filed/backup.c:516 +#, c-format +msgid "Read error on file %s. ERR=%s\n" msgstr "" -#: src/lib/lex.c:246 -msgid "number" +#: src/filed/backup.c:519 +msgid "Too many errors.\n" msgstr "" -#: src/lib/lex.c:247 -msgid "ip_addr" +#: src/filed/backup.c:548 +#, c-format +msgid "Error reading ACL of %s\n" msgstr "" -#: src/lib/lex.c:248 -msgid "identifier" +#: src/filed/filed.c:62 +#, c-format +msgid "" +"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" +" -c use as configuration file\n" +" -dnn set debug level to nn\n" +" -f run in foreground (for debugging)\n" +" -g groupid\n" +" -i inetd request\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" msgstr "" -#: src/lib/lex.c:249 -msgid "string" +#: src/filed/filed.c:282 +#, c-format +msgid "" +"No File daemon resource defined in %s\n" +"Without that I don't know who I am :-(\n" msgstr "" -#: src/lib/lex.c:250 -msgid "quoted_string" +#: src/filed/filed.c:287 +#, c-format +msgid "Only one Client resource permitted in %s\n" msgstr "" -#: src/lib/lex.c:286 +#: src/filed/filed.c:310 #, c-format -msgid "expected a positive integer number, got: %s" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon in %s.\n" msgstr "" -#: src/lib/lex.c:292 +#: src/filed/filed.c:339 #, c-format -msgid "expected a postive integer number, got: %s" +msgid "No Director resource defined in %s\n" msgstr "" -#: src/lib/lex.c:504 +#: src/filed/job.c:324 #, c-format -msgid "Cannot open included config file %s: %s\n" +msgid "2901 Job %s not found.\n" msgstr "" -#: src/lib/lex.c:539 +#: src/filed/job.c:340 #, c-format -msgid "expected an integer or a range, got %s: %s" +msgid "2001 Job %s marked to be canceled.\n" msgstr "" -#: src/lib/lex.c:553 src/lib/lex.c:561 src/lib/lex.c:572 src/lib/lex.c:580 -#, c-format -msgid "expected an integer number, got %s: %s" +#: src/filed/job.c:343 +msgid "2902 Error scanning cancel command.\n" msgstr "" -#: src/lib/lex.c:590 +#: src/filed/job.c:362 #, c-format -msgid "expected a name, got %s: %s" +msgid "2991 Bad setdebug command: %s\n" msgstr "" -#: src/lib/lex.c:594 +#: src/filed/job.c:378 #, c-format -msgid "name %s length %d too long, max is %d\n" +msgid "Bad estimate command: %s" msgstr "" -#: src/lib/lex.c:602 -#, c-format -msgid "expected a string, got %s: %s" +#: src/filed/job.c:379 +msgid "2992 Bad estimate command.\n" msgstr "" -#: src/lib/tls.c:81 +#: src/filed/job.c:402 #, c-format -msgid "" -"Error with certificate at depth: %d, issuer = %s, subject = %s, ERR=%d:%s\n" +msgid "Bad Job Command: %s" msgstr "" -#: src/lib/tls.c:118 -msgid "Error initializing SSL context" +#: src/filed/job.c:422 +#, c-format +msgid "Bad RunBeforeJob command: %s\n" msgstr "" -#: src/lib/tls.c:139 -msgid "Error loading certificate verification stores" +#: src/filed/job.c:423 src/filed/job.c:436 +msgid "2905 Bad RunBeforeJob command.\n" msgstr "" -#: src/lib/tls.c:144 -msgid "" -"Either a certificate file or a directory must be specified as a verification " -"store\n" +#: src/filed/job.c:449 +#, c-format +msgid "Bad RunAfter command: %s\n" msgstr "" -#: src/lib/tls.c:155 -msgid "Error loading certificate file" +#: src/filed/job.c:450 +msgid "2905 Bad RunAfterJob command.\n" msgstr "" -#: src/lib/tls.c:163 -msgid "Error loading private key" +#: src/filed/job.c:476 +#, c-format +msgid "%s could not execute. ERR=%s\n" msgstr "" -#: src/lib/tls.c:171 -msgid "Unable to open DH parameters file" +#: src/filed/job.c:485 +#, c-format +msgid "%s: %s\n" msgstr "" -#: src/lib/tls.c:177 -msgid "Unable to load DH parameters from specified file" +#: src/filed/job.c:490 +#, c-format +msgid "%s returned non-zero status=%d. ERR=%s\n" msgstr "" -#: src/lib/tls.c:181 -msgid "Failed to set TLS Diffie-Hellman parameters" +#: src/filed/job.c:575 +#, c-format +msgid "Error running program: %s. RtnStat=%d ERR=%s\n" msgstr "" -#: src/lib/tls.c:190 -msgid "Error setting cipher list, no valid ciphers available\n" +#: src/filed/job.c:585 +#, c-format +msgid "Cannot open FileSet input file: %s. ERR=%s\n" msgstr "" -#: src/lib/tls.c:238 -msgid "Peer failed to present a TLS certificate\n" +#: src/filed/job.c:679 +#, c-format +msgid "REGEX %s compile error. ERR=%s\n" msgstr "" -#: src/lib/tls.c:280 +#: src/filed/job.c:733 #, c-format -msgid "Peer %s failed to present a TLS certificate\n" +msgid "Invalid FileSet command: %s\n" msgstr "" -#: src/lib/tls.c:383 -msgid "Error creating file descriptor-based BIO" +#: src/filed/job.c:902 src/findlib/match.c:184 +#, c-format +msgid "Unknown include/exclude option: %c\n" msgstr "" -#: src/lib/tls.c:394 -msgid "Error creating new SSL object" +#: src/filed/job.c:962 src/stored/fd_cmds.c:329 +#, c-format +msgid "Could not create bootstrap file %s: ERR=%s\n" msgstr "" -#: src/lib/tls.c:458 src/lib/tls.c:481 -msgid "Connect failure" +#: src/filed/job.c:1061 +#, c-format +msgid "DIR and FD clocks differ by %d seconds, FD automatically adjusting.\n" msgstr "" -#: src/lib/tls.c:558 src/lib/tls.c:562 -msgid "TLS shutdown failure." +#: src/filed/job.c:1069 +#, c-format +msgid "Unknown backup level: %s\n" msgstr "" -#: src/lib/tls.c:611 src/lib/tls.c:631 -msgid "TLS read/write failure." +#: src/filed/job.c:1081 +#, c-format +msgid "Bad level command: %s\n" msgstr "" -#: src/lib/parse_conf.c:160 -msgid "***UNKNOWN***" +#: src/filed/job.c:1102 +#, c-format +msgid "Bad session command: %s" msgstr "" -#: src/lib/parse_conf.c:179 +#: src/filed/job.c:1123 #, c-format -msgid "Unable to initialize resource lock. ERR=%s\n" +msgid "Bad storage command: %s" msgstr "" -#: src/lib/parse_conf.c:213 src/tray-monitor/tray_conf.c:268 -#: src/dird/dird_conf.c:1143 +#: src/filed/job.c:1132 #, c-format -msgid "Too many items in %s resource\n" +msgid "Failed to connect to Storage daemon: %s:%d\n" msgstr "" -#: src/lib/parse_conf.c:264 src/lib/parse_conf.c:283 -#, c-format -msgid "expected an =, got: %s" +#: src/filed/job.c:1144 +msgid "Failed to authenticate Storage daemon.\n" msgstr "" -#: src/lib/parse_conf.c:291 -#, c-format -msgid "Unknown item code: %d\n" +#: src/filed/job.c:1170 +msgid "Cannot contact Storage daemon\n" msgstr "" -#: src/lib/parse_conf.c:331 +#: src/filed/job.c:1188 #, c-format -msgid "message type: %s not found" +msgid "Bad response to append open: %s\n" msgstr "" -#: src/lib/parse_conf.c:368 -#, c-format -msgid "Attempt to redefine name \"%s\" to \"%s\"." +#: src/filed/job.c:1193 +msgid "Bad response from stored to open command\n" msgstr "" -#: src/lib/parse_conf.c:459 +#: src/filed/job.c:1222 #, c-format -msgid "Could not find config Resource %s referenced on line %d : %s\n" +msgid "Generate VSS snapshots. Driver=\"%s\", Drive(s)=\"%s\"\n" msgstr "" -#: src/lib/parse_conf.c:463 +#: src/filed/job.c:1225 #, c-format -msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" +msgid "Generate VSS snapshots failed. ERR=%s\n" msgstr "" -#: src/lib/parse_conf.c:498 +#: src/filed/job.c:1232 #, c-format -msgid "Too many %s directives. Max. is %d. line %d: %s\n" +msgid "Generate VSS snapshot of drive \"%c:\\\" failed\n" msgstr "" -#: src/lib/parse_conf.c:508 +#: src/filed/job.c:1241 #, c-format -msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" +msgid "VSS Writer: %s\n" msgstr "" -#: src/lib/parse_conf.c:570 -#, c-format -msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" +#: src/filed/job.c:1245 +msgid "No drive letters found for generating VSS snapshots.\n" +msgstr "" + +#: src/filed/job.c:1248 +msgid "VSS was not initialized properly. VSS support is disabled.\n" +msgstr "" + +#: src/filed/job.c:1297 +msgid "Append Close with SD failed.\n" msgstr "" -#: src/lib/parse_conf.c:634 +#: src/filed/job.c:1301 #, c-format -msgid "expected a size number, got: %s" +msgid "Bad status %d returned from Storage Daemon.\n" msgstr "" -#: src/lib/parse_conf.c:639 +#: src/filed/job.c:1336 #, c-format -msgid "expected a size, got: %s" +msgid "2994 Bad verify command: %s\n" msgstr "" -#: src/lib/parse_conf.c:676 src/lib/parse_conf.c:681 +#: src/filed/job.c:1351 src/filed/job.c:1390 #, c-format -msgid "expected a time period, got: %s" +msgid "2994 Bad verify level: %s\n" msgstr "" -#: src/lib/parse_conf.c:700 src/lib/parse_conf.c:715 +#: src/filed/job.c:1430 #, c-format -msgid "Expect %s, got: %s" +msgid "Bad replace command. CMD=%s\n" msgstr "" -#: src/lib/parse_conf.c:740 +#: src/filed/job.c:1507 +msgid "Improper calling sequence.\n" +msgstr "" + +#: src/filed/job.c:1527 #, c-format -msgid "Expected a Tape Label keyword, got: %s" +msgid "Bad response to SD read open: %s\n" +msgstr "" + +#: src/filed/job.c:1532 +msgid "Bad response from stored to read open command\n" msgstr "" -#: src/lib/parse_conf.c:789 +#: src/filed/job.c:1598 #, c-format -msgid "Cannot open config file \"%s\": %s\n" +msgid "Comm error with SD. bad response to %s. ERR=%s\n" msgstr "" -#: src/lib/parse_conf.c:802 +#: src/filed/job.c:1601 #, c-format -msgid "Expected a Resource name identifier, got: %s" +msgid "Bad response to %s command. Wanted %s, got %s\n" msgstr "" -#: src/lib/parse_conf.c:814 +#: src/filed/pythonfd.c:150 src/stored/pythonsd.c:154 #, c-format -msgid "expected resource name, got: %s" +msgid "Cannot delete attribute %s" msgstr "" -#: src/lib/parse_conf.c:825 +#: src/filed/pythonfd.c:168 src/filed/pythonfd.c:184 src/stored/pythonsd.c:187 #, c-format -msgid "not in resource definition: %s" +msgid "Cannot find attribute %s" msgstr "" -#: src/lib/parse_conf.c:836 src/dird/inc_conf.c:320 src/dird/inc_conf.c:585 +#: src/filed/restore.c:55 #, c-format -msgid "expected an equals, got: %s" +msgid "Size of data or stream of %s not correct. Original %s, restored %s.\n" msgstr "" -#: src/lib/parse_conf.c:850 +#: src/filed/restore.c:165 src/filed/verify_vol.c:90 #, c-format -msgid "" -"Keyword \"%s\" not permitted in this resource.\n" -"Perhaps you left the trailing brace off of the previous resource." +msgid "Record header scan error: %s\n" msgstr "" -#: src/lib/parse_conf.c:867 +#: src/filed/restore.c:172 src/filed/verify_vol.c:99 #, c-format -msgid "unexpected token %d %s in resource definition" +msgid "Data record error. ERR=%s\n" msgstr "" -#: src/lib/parse_conf.c:873 +#: src/filed/restore.c:176 src/filed/verify_vol.c:103 #, c-format -msgid "Unknown parser state %d\n" +msgid "Actual data size %d not same as header %d\n" msgstr "" -#: src/lib/parse_conf.c:878 -msgid "End of conf file reached with unclosed resource." +#: src/filed/restore.c:201 src/filed/restore.c:383 +msgid "Logic error: output file should be open\n" msgstr "" -#: src/lib/mem_pool.c:95 +#: src/filed/restore.c:207 src/filed/restore.c:388 +msgid "Logic error: output file should not be open\n" +msgstr "" + +#: src/filed/restore.c:218 src/filed/verify_vol.c:142 +#: src/stored/bextract.c:289 src/stored/bls.c:371 src/stored/bscan.c:651 #, c-format -msgid "MemPool index %d larger than max %d\n" +msgid "Record header file index %ld not equal record index %ld\n" msgstr "" -#: src/lib/mem_pool.c:113 src/lib/mem_pool.c:133 src/lib/mem_pool.c:168 -#: src/lib/mem_pool.c:239 src/lib/mem_pool.c:259 src/lib/mem_pool.c:297 -#: src/lib/mem_pool.c:550 +#: src/filed/restore.c:231 src/stored/bextract.c:298 #, c-format -msgid "Out of memory requesting %d bytes\n" +msgid "%s stream not supported on this Client.\n" msgstr "" -#: src/lib/watchdog.c:69 +#: src/filed/restore.c:308 #, c-format -msgid "Unable to initialize watchdog lock. ERR=%s\n" +msgid " Cannot open resource fork for %s.\n" msgstr "" -#: src/lib/watchdog.c:165 -msgid "BUG! register_watchdog called before start_watchdog\n" +#: src/filed/restore.c:331 +#, c-format +msgid " Invalid length of Finder Info (got %d, not 32)\n" msgstr "" -#: src/lib/watchdog.c:168 +#: src/filed/restore.c:335 #, c-format -msgid "BUG! Watchdog %p has NULL callback\n" +msgid " Could not set Finder Info on %s\n" msgstr "" -#: src/lib/watchdog.c:171 +#: src/filed/restore.c:347 #, c-format -msgid "BUG! Watchdog %p has zero interval\n" +msgid "Can't restore ACL of %s\n" msgstr "" -#: src/lib/watchdog.c:191 -msgid "BUG! unregister_watchdog_unlocked called before start_watchdog\n" +#: src/filed/restore.c:359 +#, c-format +msgid "Can't restore default ACL of %s\n" msgstr "" -#: src/lib/watchdog.c:309 +#: src/filed/restore.c:391 src/stored/bextract.c:455 #, c-format -msgid "rwl_writelock failure. ERR=%s\n" +msgid "Unknown stream=%d ignored. This shouldn't happen!\n" msgstr "" -#: src/lib/watchdog.c:323 +#: src/filed/restore.c:428 #, c-format -msgid "rwl_writeunlock failure. ERR=%s\n" +msgid "" +"%d non-supported data streams and %d non-supported attrib streams ignored.\n" msgstr "" -#: src/lib/regex.c:1040 -msgid "Success" +#: src/filed/restore.c:432 +#, c-format +msgid "%d non-supported resource fork streams ignored.\n" msgstr "" -#: src/lib/regex.c:1043 -msgid "No match" +#: src/filed/restore.c:435 +#, c-format +msgid "%d non-supported Finder Info streams ignored.\n" msgstr "" -#: src/lib/regex.c:1046 -msgid "Invalid regular expression" +#: src/filed/restore.c:438 +#, c-format +msgid "%d non-supported acl streams ignored.\n" msgstr "" -#: src/lib/regex.c:1049 -msgid "Invalid collation character" +#: src/filed/restore.c:450 +msgid "None" msgstr "" -#: src/lib/regex.c:1052 -msgid "Invalid character class name" +#: src/filed/restore.c:454 +msgid "Zlib errno" msgstr "" -#: src/lib/regex.c:1055 -msgid "Trailing backslash" +#: src/filed/restore.c:456 +msgid "Zlib stream error" msgstr "" -#: src/lib/regex.c:1058 -msgid "Invalid back reference" +#: src/filed/restore.c:458 +msgid "Zlib data error" msgstr "" -#: src/lib/regex.c:1061 -msgid "Unmatched [ or [^" +#: src/filed/restore.c:460 +msgid "Zlib memory error" msgstr "" -#: src/lib/regex.c:1064 -msgid "Unmatched ( or \\(" +#: src/filed/restore.c:462 +msgid "Zlib buffer error" msgstr "" -#: src/lib/regex.c:1067 -msgid "Unmatched \\{" +#: src/filed/restore.c:464 +msgid "Zlib version error" msgstr "" -#: src/lib/regex.c:1070 -msgid "Invalid content of \\{\\}" +#: src/filed/restore.c:466 src/lib/util.c:546 src/lib/util.c:556 +#: src/lib/util.c:564 src/lib/util.c:571 src/lib/util.c:578 src/lib/util.c:592 +#: src/lib/util.c:602 src/lib/util.c:609 src/lib/util.c:620 +msgid "*none*" msgstr "" -#: src/lib/regex.c:1073 -msgid "Invalid range end" +#: src/filed/restore.c:498 src/stored/bextract.c:387 +#, c-format +msgid "Seek to %s error on %s: ERR=%s\n" msgstr "" -#: src/lib/regex.c:1076 -msgid "Memory exhausted" +#: src/filed/restore.c:522 +#, c-format +msgid "Uncompression error on file %s. ERR=%s\n" msgstr "" -#: src/lib/regex.c:1079 -msgid "Invalid preceding regular expression" +#: src/filed/restore.c:530 src/stored/bextract.c:421 +msgid "GZIP data stream found, but GZIP not configured!\n" msgstr "" -#: src/lib/regex.c:1082 -msgid "Premature end of regular expression" +#: src/filed/restore.c:539 src/stored/bextract.c:359 src/stored/bextract.c:409 +#, c-format +msgid "Write error on %s: %s\n" msgstr "" -#: src/lib/regex.c:1085 -msgid "Regular expression too big" +#: src/filed/status.c:67 +#, c-format +msgid "%s Version: %s (%s) %s %s %s %s\n" msgstr "" -#: src/lib/regex.c:1088 -msgid "Unmatched ) or \\)" +#: src/filed/status.c:71 +#, c-format +msgid "Daemon started %s, %d Job%s run since started.\n" msgstr "" -#: src/lib/regex.c:5874 -msgid "No previous regular expression" +#: src/filed/status.c:127 +#, c-format +msgid " Sizeof: off_t=%d size_t=%d debug=%d trace=%d\n" msgstr "" -#: src/lib/util.c:181 -msgid "Running" +#: src/filed/status.c:138 +msgid "Running Jobs:\n" msgstr "" -#: src/lib/util.c:184 -msgid "Blocked" +#: src/filed/status.c:149 +#, c-format +msgid "Director connected at: %s\n" msgstr "" -#: src/lib/util.c:194 -msgid "Non-fatal error" +#: src/filed/status.c:151 +#, c-format +msgid "JobId %d Job %s is running.\n" msgstr "" -#: src/lib/util.c:197 src/lib/util.c:264 -msgid "Canceled" +#: src/filed/status.c:154 +#, c-format +msgid " %s%s Job started: %s\n" msgstr "" -#: src/lib/util.c:200 -msgid "Verify differences" +#: src/filed/status.c:166 src/stored/status.c:323 +#, c-format +msgid " Files=%s Bytes=%s Bytes/sec=%s\n" msgstr "" -#: src/lib/util.c:203 -msgid "Waiting on FD" +#: src/filed/status.c:171 +#, c-format +msgid " Files Examined=%s\n" msgstr "" -#: src/lib/util.c:206 -msgid "Wait on SD" +#: src/filed/status.c:176 +#, c-format +msgid " Processing file: %s\n" msgstr "" -#: src/lib/util.c:209 -msgid "Wait for new Volume" +#: src/filed/status.c:187 +msgid " SDSocket closed.\n" msgstr "" -#: src/lib/util.c:212 -msgid "Waiting for mount" +#: src/filed/status.c:217 +msgid "Terminated Jobs:\n" msgstr "" -#: src/lib/util.c:215 -msgid "Waiting for Storage resource" +#: src/filed/status.c:219 +msgid " JobId Level Files Bytes Status Finished Name \n" msgstr "" -#: src/lib/util.c:218 -msgid "Waiting for Job resource" +#: src/filed/status.c:323 src/filed/status.c:347 src/stored/status.c:513 +#: src/stored/status.c:536 +#, c-format +msgid "Bad .status command: %s\n" msgstr "" -#: src/lib/util.c:221 -msgid "Waiting for Client resource" +#: src/filed/status.c:324 +msgid "2900 Bad .status command, missing argument.\n" msgstr "" -#: src/lib/util.c:224 -msgid "Waiting on Max Jobs" +#: src/filed/status.c:348 +msgid "2900 Bad .status command, wrong argument.\n" msgstr "" -#: src/lib/util.c:227 -msgid "Waiting for Start Time" +#: src/filed/status.c:385 src/stored/status.c:468 +msgid "Init Catalog" msgstr "" -#: src/lib/util.c:230 -msgid "Waiting on Priority" +#: src/filed/status.c:388 src/stored/status.c:471 +msgid "Volume to Catalog" msgstr "" -#: src/lib/util.c:237 -#, c-format -msgid "Unknown Job termination status=%d" +#: src/filed/status.c:391 src/stored/status.c:474 +msgid "Disk to Catalog" msgstr "" -#: src/lib/util.c:261 -msgid "Fatal Error" +#: src/filed/status.c:394 src/stored/status.c:477 +msgid "Data" msgstr "" -#: src/lib/util.c:267 -msgid "Differences" +#: src/filed/status.c:400 src/lib/util.c:351 src/stored/status.c:483 +msgid "Unknown Job Level" msgstr "" -#: src/lib/util.c:270 -msgid "Unknown term code" +#: src/filed/status.c:451 +msgid "Bacula Idle" msgstr "" -#: src/lib/util.c:286 src/dird/ua_run.c:561 -msgid "Backup" +#: src/filed/status.c:462 +msgid "Bacula Running" msgstr "" -#: src/lib/util.c:289 src/dird/ua_run.c:594 -msgid "Verify" +#: src/filed/status.c:476 +msgid "Last Job Canceled" msgstr "" -#: src/lib/util.c:292 src/gnome2-console/interface.c:261 -#: src/wx-console/wxbrestorepanel.cpp:384 -#: src/wx-console/wxbrestorepanel.cpp:1949 -msgid "Restore" +#: src/filed/status.c:480 +msgid "Last Job Failed" msgstr "" -#: src/lib/util.c:295 src/dird/ua_run.c:540 -msgid "Admin" +#: src/filed/status.c:484 +msgid "Last Job had Warnings" msgstr "" -#: src/lib/util.c:298 -msgid "Migrate" +#: src/filed/verify.c:45 +#, c-format +msgid "Cannot malloc %d network read buffer\n" msgstr "" -#: src/lib/util.c:301 -msgid "Copy" +#: src/filed/verify.c:136 +#, c-format +msgid " Archive file skipped: %s\n" msgstr "" -#: src/lib/util.c:304 -msgid "Unknown Type" +#: src/filed/verify.c:139 +#, c-format +msgid " Recursion turned off. Directory skipped: %s\n" msgstr "" -#: src/lib/util.c:336 -msgid "Verify Init Catalog" +#: src/filed/verify.c:142 +#, c-format +msgid " File system change prohibited. Directory skipped: %s\n" msgstr "" -#: src/lib/util.c:339 src/dird/ua_run.c:760 -msgid "Verify Volume to Catalog" +#: src/filed/verify.c:152 +#, c-format +msgid " Unknown file type %d: %s\n" msgstr "" -#: src/lib/util.c:342 src/dird/ua_run.c:761 -msgid "Verify Disk to Catalog" +#: src/filed/verify.c:195 src/filed/verify_vol.c:200 +#, c-format +msgid "Network error in send to Director: ERR=%s\n" msgstr "" -#: src/lib/util.c:345 -msgid "Verify Data" +#: src/filed/verify.c:284 +#, c-format +msgid "Error reading file %s: ERR=%s\n" msgstr "" -#: src/lib/util.c:546 src/lib/util.c:556 src/lib/util.c:564 src/lib/util.c:571 -#: src/lib/util.c:578 src/lib/util.c:592 src/lib/util.c:602 src/lib/util.c:609 -#: src/lib/util.c:620 src/filed/restore.c:629 -msgid "*none*" +#: src/filed/verify_vol.c:56 +msgid "Storage command not issued before Verify.\n" msgstr "" -#: src/lib/util.c:647 -msgid "Working directory not defined. Cannot continue.\n" +#: src/filed/verify_vol.c:136 +#, c-format +msgid "Error scanning record header: %s\n" msgstr "" -#: src/lib/util.c:650 +#: src/findlib/attribs.c:335 #, c-format -msgid "Working Directory: \"%s\" not found. Cannot continue.\n" +msgid "File size of restored file %s not correct. Original %s, restored %s.\n" msgstr "" -#: src/lib/util.c:654 +#: src/findlib/attribs.c:353 src/findlib/attribs.c:360 #, c-format -msgid "Working Directory: \"%s\" is not a directory. Cannot continue.\n" +msgid "Unable to set file owner %s: ERR=%s\n" msgstr "" -#: src/lib/bpipe.c:282 src/lib/bpipe.c:361 -msgid "Program killed by Bacula watchdog (timeout)\n" +#: src/findlib/attribs.c:366 +#, c-format +msgid "Unable to set file modes %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:50 +#: src/findlib/attribs.c:376 #, c-format -msgid "Only ipv4 and ipv6 are supported (%d)\n" +msgid "Unable to set file times %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:54 +#: src/findlib/attribs.c:390 #, c-format -msgid "Only ipv4 is supported (%d)\n" +msgid "Unable to set file flags %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:163 +#: src/findlib/attribs.c:635 #, c-format -msgid "It was tried to assign a ipv6 address to a ipv4(%d)\n" +msgid "Error in %s file %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:172 +#: src/findlib/attribs.c:652 #, c-format -msgid "It was tried to assign a ipv4 address to a ipv6(%d)\n" +msgid "Error in %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:251 -#, c-format -msgid "Can't add default address (%s)\n" +#: src/findlib/bfile.c:67 +msgid "GZIP data" msgstr "" -#: src/lib/address_conf.c:281 -msgid "the old style addresses cannot be mixed with new style" +#: src/findlib/bfile.c:69 +msgid "GZIP sparse data" msgstr "" -#: src/lib/address_conf.c:304 -#, c-format -msgid "can't resolve service(%s)" +#: src/findlib/bfile.c:71 +msgid "Win32 data" msgstr "" -#: src/lib/address_conf.c:314 -#, c-format -msgid "can't resolve hostname(%s) %s" +#: src/findlib/bfile.c:73 +msgid "Win32 GZIP data" msgstr "" -#: src/lib/address_conf.c:403 -#, c-format -msgid "Expected a block begin { , got: %s" +#: src/findlib/bfile.c:75 +msgid "File attributes" msgstr "" -#: src/lib/address_conf.c:408 -msgid "Empty addr block is not allowed" +#: src/findlib/bfile.c:77 +msgid "File data" msgstr "" -#: src/lib/address_conf.c:412 -#, c-format -msgid "Expected a string, got: %s" +#: src/findlib/bfile.c:79 +msgid "MD5 signature" msgstr "" -#: src/lib/address_conf.c:421 -#, c-format -msgid "Expected a string [ip|ipv4|ipv6], got: %s" +#: src/findlib/bfile.c:81 +msgid "Extended attributes" msgstr "" -#: src/lib/address_conf.c:425 -#, c-format -msgid "Expected a string [ip|ipv4], got: %s" +#: src/findlib/bfile.c:83 +msgid "Sparse data" msgstr "" -#: src/lib/address_conf.c:430 src/lib/address_conf.c:460 -#, c-format -msgid "Expected a equal =, got: %s" +#: src/findlib/bfile.c:85 +msgid "Program names" msgstr "" -#: src/lib/address_conf.c:434 -#, c-format -msgid "Expected a block beginn { , got: %s" +#: src/findlib/bfile.c:87 +msgid "Program data" msgstr "" -#: src/lib/address_conf.c:441 src/lib/address_conf.c:456 -#, c-format -msgid "Expected a identifier [addr|port], got: %s" +#: src/findlib/bfile.c:89 +msgid "SHA1 signature" msgstr "" -#: src/lib/address_conf.c:446 -msgid "Only one port per address block" +#: src/findlib/bfile.c:91 +msgid "HFS+ resource fork" msgstr "" -#: src/lib/address_conf.c:452 -msgid "Only one addr per address block" +#: src/findlib/bfile.c:93 +msgid "HFS+ Finder Info" msgstr "" -#: src/lib/address_conf.c:468 +#: src/findlib/create_file.c:86 #, c-format -msgid "Expected a number or a string, got: %s" +msgid "File skipped. Not newer: %s\n" msgstr "" -#: src/lib/address_conf.c:474 +#: src/findlib/create_file.c:93 #, c-format -msgid "Expected an IP number or a hostname, got: %s" +msgid "File skipped. Not older: %s\n" msgstr "" -#: src/lib/address_conf.c:480 -msgid "State machine missmatch" +#: src/findlib/create_file.c:99 +#, c-format +msgid "File skipped. Already exists: %s\n" msgstr "" -#: src/lib/address_conf.c:486 src/lib/address_conf.c:499 +#: src/findlib/create_file.c:124 #, c-format -msgid "Expected a end of block }, got: %s" +msgid "File %s already exists and could not be replaced. ERR=%s.\n" msgstr "" -#: src/lib/address_conf.c:492 +#: src/findlib/create_file.c:176 src/findlib/create_file.c:277 +#: src/findlib/create_file.c:328 #, c-format -msgid "Can't add hostname(%s) and port(%s) to addrlist (%s)" +msgid "bpkt already open fid=%d\n" msgstr "" -#: src/lib/address_conf.c:508 -#, c-format -msgid "Expected a hostname or IP nummer, got: %s" +#: src/findlib/create_file.c:198 +msgid "Could not save_dirn" msgstr "" -#: src/lib/address_conf.c:513 src/lib/address_conf.c:527 +#: src/findlib/create_file.c:207 src/findlib/create_file.c:220 #, c-format -msgid "can't add port (%s) to (%s)" +msgid "Could not chdir to %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:522 +#: src/findlib/create_file.c:240 #, c-format -msgid "Expected a port number or string, got: %s" -msgstr "" - -#: src/lib/jcr.c:279 -msgid "NULL jcr.\n" +msgid "Could not create %s: ERR=%s\n" msgstr "" -#: src/lib/jcr.c:400 +#: src/findlib/create_file.c:253 #, c-format -msgid "JCR use_count=%d JobId=%d\n" +msgid "Cannot make fifo %s: ERR=%s\n" msgstr "" -#: src/lib/jcr.c:682 +#: src/findlib/create_file.c:261 #, c-format -msgid "" -"Watchdog sending kill after %d secs to thread stalled reading Storage " -"daemon.\n" +msgid "Cannot make node %s: ERR=%s\n" msgstr "" -#: src/lib/jcr.c:694 +#: src/findlib/create_file.c:297 #, c-format -msgid "" -"Watchdog sending kill after %d secs to thread stalled reading File daemon.\n" +msgid "Could not symlink %s -> %s: ERR=%s\n" msgstr "" -#: src/lib/jcr.c:706 +#: src/findlib/create_file.c:307 #, c-format -msgid "" -"Watchdog sending kill after %d secs to thread stalled reading Director.\n" +msgid "Could not hard link %s -> %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:253 src/lib/message.c:263 +#: src/findlib/create_file.c:358 #, c-format -msgid "Could not open console message file %s: ERR=%s\n" +msgid "Original file %s not saved: type=%d\n" msgstr "" -#: src/lib/message.c:268 +#: src/findlib/create_file.c:361 #, c-format -msgid "Could not get con mutex: ERR=%s\n" +msgid "Unknown file type %d; not restored: %s\n" msgstr "" -#: src/lib/message.c:372 +#: src/findlib/create_file.c:392 #, c-format -msgid "open mail pipe %s failed: ERR=%s\n" -msgstr "" - -#: src/lib/message.c:378 -msgid "Bacula Message" +msgid "Zero length filename: %s\n" msgstr "" -#: src/lib/message.c:431 -msgid "open mail pipe failed.\n" +#: src/findlib/enable_priv.c:85 +msgid "AdjustTokenPrivileges set " msgstr "" -#: src/lib/message.c:443 +#: src/findlib/find_one.c:168 #, c-format -msgid "close error: ERR=%s\n" +msgid "Top level directory \"%s\" has an unlisted fstype\n" msgstr "" -#: src/lib/message.c:454 +#: src/findlib/makepath.c:117 #, c-format -msgid "Mail prog: %s" +msgid "Cannot create directory %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:463 +#: src/findlib/makepath.c:121 src/findlib/makepath.c:378 #, c-format -msgid "" -"Mail program terminated in error.\n" -"CMD=%s\n" -"ERR=%s\n" +msgid "%s exists but is not a directory\n" msgstr "" -#: src/lib/message.c:650 +#: src/findlib/makepath.c:276 src/findlib/makepath.c:337 +#: src/findlib/makepath.c:397 #, c-format -msgid "" -"Operator mail program terminated in error.\n" -"CMD=%s\n" -"ERR=%s\n" +msgid "Cannot change owner and/or group of %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:667 src/lib/message.c:689 src/lib/message.c:705 +#: src/findlib/makepath.c:297 #, c-format -msgid "fopen %s failed: ERR=%s\n" +msgid "Cannot chdir to directory, %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:933 +#: src/findlib/makepath.c:352 src/findlib/makepath.c:368 +#: src/findlib/makepath.c:402 #, c-format -msgid "%s: ABORTING due to ERROR in %s:%d\n" +msgid "Cannot change permissions of %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:937 +#: src/findlib/save-cwd.c:48 #, c-format -msgid "%s: ERROR TERMINATION at %s:%d\n" +msgid "Cannot open current directory: %s\n" msgstr "" -#: src/lib/message.c:942 +#: src/findlib/save-cwd.c:62 #, c-format -msgid "%s: Fatal Error because: " +msgid "Current directory: %s\n" msgstr "" -#: src/lib/message.c:944 +#: src/findlib/save-cwd.c:84 #, c-format -msgid "%s: Fatal Error at %s:%d because:\n" +msgid "Cannot get current directory: %s\n" msgstr "" -#: src/lib/message.c:948 +#: src/findlib/save-cwd.c:105 #, c-format -msgid "%s: ERROR: " +msgid "Cannot return to %s from %s: %s\n" msgstr "" -#: src/lib/message.c:950 +#: src/findlib/save-cwd.c:109 #, c-format -msgid "%s: ERROR in %s:%d " +msgid "Cannot return to saved working directory from %s: %s\n" msgstr "" -#: src/lib/message.c:953 +#: src/findlib/save-cwd.c:115 #, c-format -msgid "%s: Warning: " +msgid "Cannot return to %s: %s\n" msgstr "" -#: src/lib/message.c:956 +#: src/findlib/save-cwd.c:119 #, c-format -msgid "%s: Security violation: " +msgid "Cannot return to saved working directory: %s\n" msgstr "" -#: src/lib/message.c:1032 +#: src/gnome2-console/authenticate.c:74 #, c-format -msgid "%s ABORTING due to ERROR\n" +msgid "%s: Director authorization problem.\n" msgstr "" -#: src/lib/message.c:1035 -#, c-format -msgid "%s ERROR TERMINATION\n" +#: src/gnome2-console/authenticate.c:75 +msgid "Director authorization problem.\n" msgstr "" -#: src/lib/message.c:1038 -#, c-format -msgid "%s: %s Fatal error: " +#: src/gnome2-console/authenticate.c:77 +msgid "" +"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " +"help.\n" msgstr "" -#: src/lib/message.c:1044 +#: src/gnome2-console/authenticate.c:87 #, c-format -msgid "%s: %s Error: " +msgid "%s: Bad response to Hello command: ERR=%s\n" msgstr "" -#: src/lib/message.c:1050 -#, c-format -msgid "%s: %s Warning: " +#: src/gnome2-console/authenticate.c:89 +msgid "The Director is probably not running.\n" msgstr "" -#: src/lib/message.c:1053 +#: src/gnome2-console/console.c:88 #, c-format -msgid "%s: %s Security violation: " +msgid "" +"Copyright (C) 2002-2005 Kern Sibbald\n" +"\n" +"Version: %s (%s) %s %s %s\n" +"\n" +"Usage: gnome-console [-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 "" -#: src/lib/edit.c:433 +#: src/gnome2-console/console.c:219 #, c-format -msgid "Illegal character \"%c\" in name.\n" -msgstr "" - -#: src/lib/edit.c:440 -msgid "Name too long.\n" +msgid "Pthread cond init error = %s\n" msgstr "" -#: src/lib/edit.c:446 src/dird/ua_cmds.c:278 src/dird/ua_label.c:611 -msgid "Volume name must be at least one character long.\n" +#: src/gnome2-console/console.c:357 +msgid " Not Connected" msgstr "" -#: src/lib/bnet_server.c:96 +#: src/gnome2-console/console.c:478 #, c-format -msgid "Cannot open stream socket. ERR=%s. Current %s All %s\n" +msgid " Connecting to Director %s:%d" msgstr "" -#: src/lib/bnet_server.c:109 src/lib/bnet_server.c:258 +#: src/gnome2-console/console.c:479 #, c-format -msgid "Cannot set SO_REUSEADDR on socket: %s\n" +msgid "" +"Connecting to Director %s:%d\n" +"\n" msgstr "" -#: src/lib/bnet_server.c:118 +#: src/gnome2-console/console.c:494 src/wx-console/console_thread.cpp:360 #, c-format -msgid "Cannot bind port %d: ERR=%s: Retrying ...\n" +msgid "Passphrase for Console \"%s\" TLS private key: " msgstr "" -#: src/lib/bnet_server.c:123 +#: src/gnome2-console/console.c:516 src/wx-console/console_thread.cpp:381 #, c-format -msgid "Cannot bind port %d: ERR=%s.\n" +msgid "Passphrase for Director \"%s\" TLS private key: " msgstr "" -#: src/lib/bnet_server.c:134 -#, c-format -msgid "Could not init client queue: ERR=%s\n" +#: src/gnome2-console/console.c:535 src/tray-monitor/tray-monitor.c:860 +#: src/wx-console/console_thread.cpp:399 +msgid "Director daemon" msgstr "" -#: src/lib/bnet_server.c:157 src/lib/bnet_server.c:320 -#, c-format -msgid "Error in select: %s\n" +#: src/gnome2-console/console.c:547 +msgid " Initializing ..." msgstr "" -#: src/lib/bnet_server.c:178 src/lib/bnet_server.c:339 -#, c-format -msgid "Connection from %s:%d refused by hosts.access\n" +#: src/gnome2-console/console.c:583 +msgid " Connected" msgstr "" -#: src/lib/bnet_server.c:193 src/lib/bnet_server.c:351 src/lib/bnet.c:796 -#: src/lib/bnet.c:821 -#, c-format -msgid "Cannot set SO_KEEPALIVE on socket: %s\n" +#: src/gnome2-console/console.c:591 +msgid " Processing command ..." msgstr "" -#: src/lib/bnet_server.c:204 -msgid "Could not create client BSOCK.\n" +#: src/gnome2-console/console.c:626 +msgid " At prompt waiting for input ..." msgstr "" -#: src/lib/bnet_server.c:211 -#, c-format -msgid "Could not add job to client queue: ERR=%s\n" +#: src/gnome2-console/console.c:746 +msgid " Ready" msgstr "" -#: src/lib/bnet_server.c:222 +#: src/gnome2-console/console_conf.c:135 #, c-format -msgid "Could not destroy client queue: ERR=%s\n" +msgid "Console: name=%s\n" msgstr "" -#: src/lib/bnet_server.c:249 +#: src/gnome2-console/console_conf.c:138 #, c-format -msgid "Cannot open stream socket: %s\n" +msgid "ConsoleFont: name=%s font face=%s\n" msgstr "" -#: src/lib/bnet_server.c:278 -#, c-format -msgid "Cannot bind port %d: ERR=%s: retrying ...\n" +#: src/gnome2-console/interface.c:32 +msgid "_Connect" msgstr "" -#: src/lib/bnet_server.c:284 -msgid "Server socket" +#: src/gnome2-console/interface.c:33 src/gnome2-console/interface.c:232 +msgid "Connect to Director" msgstr "" -#: src/lib/bnet_server.c:284 src/lib/bnet_server.c:378 -#: src/dird/ua_select.c:337 -msgid "client" +#: src/gnome2-console/interface.c:39 +msgid "_Disconnect" msgstr "" -#: src/lib/bnet_server.c:366 -#, c-format -msgid "Socket accept error for %s. ERR=%s\n" +#: src/gnome2-console/interface.c:40 +msgid "Disconnect from Director" msgstr "" -#: src/lib/bget_msg.c:86 -msgid "Status OK\n" +#: src/gnome2-console/interface.c:93 +msgid "_Display Messages" msgstr "" -#: src/lib/bget_msg.c:90 -#, c-format -msgid "bget_msg: unknown signal %d\n" +#: src/gnome2-console/interface.c:129 +msgid "_File" msgstr "" -#: src/lib/rwlock.c:289 -msgid "rwl_writeunlock called too many times.\n" +#: src/gnome2-console/interface.c:136 +msgid "_Edit" msgstr "" -#: src/lib/rwlock.c:293 -msgid "rwl_writeunlock by non-owner.\n" +#: src/gnome2-console/interface.c:143 +msgid "_View" msgstr "" -#: src/lib/rwlock.c:358 src/lib/semlock.c:248 -#, c-format -msgid "Write lock failed. ERR=%s\n" +#: src/gnome2-console/interface.c:144 src/gnome2-console/interface.c:252 +msgid "Display Messages" msgstr "" -#: src/lib/rwlock.c:365 src/lib/semlock.c:255 -#, c-format -msgid "Write unlock failed. ERR=%s\n" +#: src/gnome2-console/interface.c:150 +msgid "_Settings" msgstr "" -#: src/lib/rwlock.c:375 src/lib/semlock.c:265 -#, c-format -msgid "Read lock failed. ERR=%s\n" +#: src/gnome2-console/interface.c:157 +msgid "_Help" msgstr "" -#: src/lib/rwlock.c:382 src/lib/semlock.c:272 -#, c-format -msgid "Read unlock failed. ERR=%s\n" +#: src/gnome2-console/interface.c:197 +msgid "Bacula Console" msgstr "" -#: src/lib/rwlock.c:391 src/lib/semlock.c:281 -#, c-format -msgid "Thread %d found unchanged elements %d times\n" +#: src/gnome2-console/interface.c:231 src/wx-console/wxbmainframe.cpp:229 +#: src/wx-console/wxbmainframe.cpp:597 +msgid "Connect" msgstr "" -#: src/lib/rwlock.c:423 src/lib/semlock.c:313 -#, c-format -msgid "Init rwlock failed. ERR=%s\n" +#: src/gnome2-console/interface.c:241 +msgid "Run" msgstr "" -#: src/lib/rwlock.c:438 src/lib/semlock.c:328 -#, c-format -msgid "Create thread failed. ERR=%s\n" +#: src/gnome2-console/interface.c:242 src/gnome2-console/interface.c:677 +#: src/gnome2-console/interface.c:690 +msgid "Run a Job" msgstr "" -#: src/lib/rwlock.c:449 src/lib/semlock.c:339 -#, c-format -msgid "Join thread failed. ERR=%s\n" +#: src/gnome2-console/interface.c:251 +msgid "Msgs" msgstr "" -#: src/lib/rwlock.c:452 src/lib/semlock.c:342 -#, c-format -msgid "%02d: interval %d, writes %d, reads %d\n" +#: src/gnome2-console/interface.c:261 src/lib/util.c:292 +#: src/wx-console/wxbrestorepanel.cpp:384 +#: src/wx-console/wxbrestorepanel.cpp:1949 +msgid "Restore" msgstr "" -#: src/lib/rwlock.c:462 src/lib/semlock.c:352 -#, c-format -msgid "data %02d: value %d, %d writes\n" +#: src/gnome2-console/interface.c:271 +msgid "Label" msgstr "" -#: src/lib/rwlock.c:467 src/lib/semlock.c:357 -#, c-format -msgid "Total: %d thread writes, %d data writes\n" +#: src/gnome2-console/interface.c:299 +msgid " Command: " msgstr "" -#: src/lib/rwlock.c:539 src/lib/semlock.c:429 -msgid "Try write lock" +#: src/gnome2-console/interface.c:307 +msgid "Enter Commands Here" msgstr "" -#: src/lib/rwlock.c:545 src/lib/semlock.c:435 -msgid "Try read lock" +#: src/gnome2-console/interface.c:318 +msgid " Status: " msgstr "" -#: src/lib/rwlock.c:600 src/lib/semlock.c:490 -msgid "Create thread" +#: src/gnome2-console/interface.c:326 +msgid " " msgstr "" -#: src/lib/rwlock.c:610 src/lib/semlock.c:500 -msgid "Join thread" +#: src/gnome2-console/interface.c:422 +msgid "About Bacula Console" msgstr "" -#: src/lib/rwlock.c:612 src/lib/semlock.c:502 -#, c-format -msgid "%02d: interval %d, updates %d, r_collisions %d, w_collisions %d\n" +#: src/gnome2-console/interface.c:436 +msgid "Bacula Console\n" msgstr "" -#: src/lib/rwlock.c:624 src/lib/semlock.c:514 -#, c-format -msgid "data %02d: value %d, %d updates\n" +#: src/gnome2-console/interface.c:444 +msgid "Copyright (c) 2000 - 2004, Kern Sibbald and John Walker" msgstr "" -#: src/lib/cram-md5.c:76 src/lib/cram-md5.c:101 -msgid "1999 Authorization failed.\n" +#: src/gnome2-console/interface.c:450 +msgid "Authors: Kern Sibbald and John Walker" msgstr "" -#: src/lib/smartall.c:132 src/lib/smartall.c:223 src/lib/smartall.c:238 -msgid "Out of memory\n" +#: src/gnome2-console/interface.c:456 +msgid "It comes by night and sucks the essence from your computers" msgstr "" -#: src/lib/smartall.c:160 -#, c-format -msgid "Attempt to free NULL called from %s:%d\n" +#: src/gnome2-console/interface.c:521 src/gnome2-console/interface.c:536 +msgid "Select Director" msgstr "" -#: src/lib/smartall.c:176 -#, c-format -msgid "qp->qnext->qprev != qp called from %s:%d\n" +#: src/gnome2-console/interface.c:708 src/gnome2-console/interface.c:1616 +msgid "Job:" msgstr "" -#: src/lib/smartall.c:180 -#, c-format -msgid "qp->qprev->qnext != qp called from %s:%d\n" +#: src/gnome2-console/interface.c:728 +msgid " Type:" msgstr "" -#: src/lib/smartall.c:189 -#, c-format -msgid "Buffer overrun called from %s:%d\n" +#: src/gnome2-console/interface.c:757 src/gnome2-console/interface.c:1644 +#: src/wx-console/wxbrestorepanel.cpp:1862 +msgid "Client:" msgstr "" -#: src/lib/smartall.c:260 -#, c-format -msgid "sm_realloc size: %d\n" +#: src/gnome2-console/interface.c:787 src/gnome2-console/interface.c:1672 +msgid "FileSet: " msgstr "" -#: src/lib/smartall.c:301 -#, c-format -msgid "sm_realloc %d at %x from %s:%d\n" +#: src/gnome2-console/interface.c:813 src/wx-console/wxbrestorepanel.cpp:1868 +msgid "Priority:" msgstr "" -#: src/lib/smartall.c:363 -#, 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: %lx\n" +#: src/gnome2-console/interface.c:836 +msgid "Level:" msgstr "" -#: src/lib/smartall.c:374 -#, c-format -msgid "Orphaned buffer: %6u bytes allocated at line %d of %s %s\n" +#: src/gnome2-console/interface.c:866 src/gnome2-console/interface.c:1418 +#: src/gnome2-console/interface.c:1700 +msgid "Pool:" msgstr "" -#: src/lib/smartall.c:410 -#, c-format -msgid "Damaged buffer found. Called from %s:%d\n" +#: src/gnome2-console/interface.c:895 src/gnome2-console/interface.c:1393 +#: src/gnome2-console/interface.c:1728 src/wx-console/wxbrestorepanel.cpp:1864 +msgid "Storage:" msgstr "" -#: src/lib/smartall.c:440 -#, c-format -msgid "" -"\n" -"Damaged buffers found at %s:%d\n" +#: src/gnome2-console/interface.c:924 +msgid "Messages:" msgstr "" -#: src/lib/smartall.c:443 -#, c-format -msgid " discovery of bad prev link.\n" +#: src/gnome2-console/interface.c:952 +msgid "Where: " msgstr "" -#: src/lib/smartall.c:446 -#, c-format -msgid " discovery of bad next link.\n" +#: src/gnome2-console/interface.c:970 src/wx-console/wxbrestorepanel.cpp:1866 +msgid "When:" msgstr "" -#: src/lib/smartall.c:449 -#, c-format -msgid " discovery of data overrun.\n" +#: src/gnome2-console/interface.c:988 src/wx-console/wxbrestorepanel.cpp:1847 +msgid "Bootstrap:" msgstr "" -#: src/lib/smartall.c:452 -#, c-format -msgid " Buffer address: %lx\n" +#: src/gnome2-console/interface.c:1108 +msgid "_New" msgstr "" -#: src/lib/smartall.c:459 -#, c-format -msgid "Damaged buffer: %6u bytes allocated at line %d of %s %s\n" +#: src/gnome2-console/interface.c:1177 +msgid "Restore File Selection" msgstr "" -#: src/lib/bsys.c:176 src/lib/bsys.c:192 src/lib/bsys.c:202 src/lib/bsys.c:214 -#, c-format -msgid "Out of memory: ERR=%s\n" +#: src/gnome2-console/interface.c:1226 +msgid "Current dir:" msgstr "" -#: src/lib/bsys.c:256 -msgid "Buffer overflow.\n" +#: src/gnome2-console/interface.c:1252 +msgid "Files Selected: " msgstr "" -#: src/lib/bsys.c:322 -msgid "Bad errno" +#: src/gnome2-console/interface.c:1373 src/gnome2-console/interface.c:1383 +msgid "Label a Volume" msgstr "" -#: src/lib/bsys.c:339 -msgid "Possible mutex deadlock.\n" +#: src/gnome2-console/interface.c:1444 +msgid "Volume Name:" msgstr "" -#: src/lib/bsys.c:343 src/lib/bsys.c:375 -#, c-format -msgid "Mutex lock failure. ERR=%s\n" +#: src/gnome2-console/interface.c:1459 +msgid "Slot:" msgstr "" -#: src/lib/bsys.c:346 -msgid "Possible mutex deadlock resolved.\n" +#: src/gnome2-console/interface.c:1585 +msgid "Restore Files Dialog" msgstr "" -#: src/lib/bsys.c:358 -#, c-format -msgid "Mutex unlock not locked. ERR=%s\n" +#: src/gnome2-console/interface.c:1599 +msgid "Restore Files" msgstr "" -#: src/lib/bsys.c:363 src/lib/bsys.c:385 -#, c-format -msgid "Mutex unlock failure. ERR=%s\n" +#: src/gnome2-console/interface.c:1756 +msgid "Before:" msgstr "" -#: src/lib/bsys.c:399 -#, c-format -msgid "Memset for %d bytes at %s:%d\n" +#: src/gnome2-console/interface.c:1799 +msgid "Select Files" msgstr "" -#: src/lib/bsys.c:428 -#, c-format -msgid "Cannot open pid file. %s ERR=%s\n" +#: src/gnome2-console/interface.c:1883 +msgid "Progress" msgstr "" -#: src/lib/bsys.c:432 -#, c-format -msgid "" -"%s is already running. pid=%d\n" -"Check file %s\n" +#: src/gnome2-console/restore.c:121 +msgid "Mark" msgstr "" -#: src/lib/bsys.c:445 -#, c-format -msgid "Could not open pid file. %s ERR=%s\n" +#: src/gnome2-console/restore.c:121 +msgid "File" msgstr "" -#: src/lib/bsys.c:565 -#, c-format -msgid "Could not create state file. %s ERR=%s\n" +#: src/gnome2-console/restore.c:121 +msgid "Mode" msgstr "" -#: src/lib/bsys.c:584 -#, c-format -msgid "Write final hdr error: ERR=%s\n" +#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:288 +msgid "User" msgstr "" -#: src/lib/bsys.c:611 -#, c-format -msgid "Could not find specified group: %s\n" +#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:292 +msgid "Group" msgstr "" -#: src/lib/bsys.c:614 src/lib/bsys.c:618 -#, c-format -msgid "Could not set specified group: %s\n" +#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:276 +msgid "Size" msgstr "" -#: src/lib/bsys.c:627 -#, c-format -msgid "Could not find specified userid: %s\n" +#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:280 +msgid "Date" msgstr "" -#: src/lib/bsys.c:630 +#: src/gnome2-console/support.c:41 #, c-format -msgid "Could not set specified userid: %s\n" +msgid "Widget not found: %s" +msgstr "" + +#: src/gnome2-console/support.c:60 src/gnome2-console/support.c:85 +#, c-format +msgid "Couldn't find pixmap file: %s" +msgstr "" + +#: src/gnome2-console/support.c:92 +#, c-format +msgid "Failed to load pixbuf file: %s: %s\n" +msgstr "" + +#: src/lib/tls.c:105 +#, c-format +msgid "" +"Error with certificate at depth: %d, issuer = %s, subject = %s, ERR=%d:%s\n" +msgstr "" + +#: src/lib/tls.c:152 +msgid "Error initializing SSL context" +msgstr "" + +#: src/lib/tls.c:173 +msgid "Error loading certificate verification stores" +msgstr "" + +#: src/lib/tls.c:178 +msgid "" +"Either a certificate file or a directory must be specified as a verification " +"store\n" +msgstr "" + +#: src/lib/tls.c:189 +msgid "Error loading certificate file" +msgstr "" + +#: src/lib/tls.c:197 +msgid "Error loading private key" +msgstr "" + +#: src/lib/tls.c:205 +msgid "Unable to open DH parameters file" +msgstr "" + +#: src/lib/tls.c:211 +msgid "Unable to load DH parameters from specified file" +msgstr "" + +#: src/lib/tls.c:215 +msgid "Failed to set TLS Diffie-Hellman parameters" +msgstr "" + +#: src/lib/tls.c:224 +msgid "Error setting cipher list, no valid ciphers available\n" +msgstr "" + +#: src/lib/tls.c:272 +msgid "Peer failed to present a TLS certificate\n" +msgstr "" + +#: src/lib/tls.c:314 +#, c-format +msgid "Peer %s failed to present a TLS certificate\n" +msgstr "" + +#: src/lib/tls.c:417 +msgid "Error creating file descriptor-based BIO" +msgstr "" + +#: src/lib/tls.c:428 +msgid "Error creating new SSL object" +msgstr "" + +#: src/lib/tls.c:492 src/lib/tls.c:515 +msgid "Connect failure" +msgstr "" + +#: src/lib/tls.c:592 src/lib/tls.c:596 +msgid "TLS shutdown failure." +msgstr "" + +#: src/lib/tls.c:645 src/lib/tls.c:665 +msgid "TLS read/write failure." +msgstr "" + +#: src/lib/tls.c:723 src/lib/tls.c:780 src/stored/dev.c:209 +#: src/stored/dev.c:227 src/stored/dev.c:233 src/stored/stored_conf.c:593 +#, c-format +msgid "Unable to init mutex: ERR=%s\n" +msgstr "" + +#: src/lib/tls.c:743 src/lib/tls.c:812 +#, c-format +msgid "Unable to destroy mutex: ERR=%s\n" +msgstr "" + +#: src/lib/tls.c:877 +#, c-format +msgid "Unable to init OpenSSL threading: ERR=%s\n" +msgstr "" + +#: src/lib/tls.c:887 +msgid "Failed to seed OpenSSL PRNG\n" +msgstr "" + +#: src/lib/tls.c:913 +msgid "Failed to save OpenSSL PRNG\n" +msgstr "" + +#: src/lib/address_conf.c:50 +#, c-format +msgid "Only ipv4 and ipv6 are supported (%d)\n" +msgstr "" + +#: src/lib/address_conf.c:54 +#, c-format +msgid "Only ipv4 is supported (%d)\n" +msgstr "" + +#: src/lib/address_conf.c:163 +#, c-format +msgid "It was tried to assign a ipv6 address to a ipv4(%d)\n" +msgstr "" + +#: src/lib/address_conf.c:172 +#, c-format +msgid "It was tried to assign a ipv4 address to a ipv6(%d)\n" +msgstr "" + +#: src/lib/address_conf.c:251 +#, c-format +msgid "Can't add default address (%s)\n" +msgstr "" + +#: src/lib/address_conf.c:281 +msgid "the old style addresses cannot be mixed with new style" +msgstr "" + +#: src/lib/address_conf.c:304 +#, c-format +msgid "can't resolve service(%s)" +msgstr "" + +#: src/lib/address_conf.c:314 +#, c-format +msgid "can't resolve hostname(%s) %s" +msgstr "" + +#: src/lib/address_conf.c:403 +#, c-format +msgid "Expected a block begin { , got: %s" +msgstr "" + +#: src/lib/address_conf.c:408 +msgid "Empty addr block is not allowed" +msgstr "" + +#: src/lib/address_conf.c:412 +#, c-format +msgid "Expected a string, got: %s" +msgstr "" + +#: src/lib/address_conf.c:421 +#, c-format +msgid "Expected a string [ip|ipv4|ipv6], got: %s" +msgstr "" + +#: src/lib/address_conf.c:425 +#, c-format +msgid "Expected a string [ip|ipv4], got: %s" +msgstr "" + +#: src/lib/address_conf.c:430 src/lib/address_conf.c:460 +#, c-format +msgid "Expected a equal =, got: %s" +msgstr "" + +#: src/lib/address_conf.c:434 +#, c-format +msgid "Expected a block beginn { , got: %s" +msgstr "" + +#: src/lib/address_conf.c:441 src/lib/address_conf.c:456 +#, c-format +msgid "Expected a identifier [addr|port], got: %s" +msgstr "" + +#: src/lib/address_conf.c:446 +msgid "Only one port per address block" +msgstr "" + +#: src/lib/address_conf.c:452 +msgid "Only one addr per address block" +msgstr "" + +#: src/lib/address_conf.c:468 +#, c-format +msgid "Expected a number or a string, got: %s" +msgstr "" + +#: src/lib/address_conf.c:474 +#, c-format +msgid "Expected an IP number or a hostname, got: %s" +msgstr "" + +#: src/lib/address_conf.c:480 +msgid "State machine missmatch" +msgstr "" + +#: src/lib/address_conf.c:486 src/lib/address_conf.c:499 +#, c-format +msgid "Expected a end of block }, got: %s" +msgstr "" + +#: src/lib/address_conf.c:492 +#, c-format +msgid "Can't add hostname(%s) and port(%s) to addrlist (%s)" +msgstr "" + +#: src/lib/address_conf.c:508 +#, c-format +msgid "Expected a hostname or IP nummer, got: %s" +msgstr "" + +#: src/lib/address_conf.c:513 src/lib/address_conf.c:527 +#, c-format +msgid "can't add port (%s) to (%s)" +msgstr "" + +#: src/lib/address_conf.c:522 +#, c-format +msgid "Expected a port number or string, got: %s" +msgstr "" + +#: src/lib/attr.c:64 +#, c-format +msgid "Error scanning attributes: %s\n" msgstr "" #: src/lib/berrno.c:48 @@ -6989,14 +6866,13 @@ msgstr "" msgid "Invalid errno. No error message possible." msgstr "" -#: src/lib/res.c:66 -#, c-format -msgid "rwl_writelock failure at %s:%d: ERR=%s\n" +#: src/lib/bget_msg.c:86 +msgid "Status OK\n" msgstr "" -#: src/lib/res.c:76 +#: src/lib/bget_msg.c:90 #, c-format -msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" +msgid "bget_msg: unknown signal %d\n" msgstr "" #: src/lib/bnet.c:109 @@ -7098,6 +6974,12 @@ msgstr "" msgid "Socket open error. proto=%d port=%d. ERR=%s\n" msgstr "" +#: src/lib/bnet.c:796 src/lib/bnet.c:821 src/lib/bnet_server.c:193 +#: src/lib/bnet_server.c:351 +#, c-format +msgid "Cannot set SO_KEEPALIVE on socket: %s\n" +msgstr "" + #: src/lib/bnet.c:852 #, c-format msgid "" @@ -7144,7116 +7026,6813 @@ msgstr "" msgid "Unknown sig %d" msgstr "" -#: src/lib/pythonlib.c:108 -msgid "Could not initialize Python\n" -msgstr "" - -#: src/lib/pythonlib.c:113 +#: src/lib/bnet_pkt.c:89 src/lib/bnet_pkt.c:147 #, c-format -msgid "Could not Run Python string %s\n" +msgid "Unknown BPKT type: %d\n" msgstr "" -#: src/lib/pythonlib.c:125 -msgid "Could not initialize Python Job type.\n" +#: src/lib/bnet_server.c:96 +#, c-format +msgid "Cannot open stream socket. ERR=%s. Current %s All %s\n" msgstr "" -#: src/lib/pythonlib.c:130 +#: src/lib/bnet_server.c:109 src/lib/bnet_server.c:258 #, c-format -msgid "Could not import Python script %s/%s. Python disabled.\n" +msgid "Cannot set SO_REUSEADDR on socket: %s\n" msgstr "" -#: src/lib/pythonlib.c:230 -msgid "Could not create Python Job Object.\n" +#: src/lib/bnet_server.c:118 +#, c-format +msgid "Cannot bind port %d: ERR=%s: Retrying ...\n" msgstr "" -#: src/lib/pythonlib.c:243 src/lib/pythonlib.c:267 +#: src/lib/bnet_server.c:123 #, c-format -msgid "Python function \"%s\" not found.\n" +msgid "Cannot bind port %d: ERR=%s.\n" msgstr "" -#: src/lib/pythonlib.c:282 +#: src/lib/bnet_server.c:134 #, c-format -msgid "Unknown Python daemon event %s\n" +msgid "Could not init client queue: ERR=%s\n" msgstr "" -#: src/lib/attr.c:64 +#: src/lib/bnet_server.c:157 src/lib/bnet_server.c:320 #, c-format -msgid "Error scanning attributes: %s\n" +msgid "Error in select: %s\n" msgstr "" -#: src/lib/daemon.c:53 +#: src/lib/bnet_server.c:178 src/lib/bnet_server.c:339 #, c-format -msgid "Cannot fork to become daemon: %s\n" +msgid "Connection from %s:%d refused by hosts.access\n" msgstr "" -#: src/lib/signal.c:61 -msgid "Invalid signal number" +#: src/lib/bnet_server.c:204 +msgid "Could not create client BSOCK.\n" msgstr "" -#: src/lib/signal.c:87 +#: src/lib/bnet_server.c:211 #, c-format -msgid "Bacula interrupted by signal %d: %s\n" +msgid "Could not add job to client queue: ERR=%s\n" msgstr "" -#: src/lib/signal.c:100 +#: src/lib/bnet_server.c:222 #, c-format -msgid "Kaboom! %s, %s got signal %d. Attempting traceback.\n" +msgid "Could not destroy client queue: ERR=%s\n" msgstr "" -#: src/lib/signal.c:102 +#: src/lib/bnet_server.c:249 #, c-format -msgid "Kaboom! exepath=%s\n" +msgid "Cannot open stream socket: %s\n" msgstr "" -#: src/lib/signal.c:136 +#: src/lib/bnet_server.c:278 #, c-format -msgid "Fork error: ERR=%s\n" +msgid "Cannot bind port %d: ERR=%s: retrying ...\n" msgstr "" -#: src/lib/signal.c:143 -#, c-format -msgid "Calling: %s %s %s\n" +#: src/lib/bnet_server.c:284 +msgid "Server socket" msgstr "" -#: src/lib/signal.c:145 +#: src/lib/bnet_server.c:366 #, c-format -msgid "execv: %s failed: ERR=%s\n" +msgid "Socket accept error for %s. ERR=%s\n" msgstr "" -#: src/lib/signal.c:160 -#, c-format -msgid "Traceback complete, attempting cleanup ...\n" +#: src/lib/bpipe.c:282 src/lib/bpipe.c:361 +msgid "Program killed by Bacula watchdog (timeout)\n" msgstr "" -#: src/lib/signal.c:168 +#: src/lib/bshm.c:69 #, c-format -msgid "It looks like the traceback worked ...\n" +msgid "shmget failure key = %x\n" msgstr "" -#: src/lib/signal.c:197 +#: src/lib/bshm.c:77 #, c-format -msgid "BA_NSIG too small (%d) should be (%d)\n" +msgid "Could not get %d bytes of shared memory: %s\n" msgstr "" -#: src/lib/signal.c:203 -msgid "UNKNOWN SIGNAL" +#: src/lib/bshm.c:102 +#, c-format +msgid "Could not attach shared memory: %s\n" msgstr "" -#: src/lib/signal.c:204 -msgid "Hangup" +#: src/lib/bshm.c:123 +#, c-format +msgid "Error detaching shared memory: %s\n" msgstr "" -#: src/lib/signal.c:205 -msgid "Interrupt" +#: src/lib/bshm.c:139 +#, c-format +msgid "Could not destroy shared memory: %s\n" msgstr "" -#: src/lib/signal.c:206 -msgid "Quit" +#: src/lib/bsys.c:176 src/lib/bsys.c:192 src/lib/bsys.c:202 src/lib/bsys.c:214 +#, c-format +msgid "Out of memory: ERR=%s\n" msgstr "" -#: src/lib/signal.c:207 -msgid "Illegal instruction" +#: src/lib/bsys.c:256 +msgid "Buffer overflow.\n" msgstr "" -#: src/lib/signal.c:208 -msgid "Trace/Breakpoint trap" +#: src/lib/bsys.c:322 +msgid "Bad errno" msgstr "" -#: src/lib/signal.c:209 -msgid "Abort" +#: src/lib/bsys.c:339 +msgid "Possible mutex deadlock.\n" msgstr "" -#: src/lib/signal.c:211 -msgid "EMT instruction (Emulation Trap)" +#: src/lib/bsys.c:343 src/lib/bsys.c:375 +#, c-format +msgid "Mutex lock failure. ERR=%s\n" msgstr "" -#: src/lib/signal.c:214 -msgid "IOT trap" +#: src/lib/bsys.c:346 +msgid "Possible mutex deadlock resolved.\n" msgstr "" -#: src/lib/signal.c:216 -msgid "BUS error" +#: src/lib/bsys.c:358 +#, c-format +msgid "Mutex unlock not locked. ERR=%s\n" msgstr "" -#: src/lib/signal.c:217 -msgid "Floating-point exception" +#: src/lib/bsys.c:363 src/lib/bsys.c:385 +#, c-format +msgid "Mutex unlock failure. ERR=%s\n" msgstr "" -#: src/lib/signal.c:218 -msgid "Kill, unblockable" +#: src/lib/bsys.c:399 +#, c-format +msgid "Memset for %d bytes at %s:%d\n" msgstr "" -#: src/lib/signal.c:219 -msgid "User-defined signal 1" +#: src/lib/bsys.c:428 +#, c-format +msgid "Cannot open pid file. %s ERR=%s\n" msgstr "" -#: src/lib/signal.c:220 -msgid "Segmentation violation" +#: src/lib/bsys.c:432 +#, c-format +msgid "" +"%s is already running. pid=%d\n" +"Check file %s\n" msgstr "" -#: src/lib/signal.c:221 -msgid "User-defined signal 2" +#: src/lib/bsys.c:445 +#, c-format +msgid "Could not open pid file. %s ERR=%s\n" msgstr "" -#: src/lib/signal.c:222 -msgid "Broken pipe" +#: src/lib/bsys.c:565 +#, c-format +msgid "Could not create state file. %s ERR=%s\n" msgstr "" -#: src/lib/signal.c:223 -msgid "Alarm clock" +#: src/lib/bsys.c:584 +#, c-format +msgid "Write final hdr error: ERR=%s\n" msgstr "" -#: src/lib/signal.c:224 -msgid "Termination" +#: src/lib/bsys.c:611 +#, c-format +msgid "Could not find specified group: %s\n" msgstr "" -#: src/lib/signal.c:226 -msgid "Stack fault" +#: src/lib/bsys.c:614 src/lib/bsys.c:618 +#, c-format +msgid "Could not set specified group: %s\n" msgstr "" -#: src/lib/signal.c:228 -msgid "Child status has changed" +#: src/lib/bsys.c:627 +#, c-format +msgid "Could not find specified userid: %s\n" msgstr "" -#: src/lib/signal.c:229 -msgid "Continue" +#: src/lib/bsys.c:630 +#, c-format +msgid "Could not set specified userid: %s\n" msgstr "" -#: src/lib/signal.c:230 -msgid "Stop, unblockable" +#: src/lib/btimers.c:241 +msgid "stop_btimer called with NULL btimer_id\n" msgstr "" -#: src/lib/signal.c:231 -msgid "Keyboard stop" +#: src/lib/cram-md5.c:76 src/lib/cram-md5.c:101 +msgid "1999 Authorization failed.\n" msgstr "" -#: src/lib/signal.c:232 -msgid "Background read from tty" +#: src/lib/daemon.c:53 +#, c-format +msgid "Cannot fork to become daemon: %s\n" msgstr "" -#: src/lib/signal.c:233 -msgid "Background write to tty" +#: src/lib/edit.c:400 +#, c-format +msgid "Illegal character \"%c\" in name.\n" msgstr "" -#: src/lib/signal.c:234 -msgid "Urgent condition on socket" +#: src/lib/edit.c:407 +msgid "Name too long.\n" msgstr "" -#: src/lib/signal.c:235 -msgid "CPU limit exceeded" +#: src/lib/events.c:161 +msgid "Events not available" msgstr "" -#: src/lib/signal.c:236 -msgid "File size limit exceeded" +#: src/lib/jcr.c:278 +msgid "NULL jcr.\n" msgstr "" -#: src/lib/signal.c:237 -msgid "Virtual alarm clock" +#: src/lib/jcr.c:399 +#, c-format +msgid "JCR use_count=%d JobId=%d\n" msgstr "" -#: src/lib/signal.c:238 -msgid "Profiling alarm clock" +#: src/lib/jcr.c:680 +#, c-format +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading Storage " +"daemon.\n" msgstr "" -#: src/lib/signal.c:239 -msgid "Window size change" +#: src/lib/jcr.c:692 +#, c-format +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading File daemon.\n" msgstr "" -#: src/lib/signal.c:240 -msgid "I/O now possible" +#: src/lib/jcr.c:704 +#, c-format +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading Director.\n" msgstr "" -#: src/lib/signal.c:242 -msgid "Power failure restart" +#: src/lib/lex.c:79 src/wx-console/console_thread.cpp:186 +#, c-format +msgid "Problem probably begins at line %d.\n" msgstr "" -#: src/lib/signal.c:245 -msgid "No runnable lwp" +#: src/lib/lex.c:84 src/wx-console/console_thread.cpp:191 +#, c-format +msgid "" +"Config error: %s\n" +" : line %d, col %d of file %s\n" +"%s\n" +"%s" msgstr "" -#: src/lib/signal.c:248 -msgid "SIGLWP special signal used by thread library" +#: src/lib/lex.c:88 +#, c-format +msgid "Config error: %s\n" msgstr "" -#: src/lib/signal.c:251 -msgid "Checkpoint Freeze" +#: src/lib/lex.c:108 +msgid "Close of NULL file\n" msgstr "" -#: src/lib/signal.c:254 -msgid "Checkpoint Thaw" +#: src/lib/lex.c:181 +msgid "get_char: called after EOF\n" msgstr "" -#: src/lib/signal.c:257 -msgid "Thread Cancellation" +#: src/lib/lex.c:220 +#, c-format +msgid "Config token too long, file: %s, line %d, begins at line %d\n" msgstr "" -#: src/lib/signal.c:260 -msgid "Resource Lost (e.g. record-lock lost)" +#: src/lib/lex.c:244 +msgid "none" msgstr "" -#: src/lib/events.c:161 -msgid "Events not available" +#: src/lib/lex.c:245 +msgid "comment" msgstr "" -#: src/lib/btimers.c:241 -msgid "stop_btimer called with NULL btimer_id\n" +#: src/lib/lex.c:246 +msgid "number" msgstr "" -#: src/lib/var.c:2659 -msgid "everything ok" +#: src/lib/lex.c:247 +msgid "ip_addr" msgstr "" -#: src/lib/var.c:2660 -msgid "incomplete named character" +#: src/lib/lex.c:248 +msgid "identifier" msgstr "" -#: src/lib/var.c:2661 -msgid "incomplete hexadecimal value" +#: src/lib/lex.c:249 +msgid "string" msgstr "" -#: src/lib/var.c:2662 -msgid "invalid hexadecimal value" +#: src/lib/lex.c:250 +msgid "quoted_string" msgstr "" -#: src/lib/var.c:2663 -msgid "octal value too large" +#: src/lib/lex.c:286 +#, c-format +msgid "expected a positive integer number, got: %s" msgstr "" -#: src/lib/var.c:2664 -msgid "invalid octal value" +#: src/lib/lex.c:292 +#, c-format +msgid "expected a postive integer number, got: %s" msgstr "" -#: src/lib/var.c:2665 -msgid "incomplete octal value" +#: src/lib/lex.c:504 +#, c-format +msgid "Cannot open included config file %s: %s\n" msgstr "" -#: src/lib/var.c:2666 -msgid "incomplete grouped hexadecimal value" +#: src/lib/lex.c:539 +#, c-format +msgid "expected an integer or a range, got %s: %s" msgstr "" -#: src/lib/var.c:2667 -msgid "incorrect character class specification" +#: src/lib/lex.c:553 src/lib/lex.c:561 src/lib/lex.c:572 src/lib/lex.c:580 +#, c-format +msgid "expected an integer number, got %s: %s" msgstr "" -#: src/lib/var.c:2668 -msgid "invalid expansion configuration" +#: src/lib/lex.c:590 +#, c-format +msgid "expected a name, got %s: %s" msgstr "" -#: src/lib/var.c:2669 -msgid "out of memory" +#: src/lib/lex.c:594 +#, c-format +msgid "name %s length %d too long, max is %d\n" msgstr "" -#: src/lib/var.c:2670 -msgid "incomplete variable specification" +#: src/lib/lex.c:602 +#, c-format +msgid "expected a string, got %s: %s" msgstr "" -#: src/lib/var.c:2671 -msgid "undefined variable" +#: src/lib/mem_pool.c:95 +#, c-format +msgid "MemPool index %d larger than max %d\n" msgstr "" -#: src/lib/var.c:2672 -msgid "input is neither text nor variable" +#: src/lib/mem_pool.c:113 src/lib/mem_pool.c:133 src/lib/mem_pool.c:168 +#: src/lib/mem_pool.c:239 src/lib/mem_pool.c:259 src/lib/mem_pool.c:297 +#: src/lib/mem_pool.c:550 +#, c-format +msgid "Out of memory requesting %d bytes\n" msgstr "" -#: src/lib/var.c:2673 -msgid "unknown command character in variable" +#: src/lib/message.c:253 src/lib/message.c:263 +#, c-format +msgid "Could not open console message file %s: ERR=%s\n" msgstr "" -#: src/lib/var.c:2674 -msgid "malformatted search and replace operation" +#: src/lib/message.c:268 +#, c-format +msgid "Could not get con mutex: ERR=%s\n" msgstr "" -#: src/lib/var.c:2675 -msgid "unknown flag in search and replace operation" +#: src/lib/message.c:372 +#, c-format +msgid "open mail pipe %s failed: ERR=%s\n" msgstr "" -#: src/lib/var.c:2676 -msgid "invalid regex in search and replace operation" +#: src/lib/message.c:378 +msgid "Bacula Message" msgstr "" -#: src/lib/var.c:2677 -msgid "missing parameter in command" +#: src/lib/message.c:431 +msgid "open mail pipe failed.\n" msgstr "" -#: src/lib/var.c:2678 -msgid "empty search string in search and replace operation" +#: src/lib/message.c:443 +#, c-format +msgid "close error: ERR=%s\n" msgstr "" -#: src/lib/var.c:2679 -msgid "start offset missing in cut operation" +#: src/lib/message.c:454 +#, c-format +msgid "Mail prog: %s" msgstr "" -#: src/lib/var.c:2680 -msgid "offsets in cut operation delimited by unknown character" +#: src/lib/message.c:463 +#, c-format +msgid "" +"Mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" -#: src/lib/var.c:2681 -msgid "range out of bounds in cut operation" +#: src/lib/message.c:650 +#, c-format +msgid "" +"Operator mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" -#: src/lib/var.c:2682 -msgid "offset out of bounds in cut operation" +#: src/lib/message.c:667 src/lib/message.c:689 src/lib/message.c:705 +#, c-format +msgid "fopen %s failed: ERR=%s\n" msgstr "" -#: src/lib/var.c:2683 -msgid "logic error in cut operation" +#: src/lib/message.c:933 +#, c-format +msgid "%s: ABORTING due to ERROR in %s:%d\n" msgstr "" -#: src/lib/var.c:2684 -msgid "malformatted transpose operation" +#: src/lib/message.c:937 +#, c-format +msgid "%s: ERROR TERMINATION at %s:%d\n" msgstr "" -#: src/lib/var.c:2685 -msgid "source and target class mismatch in transpose operation" +#: src/lib/message.c:942 +#, c-format +msgid "%s: Fatal Error because: " msgstr "" -#: src/lib/var.c:2686 -msgid "empty character class in transpose operation" +#: src/lib/message.c:944 +#, c-format +msgid "%s: Fatal Error at %s:%d because:\n" msgstr "" -#: src/lib/var.c:2687 -msgid "incorrect character class in transpose operation" +#: src/lib/message.c:948 +#, c-format +msgid "%s: ERROR: " msgstr "" -#: src/lib/var.c:2688 -msgid "malformatted padding operation" +#: src/lib/message.c:950 +#, c-format +msgid "%s: ERROR in %s:%d " msgstr "" -#: src/lib/var.c:2689 -msgid "width parameter missing in padding operation" +#: src/lib/message.c:953 +#, c-format +msgid "%s: Warning: " msgstr "" -#: src/lib/var.c:2690 -msgid "fill string missing in padding operation" +#: src/lib/message.c:956 +#, c-format +msgid "%s: Security violation: " msgstr "" -#: src/lib/var.c:2691 -msgid "unknown quoted pair in search and replace operation" +#: src/lib/message.c:1032 +#, c-format +msgid "%s ABORTING due to ERROR\n" msgstr "" -#: src/lib/var.c:2692 -msgid "sub-matching reference out of range" +#: src/lib/message.c:1035 +#, c-format +msgid "%s ERROR TERMINATION\n" msgstr "" -#: src/lib/var.c:2693 -msgid "invalid argument" +#: src/lib/message.c:1038 +#, c-format +msgid "%s: %s Fatal error: " msgstr "" -#: src/lib/var.c:2694 -msgid "incomplete quoted pair" +#: src/lib/message.c:1044 +#, c-format +msgid "%s: %s Error: " msgstr "" -#: src/lib/var.c:2695 -msgid "lookup function does not support variable arrays" +#: src/lib/message.c:1050 +#, c-format +msgid "%s: %s Warning: " msgstr "" -#: src/lib/var.c:2696 -msgid "index of array variable contains an invalid character" +#: src/lib/message.c:1053 +#, c-format +msgid "%s: %s Security violation: " msgstr "" -#: src/lib/var.c:2697 -msgid "index of array variable is incomplete" +#: src/lib/parse_conf.c:160 +msgid "***UNKNOWN***" msgstr "" -#: src/lib/var.c:2698 -msgid "bracket expression in array variable's index not closed" +#: src/lib/parse_conf.c:179 +#, c-format +msgid "Unable to initialize resource lock. ERR=%s\n" msgstr "" -#: src/lib/var.c:2699 -msgid "division by zero error in index specification" +#: src/lib/parse_conf.c:262 src/lib/parse_conf.c:281 +#, c-format +msgid "expected an =, got: %s" msgstr "" -#: src/lib/var.c:2700 -msgid "unterminated loop construct" +#: src/lib/parse_conf.c:289 +#, c-format +msgid "Unknown item code: %d\n" msgstr "" -#: src/lib/var.c:2701 -msgid "invalid character in loop limits" +#: src/lib/parse_conf.c:328 +#, c-format +msgid "message type: %s not found" msgstr "" -#: src/lib/var.c:2702 -msgid "malformed operation argument list" +#: src/lib/parse_conf.c:367 +#, c-format +msgid "Attempt to redefine name \"%s\" to \"%s\"." msgstr "" -#: src/lib/var.c:2703 -msgid "undefined operation" +#: src/lib/parse_conf.c:458 +#, c-format +msgid "Could not find config Resource %s referenced on line %d : %s\n" msgstr "" -#: src/lib/var.c:2704 -msgid "formatting failure" +#: src/lib/parse_conf.c:462 +#, c-format +msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/lib/var.c:2713 -msgid "unknown error" +#: src/lib/parse_conf.c:497 +#, c-format +msgid "Too many %s directives. Max. is %d. line %d: %s\n" msgstr "" -#: src/lib/semlock.c:185 -msgid "sem_unlock by non-owner.\n" +#: src/lib/parse_conf.c:507 +#, c-format +msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/lib/crypto.c:423 -msgid "Unable to open certificate file" +#: src/lib/parse_conf.c:569 +#, c-format +msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/lib/crypto.c:430 -msgid "Unable to read certificate from file" +#: src/lib/parse_conf.c:633 +#, c-format +msgid "expected a size number, got: %s" msgstr "" -#: src/lib/crypto.c:436 -msgid "Unable to extract public key from certificate" +#: src/lib/parse_conf.c:638 +#, c-format +msgid "expected a size, got: %s" msgstr "" -#: src/lib/crypto.c:442 -msgid "" -"Provided certificate does not include the required subjectKeyIdentifier " -"extension." +#: src/lib/parse_conf.c:675 src/lib/parse_conf.c:680 +#, c-format +msgid "expected a time period, got: %s" msgstr "" -#: src/lib/crypto.c:448 +#: src/lib/parse_conf.c:699 #, c-format -msgid "Unsupported key type provided: %d\n" +msgid "Expect a %s or %s, got: %s" msgstr "" -#: src/lib/crypto.c:485 src/lib/crypto.c:533 -msgid "Unable to open private key file" +#: src/lib/parse_conf.c:723 +#, c-format +msgid "Expected a Tape Label keyword, got: %s" msgstr "" -#: src/lib/crypto.c:515 src/lib/crypto.c:549 -msgid "Unable to read private key from file" +#: src/lib/parse_conf.c:772 +#, c-format +msgid "Cannot open config file \"%s\": %s\n" msgstr "" -#: src/lib/crypto.c:606 +#: src/lib/parse_conf.c:785 #, c-format -msgid "Unsupported digest type: %d\n" +msgid "Expected a Resource name identifier, got: %s" msgstr "" -#: src/lib/crypto.c:619 -msgid "OpenSSL digest initialization failed" +#: src/lib/parse_conf.c:797 +#, c-format +msgid "expected resource name, got: %s" msgstr "" -#: src/lib/crypto.c:773 -msgid "OpenSSL error occured" +#: src/lib/parse_conf.c:808 +#, c-format +msgid "not in resource definition: %s" msgstr "" -#: src/lib/crypto.c:839 -msgid "Signature creation failed" +#: src/lib/parse_conf.c:833 +#, c-format +msgid "" +"Keyword \"%s\" not permitted in this resource.\n" +"Perhaps you left the trailing brace off of the previous resource." msgstr "" -#: src/lib/crypto.c:916 -msgid "Signature decoding failed" +#: src/lib/parse_conf.c:850 +#, c-format +msgid "unexpected token %d %s in resource definition" msgstr "" -#: src/lib/crypto.c:992 -msgid "Unsupported cipher type specified\n" +#: src/lib/parse_conf.c:856 +#, c-format +msgid "Unknown parser state %d\n" msgstr "" -#: src/lib/crypto.c:1149 -msgid "CryptoData decoding failed" +#: src/lib/parse_conf.c:861 +msgid "End of conf file reached with unclosed resource." msgstr "" -#: src/lib/crypto.c:1193 -msgid "Failure decrypting the session key" +#: src/lib/pythonlib.c:108 +msgid "Could not initialize Python\n" msgstr "" -#: src/lib/crypto.c:1246 +#: src/lib/pythonlib.c:113 #, c-format -msgid "Unsupported contentEncryptionAlgorithm: %d\n" +msgid "Could not Run Python string %s\n" msgstr "" -#: src/lib/crypto.c:1256 src/lib/crypto.c:1262 -msgid "OpenSSL cipher context initialization failed" +#: src/lib/pythonlib.c:125 +msgid "Could not initialize Python Job type.\n" msgstr "" -#: src/lib/crypto.c:1269 -msgid "Encryption session provided an invalid symmetric key" -msgstr "" +#: src/lib/pythonlib.c:130 +#, c-format +msgid "Could not import Python script %s/%s. Python disabled.\n" +msgstr "" -#: src/lib/crypto.c:1275 -msgid "Encryption session provided an invalid IV" +#: src/lib/pythonlib.c:230 +msgid "Could not create Python Job Object.\n" msgstr "" -#: src/lib/crypto.c:1281 -msgid "OpenSSL cipher context key/IV initialization failed" +#: src/lib/pythonlib.c:243 src/lib/pythonlib.c:267 +#, c-format +msgid "Python function \"%s\" not found.\n" msgstr "" -#: src/lib/crypto.c:1347 +#: src/lib/pythonlib.c:282 #, c-format -msgid "Unable to init OpenSSL threading: ERR=%s\n" +msgid "Unknown Python daemon event %s\n" msgstr "" -#: src/lib/crypto.c:1360 -msgid "Failed to seed OpenSSL PRNG\n" +#: src/lib/regex.c:1040 +msgid "Success" msgstr "" -#: src/lib/crypto.c:1386 -msgid "Failed to save OpenSSL PRNG\n" +#: src/lib/regex.c:1043 +msgid "No match" msgstr "" -#: src/lib/crypto.c:1444 -msgid "Unsupported digest type specified\n" +#: src/lib/regex.c:1046 +msgid "Invalid regular expression" msgstr "" -#: src/lib/crypto.c:1463 -#, c-format -msgid "SHA1Update() returned an error: %d\n" +#: src/lib/regex.c:1049 +msgid "Invalid collation character" msgstr "" -#: src/lib/openssl.c:109 src/lib/openssl.c:178 -#, c-format -msgid "Unable to destroy mutex: ERR=%s\n" +#: src/lib/regex.c:1052 +msgid "Invalid character class name" msgstr "" -#: src/gnome2-console/restore.c:121 -msgid "Mark" +#: src/lib/regex.c:1055 +msgid "Trailing backslash" msgstr "" -#: src/gnome2-console/restore.c:121 -msgid "File" +#: src/lib/regex.c:1058 +msgid "Invalid back reference" msgstr "" -#: src/gnome2-console/restore.c:121 -msgid "Mode" +#: src/lib/regex.c:1061 +msgid "Unmatched [ or [^" msgstr "" -#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:288 -msgid "User" +#: src/lib/regex.c:1064 +msgid "Unmatched ( or \\(" msgstr "" -#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:292 -msgid "Group" +#: src/lib/regex.c:1067 +msgid "Unmatched \\{" msgstr "" -#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:276 -msgid "Size" +#: src/lib/regex.c:1070 +msgid "Invalid content of \\{\\}" msgstr "" -#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:280 -msgid "Date" +#: src/lib/regex.c:1073 +msgid "Invalid range end" msgstr "" -#: src/gnome2-console/interface.c:32 -msgid "_Connect" +#: src/lib/regex.c:1076 +msgid "Memory exhausted" msgstr "" -#: src/gnome2-console/interface.c:33 src/gnome2-console/interface.c:232 -msgid "Connect to Director" +#: src/lib/regex.c:1079 +msgid "Invalid preceding regular expression" msgstr "" -#: src/gnome2-console/interface.c:39 -msgid "_Disconnect" +#: src/lib/regex.c:1082 +msgid "Premature end of regular expression" msgstr "" -#: src/gnome2-console/interface.c:40 -msgid "Disconnect from Director" +#: src/lib/regex.c:1085 +msgid "Regular expression too big" msgstr "" -#: src/gnome2-console/interface.c:93 -msgid "_Display Messages" +#: src/lib/regex.c:1088 +msgid "Unmatched ) or \\)" msgstr "" -#: src/gnome2-console/interface.c:129 -msgid "_File" +#: src/lib/regex.c:5874 +msgid "No previous regular expression" msgstr "" -#: src/gnome2-console/interface.c:136 -msgid "_Edit" +#: src/lib/res.c:66 +#, c-format +msgid "rwl_writelock failure at %s:%d: ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:143 -msgid "_View" +#: src/lib/res.c:76 +#, c-format +msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:144 src/gnome2-console/interface.c:252 -msgid "Display Messages" +#: src/lib/rwlock.c:289 +msgid "rwl_writeunlock called too many times.\n" msgstr "" -#: src/gnome2-console/interface.c:150 -msgid "_Settings" +#: src/lib/rwlock.c:293 +msgid "rwl_writeunlock by non-owner.\n" msgstr "" -#: src/gnome2-console/interface.c:157 -msgid "_Help" +#: src/lib/rwlock.c:358 src/lib/semlock.c:248 +#, c-format +msgid "Write lock failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:197 -msgid "Bacula Console" +#: src/lib/rwlock.c:365 src/lib/semlock.c:255 +#, c-format +msgid "Write unlock failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:231 src/wx-console/wxbmainframe.cpp:229 -#: src/wx-console/wxbmainframe.cpp:597 -msgid "Connect" +#: src/lib/rwlock.c:375 src/lib/semlock.c:265 +#, c-format +msgid "Read lock failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:241 -msgid "Run" +#: src/lib/rwlock.c:382 src/lib/semlock.c:272 +#, c-format +msgid "Read unlock failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:242 src/gnome2-console/interface.c:677 -#: src/gnome2-console/interface.c:690 -msgid "Run a Job" +#: src/lib/rwlock.c:391 src/lib/semlock.c:281 +#, c-format +msgid "Thread %d found unchanged elements %d times\n" msgstr "" -#: src/gnome2-console/interface.c:251 -msgid "Msgs" +#: src/lib/rwlock.c:423 src/lib/semlock.c:313 +#, c-format +msgid "Init rwlock failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:271 -msgid "Label" +#: src/lib/rwlock.c:438 src/lib/semlock.c:328 +#, c-format +msgid "Create thread failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:299 -msgid " Command: " +#: src/lib/rwlock.c:449 src/lib/semlock.c:339 +#, c-format +msgid "Join thread failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:307 -msgid "Enter Commands Here" +#: src/lib/rwlock.c:452 src/lib/semlock.c:342 +#, c-format +msgid "%02d: interval %d, writes %d, reads %d\n" msgstr "" -#: src/gnome2-console/interface.c:318 -msgid " Status: " +#: src/lib/rwlock.c:462 src/lib/semlock.c:352 +#, c-format +msgid "data %02d: value %d, %d writes\n" msgstr "" -#: src/gnome2-console/interface.c:326 -msgid " " +#: src/lib/rwlock.c:467 src/lib/semlock.c:357 +#, c-format +msgid "Total: %d thread writes, %d data writes\n" msgstr "" -#: src/gnome2-console/interface.c:422 -msgid "About Bacula Console" +#: src/lib/rwlock.c:539 src/lib/semlock.c:429 +msgid "Try write lock" msgstr "" -#: src/gnome2-console/interface.c:436 -msgid "Bacula Console\n" +#: src/lib/rwlock.c:545 src/lib/semlock.c:435 +msgid "Try read lock" msgstr "" -#: src/gnome2-console/interface.c:444 -msgid "Copyright (c) 2000 - 2004, Kern Sibbald and John Walker" +#: src/lib/rwlock.c:600 src/lib/semlock.c:490 +msgid "Create thread" msgstr "" -#: src/gnome2-console/interface.c:450 -msgid "Authors: Kern Sibbald and John Walker" +#: src/lib/rwlock.c:610 src/lib/semlock.c:500 +msgid "Join thread" msgstr "" -#: src/gnome2-console/interface.c:456 -msgid "It comes by night and sucks the essence from your computers" +#: src/lib/rwlock.c:612 src/lib/semlock.c:502 +#, c-format +msgid "%02d: interval %d, updates %d, r_collisions %d, w_collisions %d\n" msgstr "" -#: src/gnome2-console/interface.c:521 src/gnome2-console/interface.c:536 -msgid "Select Director" +#: src/lib/rwlock.c:624 src/lib/semlock.c:514 +#, c-format +msgid "data %02d: value %d, %d updates\n" msgstr "" -#: src/gnome2-console/interface.c:708 src/gnome2-console/interface.c:1616 -msgid "Job:" +#: src/lib/semlock.c:185 +msgid "sem_unlock by non-owner.\n" msgstr "" -#: src/gnome2-console/interface.c:728 -msgid " Type:" +#: src/lib/signal.c:61 +msgid "Invalid signal number" msgstr "" -#: src/gnome2-console/interface.c:757 src/gnome2-console/interface.c:1644 -#: src/wx-console/wxbrestorepanel.cpp:1862 -msgid "Client:" +#: src/lib/signal.c:87 +#, c-format +msgid "Bacula interrupted by signal %d: %s\n" msgstr "" -#: src/gnome2-console/interface.c:787 src/gnome2-console/interface.c:1672 -msgid "FileSet: " +#: src/lib/signal.c:100 +#, c-format +msgid "Kaboom! %s, %s got signal %d. Attempting traceback.\n" msgstr "" -#: src/gnome2-console/interface.c:813 src/wx-console/wxbrestorepanel.cpp:1868 -msgid "Priority:" +#: src/lib/signal.c:102 +#, c-format +msgid "Kaboom! exepath=%s\n" msgstr "" -#: src/gnome2-console/interface.c:836 -msgid "Level:" +#: src/lib/signal.c:136 +#, c-format +msgid "Fork error: ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:866 src/gnome2-console/interface.c:1418 -#: src/gnome2-console/interface.c:1700 -msgid "Pool:" +#: src/lib/signal.c:143 +#, c-format +msgid "Calling: %s %s %s\n" msgstr "" -#: src/gnome2-console/interface.c:895 src/gnome2-console/interface.c:1393 -#: src/gnome2-console/interface.c:1728 src/wx-console/wxbrestorepanel.cpp:1864 -msgid "Storage:" +#: src/lib/signal.c:145 +#, c-format +msgid "execv: %s failed: ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:924 -msgid "Messages:" +#: src/lib/signal.c:160 +#, c-format +msgid "Traceback complete, attempting cleanup ...\n" msgstr "" -#: src/gnome2-console/interface.c:952 -msgid "Where: " +#: src/lib/signal.c:168 +#, c-format +msgid "It looks like the traceback worked ...\n" msgstr "" -#: src/gnome2-console/interface.c:970 src/wx-console/wxbrestorepanel.cpp:1866 -msgid "When:" +#: src/lib/signal.c:197 +#, c-format +msgid "BA_NSIG too small (%d) should be (%d)\n" msgstr "" -#: src/gnome2-console/interface.c:988 src/wx-console/wxbrestorepanel.cpp:1847 -msgid "Bootstrap:" +#: src/lib/signal.c:203 +msgid "UNKNOWN SIGNAL" msgstr "" -#: src/gnome2-console/interface.c:1108 -msgid "_New" +#: src/lib/signal.c:204 +msgid "Hangup" msgstr "" -#: src/gnome2-console/interface.c:1177 -msgid "Restore File Selection" +#: src/lib/signal.c:205 +msgid "Interrupt" msgstr "" -#: src/gnome2-console/interface.c:1226 -msgid "Current dir:" +#: src/lib/signal.c:206 +msgid "Quit" msgstr "" -#: src/gnome2-console/interface.c:1252 -msgid "Files Selected: " +#: src/lib/signal.c:207 +msgid "Illegal instruction" msgstr "" -#: src/gnome2-console/interface.c:1373 src/gnome2-console/interface.c:1383 -msgid "Label a Volume" +#: src/lib/signal.c:208 +msgid "Trace/Breakpoint trap" msgstr "" -#: src/gnome2-console/interface.c:1444 -msgid "Volume Name:" +#: src/lib/signal.c:209 +msgid "Abort" msgstr "" -#: src/gnome2-console/interface.c:1459 -msgid "Slot:" +#: src/lib/signal.c:211 +msgid "EMT instruction (Emulation Trap)" msgstr "" -#: src/gnome2-console/interface.c:1585 -msgid "Restore Files Dialog" +#: src/lib/signal.c:214 +msgid "IOT trap" msgstr "" -#: src/gnome2-console/interface.c:1599 -msgid "Restore Files" +#: src/lib/signal.c:216 +msgid "BUS error" msgstr "" -#: src/gnome2-console/interface.c:1756 -msgid "Before:" +#: src/lib/signal.c:217 +msgid "Floating-point exception" msgstr "" -#: src/gnome2-console/interface.c:1799 -msgid "Select Files" +#: src/lib/signal.c:218 +msgid "Kill, unblockable" msgstr "" -#: src/gnome2-console/interface.c:1883 -msgid "Progress" +#: src/lib/signal.c:219 +msgid "User-defined signal 1" msgstr "" -#: src/gnome2-console/support.c:41 -#, c-format -msgid "Widget not found: %s" +#: src/lib/signal.c:220 +msgid "Segmentation violation" msgstr "" -#: src/gnome2-console/support.c:60 src/gnome2-console/support.c:85 -#, c-format -msgid "Couldn't find pixmap file: %s" +#: src/lib/signal.c:221 +msgid "User-defined signal 2" msgstr "" -#: src/gnome2-console/support.c:92 -#, c-format -msgid "Failed to load pixbuf file: %s: %s\n" +#: src/lib/signal.c:222 +msgid "Broken pipe" msgstr "" -#: src/gnome2-console/authenticate.c:74 -#, c-format -msgid "%s: Director authorization problem.\n" +#: src/lib/signal.c:223 +msgid "Alarm clock" msgstr "" -#: src/gnome2-console/authenticate.c:75 -msgid "Director authorization problem.\n" +#: src/lib/signal.c:224 +msgid "Termination" msgstr "" -#: src/gnome2-console/authenticate.c:77 -msgid "" -"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +#: src/lib/signal.c:226 +msgid "Stack fault" msgstr "" -#: src/gnome2-console/authenticate.c:87 -#, c-format -msgid "%s: Bad response to Hello command: ERR=%s\n" +#: src/lib/signal.c:228 +msgid "Child status has changed" msgstr "" -#: src/gnome2-console/authenticate.c:89 -msgid "The Director is probably not running.\n" +#: src/lib/signal.c:229 +msgid "Continue" msgstr "" -#: src/gnome2-console/console_conf.c:135 -#, c-format -msgid "Console: name=%s\n" +#: src/lib/signal.c:230 +msgid "Stop, unblockable" msgstr "" -#: src/gnome2-console/console_conf.c:138 -#, c-format -msgid "ConsoleFont: name=%s font face=%s\n" +#: src/lib/signal.c:231 +msgid "Keyboard stop" msgstr "" -#: src/gnome2-console/console.c:88 -#, c-format -msgid "" -"Copyright (C) 2002-2005 Kern Sibbald\n" -"\n" -"Version: %s (%s) %s %s %s\n" -"\n" -"Usage: gnome-console [-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" +#: src/lib/signal.c:232 +msgid "Background read from tty" msgstr "" -#: src/gnome2-console/console.c:219 -#, c-format -msgid "Pthread cond init error = %s\n" +#: src/lib/signal.c:233 +msgid "Background write to tty" msgstr "" -#: src/gnome2-console/console.c:357 -msgid " Not Connected" +#: src/lib/signal.c:234 +msgid "Urgent condition on socket" msgstr "" -#: src/gnome2-console/console.c:478 -#, c-format -msgid " Connecting to Director %s:%d" +#: src/lib/signal.c:235 +msgid "CPU limit exceeded" msgstr "" -#: src/gnome2-console/console.c:479 -#, c-format -msgid "" -"Connecting to Director %s:%d\n" -"\n" +#: src/lib/signal.c:236 +msgid "File size limit exceeded" msgstr "" -#: src/gnome2-console/console.c:494 src/wx-console/console_thread.cpp:360 -#, c-format -msgid "Passphrase for Console \"%s\" TLS private key: " +#: src/lib/signal.c:237 +msgid "Virtual alarm clock" msgstr "" -#: src/gnome2-console/console.c:516 src/wx-console/console_thread.cpp:381 -#, c-format -msgid "Passphrase for Director \"%s\" TLS private key: " +#: src/lib/signal.c:238 +msgid "Profiling alarm clock" msgstr "" -#: src/gnome2-console/console.c:535 src/tray-monitor/tray-monitor.c:860 -#: src/wx-console/console_thread.cpp:399 -msgid "Director daemon" +#: src/lib/signal.c:239 +msgid "Window size change" msgstr "" -#: src/gnome2-console/console.c:547 -msgid " Initializing ..." +#: src/lib/signal.c:240 +msgid "I/O now possible" msgstr "" -#: src/gnome2-console/console.c:583 -msgid " Connected" +#: src/lib/signal.c:242 +msgid "Power failure restart" msgstr "" -#: src/gnome2-console/console.c:591 -msgid " Processing command ..." +#: src/lib/signal.c:245 +msgid "No runnable lwp" msgstr "" -#: src/gnome2-console/console.c:626 -msgid " At prompt waiting for input ..." +#: src/lib/signal.c:248 +msgid "SIGLWP special signal used by thread library" msgstr "" -#: src/gnome2-console/console.c:746 -msgid " Ready" +#: src/lib/signal.c:251 +msgid "Checkpoint Freeze" msgstr "" -#: src/tools/bsmtp.c:85 -#, c-format -msgid "Fatal malformed reply from %s: %s\n" +#: src/lib/signal.c:254 +msgid "Checkpoint Thaw" msgstr "" -#: src/tools/bsmtp.c:121 -#, c-format -msgid "" -"\n" -"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" -" -c set the Cc: field\n" -" -dnn set debug level to nn\n" -" -f set the From: field\n" -" -h use mailhost:port as the SMTP server\n" -" -s set the Subject: field\n" -" -? print this message.\n" -"\n" +#: src/lib/signal.c:257 +msgid "Thread Cancellation" msgstr "" -#: src/tools/bsmtp.c:204 -msgid "Fatal error: no recipient given.\n" +#: src/lib/signal.c:260 +msgid "Resource Lost (e.g. record-lock lost)" msgstr "" -#: src/tools/bsmtp.c:225 +#: src/lib/smartall.c:132 src/lib/smartall.c:223 src/lib/smartall.c:238 +msgid "Out of memory\n" +msgstr "" + +#: src/lib/smartall.c:160 #, c-format -msgid "Fatal gethostname error: ERR=%s\n" +msgid "Attempt to free NULL called from %s:%d\n" msgstr "" -#: src/tools/bsmtp.c:229 +#: src/lib/smartall.c:176 #, c-format -msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" +msgid "qp->qnext->qprev != qp called from %s:%d\n" msgstr "" -#: src/tools/bsmtp.c:254 +#: src/lib/smartall.c:180 #, c-format -msgid "Error unknown mail host \"%s\": ERR=%s\n" +msgid "qp->qprev->qnext != qp called from %s:%d\n" msgstr "" -#: src/tools/bsmtp.c:257 -msgid "Retrying connection using \"localhost\".\n" +#: src/lib/smartall.c:189 +#, c-format +msgid "Buffer overrun called from %s:%d\n" msgstr "" -#: src/tools/bsmtp.c:265 +#: src/lib/smartall.c:260 #, c-format -msgid "Fatal error: Unknown address family for smtp host: %d\n" +msgid "sm_realloc size: %d\n" msgstr "" -#: src/tools/bsmtp.c:273 +#: src/lib/smartall.c:301 #, c-format -msgid "Fatal socket error: ERR=%s\n" +msgid "sm_realloc %d at %x from %s:%d\n" msgstr "" -#: src/tools/bsmtp.c:277 +#: src/lib/smartall.c:363 #, c-format -msgid "Fatal connect error to %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: %lx\n" msgstr "" -#: src/tools/bsmtp.c:282 +#: src/lib/smartall.c:374 #, c-format -msgid "Fatal dup error: ERR=%s\n" +msgid "Orphaned buffer: %6u bytes allocated at line %d of %s %s\n" msgstr "" -#: src/tools/bsmtp.c:286 src/tools/bsmtp.c:290 +#: src/lib/smartall.c:410 #, c-format -msgid "Fatal fdopen error: ERR=%s\n" +msgid "Damaged buffer found. Called from %s:%d\n" msgstr "" -#: src/tools/testls.c:45 +#: src/lib/smartall.c:440 #, c-format msgid "" "\n" -"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -dnn set debug level to nn\n" -" -e specify file of exclude patterns\n" -" -i specify file of include patterns\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" +"Damaged buffers found at %s:%d\n" msgstr "" -#: src/tools/testls.c:130 src/tools/testfind.c:134 +#: src/lib/smartall.c:443 #, c-format -msgid "Could not open include file: %s\n" +msgid " discovery of bad prev link.\n" msgstr "" -#: src/tools/testls.c:143 src/tools/testfind.c:147 +#: src/lib/smartall.c:446 #, c-format -msgid "Could not open exclude file: %s\n" +msgid " discovery of bad next link.\n" msgstr "" -#: src/tools/testfind.c:49 +#: src/lib/smartall.c:449 #, c-format -msgid "" -"\n" -"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -dnn set debug level to nn\n" -" -e specify file of exclude patterns\n" -" -i specify file of include patterns\n" -" - read pattern(s) from stdin\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 " discovery of data overrun.\n" msgstr "" -#: src/tools/testfind.c:199 +#: src/lib/smartall.c:452 #, c-format -msgid "Reg: %s\n" +msgid " Buffer address: %lx\n" msgstr "" -#: src/tools/testfind.c:220 -msgid "\t[will not descend: recursion turned off]" +#: src/lib/smartall.c:459 +#, c-format +msgid "Damaged buffer: %6u bytes allocated at line %d of %s %s\n" msgstr "" -#: src/tools/testfind.c:222 -msgid "\t[will not descend: file system change not allowed]" +#: src/lib/util.c:181 +msgid "Running" msgstr "" -#: src/tools/testfind.c:224 -msgid "\t[will not descend: disallowed file system]" +#: src/lib/util.c:184 +msgid "Blocked" msgstr "" -#: src/tools/testfind.c:337 -#, c-format -msgid "Path: %s\n" +#: src/lib/util.c:194 +msgid "Non-fatal error" msgstr "" -#: src/tools/testfind.c:338 src/dird/verify.c:756 -#, c-format -msgid "File: %s\n" +#: src/lib/util.c:197 src/lib/util.c:264 +msgid "Canceled" msgstr "" -#: src/tools/fstype.c:34 -#, c-format -msgid "" -"\n" -"Usage: fstype [-d debug_level] 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" +#: src/lib/util.c:200 +msgid "Verify differences" msgstr "" -#: src/tools/fstype.c:86 -#, c-format -msgid "%s: unknown\n" +#: src/lib/util.c:203 +msgid "Waiting on FD" msgstr "" -#: src/tools/dbcheck.c:158 -msgid "" -"Warning skipping the additional parameters for working directory/dbname/user/" -"password/host.\n" +#: src/lib/util.c:206 +msgid "Wait on SD" msgstr "" -#: src/tools/dbcheck.c:174 -#, c-format -msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" +#: src/lib/util.c:209 +msgid "Wait for new Volume" msgstr "" -#: src/tools/dbcheck.c:176 -#, c-format -msgid "Error there is no Catalog section in the given config file [%s]\n" +#: src/lib/util.c:212 +msgid "Waiting for mount" msgstr "" -#: src/tools/dbcheck.c:185 -msgid "Error no Director resource defined.\n" +#: src/lib/util.c:215 +msgid "Waiting for Storage resource" msgstr "" -#: src/tools/dbcheck.c:199 -msgid "Wrong number of arguments.\n" +#: src/lib/util.c:218 +msgid "Waiting for Job resource" msgstr "" -#: src/tools/dbcheck.c:204 -msgid "Working directory not supplied.\n" +#: src/lib/util.c:221 +msgid "Waiting for Client resource" msgstr "" -#: src/tools/dbcheck.c:269 -#, c-format -msgid "Hello, this is the database check/correct program.\n" +#: src/lib/util.c:224 +msgid "Waiting on Max Jobs" msgstr "" -#: src/tools/dbcheck.c:271 -#, c-format -msgid "Modify database is on." +#: src/lib/util.c:227 +msgid "Waiting for Start Time" msgstr "" -#: src/tools/dbcheck.c:273 -#, c-format -msgid "Modify database is off." +#: src/lib/util.c:230 +msgid "Waiting on Priority" msgstr "" -#: src/tools/dbcheck.c:275 src/tools/dbcheck.c:336 +#: src/lib/util.c:237 #, c-format -msgid " Verbose is on.\n" +msgid "Unknown Job termination status=%d" msgstr "" -#: src/tools/dbcheck.c:277 src/tools/dbcheck.c:338 -#, c-format -msgid " Verbose is off.\n" +#: src/lib/util.c:261 +msgid "Fatal Error" msgstr "" -#: src/tools/dbcheck.c:279 -#, c-format -msgid "Please select the fuction you want to perform.\n" +#: src/lib/util.c:267 +msgid "Differences" msgstr "" -#: src/tools/dbcheck.c:283 -#, 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/lib/util.c:270 +msgid "Unknown term code" msgstr "" -#: src/tools/dbcheck.c:302 -#, 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/lib/util.c:298 +msgid "Migrate" msgstr "" -#: src/tools/dbcheck.c:322 -msgid "Select function number: " +#: src/lib/util.c:301 +msgid "Copy" msgstr "" -#: src/tools/dbcheck.c:329 -#, c-format -msgid "Database will be modified.\n" +#: src/lib/util.c:304 +msgid "Unknown Type" msgstr "" -#: src/tools/dbcheck.c:331 -#, c-format -msgid "Database will NOT be modified.\n" +#: src/lib/util.c:336 +msgid "Verify Init Catalog" msgstr "" -#: src/tools/dbcheck.c:421 -#, c-format -msgid "JobId=%s Name=\"%s\" StartTime=%s\n" +#: src/lib/util.c:345 +msgid "Verify Data" msgstr "" -#: src/tools/dbcheck.c:429 -#, c-format -msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" +#: src/lib/util.c:647 +msgid "Working directory not defined. Cannot continue.\n" msgstr "" -#: src/tools/dbcheck.c:436 +#: src/lib/util.c:650 #, c-format -msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" +msgid "Working Directory: \"%s\" not found. Cannot continue.\n" msgstr "" -#: src/tools/dbcheck.c:443 +#: src/lib/util.c:654 #, c-format -msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" +msgid "Working Directory: \"%s\" is not a directory. Cannot continue.\n" msgstr "" -#: src/tools/dbcheck.c:450 -#, c-format -msgid "Orphaned ClientId=%s Name=\"%s\"\n" +#: src/lib/var.c:2659 +msgid "everything ok" msgstr "" -#: src/tools/dbcheck.c:503 -#, c-format -msgid "Deleting: %s\n" +#: src/lib/var.c:2660 +msgid "incomplete named character" msgstr "" -#: src/tools/dbcheck.c:577 -#, c-format -msgid "Checking for duplicate Filename entries.\n" +#: src/lib/var.c:2661 +msgid "incomplete hexadecimal value" msgstr "" -#: src/tools/dbcheck.c:586 -#, c-format -msgid "Found %d duplicate Filename records.\n" +#: src/lib/var.c:2662 +msgid "invalid hexadecimal value" msgstr "" -#: src/tools/dbcheck.c:587 -msgid "Print the list? (yes/no): " +#: src/lib/var.c:2663 +msgid "octal value too large" msgstr "" -#: src/tools/dbcheck.c:603 src/tools/dbcheck.c:657 -#, c-format -msgid "Found %d for: %s\n" +#: src/lib/var.c:2664 +msgid "invalid octal value" msgstr "" -#: src/tools/dbcheck.c:630 -#, c-format -msgid "Checking for duplicate Path entries.\n" +#: src/lib/var.c:2665 +msgid "incomplete octal value" msgstr "" -#: src/tools/dbcheck.c:640 -#, c-format -msgid "Found %d duplicate Path records.\n" +#: src/lib/var.c:2666 +msgid "incomplete grouped hexadecimal value" msgstr "" -#: src/tools/dbcheck.c:641 src/tools/dbcheck.c:691 src/tools/dbcheck.c:723 -#: src/tools/dbcheck.c:755 src/tools/dbcheck.c:783 src/tools/dbcheck.c:811 -#: src/tools/dbcheck.c:849 src/tools/dbcheck.c:887 src/tools/dbcheck.c:918 -#: src/tools/dbcheck.c:948 src/tools/dbcheck.c:982 src/tools/dbcheck.c:1040 -msgid "Print them? (yes/no): " +#: src/lib/var.c:2667 +msgid "incorrect character class specification" msgstr "" -#: src/tools/dbcheck.c:683 -#, c-format -msgid "Checking for orphaned JobMedia entries.\n" +#: src/lib/var.c:2668 +msgid "invalid expansion configuration" msgstr "" -#: src/tools/dbcheck.c:690 -#, c-format -msgid "Found %d orphaned JobMedia records.\n" +#: src/lib/var.c:2669 +msgid "out of memory" msgstr "" -#: src/tools/dbcheck.c:703 -#, c-format -msgid "Deleting %d orphaned JobMedia records.\n" +#: src/lib/var.c:2670 +msgid "incomplete variable specification" msgstr "" -#: src/tools/dbcheck.c:712 -#, c-format -msgid "Checking for orphaned File entries. This may take some time!\n" +#: src/lib/var.c:2671 +msgid "undefined variable" msgstr "" -#: src/tools/dbcheck.c:722 -#, c-format -msgid "Found %d orphaned File records.\n" +#: src/lib/var.c:2672 +msgid "input is neither text nor variable" msgstr "" -#: src/tools/dbcheck.c:735 -#, c-format -msgid "Deleting %d orphaned File records.\n" +#: src/lib/var.c:2673 +msgid "unknown command character in variable" msgstr "" -#: src/tools/dbcheck.c:744 -#, c-format -msgid "Checking for orphaned Path entries. This may take some time!\n" +#: src/lib/var.c:2674 +msgid "malformatted search and replace operation" msgstr "" -#: src/tools/dbcheck.c:754 -#, c-format -msgid "Found %d orphaned Path records.\n" +#: src/lib/var.c:2675 +msgid "unknown flag in search and replace operation" msgstr "" -#: src/tools/dbcheck.c:763 -#, c-format -msgid "Deleting %d orphaned Path records.\n" +#: src/lib/var.c:2676 +msgid "invalid regex in search and replace operation" msgstr "" -#: src/tools/dbcheck.c:772 -#, c-format -msgid "Checking for orphaned Filename entries. This may take some time!\n" +#: src/lib/var.c:2677 +msgid "missing parameter in command" msgstr "" -#: src/tools/dbcheck.c:782 -#, c-format -msgid "Found %d orphaned Filename records.\n" +#: src/lib/var.c:2678 +msgid "empty search string in search and replace operation" msgstr "" -#: src/tools/dbcheck.c:791 -#, c-format -msgid "Deleting %d orphaned Filename records.\n" +#: src/lib/var.c:2679 +msgid "start offset missing in cut operation" msgstr "" -#: src/tools/dbcheck.c:800 -#, c-format -msgid "Checking for orphaned FileSet entries. This takes some time!\n" +#: src/lib/var.c:2680 +msgid "offsets in cut operation delimited by unknown character" msgstr "" -#: src/tools/dbcheck.c:810 -#, c-format -msgid "Found %d orphaned FileSet records.\n" +#: src/lib/var.c:2681 +msgid "range out of bounds in cut operation" msgstr "" -#: src/tools/dbcheck.c:822 -#, c-format -msgid "Deleting %d orphaned FileSet records.\n" +#: src/lib/var.c:2682 +msgid "offset out of bounds in cut operation" msgstr "" -#: src/tools/dbcheck.c:831 -#, c-format -msgid "Checking for orphaned Client entries.\n" +#: src/lib/var.c:2683 +msgid "logic error in cut operation" msgstr "" -#: src/tools/dbcheck.c:848 -#, c-format -msgid "Found %d orphaned Client records.\n" +#: src/lib/var.c:2684 +msgid "malformatted transpose operation" msgstr "" -#: src/tools/dbcheck.c:860 -#, c-format -msgid "Deleting %d orphaned Client records.\n" +#: src/lib/var.c:2685 +msgid "source and target class mismatch in transpose operation" msgstr "" -#: src/tools/dbcheck.c:869 -#, c-format -msgid "Checking for orphaned Job entries.\n" +#: src/lib/var.c:2686 +msgid "empty character class in transpose operation" msgstr "" -#: src/tools/dbcheck.c:886 -#, c-format -msgid "Found %d orphaned Job records.\n" +#: src/lib/var.c:2687 +msgid "incorrect character class in transpose operation" msgstr "" -#: src/tools/dbcheck.c:898 -#, c-format -msgid "Deleting %d orphaned Job records.\n" +#: src/lib/var.c:2688 +msgid "malformatted padding operation" msgstr "" -#: src/tools/dbcheck.c:908 -#, c-format -msgid "Checking for Admin Job entries.\n" +#: src/lib/var.c:2689 +msgid "width parameter missing in padding operation" msgstr "" -#: src/tools/dbcheck.c:917 -#, c-format -msgid "Found %d Admin Job records.\n" +#: src/lib/var.c:2690 +msgid "fill string missing in padding operation" msgstr "" -#: src/tools/dbcheck.c:929 -#, c-format -msgid "Deleting %d Admin Job records.\n" +#: src/lib/var.c:2691 +msgid "unknown quoted pair in search and replace operation" msgstr "" -#: src/tools/dbcheck.c:938 -#, c-format -msgid "Checking for Restore Job entries.\n" +#: src/lib/var.c:2692 +msgid "sub-matching reference out of range" msgstr "" -#: src/tools/dbcheck.c:947 -#, c-format -msgid "Found %d Restore Job records.\n" +#: src/lib/var.c:2693 +msgid "invalid argument" msgstr "" -#: src/tools/dbcheck.c:959 -#, c-format -msgid "Deleting %d Restore Job records.\n" +#: src/lib/var.c:2694 +msgid "incomplete quoted pair" msgstr "" -#: src/tools/dbcheck.c:972 -#, c-format -msgid "Checking for Filenames with a trailing slash\n" +#: src/lib/var.c:2695 +msgid "lookup function does not support variable arrays" msgstr "" -#: src/tools/dbcheck.c:981 -#, c-format -msgid "Found %d bad Filename records.\n" +#: src/lib/var.c:2696 +msgid "index of array variable contains an invalid character" msgstr "" -#: src/tools/dbcheck.c:995 src/tools/dbcheck.c:1053 -#, c-format -msgid "Reparing %d bad Filename records.\n" +#: src/lib/var.c:2697 +msgid "index of array variable is incomplete" msgstr "" -#: src/tools/dbcheck.c:1030 -#, c-format -msgid "Checking for Paths without a trailing slash\n" +#: src/lib/var.c:2698 +msgid "bracket expression in array variable's index not closed" msgstr "" -#: src/tools/dbcheck.c:1039 -#, c-format -msgid "Found %d bad Path records.\n" +#: src/lib/var.c:2699 +msgid "division by zero error in index specification" msgstr "" -#: src/findlib/enable_priv.c:85 -msgid "AdjustTokenPrivileges set " +#: src/lib/var.c:2700 +msgid "unterminated loop construct" msgstr "" -#: src/findlib/find_one.c:168 -#, c-format -msgid "Top level directory \"%s\" has an unlisted fstype\n" +#: src/lib/var.c:2701 +msgid "invalid character in loop limits" msgstr "" -#: src/findlib/save-cwd.c:48 -#, c-format -msgid "Cannot open current directory: %s\n" +#: src/lib/var.c:2702 +msgid "malformed operation argument list" msgstr "" -#: src/findlib/save-cwd.c:62 -#, c-format -msgid "Current directory: %s\n" +#: src/lib/var.c:2703 +msgid "undefined operation" msgstr "" -#: src/findlib/save-cwd.c:84 -#, c-format -msgid "Cannot get current directory: %s\n" +#: src/lib/var.c:2704 +msgid "formatting failure" msgstr "" -#: src/findlib/save-cwd.c:105 -#, c-format -msgid "Cannot return to %s from %s: %s\n" +#: src/lib/var.c:2713 +msgid "unknown error" msgstr "" -#: src/findlib/save-cwd.c:109 +#: src/lib/watchdog.c:74 #, c-format -msgid "Cannot return to saved working directory from %s: %s\n" +msgid "Unable to initialize watchdog lock. ERR=%s\n" msgstr "" -#: src/findlib/save-cwd.c:115 -#, c-format -msgid "Cannot return to %s: %s\n" +#: src/lib/watchdog.c:170 +msgid "BUG! register_watchdog called before start_watchdog\n" msgstr "" -#: src/findlib/save-cwd.c:119 +#: src/lib/watchdog.c:173 #, c-format -msgid "Cannot return to saved working directory: %s\n" +msgid "BUG! Watchdog %p has NULL callback\n" msgstr "" -#: src/findlib/bfile.c:64 -msgid "GZIP data" +#: src/lib/watchdog.c:176 +#, c-format +msgid "BUG! Watchdog %p has zero interval\n" msgstr "" -#: src/findlib/bfile.c:66 -msgid "GZIP sparse data" +#: src/lib/watchdog.c:196 +msgid "BUG! unregister_watchdog_unlocked called before start_watchdog\n" msgstr "" -#: src/findlib/bfile.c:68 -msgid "Win32 data" +#: src/lib/watchdog.c:313 +#, c-format +msgid "rwl_writelock failure. ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:70 -msgid "Win32 GZIP data" +#: src/lib/watchdog.c:327 +#, c-format +msgid "rwl_writeunlock failure. ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:72 -msgid "File attributes" +#: src/stored/acquire.c:96 +#, c-format +msgid "Hey! num_writers=%d!!!!\n" msgstr "" -#: src/findlib/bfile.c:74 -msgid "File data" +#: src/stored/acquire.c:146 +#, c-format +msgid "Num_writers=%d not zero. Job %d canceled.\n" msgstr "" -#: src/findlib/bfile.c:76 -msgid "MD5 digest" +#: src/stored/acquire.c:154 +#, c-format +msgid "No volumes specified. Job %d canceled.\n" msgstr "" -#: src/findlib/bfile.c:78 -msgid "Extended attributes" +#: src/stored/acquire.c:182 src/stored/mount.c:73 +#, c-format +msgid "Job %d canceled.\n" msgstr "" -#: src/findlib/bfile.c:80 -msgid "Sparse data" +#: src/stored/acquire.c:193 +#, c-format +msgid "Open device %s Volume \"%s\" failed (EIO): ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:82 -msgid "Program names" +#: src/stored/acquire.c:198 +#, c-format +msgid "Open device %s Volume \"%s\" failed: ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:84 -msgid "Program data" +#: src/stored/acquire.c:263 src/stored/mount.c:67 +#, c-format +msgid "Too many errors trying to mount device %s.\n" msgstr "" -#: src/findlib/bfile.c:86 -msgid "SHA1 digest" +#: src/stored/acquire.c:272 +#, c-format +msgid "Ready to read from volume \"%s\" on device %s.\n" msgstr "" -#: src/findlib/bfile.c:88 -msgid "HFS+ resource fork" +#: src/stored/acquire.c:311 +#, c-format +msgid "Device %s is busy reading.\n" msgstr "" -#: src/findlib/bfile.c:90 -msgid "HFS+ Finder Info" +#: src/stored/acquire.c:341 +#, c-format +msgid "Wanted Volume \"%s\", but device %s is busy writing on \"%s\" .\n" msgstr "" -#: src/findlib/bfile.c:92 -msgid "SHA256 digest" +#: src/stored/acquire.c:360 +#, c-format +msgid "" +"Cannot recycle volume \"%s\" on device %s because it is in use by another " +"job.\n" msgstr "" -#: src/findlib/bfile.c:94 -msgid "SHA512 digest" +#: src/stored/acquire.c:382 +#, c-format +msgid "Could not ready device %s for append.\n" msgstr "" -#: src/findlib/bfile.c:96 -msgid "Signed digest" +#: src/stored/acquire.c:459 src/stored/block.c:354 src/stored/block.c:677 +#: src/stored/block.c:746 +#, c-format +msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" msgstr "" -#: src/findlib/bfile.c:98 -msgid "Encrypted File data" +#: src/stored/acquire.c:501 +#, c-format +msgid "Alert: %s" msgstr "" -#: src/findlib/bfile.c:100 -msgid "Encrypted GZIP data" +#: src/stored/acquire.c:509 +#, c-format +msgid "3997 Bad alert command: %s: ERR=%s.\n" msgstr "" -#: src/findlib/bfile.c:102 -msgid "Encrypted Win32 data" +#: src/stored/ansi_label.c:83 +#, c-format +msgid "Read error on device %s in ANSI label. ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:104 -msgid "Encrypted Win32 GZIP data" +#: src/stored/ansi_label.c:93 +msgid "Insane! End of tape while reading ANSI label.\n" msgstr "" -#: src/findlib/bfile.c:106 -msgid "Encrypted HFS+ resource fork" +#: src/stored/ansi_label.c:117 +msgid "No VOL1 label while reading ANSI/IBM label.\n" msgstr "" -#: src/findlib/create_file.c:86 +#: src/stored/ansi_label.c:137 #, c-format -msgid "File skipped. Not newer: %s\n" +msgid "Wanted ANSI Volume \"%s\" got \"%s\"\n" msgstr "" -#: src/findlib/create_file.c:93 -#, c-format -msgid "File skipped. Not older: %s\n" +#: src/stored/ansi_label.c:148 +msgid "No HDR1 label while reading ANSI label.\n" msgstr "" -#: src/findlib/create_file.c:99 +#: src/stored/ansi_label.c:154 #, c-format -msgid "File skipped. Already exists: %s\n" +msgid "ANSI/IBM Volume \"%s\" does not belong to Bacula.\n" msgstr "" -#: src/findlib/create_file.c:124 -#, c-format -msgid "File %s already exists and could not be replaced. ERR=%s.\n" +#: src/stored/ansi_label.c:165 +msgid "No HDR2 label while reading ANSI/IBM label.\n" msgstr "" -#: src/findlib/create_file.c:176 src/findlib/create_file.c:279 -#: src/findlib/create_file.c:330 -#, c-format -msgid "bpkt already open fid=%d\n" -msgstr "" - -#: src/findlib/create_file.c:198 -msgid "Could not save_dirn" +#: src/stored/ansi_label.c:179 +msgid "Unknown or bad ANSI/IBM label record.\n" msgstr "" -#: src/findlib/create_file.c:207 src/findlib/create_file.c:220 -#, c-format -msgid "Could not chdir to %s: ERR=%s\n" +#: src/stored/ansi_label.c:186 +msgid "Too many records in while reading ANSI/IBM label.\n" msgstr "" -#: src/findlib/create_file.c:240 +#: src/stored/ansi_label.c:285 #, c-format -msgid "Could not create %s: ERR=%s\n" +msgid "ANSI Volume label name \"%s\" longer than 6 chars.\n" msgstr "" -#: src/findlib/create_file.c:253 +#: src/stored/ansi_label.c:302 #, c-format -msgid "Cannot make fifo %s: ERR=%s\n" +msgid "Could not write ANSI VOL1 label. ERR=%s\n" msgstr "" -#: src/findlib/create_file.c:263 +#: src/stored/ansi_label.c:340 src/stored/ansi_label.c:369 #, c-format -msgid "Cannot make node %s: ERR=%s\n" +msgid "Could not write ANSI HDR1 label. ERR=%s\n" msgstr "" -#: src/findlib/create_file.c:284 src/findlib/create_file.c:341 -#: src/dird/ua_query.c:59 -#, c-format -msgid "Could not open %s: ERR=%s\n" +#: src/stored/ansi_label.c:345 src/stored/ansi_label.c:376 +msgid "Could not write ANSI HDR1 label.\n" msgstr "" -#: src/findlib/create_file.c:299 +#: src/stored/ansi_label.c:381 #, c-format -msgid "Could not symlink %s -> %s: ERR=%s\n" +msgid "Error writing EOF to tape. ERR=%s" msgstr "" -#: src/findlib/create_file.c:309 -#, c-format -msgid "Could not hard link %s -> %s: ERR=%s\n" +#: src/stored/ansi_label.c:386 +msgid "write_ansi_ibm_label called for non-ANSI/IBM type\n" msgstr "" -#: src/findlib/create_file.c:360 -#, c-format -msgid "Original file %s not saved: type=%d\n" +#: src/stored/append.c:49 +msgid "DCR is NULL!!!\n" msgstr "" -#: src/findlib/create_file.c:363 -#, c-format -msgid "Unknown file type %d; not restored: %s\n" +#: src/stored/append.c:54 +msgid "DEVICE is NULL!!!\n" msgstr "" -#: src/findlib/create_file.c:394 -#, c-format -msgid "Zero length filename: %s\n" +#: src/stored/append.c:66 +msgid "Unable to set network buffer size.\n" msgstr "" -#: src/findlib/makepath.c:117 -#, c-format -msgid "Cannot create directory %s: ERR=%s\n" +#: src/stored/append.c:79 src/stored/append.c:88 src/stored/append.c:100 +#: src/stored/append.c:256 src/stored/append.c:271 src/stored/append.c:283 +#: src/stored/askdir.c:294 src/stored/askdir.c:295 +msgid "NULL Volume name. This shouldn't happen!!!\n" msgstr "" -#: src/findlib/makepath.c:121 src/findlib/makepath.c:378 +#: src/stored/append.c:94 src/stored/btape.c:1854 #, c-format -msgid "%s exists but is not a directory\n" +msgid "Write session label failed. ERR=%s\n" msgstr "" -#: src/findlib/makepath.c:276 src/findlib/makepath.c:337 -#: src/findlib/makepath.c:397 +#: src/stored/append.c:106 #, c-format -msgid "Cannot change owner and/or group of %s: ERR=%s\n" +msgid "Network send error to FD. ERR=%s\n" msgstr "" -#: src/findlib/makepath.c:297 +#: src/stored/append.c:143 #, c-format -msgid "Cannot chdir to directory, %s: ERR=%s\n" +msgid "Error reading data header from FD. ERR=%s\n" msgstr "" -#: src/findlib/makepath.c:352 src/findlib/makepath.c:368 -#: src/findlib/makepath.c:402 +#: src/stored/append.c:165 #, c-format -msgid "Cannot change permissions of %s: ERR=%s\n" +msgid "Malformed data header from FD: %s\n" msgstr "" -#: src/findlib/match.c:184 src/filed/job.c:931 -#, c-format -msgid "Unknown include/exclude option: %c\n" +#: src/stored/append.c:175 +msgid "File index from FD not positive or sequential\n" msgstr "" -#: src/findlib/attribs.c:392 +#: src/stored/append.c:206 src/stored/append.c:276 src/stored/spool.c:248 #, c-format -msgid "File size of restored file %s not correct. Original %s, restored %s.\n" +msgid "Fatal append error on device %s: ERR=%s\n" msgstr "" -#: src/findlib/attribs.c:410 src/findlib/attribs.c:417 +#: src/stored/append.c:231 #, c-format -msgid "Unable to set file owner %s: ERR=%s\n" +msgid "Error updating file attributes. ERR=%s\n" msgstr "" -#: src/findlib/attribs.c:423 +#: src/stored/append.c:244 #, c-format -msgid "Unable to set file modes %s: ERR=%s\n" +msgid "Network error on data channel. ERR=%s\n" msgstr "" -#: src/findlib/attribs.c:433 +#: src/stored/append.c:265 src/stored/btape.c:1976 #, c-format -msgid "Unable to set file times %s: ERR=%s\n" +msgid "Error writting end session label. ERR=%s\n" msgstr "" -#: src/findlib/attribs.c:447 -#, c-format -msgid "Unable to set file flags %s: ERR=%s\n" +#: src/stored/append.c:278 +msgid "Set ok=FALSE after write_block_to_device.\n" msgstr "" -#: src/findlib/attribs.c:692 -#, c-format -msgid "Error in %s file %s: ERR=%s\n" +#: src/stored/askdir.c:161 +msgid "Network error on bnet_recv in req_vol_info.\n" msgstr "" -#: src/findlib/attribs.c:709 +#: src/stored/askdir.c:178 #, c-format -msgid "Error in %s: ERR=%s\n" +msgid "Error getting Volume info: %s" msgstr "" -#: src/tray-monitor/tray_conf.c:152 src/dird/dird_conf.c:455 -#, c-format -msgid "No %s resource defined\n" +#: src/stored/askdir.c:299 src/stored/askdir.c:300 +msgid "Attempt to update_volume_info in read mode!!!\n" msgstr "" -#: src/tray-monitor/tray_conf.c:161 +#: src/stored/askdir.c:328 #, c-format -msgid "Monitor: name=%s FDtimeout=%s SDtimeout=%s\n" +msgid "Didn't get vol info vol=%s: ERR=%s" msgstr "" -#: src/tray-monitor/tray_conf.c:167 +#: src/stored/askdir.c:359 #, c-format -msgid "Director: name=%s address=%s FDport=%d\n" +msgid "Error creating JobMedia record: ERR=%s\n" msgstr "" -#: src/tray-monitor/tray_conf.c:171 +#: src/stored/askdir.c:366 #, c-format -msgid "Client: name=%s address=%s FDport=%d\n" +msgid "Error creating JobMedia record: %s\n" msgstr "" -#: src/tray-monitor/tray_conf.c:175 +#: src/stored/askdir.c:432 #, c-format -msgid "Storage: name=%s address=%s SDport=%d\n" +msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" msgstr "" -#: src/tray-monitor/tray_conf.c:179 src/dird/dird_conf.c:808 +#: src/stored/askdir.c:445 #, c-format -msgid "Unknown resource type %d in dump_resource.\n" +msgid "" +"Job %s waiting. Cannot find any appendable volumes.\n" +"Please use the \"label\" command to create a new Volume for:\n" +" Storage: %s\n" +" Media type: %s\n" +" Pool: %s\n" msgstr "" -#: src/tray-monitor/tray_conf.c:232 src/dird/dird_conf.c:1105 +#: src/stored/askdir.c:469 src/stored/askdir.c:551 #, c-format -msgid "Unknown resource type %d in free_resource.\n" +msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" msgstr "" -#: src/tray-monitor/tray_conf.c:287 src/dird/dird_conf.c:1256 -#, c-format -msgid "Unknown resource type %d in save_resource.\n" +#: src/stored/askdir.c:479 +msgid "pthread error in mount_next_volume.\n" msgstr "" -#: src/tray-monitor/tray_conf.c:322 src/dird/dird_conf.c:1316 -#, c-format -msgid "Unknown resource type %d in save_resrouce.\n" +#: src/stored/askdir.c:511 +msgid "Cannot request another volume: no volume name given.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:102 +#: src/stored/askdir.c:517 #, c-format -msgid "" -"Copyright (C) 2000-2004 Kern Sibbald and John Walker\n" -"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" -" -dnn set debug level to nn\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" +msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:251 +#: src/stored/askdir.c:532 #, c-format -msgid "" -"Error: %d Monitor resource defined in %s. You must define one and only one " -"Monitor resource.\n" +msgid "Please mount Volume \"%s\" on Storage Device %s for Job %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:282 -#, c-format -msgid "" -"No Client, Storage nor 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/askdir.c:561 +msgid "pthread error in mount_volume\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:304 +#: src/stored/authenticate.c:53 #, 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:319 -msgid "Open status window..." +msgid "I only authenticate Directors, not %d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:325 -msgid "Exit" +#: src/stored/authenticate.c:120 +msgid "" +"Incorrect password given by Director.\n" +"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " +"help.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:337 -msgid "Bacula tray monitor" +#: src/stored/authenticate.c:178 +#, c-format +msgid "Unable to authenticate Director at %s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:362 -msgid " (DIR)" +#: src/stored/authenticate.c:223 src/stored/authenticate.c:259 +#, c-format +msgid "" +"Incorrect authorization key from File daemon at %s rejected.\n" +"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " +"help.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:366 -msgid " (FD)" +#: src/stored/autochanger.c:53 +#, c-format +msgid "No Changer Name given for device %s. Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:370 -msgid " (SD)" +#: src/stored/autochanger.c:59 +#, c-format +msgid "No Changer Command given for device %s. Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:383 -msgid "Unknown status." +#: src/stored/autochanger.c:72 +#, c-format +msgid "" +"Media Type not the same for all devices in changer %s. Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:424 -msgid "Refresh interval in seconds: " +#: src/stored/autochanger.c:152 +#, c-format +msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:432 -msgid "Refresh now" +#: src/stored/autochanger.c:161 +#, c-format +msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:436 -msgid "About" +#: src/stored/autochanger.c:167 +#, c-format +msgid "3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:440 -msgid "Close" +#: src/stored/autochanger.c:208 +msgid "3992 Missing Changer command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:460 +#: src/stored/autochanger.c:218 #, c-format -msgid "Disconnecting from Director %s:%d\n" +msgid "3301 Issuing autochanger \"loaded drive %d\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:463 +#: src/stored/autochanger.c:227 #, c-format -msgid "Disconnecting from Client %s:%d\n" +msgid "3302 Autochanger \"loaded drive %d\", result is Slot %d.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:466 +#: src/stored/autochanger.c:231 #, c-format -msgid "Disconnecting from Storage %s:%d\n" -msgstr "" - -#: src/tray-monitor/tray-monitor.c:502 src/tray-monitor/tray-monitor.c:512 -msgid "Bacula Tray Monitor" +msgid "3302 Autochanger \"loaded drive %d\", result: nothing loaded.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:503 src/tray-monitor/tray-monitor.c:513 -msgid "" -"Copyright (C) 2004-2005 Kern Sibbald\n" -"Written by Nicolas Boichat\n" +#: src/stored/autochanger.c:238 +#, c-format +msgid "3991 Bad autochanger \"loaded drive %d\" command: ERR=%s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:505 src/tray-monitor/tray-monitor.c:515 -msgid "Version:" +#: src/stored/autochanger.c:297 src/stored/autochanger.c:380 +#, c-format +msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:583 +#: src/stored/autochanger.c:310 src/stored/autochanger.c:401 #, c-format -msgid "Error, currentitem is not a Client or a Storage..\n" +msgid "3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:656 +#: src/stored/autochanger.c:369 #, c-format -msgid "" -"Current job: %s\n" -"Last job: %s" +msgid "Volume %s is in use by device %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:668 +#: src/stored/autochanger.c:439 #, c-format -msgid " (%d errors)" +msgid "3993 Device %s not an autochanger device.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:671 +#: src/stored/autochanger.c:464 #, c-format -msgid " (%d error)" +msgid "3306 Issuing autochanger \"%s\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:708 -msgid "No current job." +#: src/stored/autochanger.c:467 +msgid "3996 Open bpipe failed.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:711 -msgid "No last job." +#: src/stored/autochanger.c:494 +#, c-format +msgid "Autochanger error: ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:719 -msgid "Job status: Created" -msgstr "" - -#: src/tray-monitor/tray-monitor.c:724 -msgid "Job status: Running" +#: src/stored/bcopy.c:58 +#, c-format +msgid "" +"Copyright (C) 2002-2005 Kern Sibbald.\n" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bcopy [-d debug_level] \n" +" -b bootstrap specify a bootstrap file\n" +" -c specify configuration file\n" +" -d set debug level to nn\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/tray-monitor/tray-monitor.c:728 -msgid "Job status: Blocked" +#: src/stored/bcopy.c:137 src/stored/bextract.c:177 src/stored/bscan.c:221 +msgid "Wrong number of arguments: \n" msgstr "" -#: src/tray-monitor/tray-monitor.c:733 -msgid "Job status: Terminated" +#: src/stored/bcopy.c:172 src/stored/btape.c:333 src/stored/device.c:266 +#, c-format +msgid "dev open failed: %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:738 -msgid "Job status: Terminated in error" +#: src/stored/bcopy.c:185 +msgid "Write of last block failed.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:744 -msgid "Job status: Error" +#: src/stored/bcopy.c:188 +#, c-format +msgid "%u Jobs copied. %u records copied.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:748 -msgid "Job status: Fatal error" +#: src/stored/bcopy.c:205 src/stored/bscan.c:390 +#, c-format +msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:753 -msgid "Job status: Verify differences" +#: src/stored/bcopy.c:220 +msgid "Volume is prelabeled. This volume cannot be copied.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:758 -msgid "Job status: Canceled" +#: src/stored/bcopy.c:223 +msgid "Volume label not copied.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:763 -msgid "Job status: Waiting on File daemon" +#: src/stored/bcopy.c:235 src/stored/bcopy.c:242 src/stored/bcopy.c:265 +#: src/stored/btape.c:2342 +#, c-format +msgid "Cannot fixup device error. %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:768 -msgid "Job status: Waiting on the Storage daemon" +#: src/stored/bcopy.c:247 +msgid "EOM label not copied.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:773 -msgid "Job status: Waiting for new media" +#: src/stored/bcopy.c:250 +msgid "EOT label not copied.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:778 -msgid "Job status: Waiting for Mount" +#: src/stored/bcopy.c:290 src/stored/bextract.c:479 src/stored/bls.c:443 +#: src/stored/bscan.c:1234 src/stored/btape.c:2690 +#, c-format +msgid "Mount Volume \"%s\" on device %s and press return when ready: " msgstr "" -#: src/tray-monitor/tray-monitor.c:783 -msgid "Job status: Waiting for storage resource" +#: src/stored/bextract.c:70 +#, c-format +msgid "" +"Copyright (C) 2000-2005 Kern Sibbald.\n" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bextract \n" +" -b specify a bootstrap file\n" +" -c specify a configuration file\n" +" -d set debug level to nn\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/tray-monitor/tray-monitor.c:788 -msgid "Job status: Waiting for job resource" +#: src/stored/bextract.c:127 src/stored/bls.c:128 +#, c-format +msgid "Could not open exclude file: %s, ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:793 -msgid "Job status: Waiting for Client resource" +#: src/stored/bextract.c:142 src/stored/bls.c:142 +#, c-format +msgid "Could not open include file: %s, ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:798 -msgid "Job status: Waiting for maximum jobs" +#: src/stored/bextract.c:198 +#, c-format +msgid "%d Program Name and/or Program Data Stream records ignored.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:803 -msgid "Job status: Waiting for start time" +#: src/stored/bextract.c:202 +#, c-format +msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:808 -msgid "Job status: Waiting for higher priority jobs to finish" +#: src/stored/bextract.c:226 +#, c-format +msgid "Cannot stat %s. It must exist. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:813 +#: src/stored/bextract.c:230 #, c-format -msgid "Unknown job status %c." +msgid "%s must be a directory.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:814 +#: src/stored/bextract.c:251 #, c-format -msgid "Job status: Unknown(%c)" +msgid "%u files restored.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:821 -#, c-format -msgid "Bad scan : '%s' %d\n" +#: src/stored/bextract.c:278 src/stored/bextract.c:450 +msgid "Logic error output file should be open but is not.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:859 -#, c-format -msgid "Connecting to Director %s:%d" +#: src/stored/bextract.c:285 src/stored/bls.c:364 src/stored/bscan.c:647 +msgid "Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:865 +#: src/stored/bextract.c:347 #, c-format -msgid "Connecting to Client %s:%d\n" +msgid "Seek error on %s: %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:866 +#: src/stored/bextract.c:400 #, c-format -msgid "Connecting to Client %s:%d" +msgid "Uncompression error. ERR=%d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:867 src/dird/fd_cmds.c:73 -msgid "File daemon" +#: src/stored/bextract.c:408 +msgid "===Write error===\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:872 -#, c-format -msgid "Connecting to Storage %s:%d\n" +#: src/stored/bextract.c:441 +msgid "Got Program Name or Data Stream. Ignored.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:873 +#: src/stored/block.c:79 #, c-format -msgid "Connecting to Storage %s:%d" +msgid "" +"Dump block %s %x: size=%d BlkNum=%d\n" +" Hdrcksum=%x cksum=%x\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:874 src/filed/job.c:1158 -#: src/dird/msgchan.c:78 -msgid "Storage daemon" +#: src/stored/block.c:92 +#, c-format +msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d p=%x\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:878 src/tray-monitor/tray-monitor.c:916 +#: src/stored/block.c:148 #, c-format -msgid "Error, currentitem is not a Client, a Storage or a Director..\n" +msgid "%d block read errors not printed.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:884 -msgid "Cannot connect to daemon.\n" +#: src/stored/block.c:236 src/stored/block.c:252 src/stored/block.c:262 +#, c-format +msgid "" +"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " +"discarded.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:885 -msgid "Cannot connect to daemon." +#: src/stored/block.c:276 +#, 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/tray-monitor/tray-monitor.c:897 +#: src/stored/block.c:302 #, c-format -msgid "Authentication error : %s" +msgid "" +"Volume data error at %u:%u!\n" +"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:904 -msgid "Opened connection with Director daemon.\n" +#: src/stored/block.c:410 +msgid "Cannot write block. Device at EOM.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:905 -msgid "Opened connection with Director daemon." +#: src/stored/block.c:415 +msgid "Attempt to write on read-only Volume.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:908 -msgid "Opened connection with File daemon.\n" +#: src/stored/block.c:467 +#, c-format +msgid "User defined maximum volume capacity %s exceeded on device %s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:909 -msgid "Opened connection with File daemon." +#: src/stored/block.c:482 +#, c-format +msgid "Unable to write EOF. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:912 -msgid "Opened connection with Storage daemon.\n" +#: src/stored/block.c:508 src/stored/block.c:519 +msgid "Write block header zeroed.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:913 -msgid "Opened connection with Storage daemon." +#: src/stored/block.c:537 +#, c-format +msgid "Write error at %u:%u on device %s. ERR=%s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:948 -msgid "<< Error: BNET_PROMPT signal received. >>\n" +#: src/stored/block.c:544 +#, c-format +msgid "End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:953 src/wx-console/console_thread.cpp:465 -msgid "<< Heartbeat signal received, answered. >>\n" +#: src/stored/block.c:619 src/stored/block.c:625 +#, c-format +msgid "Backspace file at EOT failed. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:957 +#: src/stored/block.c:632 #, c-format -msgid "<< Unexpected signal received : %s >>\n" +msgid "Backspace record at EOT failed. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:962 -msgid "\n" +#: src/stored/block.c:649 +#, c-format +msgid "Re-read last block at EOT failed. ERR=%s" msgstr "" -#: src/tray-monitor/tray-monitor.c:966 -msgid "Error : BNET_HARDEOF or BNET_ERROR" +#: src/stored/block.c:653 +msgid "Re-read of last block succeeded.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:972 -msgid "\n" +#: src/stored/block.c:656 +#, c-format +msgid "Re-read of last block failed. Last block=%u Current block=%u.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:976 -msgid "Error : Connection closed." +#: src/stored/block.c:685 +#, c-format +msgid "" +"Error writing final EOF to tape. This Volume may not be readable.\n" +"%s" msgstr "" -#: src/tray-monitor/authenticate.c:78 +#: src/stored/block.c:795 src/stored/dvd.c:689 +#, c-format msgid "" -"Director authorization problem.\n" -"Most likely the passwords do not agree.\n" -"Please see http://www.bacula.org/html-manual/faq.html#AuthorizationErrors " -"for help.\n" +"Error while writing, current part number is less than the total number of " +"parts (%d/%d, device=%s)\n" msgstr "" -#: src/tray-monitor/authenticate.c:121 src/dird/authenticate.c:67 -#: src/dird/authenticate.c:68 +#: src/stored/block.c:803 src/stored/block.c:913 #, c-format -msgid "Error sending Hello to Storage daemon. ERR=%s\n" +msgid "Unable to open device next part %s: ERR=%s\n" msgstr "" -#: src/tray-monitor/authenticate.c:127 +#: src/stored/block.c:821 +#, c-format msgid "" -"Director and Storage daemon passwords or names not the same.\n" -"Please see http://www.bacula.org/html-manual/faq.html#AuthorizationErrors " -"for help.\n" +"End of Volume \"%s\" at %u:%u on device %s (part_size=%s, free_space=%s, " +"free_space_errno=%d, errmsg=%s).\n" msgstr "" -#: src/tray-monitor/authenticate.c:134 src/dird/authenticate.c:132 +#: src/stored/block.c:834 #, c-format -msgid "bdird\n" +" -b specify a bootstrap file\n" +" -c specify a config file\n" +" -d specify debug level\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/filed/restore.c:214 src/filed/restore.c:493 -msgid "Logic error: output file should be open\n" +#: src/stored/bls.c:189 +msgid "No archive name specified\n" msgstr "" -#: src/filed/restore.c:231 src/filed/restore.c:509 src/filed/restore.c:546 +#: src/stored/bls.c:224 #, c-format -msgid "Missing cryptographic signature for %s\n" +msgid "" +"\n" +"Warning, this Volume is a continuation of Volume %s\n" msgstr "" -#: src/filed/restore.c:245 src/filed/restore.c:515 -msgid "Logic error: output file should not be open\n" +#: src/stored/bls.c:267 +#, c-format +msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/filed/restore.c:326 -msgid "Missing private key required to decrypt encrypted backup data." +#: src/stored/bls.c:278 +#, c-format +msgid "Mounted Volume \"%s\".\n" msgstr "" -#: src/filed/restore.c:329 -msgid "Decrypt of the session key failed." +#: src/stored/bls.c:280 +#, c-format +msgid "Got EOF at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/filed/restore.c:333 +#: src/stored/bls.c:304 #, c-format -msgid "An error occured while decoding encrypted session data stream: %s" +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/filed/restore.c:345 +#: src/stored/bls.c:313 #, c-format -msgid "Failed to initialize decryption context for %s\n" +msgid "Block: %d size=%d\n" msgstr "" -#: src/filed/restore.c:409 +#: src/stored/bls.c:380 #, c-format -msgid " Cannot open resource fork for %s.\n" +msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" msgstr "" -#: src/filed/restore.c:432 -#, c-format -msgid " Invalid length of Finder Info (got %d, not 32)\n" +#: src/stored/bls.c:397 src/stored/read_record.c:322 +msgid "Fresh Volume Label" msgstr "" -#: src/filed/restore.c:436 -#, c-format -msgid " Could not set Finder Info on %s\n" +#: src/stored/bls.c:400 src/stored/read_record.c:325 +msgid "Volume Label" msgstr "" -#: src/filed/restore.c:448 -#, c-format -msgid "Can't restore ACL of %s\n" +#: src/stored/bls.c:404 src/stored/label.c:969 +msgid "Begin Job Session" msgstr "" -#: src/filed/restore.c:460 -#, c-format -msgid "Can't restore default ACL of %s\n" +#: src/stored/bls.c:408 src/stored/label.c:972 +msgid "End Job Session" +msgstr "" + +#: src/stored/bls.c:411 +msgid "End of Medium" +msgstr "" + +#: src/stored/bls.c:414 src/stored/label.c:981 +msgid "Unknown" msgstr "" -#: src/filed/restore.c:470 +#: src/stored/bls.c:420 src/stored/read_record.c:343 #, c-format -msgid "Failed to decode message signature for %s\n" +msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" msgstr "" -#: src/filed/restore.c:591 +#: src/stored/bscan.c:109 #, c-format msgid "" -"%d non-supported data streams and %d non-supported attrib streams ignored.\n" +"Copyright (C) 2001-2005 Kern Sibbald.\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 nn\n" +" -m update media info in database\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\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/filed/restore.c:595 +#: src/stored/bscan.c:234 src/stored/stored.c:265 #, c-format -msgid "%d non-supported resource fork streams ignored.\n" +msgid "No Storage resource defined in %s. Cannot continue.\n" msgstr "" -#: src/filed/restore.c:598 +#: src/stored/bscan.c:242 src/stored/stored.c:296 #, c-format -msgid "%d non-supported Finder Info streams ignored.\n" +msgid "No Working Directory defined in %s. Cannot continue.\n" msgstr "" -#: src/filed/restore.c:601 +#: src/stored/bscan.c:250 #, c-format -msgid "%d non-supported acl streams ignored.\n" +msgid "Working Directory: %s not found. Cannot continue.\n" msgstr "" -#: src/filed/restore.c:613 -msgid "None" +#: src/stored/bscan.c:254 +#, c-format +msgid "Working Directory: %s is not a directory. Cannot continue.\n" msgstr "" -#: src/filed/restore.c:617 -msgid "Zlib errno" +#: src/stored/bscan.c:268 src/stored/bscan.c:341 +#, c-format +msgid "First Volume Size = %sn" msgstr "" -#: src/filed/restore.c:619 -msgid "Zlib stream error" +#: src/stored/bscan.c:274 +msgid "Could not init Bacula database\n" msgstr "" -#: src/filed/restore.c:621 -msgid "Zlib data error" +#: src/stored/bscan.c:281 +#, c-format +msgid "Using Database: %s, User: %s\n" msgstr "" -#: src/filed/restore.c:623 -msgid "Zlib memory error" +#: src/stored/bscan.c:315 +#, c-format +msgid "Create JobMedia for Job %s\n" msgstr "" -#: src/filed/restore.c:625 -msgid "Zlib buffer error" +#: src/stored/bscan.c:326 +#, c-format +msgid "Could not create JobMedia record for Volume=%s Job=%s\n" msgstr "" -#: src/filed/restore.c:627 -msgid "Zlib version error" +#: src/stored/bscan.c:382 +#, c-format +msgid "done: %d%%\n" msgstr "" -#: src/filed/restore.c:662 -#, c-format -msgid "Signature validation failed for %s: \n" +#: src/stored/bscan.c:406 +msgid "Volume is prelabeled. This tape cannot be scanned.\n" msgstr "" -#: src/filed/restore.c:669 src/filed/restore.c:684 +#: src/stored/bscan.c:418 #, c-format -msgid "Signature validation failed for %s: %s\n" +msgid "Pool record for %s found in DB.\n" msgstr "" -#: src/filed/restore.c:754 +#: src/stored/bscan.c:422 #, c-format -msgid "Uncompression error on file %s. ERR=%s\n" +msgid "VOL_LABEL: Pool record not found for Pool: %s\n" msgstr "" -#: src/filed/restore.c:785 -msgid "Decryption error\n" +#: src/stored/bscan.c:428 +#, c-format +msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" msgstr "" -#: src/filed/restore.c:804 src/filed/restore.c:849 +#: src/stored/bscan.c:432 #, c-format -msgid "Write error in Win32 Block Decomposition on %s: %s\n" +msgid "Pool type \"%s\" is OK.\n" msgstr "" -#: src/filed/restore.c:843 +#: src/stored/bscan.c:442 #, c-format -msgid "Decryption error for %s\n" +msgid "Media record for %s found in DB.\n" msgstr "" -#: src/filed/verify.c:45 +#: src/stored/bscan.c:449 #, c-format -msgid "Cannot malloc %d network read buffer\n" +msgid "VOL_LABEL: Media record not found for Volume: %s\n" msgstr "" -#: src/filed/verify.c:113 src/filed/backup.c:242 +#: src/stored/bscan.c:456 #, c-format -msgid " Could not access %s: ERR=%s\n" +msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" msgstr "" -#: src/filed/verify.c:120 src/filed/backup.c:249 +#: src/stored/bscan.c:460 #, c-format -msgid " Could not follow link %s: ERR=%s\n" +msgid "Media type \"%s\" is OK.\n" msgstr "" -#: src/filed/verify.c:127 src/filed/backup.c:256 +#: src/stored/bscan.c:469 #, c-format -msgid " Could not stat %s: ERR=%s\n" +msgid "VOL_LABEL: OK for Volume: %s\n" msgstr "" -#: src/filed/verify.c:133 src/filed/backup.c:263 +#: src/stored/bscan.c:476 #, c-format -msgid " Unchanged file skipped: %s\n" +msgid "%d \"errors\" ignored before first Start of Session record.\n" msgstr "" -#: src/filed/verify.c:136 +#: src/stored/bscan.c:487 #, c-format -msgid " Archive file skipped: %s\n" +msgid "SOS_LABEL: Found Job record for JobId: %d\n" msgstr "" -#: src/filed/verify.c:139 +#: src/stored/bscan.c:492 #, c-format -msgid " Recursion turned off. Directory skipped: %s\n" +msgid "SOS_LABEL: Job record not found for JobId: %d\n" msgstr "" -#: src/filed/verify.c:142 +#: src/stored/bscan.c:532 #, c-format -msgid " File system change prohibited. Directory skipped: %s\n" +msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/filed/verify.c:147 src/filed/backup.c:270 +#: src/stored/bscan.c:538 #, c-format -msgid " Could not open directory %s: ERR=%s\n" +msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/filed/verify.c:152 +#: src/stored/bscan.c:544 #, c-format -msgid " Unknown file type %d: %s\n" +msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/filed/verify.c:195 src/filed/verify_vol.c:201 +#: src/stored/bscan.c:562 src/stored/bscan.c:1013 #, c-format -msgid "Network error in send to Director: ERR=%s\n" +msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" msgstr "" -#: src/filed/verify.c:228 src/filed/backup.c:306 +#: src/stored/bscan.c:606 #, c-format -msgid "%s digest initialization failed\n" +msgid "Could not update job record. ERR=%s\n" msgstr "" -#: src/filed/verify.c:284 src/filed/backup.c:368 +#: src/stored/bscan.c:617 #, c-format -msgid " Cannot open %s: ERR=%s.\n" +msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" msgstr "" -#: src/filed/verify.c:298 src/filed/backup.c:417 +#: src/stored/bscan.c:629 #, c-format -msgid " Cannot open resource fork for %s: ERR=%s.\n" +msgid "Could not find Job for SessId=%d SessTime=%d record.\n" msgstr "" -#: src/filed/verify.c:334 +#: src/stored/bscan.c:665 #, c-format -msgid "Error reading file %s: ERR=%s\n" +msgid "%s file records. At file:blk=%s:%s bytes=%s\n" msgstr "" -#: src/filed/backup.c:70 -msgid "Cannot set buffer size FD->SD.\n" +#: src/stored/bscan.c:708 +#, c-format +msgid "Got MD5 record: %s\n" msgstr "" -#: src/filed/backup.c:95 src/filed/backup.c:107 -msgid "An error occured while encrypting the stream.\n" +#: src/stored/bscan.c:717 +#, c-format +msgid "Got SHA1 record: %s\n" msgstr "" -#: src/filed/backup.c:211 +#: src/stored/bscan.c:725 #, c-format -msgid " Recursion turned off. Will not descend into %s\n" +msgid "Got Prog Names Stream: %s\n" msgstr "" -#: src/filed/backup.c:218 -#, c-format -msgid " Filesystem change prohibited. Will not descend into %s\n" +#: src/stored/bscan.c:731 +msgid "Got Prog Data Stream record.\n" msgstr "" -#: src/filed/backup.c:224 +#: src/stored/bscan.c:735 #, c-format -msgid " Disallowed filesystem. Will not descend into %s\n" +msgid "Unknown stream type!!! stream=%d data=%s\n" msgstr "" -#: src/filed/backup.c:266 +#: src/stored/bscan.c:799 #, c-format -msgid " Archive file not saved: %s\n" +msgid "Could not create File Attributes record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:276 +#: src/stored/bscan.c:805 #, c-format -msgid " Unknown file type %d; not saved: %s\n" +msgid "Created File record: %s\n" msgstr "" -#: src/filed/backup.c:320 +#: src/stored/bscan.c:842 #, c-format -msgid "%s signature digest initialization failed\n" +msgid "Could not create media record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:338 +#: src/stored/bscan.c:846 src/stored/bscan.c:867 #, c-format -msgid "Python reader program \"%s\" not found.\n" +msgid "Could not update media record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:471 -msgid "Failed to allocate memory for stream signature.\n" +#: src/stored/bscan.c:850 +#, c-format +msgid "Created Media record for Volume: %s\n" msgstr "" -#: src/filed/backup.c:476 src/filed/backup.c:482 src/filed/backup.c:495 -msgid "An error occured while signing the stream.\n" +#: src/stored/bscan.c:871 +#, c-format +msgid "Updated Media record at end of Volume: %s\n" msgstr "" -#: src/filed/backup.c:596 -msgid "Failed to initialize encryption context\n" +#: src/stored/bscan.c:888 +#, c-format +msgid "Could not create pool record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:617 src/filed/backup.c:728 src/filed/backup.c:757 -#: src/filed/backup.c:778 src/filed/backup.c:823 src/filed/backup.c:836 -#: src/filed/backup.c:844 src/filed/backup.c:889 src/filed/backup.c:923 +#: src/stored/bscan.c:892 #, c-format -msgid "Network send error to SD. ERR=%s\n" +msgid "Created Pool record for Pool: %s\n" msgstr "" -#: src/filed/backup.c:692 +#: src/stored/bscan.c:912 #, c-format -msgid "Compression error: %d\n" +msgid "Created Client record for Client: %s\n" msgstr "" -#: src/filed/backup.c:716 -msgid "Encryption error\n" +#: src/stored/bscan.c:929 +#, c-format +msgid "Fileset \"%s\" already exists.\n" msgstr "" -#: src/filed/backup.c:744 -msgid "Encryption padding error\n" +#: src/stored/bscan.c:933 +#, c-format +msgid "Could not create FileSet record \"%s\". ERR=%s\n" msgstr "" -#: src/filed/backup.c:769 +#: src/stored/bscan.c:938 #, c-format -msgid "Read error on file %s. ERR=%s\n" +msgid "Created FileSet record \"%s\"\n" msgstr "" -#: src/filed/backup.c:772 -msgid "Too many errors.\n" +#: src/stored/bscan.c:985 +#, c-format +msgid "Could not create JobId record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:814 +#: src/stored/bscan.c:991 #, c-format -msgid "Error reading ACL of %s\n" +msgid "Could not update job start record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:868 -msgid "Invalid file flags, no supported data stream type.\n" +#: src/stored/bscan.c:994 +#, c-format +msgid "Created new JobId=%u record for original JobId=%u\n" msgstr "" -#: src/filed/job.c:328 +#: src/stored/bscan.c:1044 #, c-format -msgid "2901 Job %s not found.\n" +msgid "Could not update JobId=%u record. ERR=%s\n" msgstr "" -#: src/filed/job.c:344 +#: src/stored/bscan.c:1049 #, c-format -msgid "2001 Job %s marked to be canceled.\n" +msgid "Updated Job termination record for JobId=%u TermStat=%c\n" msgstr "" -#: src/filed/job.c:347 -msgid "2902 Error scanning cancel command.\n" +#: src/stored/bscan.c:1071 +#, c-format +msgid "Job Termination code: %d" msgstr "" -#: src/filed/job.c:366 +#: src/stored/bscan.c:1076 #, c-format -msgid "2991 Bad setdebug command: %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/filed/job.c:382 +#: src/stored/bscan.c:1140 #, c-format -msgid "Bad estimate command: %s" +msgid "Could not create JobMedia record. ERR=%s\n" msgstr "" -#: src/filed/job.c:383 -msgid "2992 Bad estimate command.\n" +#: src/stored/bscan.c:1144 +#, c-format +msgid "Created JobMedia record JobId %d, MediaId %d\n" msgstr "" -#: src/filed/job.c:406 +#: src/stored/bscan.c:1160 #, c-format -msgid "Bad Job Command: %s" +msgid "Could not find SessId=%d SessTime=%d for MD5/SHA1 record.\n" msgstr "" -#: src/filed/job.c:426 +#: src/stored/bscan.c:1174 #, c-format -msgid "Bad RunBeforeJob command: %s\n" +msgid "Could not add MD5/SHA1 to File record. ERR=%s\n" msgstr "" -#: src/filed/job.c:427 src/filed/job.c:440 -msgid "2905 Bad RunBeforeJob command.\n" +#: src/stored/bscan.c:1179 +msgid "Updated MD5/SHA1 record\n" msgstr "" -#: src/filed/job.c:453 +#: src/stored/btape.c:157 src/stored/stored.c:107 #, c-format -msgid "Bad RunAfter command: %s\n" +msgid "Tape block size (%d) not multiple of system size (%d)\n" msgstr "" -#: src/filed/job.c:454 -msgid "2905 Bad RunAfterJob command.\n" +#: src/stored/btape.c:161 src/stored/stored.c:111 +#, c-format +msgid "Tape block size (%d) is not a power of 2\n" msgstr "" -#: src/filed/job.c:480 +#: src/stored/btape.c:164 #, c-format -msgid "%s could not execute. ERR=%s\n" +msgid "" +"\n" +"\n" +"!!!! Warning large disk addressing disabled. off_t=%d should be 8 or " +"more !!!!!\n" +"\n" +"\n" msgstr "" -#: src/filed/job.c:489 +#: src/stored/btape.c:171 #, c-format -msgid "%s: %s\n" +msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" msgstr "" -#: src/filed/job.c:494 -#, c-format -msgid "%s returned non-zero status=%d. ERR=%s\n" +#: src/stored/btape.c:180 +msgid "64 bit printf/scanf problem. i=%d x64=%" msgstr "" -#: src/filed/job.c:570 src/dird/fd_cmds.c:320 -#, c-format -msgid "Cannot run program: %s. ERR=%s\n" +#: src/stored/btape.c:180 +msgid " y64=%" msgstr "" -#: src/filed/job.c:579 +#: src/stored/btape.c:184 #, c-format -msgid "Error running program: %s. RtnStat=%d ERR=%s\n" +msgid "Tape block granularity is %d bytes.\n" msgstr "" -#: src/filed/job.c:589 -#, c-format -msgid "Cannot open FileSet input file: %s. ERR=%s\n" +#: src/stored/btape.c:251 +msgid "No archive name specified.\n" msgstr "" -#: src/filed/job.c:683 -#, c-format -msgid "REGEX %s compile error. ERR=%s\n" +#: src/stored/btape.c:255 +msgid "Improper number of arguments specified.\n" msgstr "" -#: src/filed/job.c:737 +#: src/stored/btape.c:338 #, c-format -msgid "Invalid FileSet command: %s\n" +msgid "open device %s: OK\n" msgstr "" -#: src/filed/job.c:1090 -#, c-format -msgid "DIR and FD clocks differ by %d seconds, FD automatically adjusting.\n" +#: src/stored/btape.c:359 +msgid "Enter Volume Name: " msgstr "" -#: src/filed/job.c:1098 +#: src/stored/btape.c:366 #, c-format -msgid "Unknown backup level: %s\n" +msgid "Device open failed. ERR=%s\n" msgstr "" -#: src/filed/job.c:1110 +#: src/stored/btape.c:371 #, c-format -msgid "Bad level command: %s\n" +msgid "Wrote Volume label for volume \"%s\".\n" msgstr "" -#: src/filed/job.c:1131 -#, c-format -msgid "Bad session command: %s" +#: src/stored/btape.c:385 +msgid "Volume has no label.\n" msgstr "" -#: src/filed/job.c:1152 -#, c-format -msgid "Bad storage command: %s" +#: src/stored/btape.c:388 +msgid "Volume label read correctly.\n" msgstr "" -#: src/filed/job.c:1161 +#: src/stored/btape.c:391 #, c-format -msgid "Failed to connect to Storage daemon: %s:%d\n" +msgid "I/O error on device: ERR=%s" msgstr "" -#: src/filed/job.c:1173 -msgid "Failed to authenticate Storage daemon.\n" +#: src/stored/btape.c:394 +msgid "Volume name error\n" msgstr "" -#: src/filed/job.c:1199 -msgid "Cannot contact Storage daemon\n" +#: src/stored/btape.c:397 +#, c-format +msgid "Error creating label. ERR=%s" msgstr "" -#: src/filed/job.c:1217 -#, c-format -msgid "Bad response to append open: %s\n" +#: src/stored/btape.c:400 +msgid "Volume version error.\n" msgstr "" -#: src/filed/job.c:1222 -msgid "Bad response from stored to open command\n" +#: src/stored/btape.c:403 +msgid "Bad Volume label type.\n" msgstr "" -#: src/filed/job.c:1249 -#, c-format -msgid "Generate VSS snapshots. Driver=\"%s\", Drive(s)=\"%s\"\n" +#: src/stored/btape.c:406 +msgid "Unknown error.\n" msgstr "" -#: src/filed/job.c:1252 +#: src/stored/btape.c:424 #, c-format -msgid "Generate VSS snapshots failed. ERR=%s\n" +msgid "Bad status from load. ERR=%s\n" msgstr "" -#: src/filed/job.c:1259 +#: src/stored/btape.c:426 #, c-format -msgid "Generate VSS snapshot of drive \"%c:\\\" failed\n" +msgid "Loaded %s\n" msgstr "" -#: src/filed/job.c:1268 +#: src/stored/btape.c:435 src/stored/btape.c:775 src/stored/btape.c:817 +#: src/stored/btape.c:887 src/stored/btape.c:929 src/stored/btape.c:1198 #, c-format -msgid "VSS Writer: %s\n" +msgid "Bad status from rewind. ERR=%s\n" msgstr "" -#: src/filed/job.c:1272 -msgid "No drive letters found for generating VSS snapshots.\n" +#: src/stored/btape.c:438 src/stored/btape.c:1206 +#, c-format +msgid "Rewound %s\n" msgstr "" -#: src/filed/job.c:1275 -msgid "VSS was not initialized properly. VSS support is disabled.\n" +#: src/stored/btape.c:465 src/stored/btape.c:1210 +#, c-format +msgid "Bad status from weof %d. ERR=%s\n" msgstr "" -#: src/filed/job.c:1324 -msgid "Append Close with SD failed.\n" +#: src/stored/btape.c:469 +#, c-format +msgid "Wrote 1 EOF to %s\n" msgstr "" -#: src/filed/job.c:1328 +#: src/stored/btape.c:472 #, c-format -msgid "Bad status %d returned from Storage Daemon.\n" +msgid "Wrote %d EOFs to %s\n" msgstr "" -#: src/filed/job.c:1361 -#, c-format -msgid "2994 Bad verify command: %s\n" +#: src/stored/btape.c:490 +msgid "Moved to end of medium.\n" msgstr "" -#: src/filed/job.c:1376 src/filed/job.c:1415 +#: src/stored/btape.c:517 #, c-format -msgid "2994 Bad verify level: %s\n" +msgid "Bad status from bsf. ERR=%s\n" msgstr "" -#: src/filed/job.c:1455 +#: src/stored/btape.c:519 #, c-format -msgid "Bad replace command. CMD=%s\n" +msgid "Backspaced %d file%s.\n" msgstr "" -#: src/filed/job.c:1532 -msgid "Improper calling sequence.\n" +#: src/stored/btape.c:536 +#, c-format +msgid "Bad status from bsr. ERR=%s\n" msgstr "" -#: src/filed/job.c:1552 +#: src/stored/btape.c:538 #, c-format -msgid "Bad response to SD read open: %s\n" +msgid "Backspaced %d record%s.\n" msgstr "" -#: src/filed/job.c:1557 -msgid "Bad response from stored to read open command\n" +#: src/stored/btape.c:548 src/stored/status.c:227 +#, c-format +msgid "Configured device capabilities:\n" msgstr "" -#: src/filed/job.c:1623 +#: src/stored/btape.c:566 #, c-format -msgid "Comm error with SD. bad response to %s. ERR=%s\n" +msgid "Device status:\n" msgstr "" -#: src/filed/job.c:1626 +#: src/stored/btape.c:580 src/stored/status.c:259 #, c-format -msgid "Bad response to %s command. Wanted %s, got %s\n" +msgid "Device parameters:\n" msgstr "" -#: src/filed/job.c:1647 src/dird/fd_cmds.c:441 +#: src/stored/btape.c:585 #, c-format -msgid "Could not open bootstrap file %s: ERR=%s\n" +msgid "Status:\n" msgstr "" -#: src/filed/status.c:67 -#, c-format -msgid "%s Version: %s (%s) %s %s %s %s\n" +#: src/stored/btape.c:600 +msgid "" +"Test writting 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/filed/status.c:71 -#, c-format -msgid "Daemon started %s, %d Job%s run since started.\n" +#: src/stored/btape.c:608 src/stored/btape.c:1815 +msgid "Command aborted.\n" msgstr "" -#: src/filed/status.c:127 +#: src/stored/btape.c:624 #, c-format -msgid " Sizeof: off_t=%d size_t=%d debug=%d trace=%d\n" +msgid "Block %d i=%d\n" msgstr "" -#: src/filed/status.c:138 -msgid "Running Jobs:\n" +#: src/stored/btape.c:650 +msgid "Skipping read backwards test because BSR turned off.\n" msgstr "" -#: src/filed/status.c:149 -#, c-format -msgid "Director connected at: %s\n" +#: src/stored/btape.c:654 +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/filed/status.c:151 -#, c-format -msgid "JobId %d Job %s is running.\n" +#: src/stored/btape.c:667 src/stored/btape.c:678 src/stored/btape.c:689 +#: src/stored/btape.c:787 src/stored/btape.c:803 src/stored/btape.c:899 +#: src/stored/btape.c:915 src/stored/btape.c:1524 src/stored/btape.c:2407 +msgid "Error writing record to block.\n" msgstr "" -#: src/filed/status.c:154 +#: src/stored/btape.c:671 src/stored/btape.c:682 src/stored/btape.c:693 +#: src/stored/btape.c:791 src/stored/btape.c:807 src/stored/btape.c:903 +#: src/stored/btape.c:919 src/stored/btape.c:1528 src/stored/btape.c:2411 +msgid "Error writing block to device.\n" +msgstr "" + +#: src/stored/btape.c:674 #, c-format -msgid " %s%s Job started: %s\n" +msgid "Wrote first record of %d bytes.\n" msgstr "" -#: src/filed/status.c:171 +#: src/stored/btape.c:685 #, c-format -msgid " Files Examined=%s\n" +msgid "Wrote second record of %d bytes.\n" msgstr "" -#: src/filed/status.c:176 +#: src/stored/btape.c:696 #, c-format -msgid " Processing file: %s\n" +msgid "Wrote third record of %d bytes.\n" msgstr "" -#: src/filed/status.c:187 -msgid " SDSocket closed.\n" +#: src/stored/btape.c:703 src/stored/btape.c:708 +#, c-format +msgid "Backspace file failed! ERR=%s\n" msgstr "" -#: src/filed/status.c:217 -msgid "Terminated Jobs:\n" +#: src/stored/btape.c:712 +msgid "Backspaced over EOF OK.\n" msgstr "" -#: src/filed/status.c:219 -msgid " JobId Level Files Bytes Status Finished Name \n" +#: src/stored/btape.c:714 +#, c-format +msgid "Backspace record failed! ERR=%s\n" msgstr "" -#: src/filed/status.c:324 -msgid "2900 Bad .status command, missing argument.\n" +#: src/stored/btape.c:717 +msgid "Backspace record OK.\n" msgstr "" -#: src/filed/status.c:348 -msgid "2900 Bad .status command, wrong argument.\n" +#: src/stored/btape.c:720 src/stored/btape.c:726 +#, c-format +msgid "Read block failed! ERR=%s\n" msgstr "" -#: src/filed/status.c:451 -msgid "Bacula Idle" +#: src/stored/btape.c:731 +msgid "Bad data in record. Test failed!\n" msgstr "" -#: src/filed/status.c:462 -msgid "Bacula Running" +#: src/stored/btape.c:735 +msgid "" +"\n" +"Block re-read correct. Test succeeded!\n" msgstr "" -#: src/filed/status.c:476 -msgid "Last Job Canceled" -msgstr "" - -#: src/filed/status.c:480 -msgid "Last Job Failed" +#: src/stored/btape.c:736 +msgid "" +"=== End Write, backup, and re-read test ===\n" +"\n" msgstr "" -#: src/filed/status.c:484 -msgid "Last Job had Warnings" +#: src/stored/btape.c:743 +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/filed/filed.c:62 -#, c-format +#: src/stored/btape.c:767 msgid "" -"Copyright (C) 2000-2005 Kern Sibbald\n" "\n" -"Version: %s (%s)\n" +"=== Write, rewind, and re-read test ===\n" "\n" -"Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" -" -c use as configuration file\n" -" -dnn set debug level to nn\n" -" -f run in foreground (for debugging)\n" -" -g groupid\n" -" -i inetd request\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" +"I'm going to write 1000 records and an EOF\n" +"then write 1000 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/filed/filed.c:282 +#: src/stored/btape.c:795 src/stored/btape.c:811 src/stored/btape.c:907 +#: src/stored/btape.c:923 #, c-format -msgid "" -"No File daemon resource defined in %s\n" -"Without that I don't know who I am :-(\n" +msgid "Wrote 1000 blocks of %d bytes.\n" msgstr "" -#: src/filed/filed.c:287 -#, c-format -msgid "Only one Client resource permitted in %s\n" +#: src/stored/btape.c:820 src/stored/btape.c:932 +msgid "Rewind OK.\n" msgstr "" -#: src/filed/filed.c:310 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon in %s.\n" +#: src/stored/btape.c:827 src/stored/btape.c:981 +msgid "Got EOF on tape.\n" msgstr "" -#: src/filed/filed.c:326 src/dird/dird.c:824 src/dird/dird.c:864 +#: src/stored/btape.c:832 #, c-format -msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" +msgid "Read block %d failed! ERR=%s\n" msgstr "" -#: src/filed/filed.c:334 -msgid "PKI encryption/signing enabled but not compiled into Bacula.\n" +#: src/stored/btape.c:838 +#, c-format +msgid "Read record failed. Block %d! ERR=%s\n" msgstr "" -#: src/filed/filed.c:345 +#: src/stored/btape.c:844 src/stored/btape.c:1011 #, 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 "Bad data in record. Expected %d, got %d at byte %d. Test failed!\n" msgstr "" -#: src/filed/filed.c:357 src/filed/filed.c:388 src/filed/filed.c:429 -msgid "Failed to allocate a new keypair object.\n" +#: src/stored/btape.c:851 +msgid "1000 blocks re-read correctly.\n" msgstr "" -#: src/filed/filed.c:361 -#, c-format -msgid "Failed to load public certificate for File daemon \"%s\" in %s.\n" +#: src/stored/btape.c:854 src/stored/btape.c:1018 +msgid "" +"=== Test Succeeded. End Write, rewind, and re-read test ===\n" +"\n" msgstr "" -#: src/filed/filed.c:367 -#, c-format -msgid "Failed to load private key for File daemon \"%s\" in %s.\n" +#: src/stored/btape.c:879 +msgid "" +"\n" +"=== Write, rewind, and position test ===\n" +"\n" +"I'm going to write 1000 records and an EOF\n" +"then write 1000 records and an EOF, then rewind,\n" +"and position to a few blocks and verify that it is correct.\n" +"\n" +"This is an *essential* feature ...\n" +"\n" msgstr "" -#: src/filed/filed.c:397 src/filed/filed.c:438 +#: src/stored/btape.c:972 #, c-format -msgid "Failed to load private key from file %s for File daemon \"%s\" in %s.\n" +msgid "Reposition to file:block %d:%d\n" +msgstr "" + +#: src/stored/btape.c:974 +msgid "Reposition error.\n" msgstr "" -#: src/filed/filed.c:404 +#: src/stored/btape.c:987 #, c-format msgid "" -"Failed to load trusted signer certificate from file %s for File daemon \"%s" -"\" in %s.\n" +"Read block %d failed! file=%d blk=%d. ERR=%s\n" +"\n" msgstr "" -#: src/filed/filed.c:445 -#, c-format +#: src/stored/btape.c:989 msgid "" -"Failed to load master key certificate from file %s for File daemon \"%s\" in " -"%s.\n" +"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/filed/filed.c:461 +#: src/stored/btape.c:1005 #, c-format -msgid "No Director resource defined in %s\n" +msgid "Read record failed! ERR=%s\n" msgstr "" -#: src/filed/authenticate.c:45 +#: src/stored/btape.c:1016 #, c-format -msgid "I only authenticate directors, not %d\n" +msgid "Block %d re-read correctly.\n" msgstr "" -#: src/filed/authenticate.c:110 -#, c-format +#: src/stored/btape.c:1037 msgid "" -"Incorrect password given by Director at %s.\n" -"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +"\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/filed/authenticate.c:208 -msgid "" -"Authorization key rejected by Storage daemon.\n" -"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +#: src/stored/btape.c:1061 +msgid "Now moving to end of medium.\n" msgstr "" -#: src/filed/filed_conf.c:358 src/dird/dird_conf.c:1239 +#: src/stored/btape.c:1063 src/stored/btape.c:1293 #, c-format -msgid "Cannot find Client resource %s\n" +msgid "We should be in file 3. I am at file %d. %s\n" msgstr "" -#: src/filed/verify_vol.c:57 -msgid "Storage command not issued before Verify.\n" +#: src/stored/btape.c:1064 src/stored/btape.c:1082 src/stored/btape.c:1282 +#: src/stored/btape.c:1294 src/stored/btape.c:1307 src/stored/btape.c:1324 +msgid "This is correct!" msgstr "" -#: src/filed/verify_vol.c:137 -#, c-format -msgid "Error scanning record header: %s\n" +#: src/stored/btape.c:1064 src/stored/btape.c:1082 src/stored/btape.c:1282 +#: src/stored/btape.c:1294 src/stored/btape.c:1307 src/stored/btape.c:1324 +msgid "This is NOT correct!!!!" msgstr "" -#: src/dird/ua_tree.c:58 -msgid "change current directory" +#: src/stored/btape.c:1070 +msgid "" +"\n" +"Now the important part, I am going to attempt to append to the tape.\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:59 -msgid "count marked files in and below the cd" +#: src/stored/btape.c:1077 +msgid "" +"Done appending, there should be no I/O errors\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:60 src/dird/ua_tree.c:61 -msgid "long list current directory, wildcards allowed" +#: src/stored/btape.c:1078 +msgid "Doing Bacula scan of blocks:\n" msgstr "" -#: src/dird/ua_tree.c:62 -msgid "leave file selection mode" +#: src/stored/btape.c:1080 +msgid "End scanning the tape.\n" msgstr "" -#: src/dird/ua_tree.c:63 -msgid "estimate restore size" +#: src/stored/btape.c:1081 src/stored/btape.c:1306 +#, c-format +msgid "We should be in file 4. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_tree.c:64 -msgid "same as done command" +#: src/stored/btape.c:1106 +msgid "" +"\n" +"Autochanger enabled, but no name or no command device specified.\n" msgstr "" -#: src/dird/ua_tree.c:65 -msgid "find files, wildcards allowed" +#: src/stored/btape.c:1110 +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_tree.c:66 src/dird/ua_tree.c:75 -msgid "print help" +#: src/stored/btape.c:1113 +msgid "" +"\n" +"Do you wish to continue with the Autochanger test? (y/n): " msgstr "" -#: src/dird/ua_tree.c:67 -msgid "list current directory, wildcards allowed" +#: src/stored/btape.c:1120 +msgid "" +"\n" +"\n" +"=== Autochanger test ===\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:68 -msgid "list the marked files in and below the cd" +#: src/stored/btape.c:1129 +msgid "3301 Issuing autochanger \"loaded\" command.\n" msgstr "" -#: src/dird/ua_tree.c:69 -msgid "mark dir/file to be restored recursively, wildcards allowed" +#: src/stored/btape.c:1138 +#, c-format +msgid "3991 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_tree.c:70 -msgid "mark directory name to be restored (no files)" +#: src/stored/btape.c:1139 +#, c-format +msgid "3991 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:71 -msgid "print current working directory" +#: src/stored/btape.c:1143 +#, c-format +msgid "Slot %d loaded. I am going to unload it.\n" msgstr "" -#: src/dird/ua_tree.c:72 -msgid "unmark dir/file to be restored recursively in dir" +#: src/stored/btape.c:1145 +msgid "Nothing loaded in the drive. OK.\n" msgstr "" -#: src/dird/ua_tree.c:73 -msgid "unmark directory name only no recursion" +#: src/stored/btape.c:1153 +#, c-format +msgid "3302 Issuing autochanger \"unload %d %d\" command.\n" msgstr "" -#: src/dird/ua_tree.c:74 -msgid "quit and do not do restore" +#: src/stored/btape.c:1158 +#, c-format +msgid "unload status=%s %d\n" msgstr "" -#: src/dird/ua_tree.c:94 -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:1158 +msgid "Bad" msgstr "" -#: src/dird/ua_tree.c:104 src/dird/ua_tree.c:664 src/dird/ua_tree.c:672 +#: src/stored/btape.c:1161 #, c-format -msgid "cwd is: %s\n" +msgid "3992 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_tree.c:125 -msgid "Illegal command. Enter \"done\" to exit.\n" +#: src/stored/btape.c:1162 +#, c-format +msgid "3992 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:298 src/dird/ua_tree.c:309 src/dird/ua_tree.c:326 -msgid "No files marked.\n" +#: src/stored/btape.c:1172 +#, c-format +msgid "3303 Issuing autochanger \"load %d %d\" command.\n" msgstr "" -#: src/dird/ua_tree.c:311 -msgid "1 file marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:313 +#: src/stored/btape.c:1180 #, c-format -msgid "%s files marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:340 -msgid "No directories marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:342 -msgid "1 directory marked.\n" +msgid "3303 Autochanger \"load %d %d\" status is OK.\n" msgstr "" -#: src/dird/ua_tree.c:344 +#: src/stored/btape.c:1184 #, c-format -msgid "%s directories marked.\n" +msgid "3993 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_tree.c:365 +#: src/stored/btape.c:1185 #, c-format -msgid "%s total files/dirs. %s marked to be restored.\n" +msgid "3993 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:376 -msgid "No file specification given.\n" +#: src/stored/btape.c:1200 +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_tree.c:520 +#: src/stored/btape.c:1213 #, c-format -msgid "Node %s has no children.\n" +msgid "Wrote EOF to %s\n" msgstr "" -#: src/dird/ua_tree.c:611 +#: src/stored/btape.c:1217 #, c-format -msgid "%d total files; %d marked to be restored; %s bytes.\n" -msgstr "" - -#: src/dird/ua_tree.c:656 -msgid "Invalid path given.\n" -msgstr "" - -#: src/dird/ua_tree.c:683 src/dird/ua_tree.c:694 -msgid "No files unmarked.\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_tree.c:696 -msgid "1 file unmarked.\n" +#: src/stored/btape.c:1222 +msgid "" +"\n" +"The test autochanger worked!!\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:698 -#, c-format -msgid "%d files unmarked.\n" +#: src/stored/btape.c:1233 +msgid "You must correct this error or the Autochanger will not work.\n" msgstr "" -#: src/dird/ua_tree.c:709 src/dird/ua_tree.c:725 -msgid "No directories unmarked.\n" +#: src/stored/btape.c:1251 +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_tree.c:727 -msgid "1 directory unmarked.\n" +#: src/stored/btape.c:1276 +msgid "Now forward spacing 1 file.\n" msgstr "" -#: src/dird/ua_tree.c:729 +#: src/stored/btape.c:1278 src/stored/btape.c:1290 src/stored/btape.c:1303 +#: src/stored/btape.c:1321 src/stored/btape.c:1490 #, c-format -msgid "%d directories unmarked.\n" -msgstr "" - -#: src/dird/restore.c:71 -msgid "Cannot restore without bootstrap file.\n" +msgid "Bad status from fsr. ERR=%s\n" msgstr "" -#: src/dird/restore.c:78 +#: src/stored/btape.c:1281 #, c-format -msgid "Start Restore Job %s\n" +msgid "We should be in file 1. I am at file %d. %s\n" msgstr "" -#: src/dird/restore.c:225 -msgid "Restore OK -- warning file count mismatch" +#: src/stored/btape.c:1288 +msgid "Now forward spacing 2 files.\n" msgstr "" -#: src/dird/restore.c:227 -msgid "Restore OK" +#: src/stored/btape.c:1301 +msgid "Now forward spacing 4 files.\n" msgstr "" -#: src/dird/restore.c:232 -msgid "*** Restore Error ***" +#: src/stored/btape.c:1313 +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/restore.c:242 -msgid "Restore Canceled" +#: src/stored/btape.c:1319 +msgid "Now forward spacing 1 more file.\n" msgstr "" -#: src/dird/restore.c:252 src/dird/backup.c:382 src/dird/admin.c:102 +#: src/stored/btape.c:1323 #, c-format -msgid "Inappropriate term code: %c\n" +msgid "We should be in file 5. I am at file %d. %s\n" msgstr "" -#: src/dird/restore.c:269 -#, c-format +#: src/stored/btape.c:1328 msgid "" -"Bacula %s (%s): %s\n" -" JobId: %d\n" -" Job: %s\n" -" 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" +"=== End Forward space files test ===\n" "\n" msgstr "" -#: src/dird/scheduler.c:80 -#, c-format -msgid "Job %s not found\n" -msgstr "" - -#: src/dird/scheduler.c:103 -msgid "Walk queue" -msgstr "" - -#: src/dird/scheduler.c:113 -msgid "Dequeued job" +#: src/stored/btape.c:1332 +msgid "" +"\n" +"The forward space file test failed.\n" msgstr "" -#: src/dird/scheduler.c:116 -msgid "Scheduler logic error\n" +#: src/stored/btape.c:1334 +msgid "" +"You have Fast Forward Space File enabled.\n" +"I am turning it off then retrying the test.\n" msgstr "" -#: src/dird/scheduler.c:132 -msgid "Run job" +#: src/stored/btape.c:1340 +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/scheduler.c:349 -msgid "Inserted job" +#: src/stored/btape.c:1372 +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/scheduler.c:357 -msgid "Appended job" +#: src/stored/btape.c:1380 +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/scheduler.c:361 -msgid "Run queue" +#: src/stored/btape.c:1387 +msgid "" +"\n" +"\n" +"That appears *NOT* to have corrected the problem.\n" msgstr "" -#: src/dird/dird_conf.c:464 -#, c-format -msgid "Director: name=%s MaxJobs=%d FDtimeout=%s SDtimeout=%s\n" +#: src/stored/btape.c:1392 +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/dird_conf.c:469 -#, c-format -msgid " query_file=%s\n" +#: src/stored/btape.c:1397 +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/dird_conf.c:472 src/dird/dird_conf.c:492 src/dird/dird_conf.c:506 -#: src/dird/dird_conf.c:551 src/dird/dird_conf.c:555 src/dird/dird_conf.c:559 -#: src/dird/dird_conf.c:583 src/dird/dird_conf.c:588 src/dird/dird_conf.c:592 -#: src/dird/dird_conf.c:596 src/dird/dird_conf.c:600 src/dird/dird_conf.c:604 -#: src/dird/dird_conf.c:614 src/dird/dird_conf.c:789 src/dird/dird_conf.c:795 -msgid " --> " +#: src/stored/btape.c:1408 +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/dird_conf.c:477 -#, c-format -msgid "Console: name=%s SSL=%d\n" +#: src/stored/btape.c:1429 +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/dird_conf.c:482 +#: src/stored/btape.c:1468 #, c-format -msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" +msgid "Bad status from fsf. ERR=%s\n" msgstr "" -#: src/dird/dird_conf.c:487 -#, c-format -msgid "Counter: name=%s min=%d max=%d\n" +#: src/stored/btape.c:1472 +msgid "Forward spaced 1 file.\n" msgstr "" -#: src/dird/dird_conf.c:498 +#: src/stored/btape.c:1475 #, c-format -msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" +msgid "Forward spaced %d files.\n" msgstr "" -#: src/dird/dird_conf.c:501 -#, c-format -msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" +#: src/stored/btape.c:1494 +msgid "Forward spaced 1 record.\n" msgstr "" -#: src/dird/dird_conf.c:513 +#: src/stored/btape.c:1497 #, 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 "Forward spaced %d records.\n" msgstr "" -#: src/dird/dird_conf.c:523 +#: src/stored/btape.c:1531 #, c-format -msgid "" -"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" -" DeviceName=%s MediaType=%s StorageId=%s\n" +msgid "Wrote one record of %d bytes.\n" msgstr "" -#: src/dird/dird_conf.c:532 -#, c-format -msgid "" -"Catalog: name=%s address=%s DBport=%d db_name=%s\n" -" db_user=%s MutliDBConn=%d\n" +#: src/stored/btape.c:1533 +msgid "Wrote block to device.\n" msgstr "" -#: src/dird/dird_conf.c:540 -#, c-format -msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:541 src/dird/ua_cmds.c:430 src/dird/ua_run.c:709 -#: src/dird/ua_prune.c:454 src/dird/ua_select.c:234 src/dird/ua_select.c:257 -msgid "Job" -msgstr "" - -#: src/dird/dird_conf.c:541 -msgid "JobDefs" -msgstr "" - -#: src/dird/dird_conf.c:545 -#, c-format -msgid "" -" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=%" -"d\n" -msgstr "" - -#: src/dird/dird_conf.c:563 -#, c-format -msgid " --> Where=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:566 -#, c-format -msgid " --> Bootstrap=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:569 -#, c-format -msgid " --> RunBefore=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:572 -#, c-format -msgid " --> RunAfter=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:575 -#, c-format -msgid " --> RunAfterFailed=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:578 -#, c-format -msgid " --> WriteBootstrap=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:610 -#, c-format -msgid " --> Run=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:621 -#, c-format -msgid "FileSet: name=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:683 src/dird/dird_conf.c:762 -#, c-format -msgid "Schedule: name=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:688 -#, c-format -msgid " --> Run Level=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:689 -msgid " hour=" -msgstr "" - -#: src/dird/dird_conf.c:698 -msgid " mday=" -msgstr "" - -#: src/dird/dird_conf.c:707 -msgid " month=" -msgstr "" - -#: src/dird/dird_conf.c:716 -msgid " wday=" -msgstr "" - -#: src/dird/dird_conf.c:725 -msgid " wom=" -msgstr "" - -#: src/dird/dird_conf.c:734 -msgid " woy=" -msgstr "" - -#: src/dird/dird_conf.c:743 -#, c-format -msgid " mins=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:745 src/dird/dird_conf.c:749 src/dird/dird_conf.c:753 -msgid " --> " -msgstr "" - -#: src/dird/dird_conf.c:766 -#, c-format -msgid "Pool: name=%s PoolType=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:768 -#, c-format -msgid " use_cat=%d use_once=%d acpt_any=%d cat_files=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:771 -#, c-format -msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:774 -#, c-format -msgid " VolUse=%s recycle=%d LabelFormat=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:778 -#, c-format -msgid " CleaningPrefix=%s LabelType=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:780 -#, c-format -msgid " RecyleOldest=%d PurgeOldest=%d MaxVolJobs=%d MaxVolFiles=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:784 -#, c-format -msgid " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:801 -#, c-format -msgid "Messages: name=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:803 -#, c-format -msgid " mailcmd=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:805 -#, c-format -msgid " opcmd=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1183 -#, c-format -msgid "Cannot find Pool resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1191 -#, c-format -msgid "Cannot find Console resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1213 -#, c-format -msgid "Cannot find Job resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1231 -#, c-format -msgid "Cannot find Counter resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1251 -#, c-format -msgid "Cannot find Schedule resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1331 -#, c-format -msgid "Name item is required in %s resource, but not found.\n" -msgstr "" - -#: src/dird/dird_conf.c:1343 -#, c-format -msgid "Inserting %s res: %s index=%d pass=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:1416 -#, c-format -msgid "Expected a Job Type keyword, got: %s" -msgstr "" - -#: src/dird/dird_conf.c:1440 -#, c-format -msgid "Expected a Job Level keyword, got: %s" -msgstr "" - -#: src/dird/dird_conf.c:1460 -#, c-format -msgid "Expected a Restore replacement option, got: %s" -msgstr "" - -#: src/dird/msgchan.c:156 -#, c-format -msgid "Storage daemon rejected Job command: %s\n" -msgstr "" - -#: src/dird/msgchan.c:163 -#, c-format -msgid " | ] -- cancel a job" -msgstr "" - -#: src/dird/ua_cmds.c:94 -msgid "create DB Pool from resource" -msgstr "" - -#: src/dird/ua_cmds.c:95 -msgid "delete [pool= | media volume=]" -msgstr "" - -#: src/dird/ua_cmds.c:96 -msgid "disable -- disable a job" -msgstr "" - -#: src/dird/ua_cmds.c:97 -msgid "enable -- enable a job" -msgstr "" - -#: src/dird/ua_cmds.c:98 -msgid "performs FileSet estimate, listing gives full listing" -msgstr "" - -#: src/dird/ua_cmds.c:100 -msgid "gui [on|off] -- non-interactive gui mode" -msgstr "" - -#: src/dird/ua_cmds.c:102 -msgid "" -"list [pools | jobs | jobtotals | media | files ]; " -"from catalog" -msgstr "" - -#: src/dird/ua_cmds.c:103 -msgid "label a tape" -msgstr "" - -#: src/dird/ua_cmds.c:104 -msgid "full or long list like list command" -msgstr "" - -#: src/dird/ua_cmds.c:105 -msgid "messages" -msgstr "" - -#: src/dird/ua_cmds.c:106 -msgid "mount " -msgstr "" - -#: src/dird/ua_cmds.c:107 -msgid "prune expired records from catalog" -msgstr "" - -#: src/dird/ua_cmds.c:108 -msgid "purge records from catalog" -msgstr "" - -#: src/dird/ua_cmds.c:109 -msgid "python control commands" -msgstr "" - -#: src/dird/ua_cmds.c:111 -msgid "query catalog" -msgstr "" - -#: src/dird/ua_cmds.c:112 -msgid "restore files" -msgstr "" - -#: src/dird/ua_cmds.c:113 -msgid "relabel a tape" -msgstr "" - -#: src/dird/ua_cmds.c:114 -msgid "release " -msgstr "" - -#: src/dird/ua_cmds.c:115 -msgid "reload conf file" -msgstr "" - -#: src/dird/ua_cmds.c:116 -msgid "run " -msgstr "" - -#: src/dird/ua_cmds.c:117 -msgid "status [storage | client]=" -msgstr "" - -#: src/dird/ua_cmds.c:118 -msgid "sets debug level" -msgstr "" - -#: src/dird/ua_cmds.c:119 -msgid "sets new client address -- if authorized" -msgstr "" - -#: src/dird/ua_cmds.c:120 -msgid "show (resource records) [jobs | pools | ... | all]" -msgstr "" - -#: src/dird/ua_cmds.c:121 -msgid "use SQL to query catalog" -msgstr "" - -#: src/dird/ua_cmds.c:123 -msgid "turn on/off trace to file" -msgstr "" - -#: src/dird/ua_cmds.c:124 -msgid "unmount " -msgstr "" - -#: src/dird/ua_cmds.c:125 -msgid "umount for old-time Unix guys" -msgstr "" - -#: src/dird/ua_cmds.c:126 -msgid "update Volume, Pool or slots" -msgstr "" - -#: src/dird/ua_cmds.c:127 -msgid "use catalog xxx" -msgstr "" - -#: src/dird/ua_cmds.c:128 -msgid "does variable expansion" -msgstr "" - -#: src/dird/ua_cmds.c:129 -msgid "print Director version" -msgstr "" - -#: src/dird/ua_cmds.c:130 -msgid "wait until no jobs are running" -msgstr "" - -#: src/dird/ua_cmds.c:168 -#, c-format -msgid "%s: is an illegal command.\n" -msgstr "" - -#: src/dird/ua_cmds.c:206 -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/dird/ua_cmds.c:225 -#, c-format -msgid "Pool already has maximum volumes=%d\n" -msgstr "" - -#: src/dird/ua_cmds.c:227 -msgid "Enter new maximum (zero for unlimited): " -msgstr "" - -#: src/dird/ua_cmds.c:248 -#, c-format -msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " -msgstr "" - -#: src/dird/ua_cmds.c:254 -#, c-format -msgid "The number must be between 0 and %d\n" -msgstr "" - -#: src/dird/ua_cmds.c:261 -msgid "Enter Volume name: " -msgstr "" - -#: src/dird/ua_cmds.c:265 -msgid "Enter base volume name: " -msgstr "" - -#: src/dird/ua_cmds.c:274 src/dird/ua_label.c:605 -msgid "Volume name too long.\n" -msgstr "" - -#: src/dird/ua_cmds.c:287 -msgid "Enter the starting number: " -msgstr "" - -#: src/dird/ua_cmds.c:292 -msgid "Start number must be greater than zero.\n" -msgstr "" - -#: src/dird/ua_cmds.c:303 -msgid "Enter slot (0 for none): " +#: src/stored/btape.c:1548 +msgid "Enter length to read: " msgstr "" -#: src/dird/ua_cmds.c:307 -msgid "InChanger? yes/no: " +#: src/stored/btape.c:1553 +msgid "Bad length entered, using default of 1024 bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:334 +#: src/stored/btape.c:1562 #, c-format -msgid "%d Volumes created in pool %s\n" +msgid "Read of %d bytes gives stat=%d. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:350 src/dird/ua_cmds.c:917 -msgid "Turn on or off? " +#: src/stored/btape.c:1585 src/stored/btape.c:1634 +#, c-format +msgid "End of tape\n" msgstr "" -#: src/dird/ua_cmds.c:358 src/dird/ua_cmds.c:925 -msgid "off" +#: src/stored/btape.c:1590 +#, c-format +msgid "Starting scan at file %u\n" msgstr "" -#: src/dird/ua_cmds.c:378 -msgid "jobid" +#: src/stored/btape.c:1595 src/stored/dev.c:1229 +#, c-format +msgid "read error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_cmds.c:385 +#: src/stored/btape.c:1597 #, c-format -msgid "JobId %s is not running. Use Job name to cancel inactive jobs.\n" +msgid "Bad status from read %d. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:389 -msgid "job" +#: src/stored/btape.c:1600 src/stored/btape.c:1614 src/stored/btape.c:1678 +#: src/stored/btape.c:1690 src/stored/btape.c:1703 src/stored/btape.c:1719 +#, c-format +msgid "1 block of %d bytes in file %d\n" msgstr "" -#: src/dird/ua_cmds.c:394 +#: src/stored/btape.c:1603 src/stored/btape.c:1617 src/stored/btape.c:1681 +#: src/stored/btape.c:1693 src/stored/btape.c:1706 src/stored/btape.c:1722 #, c-format -msgid "Warning Job %s is not running. Continuing anyway ...\n" +msgid "%d blocks of %d bytes in file %d\n" msgstr "" -#: src/dird/ua_cmds.c:419 -msgid "Select Job:\n" +#: src/stored/btape.c:1625 src/stored/btape.c:1697 +#, c-format +msgid "End of File mark.\n" msgstr "" -#: src/dird/ua_cmds.c:425 +#: src/stored/btape.c:1646 src/stored/btape.c:1750 #, c-format -msgid "JobId=%s Job=%s" +msgid "Total files=%d, blocks=%d, bytes = %s\n" msgstr "" -#: src/dird/ua_cmds.c:430 -msgid "Choose Job to cancel" +#: src/stored/btape.c:1710 +#, c-format +msgid "Short block read.\n" msgstr "" -#: src/dird/ua_cmds.c:434 -msgid "Confirm cancel (yes/no): " +#: src/stored/btape.c:1713 +#, c-format +msgid "Error reading block. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:442 +#: src/stored/btape.c:1737 #, c-format -msgid "Job %s not found.\n" +msgid "" +"Blk_block: %u dev_blk=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=%" +"s rlen=%d\n" msgstr "" -#: src/dird/ua_cmds.c:547 +#: src/stored/btape.c:1759 #, c-format +msgid "Device status: %u. ERR=%s\n" +msgstr "" + +#: src/stored/btape.c:1789 msgid "" -"Error: Pool %s already exists.\n" -"Use update to change it.\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 3.2 GB. 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_cmds.c:558 -#, c-format -msgid "Pool %s created.\n" +#: src/stored/btape.c:1806 +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_cmds.c:571 -msgid "restart" +#: src/stored/btape.c:1809 +msgid "Simple test (single tape) selected.\n" msgstr "" -#: src/dird/ua_cmds.c:575 -msgid "Python interpreter restarted.\n" +#: src/stored/btape.c:1812 +msgid "Multiple tape test selected.\n" msgstr "" -#: src/dird/ua_cmds.c:577 src/dird/ua_cmds.c:1145 -msgid "Nothing done.\n" +#: src/stored/btape.c:1828 +msgid "Rewind failed.\n" msgstr "" -#: src/dird/ua_cmds.c:593 src/dird/ua_cmds.c:639 -msgid "Illegal command from this console.\n" +#: src/stored/btape.c:1831 +msgid "Write EOF failed.\n" msgstr "" -#: src/dird/ua_cmds.c:600 src/dird/ua_run.c:374 -#, c-format -msgid "Client \"%s\" not found.\n" +#: src/stored/btape.c:1858 +msgid "Wrote Start of Session label.\n" msgstr "" -#: src/dird/ua_cmds.c:609 +#: src/stored/btape.c:1889 #, c-format -msgid "Client \"%s\" address set to %s\n" +msgid "%s Begin writing Bacula records to tape ...\n" msgstr "" -#: src/dird/ua_cmds.c:634 +#: src/stored/btape.c:1891 #, c-format -msgid "Job \"%s\" not found.\n" +msgid "%s Begin writing Bacula records to first tape ...\n" msgstr "" -#: src/dird/ua_cmds.c:643 +#: src/stored/btape.c:1932 #, c-format -msgid "Job \"%s\" %sabled\n" +msgid "Wrote blk_block=%u, dev_blk_num=%u VolBytes=%s rate=%.1f KB/s\n" msgstr "" -#: src/dird/ua_cmds.c:667 src/dird/ua_status.c:286 +#: src/stored/btape.c:1942 #, c-format -msgid "Connecting to Storage daemon %s at %s:%d\n" +msgid "%s Flush block, write EOF\n" msgstr "" -#: src/dird/ua_cmds.c:670 src/dird/ua_cmds.c:1319 src/dird/job.c:414 -#: src/dird/ua_label.c:708 -msgid "Failed to connect to Storage daemon.\n" +#: src/stored/btape.c:1953 +msgid "Not OK\n" msgstr "" -#: src/dird/ua_cmds.c:673 src/dird/ua_status.c:297 -msgid "Connected to storage daemon\n" +#: src/stored/btape.c:1981 +msgid "Set ok=false after write_block_to_device.\n" msgstr "" -#: src/dird/ua_cmds.c:693 src/dird/ua_cmds.c:1032 src/dird/ua_status.c:324 +#: src/stored/btape.c:1984 +msgid "Wrote End of Session label.\n" +msgstr "" + +#: src/stored/btape.c:2008 #, c-format -msgid "Connecting to Client %s at %s:%d\n" +msgid "Wrote state file last_block_num1=%d last_block_num2=%d\n" msgstr "" -#: src/dird/ua_cmds.c:696 src/dird/ua_cmds.c:1035 -msgid "Failed to connect to Client.\n" +#: src/stored/btape.c:2012 +#, c-format +msgid "Could not create state file: %s ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:812 -msgid "Enter new debug level: " +#: src/stored/btape.c:2020 +#, c-format +msgid "" +"\n" +"\n" +"%s Done filling tape at %d:%d. Now beginning re-read of tape ...\n" msgstr "" -#: src/dird/ua_cmds.c:878 -msgid "Available daemons are: \n" +#: src/stored/btape.c:2024 +#, c-format +msgid "" +"\n" +"\n" +"%s Done filling tapes at %d:%d. Now beginning re-read of first tape ...\n" msgstr "" -#: src/dird/ua_cmds.c:883 -msgid "Select daemon type to set debug level" +#: src/stored/btape.c:2063 +msgid "" +"\n" +"The state file level has changed. You must redo\n" +"the fill command.\n" msgstr "" -#: src/dird/ua_cmds.c:987 src/dird/ua_run.c:511 +#: src/stored/btape.c:2069 #, c-format -msgid "Level %s not valid.\n" +msgid "" +"\n" +"Could not find the state file: %s ERR=%s\n" +"You must redo the fill command.\n" msgstr "" -#: src/dird/ua_cmds.c:1000 -msgid "No job specified.\n" +#: src/stored/btape.c:2111 +msgid "Mount first tape. Press enter when ready: " msgstr "" -#: src/dird/ua_cmds.c:1040 -msgid "Error sending include list.\n" +#: src/stored/btape.c:2131 +msgid "Rewinding.\n" msgstr "" -#: src/dird/ua_cmds.c:1045 -msgid "Error sending exclude list.\n" +#: src/stored/btape.c:2136 +#, c-format +msgid "Reading the first 10000 records from %u:%u.\n" msgstr "" -#: src/dird/ua_cmds.c:1131 -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/btape.c:2140 src/stored/btape.c:2207 +#, c-format +msgid "Reposition from %u:%u to %u:%u\n" msgstr "" -#: src/dird/ua_cmds.c:1134 -msgid "Choose catalog item to delete" +#: src/stored/btape.c:2143 src/stored/btape.c:2194 src/stored/btape.c:2210 +#, c-format +msgid "Reposition error. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1202 -msgid "Enter JobId to delete: " +#: src/stored/btape.c:2146 +#, c-format +msgid "Reading block %u.\n" msgstr "" -#: src/dird/ua_cmds.c:1247 +#: src/stored/btape.c:2148 src/stored/btape.c:2199 src/stored/btape.c:2215 #, c-format -msgid "Job %s and associated records deleted from the catalog.\n" +msgid "Error reading block: ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1260 -#, c-format +#: src/stored/btape.c:2153 msgid "" "\n" -"This command will delete volume %s\n" -"and all Jobs saved on that volume from the Catalog\n" +"The last block on the tape matches. Test succeeded.\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:1264 -msgid "Are you sure you want to delete this Volume? (yes/no): " +#: src/stored/btape.c:2155 +msgid "" +"\n" +"The last block of the first tape matches.\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:1285 -msgid "Are you sure you want to delete this Pool? (yes/no): " +#: src/stored/btape.c:2180 +msgid "Mount second tape. Press enter when ready: " msgstr "" -#: src/dird/ua_cmds.c:1382 +#: src/stored/btape.c:2192 #, c-format -msgid "Using Catalog name=%s DB=%s\n" +msgid "Reposition from %u:%u to 0:1\n" msgstr "" -#: src/dird/ua_cmds.c:1425 +#: src/stored/btape.c:2197 src/stored/btape.c:2213 #, c-format -msgid " %-10s %s\n" +msgid "Reading block %d.\n" msgstr "" -#: src/dird/ua_cmds.c:1427 +#: src/stored/btape.c:2203 msgid "" "\n" -"When at a prompt, entering a period cancels the command.\n" +"The first block on the second tape matches.\n" +"\n" +msgstr "" + +#: src/stored/btape.c:2219 +msgid "" +"\n" +"The last block on the second tape matches. Test succeeded.\n" "\n" msgstr "" -#: src/dird/ua_cmds.c:1443 +#: src/stored/btape.c:2234 #, c-format -msgid "%s Version: %s (%s)\n" +msgid "10000 records read now at %d:%d\n" msgstr "" -#: src/dird/ua_cmds.c:1462 -msgid "Could not find a Catalog resource\n" +#: src/stored/btape.c:2257 src/stored/btape.c:2268 src/stored/btape.c:2316 +msgid "Last block written" msgstr "" -#: src/dird/ua_cmds.c:1465 -msgid "You must specify a \"use \" command before continuing.\n" +#: src/stored/btape.c:2259 src/stored/btape.c:2269 +msgid "Block read back" msgstr "" -#: src/dird/ua_cmds.c:1469 +#: src/stored/btape.c:2260 #, c-format -msgid "Using default Catalog name=%s DB=%s\n" +msgid "" +"\n" +"\n" +"The blocks differ at byte %u\n" +msgstr "" + +#: src/stored/btape.c:2261 +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/ua_cmds.c:1482 src/dird/job.c:115 src/dird/dird.c:683 -#: src/dird/ua_output.c:607 +#: src/stored/btape.c:2300 #, c-format -msgid "Could not open database \"%s\".\n" +msgid "Last block at: %u:%u this_dev_block_num=%d\n" msgstr "" -#: src/dird/ua_run.c:119 +#: src/stored/btape.c:2314 #, c-format -msgid "Value missing for keyword %s\n" +msgid "Block not written: FileIndex=%u blk_block=%u Size=%u\n" msgstr "" -#: src/dird/ua_run.c:126 -msgid "Job name specified twice.\n" +#: src/stored/btape.c:2318 +msgid "Block not written" msgstr "" -#: src/dird/ua_run.c:134 -msgid "JobId specified twice.\n" +#: src/stored/btape.c:2333 +#, c-format +msgid "End of tape %d:%d. VolumeCapacity=%s. Write rate = %.1f KB/s\n" msgstr "" -#: src/dird/ua_run.c:143 -msgid "Client specified twice.\n" +#: src/stored/btape.c:2383 +msgid "Test writing blocks of 64512 bytes to tape.\n" msgstr "" -#: src/dird/ua_run.c:151 -msgid "FileSet specified twice.\n" +#: src/stored/btape.c:2385 +msgid "How many blocks do you want to write? (1000): " msgstr "" -#: src/dird/ua_run.c:159 -msgid "Level specified twice.\n" +#: src/stored/btape.c:2400 +#, c-format +msgid "Begin writing %d Bacula blocks to tape ...\n" msgstr "" -#: src/dird/ua_run.c:168 -msgid "Storage specified twice.\n" +#: src/stored/btape.c:2452 +#, c-format +msgid "Begin writing raw blocks of %u bytes.\n" msgstr "" -#: src/dird/ua_run.c:176 -msgid "Pool specified twice.\n" +#: src/stored/btape.c:2472 +#, c-format +msgid "Write failed at block %u. stat=%d ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:184 -msgid "Where specified twice.\n" +#: src/stored/btape.c:2502 +#, c-format +msgid "Begin writing Bacula blocks of %u bytes.\n" msgstr "" -#: src/dird/ua_run.c:192 -msgid "Bootstrap specified twice.\n" +#: src/stored/btape.c:2521 +#, c-format +msgid "Write failed at block %u.\n" +msgstr "" + +#: src/stored/btape.c:2528 +msgid "test autochanger" msgstr "" -#: src/dird/ua_run.c:200 -msgid "Replace specified twice.\n" +#: src/stored/btape.c:2529 +msgid "backspace file" msgstr "" -#: src/dird/ua_run.c:208 -msgid "When specified twice.\n" +#: src/stored/btape.c:2530 +msgid "backspace record" msgstr "" -#: src/dird/ua_run.c:216 -msgid "Priority specified twice.\n" +#: src/stored/btape.c:2531 +msgid "fill tape using Bacula writes" msgstr "" -#: src/dird/ua_run.c:221 -msgid "Priority must be positive nonzero setting it to 10.\n" +#: src/stored/btape.c:2532 +msgid "list device capabilities" msgstr "" -#: src/dird/ua_run.c:231 -msgid "Verify Job specified twice.\n" +#: src/stored/btape.c:2533 +msgid "clear tape errors" msgstr "" -#: src/dird/ua_run.c:263 -msgid "Migration Job specified twice.\n" +#: src/stored/btape.c:2534 +msgid "go to end of Bacula data for append" msgstr "" -#: src/dird/ua_run.c:289 -#, c-format -msgid "Invalid keyword: %s\n" +#: src/stored/btape.c:2535 +msgid "go to the physical end of medium" msgstr "" -#: src/dird/ua_run.c:301 -#, c-format -msgid "Catalog \"%s\" not found\n" +#: src/stored/btape.c:2536 +msgid "fill tape, write onto second volume" msgstr "" -#: src/dird/ua_run.c:312 -#, c-format -msgid "Job \"%s\" not found\n" +#: src/stored/btape.c:2537 +msgid "read filled tape" msgstr "" -#: src/dird/ua_run.c:319 -msgid "A job name must be specified.\n" +#: src/stored/btape.c:2538 +msgid "forward space a file" msgstr "" -#: src/dird/ua_run.c:325 -#, c-format -msgid "No authorization. Job \"%s\".\n" +#: src/stored/btape.c:2539 +msgid "forward space a record" msgstr "" -#: src/dird/ua_run.c:334 -#, c-format -msgid "Storage \"%s\" not found.\n" +#: src/stored/btape.c:2541 +msgid "write a Bacula label to the tape" msgstr "" -#: src/dird/ua_run.c:344 -#, c-format -msgid "No authorization. Storage \"%s\".\n" +#: src/stored/btape.c:2542 +msgid "load a tape" msgstr "" -#: src/dird/ua_run.c:354 -#, c-format -msgid "Pool \"%s\" not found.\n" +#: src/stored/btape.c:2543 +msgid "quit btape" msgstr "" -#: src/dird/ua_run.c:364 -#, c-format -msgid "No authorization. Pool \"%s\".\n" +#: src/stored/btape.c:2544 +msgid "use write() to fill tape" msgstr "" -#: src/dird/ua_run.c:384 -#, c-format -msgid "No authorization. Client \"%s\".\n" +#: src/stored/btape.c:2545 +msgid "read and print the Bacula tape label" msgstr "" -#: src/dird/ua_run.c:393 -#, c-format -msgid "FileSet \"%s\" not found.\n" +#: src/stored/btape.c:2546 +msgid "test record handling functions" msgstr "" -#: src/dird/ua_run.c:402 -#, c-format -msgid "No authorization. FileSet \"%s\".\n" +#: src/stored/btape.c:2547 +msgid "rewind the tape" msgstr "" -#: src/dird/ua_run.c:410 -#, c-format -msgid "Verify Job \"%s\" not found.\n" +#: src/stored/btape.c:2548 +msgid "read() tape block by block to EOT and report" msgstr "" -#: src/dird/ua_run.c:420 -#, c-format -msgid "Migration Job \"%s\" not found.\n" +#: src/stored/btape.c:2549 +msgid "Bacula read block by block to EOT and report" msgstr "" -#: src/dird/ua_run.c:455 src/dird/ua_run.c:830 -msgid "Invalid time, using current time.\n" +#: src/stored/btape.c:2550 +msgid "print tape status" msgstr "" -#: src/dird/ua_run.c:475 -#, c-format -msgid "Invalid replace option: %s\n" +#: src/stored/btape.c:2551 +msgid "General test Bacula tape functions" msgstr "" -#: src/dird/ua_run.c:533 -#, c-format -msgid "" -"Run %s job\n" -"JobName: %s\n" -"FileSet: %s\n" -"Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Priority: %d\n" +#: src/stored/btape.c:2552 +msgid "write an EOF on the tape" msgstr "" -#: src/dird/ua_run.c:552 -#, c-format -msgid "" -"Run %s job\n" -"JobName: %s\n" -"FileSet: %s\n" -"Level: %s\n" -"Client: %s\n" -"Storage: %s\n" -"Pool: %s\n" -"When: %s\n" -"Priority: %d\n" +#: src/stored/btape.c:2553 +msgid "write a single Bacula block" msgstr "" -#: src/dird/ua_run.c:583 -#, c-format -msgid "" -"Run %s job\n" -"JobName: %s\n" -"FileSet: %s\n" -"Level: %s\n" -"Client: %s\n" -"Storage: %s\n" -"Pool: %s\n" -"Verify Job: %s\n" -"Verify List: %s\n" -"When: %s\n" -"Priority: %d\n" +#: src/stored/btape.c:2554 +msgid "read a single record" msgstr "" -#: src/dird/ua_run.c:612 -msgid "Please enter a JobId for restore: " +#: src/stored/btape.c:2555 +msgid "quick fill command" msgstr "" -#: src/dird/ua_run.c:621 +#: src/stored/btape.c:2576 #, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"Where: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" +msgid "%s is an illegal command\n" msgstr "" -#: src/dird/ua_run.c:643 +#: src/stored/btape.c:2586 #, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"Where: %s\n" -"Replace: %s\n" -"Client: %s\n" -"Storage: %s\n" -"JobId: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" +msgid "Interactive commands:\n" msgstr "" -#: src/dird/ua_run.c:668 +#: src/stored/btape.c:2596 #, c-format msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"Where: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Client: %s\n" -"Storage: %s\n" -"Migration Job: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" +"Copyright (C) 2000-2005 Kern Sibbald.\n" +"\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 nn\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_run.c:693 +#: src/stored/btape.c:2687 #, c-format -msgid "Unknown Job Type=%d\n" -msgstr "" - -#: src/dird/ua_run.c:697 -msgid "OK to run? (yes/mod/no): " -msgstr "" - -#: src/dird/ua_run.c:703 src/dird/ua_select.c:44 -msgid "mod" -msgstr "" - -#: src/dird/ua_run.c:706 src/dird/ua_update.c:464 -msgid "Parameters to modify:\n" +msgid "Mount second Volume on device %s and press return when ready: " msgstr "" -#: src/dird/ua_run.c:707 -msgid "Level" +#: src/stored/btape.c:2714 +#, c-format +msgid "Mount blank Volume on device %s and press return when ready: " msgstr "" -#: src/dird/ua_run.c:708 src/dird/ua_select.c:152 -#: src/wx-console/wxbrestorepanel.cpp:321 -#: src/wx-console/wxbrestorepanel.cpp:337 -#: src/wx-console/wxbrestorepanel.cpp:458 -#: src/wx-console/wxbrestorepanel.cpp:459 -#: src/wx-console/wxbrestorepanel.cpp:469 -#: src/wx-console/wxbrestorepanel.cpp:470 -#: src/wx-console/wxbrestorepanel.cpp:1133 -#: src/wx-console/wxbrestorepanel.cpp:1794 -#: src/wx-console/wxbrestorepanel.cpp:1865 -msgid "Storage" +#: src/stored/btape.c:2732 +#, c-format +msgid "End of Volume \"%s\"\n" msgstr "" -#: src/dird/ua_run.c:710 src/dird/ua_restore.c:1058 src/dird/ua_select.c:175 -msgid "FileSet" +#: src/stored/btape.c:2744 +#, c-format +msgid "Read block=%u, VolBytes=%s rate=%.1f KB/s\n" msgstr "" -#: src/dird/ua_run.c:711 src/dird/ua_select.c:282 src/dird/ua_select.c:391 -#: src/wx-console/wxbrestorepanel.cpp:318 -#: src/wx-console/wxbrestorepanel.cpp:336 -#: src/wx-console/wxbrestorepanel.cpp:410 -#: src/wx-console/wxbrestorepanel.cpp:411 -#: src/wx-console/wxbrestorepanel.cpp:421 -#: src/wx-console/wxbrestorepanel.cpp:422 -#: src/wx-console/wxbrestorepanel.cpp:669 -#: src/wx-console/wxbrestorepanel.cpp:1103 -#: src/wx-console/wxbrestorepanel.cpp:1190 -#: src/wx-console/wxbrestorepanel.cpp:1787 -#: src/wx-console/wxbrestorepanel.cpp:1789 -#: src/wx-console/wxbrestorepanel.cpp:1863 -#: src/wx-console/wxbrestorepanel.cpp:1918 -msgid "Client" +#: src/stored/btape.c:2759 src/stored/mount.c:500 +#, c-format +msgid "Cannot open Dev=%s, Vol=%s\n" msgstr "" -#: src/dird/ua_run.c:712 src/wx-console/wxbrestorepanel.cpp:338 -#: src/wx-console/wxbrestorepanel.cpp:823 -#: src/wx-console/wxbrestorepanel.cpp:1867 -msgid "When" +#: src/stored/butil.c:46 +msgid "Nohdr," msgstr "" -#: src/dird/ua_run.c:713 src/wx-console/wxbrestorepanel.cpp:339 -#: src/wx-console/wxbrestorepanel.cpp:1096 -#: src/wx-console/wxbrestorepanel.cpp:1869 -msgid "Priority" +#: src/stored/butil.c:49 +msgid "partial," msgstr "" -#: src/dird/ua_run.c:716 src/dird/ua_select.c:476 src/dird/ua_select.c:566 -#: src/dird/ua_update.c:400 src/dird/ua_update.c:475 -#: src/wx-console/wxbrestorepanel.cpp:320 -#: src/wx-console/wxbrestorepanel.cpp:506 -#: src/wx-console/wxbrestorepanel.cpp:516 -#: src/wx-console/wxbrestorepanel.cpp:1783 -msgid "Pool" +#: src/stored/butil.c:52 +msgid "empty," msgstr "" -#: src/dird/ua_run.c:718 -msgid "Verify Job" +#: src/stored/butil.c:55 +msgid "Nomatch," msgstr "" -#: src/dird/ua_run.c:721 src/wx-console/wxbrestorepanel.cpp:331 -#: src/wx-console/wxbrestorepanel.cpp:1848 -msgid "Bootstrap" +#: src/stored/butil.c:58 +msgid "cont," msgstr "" -#: src/dird/ua_run.c:722 src/wx-console/wxbrestorepanel.cpp:332 -#: src/wx-console/wxbrestorepanel.cpp:1072 -#: src/wx-console/wxbrestorepanel.cpp:1850 -msgid "Where" +#: src/stored/butil.c:130 +msgid "Volume name or names is too long. Please use a .bsr file.\n" msgstr "" -#: src/dird/ua_run.c:723 src/wx-console/wxbrestorepanel.cpp:334 -#: src/wx-console/wxbrestorepanel.cpp:1080 -#: src/wx-console/wxbrestorepanel.cpp:1854 -#: src/wx-console/wxbrestorepanel.cpp:1855 -#: src/wx-console/wxbrestorepanel.cpp:1856 -#: src/wx-console/wxbrestorepanel.cpp:1857 -#: src/wx-console/wxbrestorepanel.cpp:1858 -msgid "Replace" +#: src/stored/butil.c:150 +#, c-format +msgid "Cannot find device \"%s\" in config file %s.\n" msgstr "" -#: src/dird/ua_run.c:724 -msgid "JobId" +#: src/stored/butil.c:157 +#, c-format +msgid "Cannot init device %s\n" msgstr "" -#: src/dird/ua_run.c:726 src/dird/ua_update.c:479 -msgid "Select parameter to modify" +#: src/stored/butil.c:178 +#, c-format +msgid "Cannot open %s\n" msgstr "" -#: src/dird/ua_run.c:730 src/dird/ua_run.c:757 -msgid "Levels:\n" +#: src/stored/butil.c:261 +#, c-format +msgid "Could not find device \"%s\" in config file %s.\n" msgstr "" -#: src/dird/ua_run.c:736 src/dird/ua_run.c:763 -msgid "Select level" +#: src/stored/butil.c:266 +#, c-format +msgid "Using device: \"%s\" for reading.\n" msgstr "" -#: src/dird/ua_run.c:758 -msgid "Initialize Catalog" +#: src/stored/butil.c:269 +#, c-format +msgid "Using device: \"%s\" for writing.\n" msgstr "" -#: src/dird/ua_run.c:762 -msgid "Verify Volume Data (not yet implemented)" +#: src/stored/butil.c:285 +msgid "Unexpected End of Data\n" msgstr "" -#: src/dird/ua_run.c:784 -msgid "Level not appropriate for this Job. Cannot be changed.\n" +#: src/stored/butil.c:287 +msgid "Unexpected End of Tape\n" msgstr "" -#: src/dird/ua_run.c:822 -msgid "" -"Please enter desired start time as YYYY-MM-DD HH:MM:SS (return for now): " +#: src/stored/butil.c:289 +msgid "Unexpected End of File\n" msgstr "" -#: src/dird/ua_run.c:837 -msgid "Enter new Priority: " +#: src/stored/butil.c:291 +msgid "Tape Door is Open\n" msgstr "" -#: src/dird/ua_run.c:841 -msgid "Priority must be a positive integer.\n" +#: src/stored/butil.c:293 +msgid "Unexpected Tape is Off-line\n" msgstr "" -#: src/dird/ua_run.c:859 -msgid "Please enter the Bootstrap file name: " +#: src/stored/dev.c:112 +#, c-format +msgid "Unable to stat device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:870 +#: src/stored/dev.c:123 #, c-format -msgid "Warning cannot open %s: ERR=%s\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_run.c:889 -msgid "Please enter path prefix for restore (/ for none): " +#: src/stored/dev.c:179 +#, c-format +msgid "Unable to stat mount point %s: ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:903 -msgid "Replace:\n" +#: src/stored/dev.c:186 +msgid "" +"Mount and unmount commands must defined for a device which requires mount.\n" msgstr "" -#: src/dird/ua_run.c:907 -msgid "Select replace option" +#: src/stored/dev.c:189 +msgid "Write part command must be defined for a device which requires mount.\n" msgstr "" -#: src/dird/ua_run.c:917 -msgid "" -"You must set the bootstrap file to NULL to be able to specify a JobId.\n" +#: src/stored/dev.c:194 +#, c-format +msgid "Block size %u on device %s is too large, using default %u\n" msgstr "" -#: src/dird/ua_run.c:935 -msgid "Job failed.\n" +#: src/stored/dev.c:199 +#, c-format +msgid "Max block size %u not multiple of device %s block size.\n" msgstr "" -#: src/dird/ua_run.c:938 +#: src/stored/dev.c:215 src/stored/dev.c:221 #, c-format -msgid "Job started. JobId=%s\n" +msgid "Unable to init cond variable: ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:944 -msgid "Job not run.\n" +#: src/stored/dev.c:312 +msgid "Illegal mode given to open dev.\n" msgstr "" -#: src/dird/backup.c:88 src/dird/backup.c:94 src/dird/mac.c:121 -#: src/dird/ua_output.c:618 +#: src/stored/dev.c:355 src/stored/device.c:295 #, c-format -msgid "Pool %s not in database. %s" +msgid "Unable to open device %s: ERR=%s\n" msgstr "" -#: src/dird/backup.c:92 src/dird/mac.c:125 src/dird/ua_output.c:626 +#: src/stored/dev.c:423 src/stored/dev.c:481 #, c-format -msgid "Pool %s created in database.\n" +msgid "Could not open file device %s. No Volume name given.\n" msgstr "" -#: src/dird/backup.c:106 src/dird/mac.c:134 -msgid "No Storage specification found in Job or Pool.\n" +#: src/stored/dev.c:449 src/stored/dev.c:562 +#, c-format +msgid "Could not open: %s, ERR=%s\n" msgstr "" -#: src/dird/backup.c:131 +#: src/stored/dev.c:506 #, c-format -msgid "Start Backup JobId %s, Job=%s\n" +msgid "" +"The media in the device %s is not empty, please blank it before writing " +"anything to it.\n" msgstr "" -#: src/dird/backup.c:262 +#: src/stored/dev.c:523 #, c-format -msgid "Unexpected Client Job message: %s\n" +msgid "There is no valid media in the device %s.\n" msgstr "" -#: src/dird/backup.c:270 +#: src/stored/dev.c:530 #, c-format -msgid "Network error with FD during %s: ERR=%s\n" +msgid "Could not mount device %s.\n" msgstr "" -#: src/dird/backup.c:286 -msgid "No Job status returned from FD.\n" +#: src/stored/dev.c:588 +#, c-format +msgid "Could not fstat: %s, ERR=%s\n" msgstr "" -#: src/dird/backup.c:330 src/dird/admin.c:82 src/dird/mac.c:401 +#: src/stored/dev.c:631 #, c-format -msgid "Error getting job record for stats: %s" +msgid "Bad call to rewind. Device %s not open\n" msgstr "" -#: src/dird/backup.c:337 +#: src/stored/dev.c:677 #, c-format -msgid "Error getting client record for stats: %s" +msgid "Rewind error on %s. ERR=%s.\n" msgstr "" -#: src/dird/backup.c:343 src/dird/mac.c:408 +#: src/stored/dev.c:687 src/stored/dev.c:802 src/stored/dev.c:938 +#: src/stored/dev.c:1457 #, c-format -msgid "Error getting Media record for Volume \"%s\": ERR=%s" +msgid "lseek_dev error on %s. ERR=%s.\n" msgstr "" -#: src/dird/backup.c:355 -msgid "Backup OK -- with warnings" +#: src/stored/dev.c:727 +msgid "unknown blocked code" msgstr "" -#: src/dird/backup.c:422 +#: src/stored/dev.c:772 #, c-format -msgid "" -"Bacula %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\"\n" -" Storage: \"%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" -" 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" +msgid "Bad call to eod_dev. Device %s not open\n" msgstr "" -#: src/dird/backup.c:512 +#: src/stored/dev.c:838 #, c-format -msgid "Could not get Job Volume Parameters to update Bootstrap file. ERR=%s\n" +msgid "ioctl MTEOM error on %s. ERR=%s.\n" msgstr "" -#: src/dird/backup.c:546 +#: src/stored/dev.c:846 src/stored/dev.c:978 #, c-format -msgid "" -"Could not open WriteBootstrap file:\n" -"%s: ERR=%s\n" +msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:50 -#, c-format -msgid "Could not init job queue: ERR=%s\n" +#: src/stored/dev.c:924 +msgid "Bad device call. Device not open\n" msgstr "" -#: src/dird/job.c:81 +#: src/stored/dev.c:937 #, c-format -msgid "Could not add job queue: ERR=%s\n" +msgid "Seek error: ERR=%s\n" msgstr "" -#: src/dird/job.c:184 -msgid "Job canceled because max start delay time exceeded.\n" +#: src/stored/dev.c:973 +msgid " Bacula status:" msgstr "" -#: src/dird/job.c:235 src/dird/job.c:313 +#: src/stored/dev.c:974 src/stored/dev.c:1023 src/stored/dev.c:1025 #, c-format -msgid "Unimplemented job type: %d\n" +msgid " file=%d block=%d\n" msgstr "" -#: src/dird/job.c:260 -#, c-format -msgid "RunBefore: %s" +#: src/stored/dev.c:982 +msgid " Device status:" msgstr "" -#: src/dird/job.c:265 -#, c-format -msgid "RunBeforeJob error: ERR=%s\n" +#: src/stored/dev.c:1047 +msgid "Bad call to load_dev. Device not open\n" msgstr "" -#: src/dird/job.c:331 +#: src/stored/dev.c:1058 src/stored/dev.c:1071 #, c-format -msgid "RunAfter: %s" +msgid "ioctl MTLOAD error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:341 +#: src/stored/dev.c:1107 #, c-format -msgid "RunAfterJob error: ERR=%s\n" +msgid "ioctl MTOFFL error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:343 +#: src/stored/dev.c:1148 +msgid "Bad call to fsf_dev. Device not open\n" +msgstr "" + +#: src/stored/dev.c:1158 src/stored/dev.c:1279 #, c-format -msgid "RunAfterFailedJob error: ERR=%s\n" +msgid "Device %s at End of Tape.\n" msgstr "" -#: src/dird/job.c:382 +#: src/stored/dev.c:1183 src/stored/dev.c:1259 #, c-format -msgid "JobId %d, Job %s marked to be canceled.\n" +msgid "ioctl MTFSF error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:392 -msgid "Failed to connect to File daemon.\n" +#: src/stored/dev.c:1308 +msgid "Bad call to bsf_dev. Device not open\n" msgstr "" -#: src/dird/job.c:548 src/dird/job.c:596 +#: src/stored/dev.c:1314 #, c-format -msgid "Unhandled job status code %d\n" +msgid "Device %s cannot BSF because it is not a tape.\n" msgstr "" -#: src/dird/job.c:656 -msgid "FileSet MD5 digest not found.\n" +#: src/stored/dev.c:1329 +#, c-format +msgid "ioctl MTBSF error on %s. ERR=%s.\n" +msgstr "" + +#: src/stored/dev.c:1349 +msgid "Bad call to fsr. Device not open\n" msgstr "" -#: src/dird/job.c:661 +#: src/stored/dev.c:1358 #, c-format -msgid "Could not create FileSet \"%s\" record. ERR=%s\n" +msgid "ioctl MTFSR not permitted on %s.\n" msgstr "" -#: src/dird/job.c:700 +#: src/stored/dev.c:1386 #, c-format -msgid "Error updating job record. %s" +msgid "ioctl MTFSR %d error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:944 -msgid "Could not start clone job.\n" +#: src/stored/dev.c:1406 +msgid "Bad call to bsr_dev. Device not open\n" msgstr "" -#: src/dird/job.c:946 +#: src/stored/dev.c:1416 #, c-format -msgid "Clone JobId %d started.\n" +msgid "ioctl MTBSR not permitted on %s.\n" msgstr "" -#: src/dird/ua_input.c:82 -msgid "Enter slot" +#: src/stored/dev.c:1429 +#, c-format +msgid "ioctl MTBSR error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_input.c:86 src/dird/ua_input.c:92 -#, c-format -msgid "Expected a positive integer, got: %s\n" +#: src/stored/dev.c:1446 +msgid "Bad call to reposition_dev. Device not open\n" msgstr "" -#: src/dird/ua_input.c:127 -msgid "Invalid response. You must answer yes or no.\n" +#: src/stored/dev.c:1514 +msgid "Bad call to weof_dev. Device not open\n" msgstr "" -#: src/dird/bsr.c:176 -#, c-format -msgid "Unable to get Job record. ERR=%s\n" +#: src/stored/dev.c:1524 +msgid "Attempt to WEOF on non-appendable Volume\n" msgstr "" -#: src/dird/bsr.c:183 +#: src/stored/dev.c:1541 #, c-format -msgid "Unable to get Job Volume Parameters. ERR=%s\n" +msgid "ioctl MTWEOF error on %s. ERR=%s.\n" msgstr "" -#: src/dird/bsr.c:224 -#, c-format -msgid "Unable to create bootstrap file %s. ERR=%s\n" +#: src/stored/dev.c:1583 +msgid "Got ENOTTY on read/write!\n" msgstr "" -#: src/dird/bsr.c:233 -msgid "Error writing bsr file.\n" +#: src/stored/dev.c:1630 +#, c-format +msgid "unknown func code %d" msgstr "" -#: src/dird/bsr.c:239 +#: src/stored/dev.c:1636 #, c-format -msgid "Bootstrap records written to %s\n" +msgid "I/O function \"%s\" not supported on this device.\n" msgstr "" -#: src/dird/bsr.c:243 -msgid "The job will require the following Volumes:\n" +#: src/stored/dev.c:1761 src/stored/dvd.c:734 +#, c-format +msgid "Unable to truncate device %s. ERR=%s\n" msgstr "" -#: src/dird/bsr.c:275 -msgid "No Volumes found to restore.\n" +#: src/stored/dev.c:1800 +msgid "Bad call to term_dev. Device not open\n" msgstr "" -#: src/dird/run_conf.c:188 +#: src/stored/device.c:100 #, c-format -msgid "Expected an equals, got: %s" +msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" msgstr "" -#: src/dird/run_conf.c:201 src/dird/run_conf.c:213 +#: src/stored/device.c:114 #, c-format -msgid "Expect a YES or NO, got: %s" +msgid "New volume \"%s\" mounted on device %s at %s.\n" msgstr "" -#: src/dird/run_conf.c:227 +#: src/stored/device.c:126 #, c-format -msgid "Job level field: %s not found in run record" +msgid "write_block_to_device Volume label failed. ERR=%s" msgstr "" -#: src/dird/run_conf.c:245 +#: src/stored/device.c:162 #, c-format -msgid "Could not find specified Pool Resource: %s" +msgid "write_block_to_device overflow block failed. ERR=%s" msgstr "" -#: src/dird/run_conf.c:270 +#: src/stored/device.c:297 #, c-format -msgid "Could not find specified Storage Resource: %s" +msgid "Unable to open archive %s: ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:282 +#: src/stored/device.c:332 #, c-format -msgid "Could not find specified Messages Resource: %s" +msgid "Device write lock failure. ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:290 +#: src/stored/device.c:340 #, c-format -msgid "Expected a keyword name, got: %s" +msgid "Device write unlock failure. ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:327 -msgid "Day number out of range (1-31)" +#: src/stored/device.c:359 +#, c-format +msgid "pthread_cond_wait failure. ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:344 src/dird/run_conf.c:490 -msgid "Week number out of range (0-53)" +#: src/stored/dircmd.c:140 +msgid "Connection request failed.\n" msgstr "" -#: src/dird/run_conf.c:359 +#: src/stored/dircmd.c:149 #, c-format -msgid "Job type field: %s in run record not found" +msgid "Invalid connection. Len=%d\n" msgstr "" -#: src/dird/run_conf.c:366 +#: src/stored/dircmd.c:241 #, c-format -msgid "Unexpected token: %d:%s" -msgstr "" - -#: src/dird/run_conf.c:410 -msgid "Time must be preceded by keyword AT." +msgid "3991 Bad setdebug command: %s\n" msgstr "" -#: src/dird/run_conf.c:418 -msgid "Time logic error.\n" +#: src/stored/dircmd.c:262 +#, c-format +msgid "3904 Job %s not found.\n" msgstr "" -#: src/dird/run_conf.c:430 src/dird/run_conf.c:446 -msgid "Bad time specification." +#: src/stored/dircmd.c:283 +#, c-format +msgid "3000 Job %s marked to be canceled.\n" msgstr "" -#: src/dird/run_conf.c:459 -msgid "Range logic error.\n" +#: src/stored/dircmd.c:287 +msgid "3903 Error scanning cancel command.\n" msgstr "" -#: src/dird/run_conf.c:468 -msgid "Bad day range specification." +#: src/stored/dircmd.c:364 src/stored/dircmd.c:680 src/stored/dircmd.c:756 +#: src/stored/dircmd.c:819 src/stored/dircmd.c:874 src/stored/dircmd.c:918 +#, c-format +msgid "3999 Device \"%s\" not found or could not be opened.\n" msgstr "" -#: src/dird/run_conf.c:515 -msgid "Invalid month, week or position day range" +#: src/stored/dircmd.c:369 +#, c-format +msgid "3903 Error scanning label command: %s\n" msgstr "" -#: src/dird/run_conf.c:530 -msgid "Invalid month, weekday or position range" +#: src/stored/dircmd.c:412 +#, c-format +msgid "3920 Cannot label Volume because it is already labeled: \"%s\"\n" msgstr "" -#: src/dird/run_conf.c:589 -msgid "Unexpected run state\n" +#: src/stored/dircmd.c:419 +msgid "3921 Wrong volume mounted.\n" msgstr "" -#: src/dird/pythondir.c:137 -msgid "Pool record not found." +#: src/stored/dircmd.c:423 +msgid "3922 Cannot relabel an ANSI/IBM labeled Volume.\n" msgstr "" -#: src/dird/ua_restore.c:115 -msgid "" -"No Restore Job Resource found in bacula-dir.conf.\n" -"You must create at least one before running this command.\n" +#: src/stored/dircmd.c:431 src/stored/dircmd.c:440 +#, c-format +msgid "3912 Failed to label Volume: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:131 -msgid "Restore not done.\n" +#: src/stored/dircmd.c:443 +#, c-format +msgid "3913 Cannot label Volume. Unknown status %d from read_volume_label()\n" msgstr "" - -#: src/dird/ua_restore.c:142 -msgid "Unable to construct a valid BSR. Cannot continue.\n" + +#: src/stored/dircmd.c:476 +#, c-format +msgid "3001 Mounted Volume: %s\n" msgstr "" -#: src/dird/ua_restore.c:146 src/dird/ua_restore.c:160 -msgid "No files selected to be restored.\n" +#: src/stored/dircmd.c:480 src/stored/dircmd.c:954 +#, c-format +msgid "" +"3902 Cannot mount Volume on Storage Device %s because:\n" +"%s" msgstr "" -#: src/dird/ua_restore.c:154 +#: src/stored/dircmd.c:508 src/stored/reserve.c:634 +#, c-format msgid "" "\n" -"1 file selected to be restored.\n" -"\n" +" Device \"%s\" requested by DIR could not be opened or does not exist.\n" msgstr "" -#: src/dird/ua_restore.c:157 +#: src/stored/dircmd.c:529 src/stored/reserve.c:630 #, c-format msgid "" "\n" -"%u files selected to be restored.\n" -"\n" +" Device \"%s\" in changer \"%s\" requested by DIR could not be opened or " +"does not exist.\n" msgstr "" -#: src/dird/ua_restore.c:175 -msgid "No Restore Job resource found!\n" +#: src/stored/dircmd.c:593 src/stored/dircmd.c:646 +#, c-format +msgid "3901 open device failed: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:237 +#: src/stored/dircmd.c:613 src/stored/dircmd.c:637 #, c-format -msgid "Missing value for keyword: %s\n" +msgid "3001 Device %s is mounted with Volume \"%s\"\n" msgstr "" -#: src/dird/ua_restore.c:286 -msgid "List last 20 Jobs run" +#: src/stored/dircmd.c:616 src/stored/dircmd.c:640 src/stored/dircmd.c:655 +#, 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_restore.c:287 -msgid "List Jobs where a given File is saved" +#: src/stored/dircmd.c:625 +#, c-format +msgid "3001 Device %s is doing acquire.\n" msgstr "" -#: src/dird/ua_restore.c:288 -msgid "Enter list of comma separated JobIds to select" +#: src/stored/dircmd.c:630 src/stored/dircmd.c:730 +#, c-format +msgid "3903 Device %s is being labeled.\n" msgstr "" -#: src/dird/ua_restore.c:289 -msgid "Enter SQL list command" +#: src/stored/dircmd.c:652 +#, c-format +msgid "3001 Device %s is already mounted with Volume \"%s\"\n" msgstr "" -#: src/dird/ua_restore.c:290 -msgid "Select the most recent backup for a client" +#: src/stored/dircmd.c:661 +#, c-format +msgid "3002 Device %s is mounted.\n" msgstr "" -#: src/dird/ua_restore.c:291 -msgid "Select backup for a client before a specified time" +#: src/stored/dircmd.c:664 +#, c-format +msgid "3907 %s" msgstr "" -#: src/dird/ua_restore.c:292 -msgid "Enter a list of files to restore" +#: src/stored/dircmd.c:667 +#, c-format +msgid "3906 File device %s is always mounted.\n" msgstr "" -#: src/dird/ua_restore.c:293 -msgid "Enter a list of files to restore before a specified time" +#: src/stored/dircmd.c:673 +#, c-format +msgid "3905 Bizarre wait state %d\n" msgstr "" -#: src/dird/ua_restore.c:294 -msgid "Find the JobIds of the most recent backup for a client" +#: src/stored/dircmd.c:684 +#, c-format +msgid "3909 Error scanning mount command: %s\n" msgstr "" -#: src/dird/ua_restore.c:295 -msgid "Find the JobIds for a backup for a client before a specified time" +#: src/stored/dircmd.c:711 +#, c-format +msgid "3901 Device %s is already unmounted.\n" msgstr "" -#: src/dird/ua_restore.c:296 -msgid "Enter a list of directories to restore for found JobIds" +#: src/stored/dircmd.c:722 +#, c-format +msgid "3001 Device %s unmounted.\n" msgstr "" -#: src/dird/ua_restore.c:333 +#: src/stored/dircmd.c:726 #, c-format -msgid "Unknown keyword: %s\n" +msgid "3902 Device %s is busy in acquire.\n" msgstr "" -#: src/dird/ua_restore.c:357 +#: src/stored/dircmd.c:749 #, c-format -msgid "Improper date format: %s\n" +msgid "3002 Device %s unmounted.\n" msgstr "" -#: src/dird/ua_restore.c:397 src/dird/ua_select.c:590 +#: src/stored/dircmd.c:761 #, c-format -msgid "Error: Pool resource \"%s\" does not exist.\n" +msgid "3907 Error scanning unmount command: %s\n" msgstr "" -#: src/dird/ua_restore.c:402 +#: src/stored/dircmd.c:789 #, c-format -msgid "Error: Pool resource \"%s\" access not allowed.\n" +msgid "3921 Device %s already released.\n" msgstr "" -#: src/dird/ua_restore.c:421 -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/dircmd.c:796 +#, c-format +msgid "3922 Device %s waiting for mount.\n" msgstr "" -#: src/dird/ua_restore.c:433 -msgid "To select the JobIds, you have the following choices:\n" +#: src/stored/dircmd.c:800 +#, c-format +msgid "3923 Device %s is busy in acquire.\n" msgstr "" -#: src/dird/ua_restore.c:438 -msgid "Select item: " +#: src/stored/dircmd.c:804 +#, c-format +msgid "3914 Device %s is being labeled.\n" msgstr "" -#: src/dird/ua_restore.c:452 -msgid "Enter Filename (no path):" +#: src/stored/dircmd.c:812 +#, c-format +msgid "3022 Device %s released.\n" msgstr "" -#: src/dird/ua_restore.c:467 src/dird/ua_restore.c:567 -msgid "Enter JobId(s), comma separated, to restore: " +#: src/stored/dircmd.c:824 +#, c-format +msgid "3927 Error scanning release command: %s\n" msgstr "" -#: src/dird/ua_restore.c:473 -msgid "Enter SQL list command: " +#: src/stored/dircmd.c:860 +#, c-format +msgid "3995 Device %s is not an autochanger.\n" msgstr "" -#: src/dird/ua_restore.c:501 src/dird/ua_restore.c:526 -msgid "" -"Enter file names with paths, or < to enter a filename\n" -"containg a list of file names with paths, and terminate\n" -"them with a blank line.\n" +#: src/stored/dircmd.c:878 +#, c-format +msgid "3908 Error scanning autocharger drives/list/slots command: %s\n" msgstr "" -#: src/dird/ua_restore.c:505 src/dird/ua_restore.c:530 -msgid "Enter full filename: " +#: src/stored/dircmd.c:922 +#, c-format +msgid "3909 Error scanning readlabel command: %s\n" msgstr "" -#: src/dird/ua_restore.c:565 +#: src/stored/dircmd.c:950 #, c-format -msgid "You have already seleted the following JobIds: %s\n" +msgid "3001 Volume=%s Slot=%d\n" msgstr "" -#: src/dird/ua_restore.c:580 -msgid "" -"Enter full directory names or start the name\n" -"with a < to indicate it is a filename containg a list\n" -"of directories and terminate them with a blank line.\n" +#: src/stored/dircmd.c:979 +#, c-format +msgid "3910 Unable to open device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:584 -msgid "Enter directory name: " +#: src/stored/dircmd.c:991 +#, c-format +msgid "3931 Device %s is BLOCKED. user unmounted.\n" msgstr "" -#: src/dird/ua_restore.c:609 -msgid "No Jobs selected.\n" +#: src/stored/dircmd.c:995 +#, c-format +msgid "" +"3932 Device %s is BLOCKED. user unmounted during wait for media/mount.\n" msgstr "" -#: src/dird/ua_restore.c:613 +#: src/stored/dircmd.c:999 #, c-format -msgid "You have selected the following JobIds: %s\n" +msgid "3933 Device %s is BLOCKED waiting for media.\n" msgstr "" -#: src/dird/ua_restore.c:616 +#: src/stored/dircmd.c:1003 #, c-format -msgid "You have selected the following JobId: %s\n" +msgid "3934 Device %s is being initialized.\n" msgstr "" -#: src/dird/ua_restore.c:624 -msgid "Invalid JobId in list.\n" +#: src/stored/dircmd.c:1007 +#, c-format +msgid "3935 Device %s is blocked labeling a Volume.\n" msgstr "" -#: src/dird/ua_restore.c:637 +#: src/stored/dircmd.c:1011 #, c-format -msgid "Unable to get Job record for JobId=%s: ERR=%s\n" +msgid "3935 Device %s is blocked for unknown reason.\n" msgstr "" -#: src/dird/ua_restore.c:642 +#: src/stored/dircmd.c:1016 #, c-format -msgid "No authorization. Job \"%s\" not selected.\n" +msgid "3936 Device %s is busy reading.\n" msgstr "" -#: src/dird/ua_restore.c:656 -msgid "" -"The restored files will the most current backup\n" -"BEFORE the date you specify below.\n" -"\n" +#: src/stored/dircmd.c:1019 +#, c-format +msgid "3937 Device %s is busy with %d writer(s).\n" msgstr "" -#: src/dird/ua_restore.c:659 -msgid "Enter date as YYYY-MM-DD HH:MM:SS :" +#: src/stored/dvd.c:153 +#, c-format +msgid "Device %s cannot be mounted. ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:665 -msgid "Improper date format.\n" +#: src/stored/dvd.c:271 +#, c-format +msgid "Cannot run free space command (%s)\n" msgstr "" -#: src/dird/ua_restore.c:686 +#: src/stored/dvd.c:374 #, c-format -msgid "Cannot open file %s: ERR=%s\n" +msgid "Error while writing current part to the DVD: %s" msgstr "" -#: src/dird/ua_restore.c:694 src/dird/ua_restore.c:698 +#: src/stored/dvd.c:394 #, c-format -msgid "Error occurred on line %d of %s\n" +msgid "Remaining free space %s on %s\n" msgstr "" -#: src/dird/ua_restore.c:740 src/dird/ua_restore.c:778 -#: src/dird/ua_restore.c:809 src/dird/ua_dotcmds.c:231 +#: src/stored/dvd.c:464 #, c-format -msgid "Query failed: %s. ERR=%s\n" +msgid "Next Volume part already exists on DVD. Cannot continue: %s\n" msgstr "" -#: src/dird/ua_restore.c:744 src/dird/ua_restore.c:782 +#: src/stored/dvd.c:481 #, c-format -msgid "No database record found for: %s\n" +msgid "open_next_part can't unlink existing part %s, ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:769 -msgid "No JobId specified cannot continue.\n" +#: src/stored/dvd.c:700 +#, c-format +msgid "Unable to write part %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:813 +#: src/stored/fd_cmds.c:340 +msgid "Error parsing bootstrap file.\n" +msgstr "" + +#: src/stored/job.c:79 #, c-format -msgid "No table found: %s\n" +msgid "Bad Job Command from Director: %s\n" msgstr "" -#: src/dird/ua_restore.c:918 +#: src/stored/job.c:189 #, c-format -msgid "" -"\n" -"Building directory tree for JobId %s ... " +msgid "Job name not found: %s\n" msgstr "" -#: src/dird/ua_restore.c:937 -msgid "" -"\n" -"There were no files inserted into the tree, so file selection\n" -"is not possible.Most likely your retention policy pruned the files\n" +#: src/stored/job.c:200 +#, c-format +msgid "Hey!!!! JobId %u Job %s already authenticated.\n" msgstr "" -#: src/dird/ua_restore.c:939 -msgid "" -"\n" -"Do you want to restore all the files? (yes|no): " +#: src/stored/job.c:211 +msgid "Unable to authenticate File daemon\n" msgstr "" -#: src/dird/ua_restore.c:955 -#, c-format -msgid "" -"\n" -"1 Job, %s files inserted into the tree and marked for extraction.\n" +#: src/stored/job.c:338 +msgid "In free_jcr(), but still attached to device!!!!\n" msgstr "" -#: src/dird/ua_restore.c:959 +#: src/stored/label.c:74 +msgid "BAD call to read_dev_volume_label\n" +msgstr "" + +#: src/stored/label.c:79 src/stored/label.c:120 src/stored/label.c:208 #, c-format -msgid "" -"\n" -"1 Job, %s files inserted into the tree.\n" +msgid "Wrong Volume mounted on device %s: Wanted %s have %s\n" msgstr "" -#: src/dird/ua_restore.c:965 +#: src/stored/label.c:86 src/stored/label.c:123 src/stored/label.c:195 #, c-format -msgid "" -"\n" -"%d Jobs, %s files inserted into the tree and marked for extraction.\n" +msgid "Too many tries: %s" msgstr "" -#: src/dird/ua_restore.c:969 +#: src/stored/label.c:102 #, c-format -msgid "" -"\n" -"%d Jobs, %s files inserted into the tree.\n" +msgid "Couldn't rewind device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1046 +#: src/stored/label.c:140 #, c-format -msgid "Error getting FileSet \"%s\": ERR=%s\n" +msgid "" +"Requested Volume \"%s\" on %s is not a Bacula labeled Volume, because: ERR=%s" msgstr "" -#: src/dird/ua_restore.c:1054 src/dird/ua_select.c:167 -msgid "The defined FileSet resources are:\n" +#: src/stored/label.c:145 +msgid "Could not read Volume label from block.\n" msgstr "" -#: src/dird/ua_restore.c:1058 src/dird/ua_select.c:175 -msgid "Select FileSet resource" +#: src/stored/label.c:148 +#, c-format +msgid "Could not unserialize Volume label: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1065 +#: src/stored/label.c:153 #, c-format -msgid "Error getting FileSet record: %s\n" +msgid "Volume Header Id bad: %s\n" msgstr "" -#: src/dird/ua_restore.c:1066 -msgid "" -"This probably means you modified the FileSet.\n" -"Continuing anyway.\n" +#: src/stored/label.c:180 +#, c-format +msgid "Volume on %s has wrong Bacula version. Wanted %d got %d\n" msgstr "" -#: src/dird/ua_restore.c:1081 +#: src/stored/label.c:191 #, c-format -msgid "Pool \"%s\" not found, using any pool.\n" +msgid "Volume on %s has bad Bacula label type: %x\n" msgstr "" -#: src/dird/ua_restore.c:1107 src/dird/ua_restore.c:1123 +#: src/stored/label.c:272 #, c-format -msgid "No Full backup before %s found.\n" +msgid "Cannot write Volume label to block for device %s\n" msgstr "" -#: src/dird/ua_restore.c:1146 -msgid "No jobs found.\n" +#: src/stored/label.c:400 +#, c-format +msgid "Rewind error on device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1312 -msgid "" -"Warning, the JobIds that you selected refer to more than one MediaType.\n" -"Restore is not possible. The MediaTypes used are:\n" +#: src/stored/label.c:405 +#, c-format +msgid "Truncate error on device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1320 -msgid "No MediaType found for your JobIds.\n" +#: src/stored/label.c:427 +#, c-format +msgid "Unable to write device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1352 +#: src/stored/label.c:455 #, c-format -msgid "Warning default storage overridden by %s on command line.\n" +msgid "Recycled volume \"%s\" on device %s, all previous data lost.\n" msgstr "" -#: src/dird/ua_restore.c:1363 +#: src/stored/label.c:458 #, c-format -msgid "" -"\n" -"Warning. Unable to find Storage resource for\n" -"MediaType \"%s\", needed by the Jobs you selected.\n" -"You will be allowed to select a Storage device later.\n" +msgid "Wrote label to prelabeled Volume \"%s\" on device %s\n" msgstr "" -#: src/dird/jobq.c:67 +#: src/stored/label.c:657 #, c-format -msgid "pthread_attr_init: ERR=%s\n" +msgid "Bad session label = %d\n" msgstr "" -#: src/dird/jobq.c:76 +#: src/stored/label.c:675 src/stored/label.c:682 #, c-format -msgid "pthread_mutex_init: ERR=%s\n" +msgid "Error writing Session label to %s: %s\n" msgstr "" -#: src/dird/jobq.c:82 +#: src/stored/label.c:717 #, c-format -msgid "pthread_cond_init: ERR=%s\n" +msgid "Expecting Volume Label, got FI=%s Stream=%s len=%d\n" msgstr "" -#: src/dird/jobq.c:115 src/dird/jobq.c:242 src/dird/jobq.c:307 -#: src/dird/jobq.c:388 +#: src/stored/label.c:844 #, c-format -msgid "pthread_mutex_lock: ERR=%s\n" +msgid "Unknown %d" msgstr "" -#: src/dird/jobq.c:128 +#: src/stored/label.c:848 #, c-format -msgid "pthread_cond_broadcast: 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/jobq.c:136 +#: src/stored/label.c:870 #, c-format -msgid "pthread_cond_wait: ERR=%s\n" +msgid "Date label written: %s\n" msgstr "" -#: src/dird/jobq.c:144 +#: src/stored/label.c:876 #, c-format -msgid "pthread_mutex_unlock: ERR=%s\n" +msgid "Date label written: %04d-%02d-%02d at %02d:%02d\n" msgstr "" -#: src/dird/jobq.c:180 +#: src/stored/label.c:896 #, c-format -msgid "Job %s waiting %d seconds for scheduled start time.\n" +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/jobq.c:235 +#: src/stored/label.c:909 #, c-format -msgid "pthread_thread_create: ERR=%s\n" +msgid "" +"Job (unique name) : %s\n" +"FileSet : %s\n" +"JobType : %c\n" +"JobLevel : %c\n" msgstr "" -#: src/dird/jobq.c:353 +#: src/stored/label.c:918 #, c-format -msgid "pthread_cond_signal: ERR=%s\n" +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/jobq.c:362 +#: src/stored/label.c:939 #, c-format -msgid "pthread_create: ERR=%s\n" +msgid "Date written : %s\n" msgstr "" -#: src/dird/jobq.c:487 +#: src/stored/label.c:944 #, c-format -msgid "Rescheduled Job %s at %s to re-run in %d seconds.\n" +msgid "Date written : %04d-%02d-%02d at %02d:%02d\n" msgstr "" -#: src/dird/ua_prune.c:173 -msgid "Choose item to prune" +#: src/stored/label.c:963 +msgid "Fresh Volume" msgstr "" -#: src/dird/ua_prune.c:254 -msgid "No Files found to prune.\n" +#: src/stored/label.c:966 +msgid "Volume" msgstr "" -#: src/dird/ua_prune.c:286 -#, c-format -msgid "Pruned Files from %s Jobs for client %s from catalog.\n" +#: src/stored/label.c:975 src/stored/read_record.c:336 +msgid "End of Media" msgstr "" -#: src/dird/ua_prune.c:392 -msgid "No Jobs found to prune.\n" +#: src/stored/label.c:978 +msgid "End of Tape" msgstr "" -#: src/dird/ua_prune.c:453 +#: src/stored/label.c:998 src/stored/label.c:1006 src/stored/label.c:1039 #, c-format -msgid "Pruned %d %s for client %s from catalog.\n" +msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n" msgstr "" -#: src/dird/ua_prune.c:454 -msgid "Jobs" +#: src/stored/label.c:1003 +msgid "End of physical tape.\n" msgstr "" -#: src/dird/ua_prune.c:501 +#: src/stored/label.c:1018 src/stored/label.c:1027 #, c-format -msgid "There are no Jobs associated with Volume \"%s\". Prune not needed.\n" +msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d\n" msgstr "" -#: src/dird/ua_prune.c:508 src/dird/ua_purge.c:485 +#: src/stored/label.c:1020 #, c-format -msgid "There are no Jobs associated with Volume \"%s\". Marking it purged.\n" +msgid " Job=%s Date=%s Level=%c Type=%c\n" msgstr "" -#: src/dird/ua_prune.c:566 +#: src/stored/label.c:1029 #, c-format -msgid "Pruned %d %s on Volume \"%s\" from catalog.\n" +msgid " Date=%s Level=%c Type=%c Files=%s Bytes=%s Errors=%d Status=%c\n" msgstr "" -#: src/dird/next_vol.c:130 +#: src/stored/mount.c:198 src/stored/mount.c:295 #, c-format -msgid "Purging oldest volume \"%s\"\n" +msgid "Volume \"%s\" not on device %s.\n" msgstr "" -#: src/dird/next_vol.c:136 +#: src/stored/mount.c:231 #, c-format -msgid "Pruning oldest volume \"%s\"\n" -msgstr "" - -#: src/dird/next_vol.c:155 -msgid "We seem to be looping trying to find the next volume. I give up.\n" +msgid "" +"Director wanted Volume \"%s\".\n" +" Current Volume \"%s\" not acceptable because:\n" +" %s" msgstr "" -#: src/dird/next_vol.c:180 +#: src/stored/mount.c:285 #, c-format -msgid "Max Volume bytes exceeded. Marking Volume \"%s\" as Full.\n" +msgid "Labeled new Volume \"%s\" on device %s.\n" msgstr "" -#: src/dird/next_vol.c:187 +#: src/stored/mount.c:290 #, c-format -msgid "Volume used once. Marking Volume \"%s\" as Used.\n" +msgid "Warning device %s not configured to autolabel Volumes.\n" msgstr "" -#: src/dird/next_vol.c:194 +#: src/stored/mount.c:342 #, c-format -msgid "Max Volume jobs exceeded. Marking Volume \"%s\" as Used.\n" +msgid "Volume \"%s\" previously written, moving to end of data.\n" msgstr "" -#: src/dird/next_vol.c:201 +#: src/stored/mount.c:345 #, c-format -msgid "Max Volume files exceeded. Marking Volume \"%s\" as Used.\n" +msgid "Unable to position to end of data on device %s: ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:211 +#: src/stored/mount.c:357 #, c-format -msgid "Max configured use duration exceeded. Marking Volume \"%s\" as Used.\n" +msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" msgstr "" -#: src/dird/next_vol.c:221 +#: src/stored/mount.c:360 #, c-format -msgid "Catalog error updating volume \"%s\". ERR=%s" +msgid "" +"I cannot write on Volume \"%s\" because:\n" +"The number of files mismatch! Volume=%u Catalog=%u\n" msgstr "" -#: src/dird/next_vol.c:242 -msgid "volume has expired" +#: src/stored/mount.c:388 +#, c-format +msgid "Ready to append to end of Volume \"%s\" at file address=%u.\n" msgstr "" -#: src/dird/next_vol.c:260 src/dird/next_vol.c:296 +#: src/stored/mount.c:392 #, c-format -msgid "Recycled current volume \"%s\"\n" +msgid "" +"I cannot write on Volume \"%s\" because:\n" +"The EOD file address is wrong: Volume file address=%u != Catalog Endblock=%u" +"(+1)\n" +"You probably removed DVD last part in spool directory.\n" msgstr "" -#: src/dird/next_vol.c:265 -msgid "and recycling of current volume failed" +#: src/stored/mount.c:418 +#, c-format +msgid "Marking Volume \"%s\" in Error in Catalog.\n" msgstr "" -#: src/dird/next_vol.c:271 -msgid "but should be Append, Purged or Recycle" +#: src/stored/mount.c:434 +#, c-format +msgid "" +"Autochanger Volume \"%s\" not found in slot %d.\n" +" Setting InChanger to zero in catalog.\n" msgstr "" -#: src/dird/next_vol.c:299 -msgid "" -"but should be Append, Purged or Recycle (recycling of the current volume " -"failed)" +#: src/stored/mount.c:453 +msgid "Hey!!!!! WroteVol non-zero !!!!!\n" msgstr "" -#: src/dird/next_vol.c:303 +#: src/stored/parse_bsr.c:104 src/stored/parse_bsr.c:108 +#, c-format msgid "" -"but should be Append, Purged or Recycle (cannot automatically recycle " -"current volume, as it still contains unpruned data)" +"Bootstrap file error: %s\n" +" : Line %d, col %d of file %s\n" +"%s\n" msgstr "" -#: src/dird/next_vol.c:343 +#: src/stored/parse_bsr.c:130 #, c-format -msgid "Unable to get Pool record: ERR=%s" +msgid "Cannot open bootstrap file %s: %s\n" msgstr "" -#: src/dird/next_vol.c:348 +#: src/stored/parse_bsr.c:260 #, c-format -msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" +msgid "MediaType %s in bsr at inappropriate place.\n" msgstr "" -#: src/dird/next_vol.c:361 -#, c-format -msgid "Failed to move Scratch Volume. ERR=%s\n" +#: src/stored/parse_bsr.c:416 +msgid "JobType not yet implemented\n" msgstr "" -#: src/dird/next_vol.c:365 -#, c-format -msgid "Using Volume \"%s\" from 'Scratch' pool.\n" +#: src/stored/parse_bsr.c:424 +msgid "JobLevel not yet implemented\n" msgstr "" -#: src/dird/next_vol.c:373 +#: src/stored/parse_bsr.c:626 #, c-format -msgid "Unable to update Volume record: ERR=%s" +msgid "VolFile : %u-%u\n" msgstr "" -#: src/dird/recycle.c:99 +#: src/stored/parse_bsr.c:634 #, c-format -msgid "Recycled volume \"%s\"\n" +msgid "VolBlock : %u-%u\n" msgstr "" -#: src/dird/expand.c:240 +#: src/stored/parse_bsr.c:644 #, c-format -msgid "Count not update counter %s: ERR=%s\n" +msgid "FileIndex : %u\n" msgstr "" -#: src/dird/expand.c:412 +#: src/stored/parse_bsr.c:646 #, c-format -msgid "Cannot create var context: ERR=%s\n" +msgid "FileIndex : %u-%u\n" msgstr "" -#: src/dird/expand.c:417 +#: src/stored/parse_bsr.c:656 #, c-format -msgid "Cannot set var callback: ERR=%s\n" +msgid "JobId : %u\n" msgstr "" -#: src/dird/expand.c:423 +#: src/stored/parse_bsr.c:658 #, c-format -msgid "Cannot set var operate: ERR=%s\n" +msgid "JobId : %u-%u\n" msgstr "" -#: src/dird/expand.c:429 src/dird/expand.c:444 +#: src/stored/parse_bsr.c:668 #, c-format -msgid "Cannot unescape string: ERR=%s\n" +msgid "SessId : %u\n" msgstr "" -#: src/dird/expand.c:437 +#: src/stored/parse_bsr.c:670 #, c-format -msgid "Cannot expand expression \"%s\": ERR=%s\n" +msgid "SessId : %u-%u\n" msgstr "" -#: src/dird/expand.c:455 +#: src/stored/parse_bsr.c:679 #, c-format -msgid "Cannot destroy var context: ERR=%s\n" +msgid "VolumeName : %s\n" msgstr "" -#: src/dird/dird.c:71 -#, c-format -msgid "" -"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 set configuration file to file\n" -" -dnn set debug level to nn\n" -" -f run in foreground (for debugging)\n" -" -g groupid\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/stored/parse_bsr.c:688 +#, c-format +msgid "Client : %s\n" msgstr "" -#: src/dird/dird.c:396 -msgid "Too many open reload requests. Request ignored.\n" +#: src/stored/parse_bsr.c:696 +#, c-format +msgid "Job : %s\n" msgstr "" -#: src/dird/dird.c:411 -msgid "Out of reload table entries. Giving up.\n" +#: src/stored/parse_bsr.c:704 +#, c-format +msgid "SessTime : %u\n" msgstr "" -#: src/dird/dird.c:414 -msgid "Resetting previous configuration.\n" +#: src/stored/parse_bsr.c:718 +msgid "BSR is NULL\n" msgstr "" -#: src/dird/dird.c:586 src/dird/dird.c:599 +#: src/stored/parse_bsr.c:722 #, c-format -msgid "Hey something is wrong. p=0x%lu\n" +msgid "Next : 0x%x\n" msgstr "" -#: src/dird/dird.c:658 +#: src/stored/parse_bsr.c:723 #, c-format -msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" +msgid "Root bsr : 0x%x\n" msgstr "" -#: src/dird/dird.c:665 -msgid "Too many items in Job resource\n" +#: src/stored/parse_bsr.c:734 +#, c-format +msgid "Slot : %u\n" msgstr "" -#: src/dird/dird.c:686 +#: src/stored/parse_bsr.c:737 #, c-format -msgid "%s" +msgid "count : %u\n" msgstr "" -#: src/dird/dird.c:728 +#: src/stored/parse_bsr.c:738 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Storage \"%s\" in %s.\n" +msgid "found : %u\n" msgstr "" -#: src/dird/dird.c:795 +#: src/stored/parse_bsr.c:741 #, c-format -msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" +msgid "done : %s\n" msgstr "" -#: src/dird/dird.c:801 +#: src/stored/parse_bsr.c:742 #, c-format -msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" +msgid "positioning : %d\n" msgstr "" -#: src/dird/dird.c:807 +#: src/stored/parse_bsr.c:743 #, 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 "fast_reject : %d\n" msgstr "" -#: src/dird/dird.c:847 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon \"%s\" in %s.\n" +#: src/stored/pythonsd.c:202 +msgid "Error in ParseTuple\n" msgstr "" -#: src/dird/ua_label.c:89 -msgid "Negative numbers not permitted\n" +#: src/stored/pythonsd.c:218 +msgid "Parse tuple error in job_write\n" msgstr "" -#: src/dird/ua_label.c:95 -msgid "Range end is not integer.\n" +#: src/stored/pythonsd.c:254 +#, c-format +msgid "Error in Python method %s\n" msgstr "" -#: src/dird/ua_label.c:100 -msgid "Range start is not an integer.\n" +#: src/stored/read.c:55 +msgid "No Volume names found for restore.\n" msgstr "" -#: src/dird/ua_label.c:106 -msgid "Range end not bigger than start.\n" +#: src/stored/read.c:109 +#, c-format +msgid ">filed: Error Hdr=%s\n" msgstr "" -#: src/dird/ua_label.c:112 -msgid "Input value is not an integer.\n" +#: src/stored/read.c:110 src/stored/read.c:125 +#, c-format +msgid "Error sending to File daemon. ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:118 -msgid "Values must be be greater than zero.\n" +#: src/stored/read.c:124 +#, c-format +msgid "Error sending to FD. ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:122 -msgid "Slot too large.\n" +#: src/stored/read_record.c:68 +#, c-format +msgid "End of Volume at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/dird/ua_label.c:176 src/dird/ua_label.c:473 -msgid "No slots in changer to scan.\n" +#: src/stored/read_record.c:71 +msgid "End of all volumes.\n" msgstr "" -#: src/dird/ua_label.c:188 src/dird/ua_label.c:484 -msgid "No Volumes found to label, or no barcodes.\n" +#: src/stored/read_record.c:105 +#, c-format +msgid "Got EOF at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/dird/ua_label.c:198 +#: src/stored/read_record.c:119 +msgid "Did fsr\n" +msgstr "" + +#: src/stored/read_record.c:276 #, c-format -msgid "Slot %d greater than max %d ignored.\n" +msgid "Reposition from (file:block) %u:%u to %u:%u\n" msgstr "" -#: src/dird/ua_label.c:227 +#: src/stored/read_record.c:303 #, c-format -msgid "No VolName for Slot=%d InChanger set to zero.\n" +msgid "Forward spacing to file:block %u:%u.\n" msgstr "" -#: src/dird/ua_label.c:242 +#: src/stored/read_record.c:329 +msgid "Begin Session" +msgstr "" + +#: src/stored/read_record.c:333 +msgid "End Session" +msgstr "" + +#: src/stored/read_record.c:339 #, c-format -msgid "Catalog record for Volume \"%s\" updated to reference slot %d.\n" +msgid "Unknown code %d\n" msgstr "" -#: src/dird/ua_label.c:246 +#: src/stored/record.c:60 #, c-format -msgid "Catalog record for Volume \"%s\" is up to date.\n" +msgid "unknown: %d" msgstr "" -#: src/dird/ua_label.c:252 +#: src/stored/record.c:343 +msgid "Damaged buffer\n" +msgstr "" + +#: src/stored/reserve.c:467 src/stored/reserve.c:479 #, c-format -msgid "Volume \"%s\" not found in catalog. Slot=%d InChanger set to zero.\n" +msgid "Failed command: %s\n" msgstr "" -#: src/dird/ua_label.c:344 +#: src/stored/reserve.c:469 #, c-format msgid "" -"Volume \"%s\" has VolStatus %s. It must be Purged or Recycled before " -"relabeling.\n" +"\n" +" Device \"%s\" with MediaType \"%s\" requested by DIR not found in SD " +"Device resources.\n" msgstr "" -#: src/dird/ua_label.c:360 -msgid "Enter new Volume name: " +#: src/stored/reserve.c:647 +#, c-format +msgid "3926 Could not get dcr for device: %s\n" msgstr "" -#: src/dird/ua_label.c:373 +#: src/stored/reserve.c:709 #, c-format -msgid "Media record for new Volume \"%s\" already exists.\n" +msgid "3601 JobId=%u device %s is BLOCKED due to user unmount.\n" msgstr "" -#: src/dird/ua_label.c:388 -msgid "Enter slot (0 or Enter for none): " +#: src/stored/reserve.c:718 +#, c-format +msgid "3602 JobId=%u device %s is busy (already reading/writing).\n" msgstr "" -#: src/dird/ua_label.c:413 +#: src/stored/reserve.c:761 #, c-format -msgid "Delete of Volume \"%s\" failed. ERR=%s" +msgid "3603 JobId=%u device %s is busy reading.\n" msgstr "" -#: src/dird/ua_label.c:416 +#: src/stored/reserve.c:770 #, c-format -msgid "Old volume \"%s\" deleted from catalog.\n" +msgid "3604 JobId=%u device %s is BLOCKED due to user unmount.\n" msgstr "" -#: src/dird/ua_label.c:427 +#: src/stored/reserve.c:836 #, c-format -msgid "Requesting to mount %s ...\n" +msgid "3605 JobId=%u wants free drive but device %s is busy.\n" msgstr "" -#: src/dird/ua_label.c:449 -msgid "Do not forget to mount the drive!!!\n" +#: src/stored/reserve.c:844 +#, c-format +msgid "3606 JobId=%u wants mounted, but drive %s has no Volume.\n" msgstr "" -#: src/dird/ua_label.c:489 -msgid "" -"The following Volumes will be labeled:\n" -"Slot Volume\n" -"==============\n" +#: src/stored/reserve.c:854 +#, c-format +msgid "3607 JobId=%u wants Vol=\"%s\" drive has Vol=\"%s\" on drive %s.\n" msgstr "" -#: src/dird/ua_label.c:519 +#: src/stored/reserve.c:890 #, c-format -msgid "Media record for Slot %d Volume \"%s\" already exists.\n" +msgid "3608 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" on drive %s.\n" msgstr "" -#: src/dird/ua_label.c:525 +#: src/stored/reserve.c:933 #, c-format -msgid "Error setting InChanger: ERR=%s" +msgid "3609 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" on drive %s.\n" msgstr "" -#: src/dird/ua_label.c:548 -#, c-format -msgid "Maximum pool Volumes=%d reached.\n" +#: src/stored/reserve.c:941 src/stored/reserve.c:945 +msgid "Logic error!!!! Should not get here.\n" msgstr "" -#: src/dird/ua_label.c:555 +#: src/stored/reserve.c:942 #, c-format -msgid "Catalog record for cleaning tape \"%s\" successfully created.\n" +msgid "3910 JobId=%u Logic error!!!! drive %s Should not get here.\n" msgstr "" -#: src/dird/ua_label.c:562 +#: src/stored/reserve.c:948 #, c-format -msgid "Catalog error on cleaning tape: %s" +msgid "3911 JobId=%u failed reserve drive %s.\n" msgstr "" -#: src/dird/ua_label.c:598 +#: src/stored/spool.c:69 #, c-format -msgid "Illegal character \"%c\" in a volume name.\n" +msgid "" +"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" msgstr "" -#: src/dird/ua_label.c:643 +#: src/stored/spool.c:75 #, c-format -msgid "Sending relabel command from \"%s\" to \"%s\" ...\n" +msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" msgstr "" -#: src/dird/ua_label.c:650 -#, c-format -msgid "Sending label command for Volume \"%s\" Slot %d ...\n" +#: src/stored/spool.c:91 +msgid "Spooling data ...\n" msgstr "" -#: src/dird/ua_label.c:682 +#: src/stored/spool.c:117 #, c-format -msgid "Catalog record for Volume \"%s\", Slot %d successfully created.\n" +msgid "Bad return from despool WroteVol=%d\n" msgstr "" -#: src/dird/ua_label.c:695 +#: src/stored/spool.c:150 #, c-format -msgid "Label command failed for Volume %s.\n" +msgid "Open data spool file %s failed: ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:705 +#: src/stored/spool.c:199 #, c-format -msgid "Connecting to Storage daemon %s at %s:%d ...\n" +msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" msgstr "" -#: src/dird/ua_label.c:733 -msgid "Could not open SD socket.\n" +#: src/stored/spool.c:204 +#, c-format +msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" msgstr "" -#: src/dird/ua_label.c:739 +#: src/stored/spool.c:258 src/stored/spool.c:432 src/stored/spool.c:470 #, c-format -msgid "readlabel %s Slot=%d drive=%d\n" +msgid "Ftruncate spool file failed: ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:781 +#: src/stored/spool.c:260 #, c-format -msgid "autochanger list %s \n" +msgid "Bad return from ftruncate. ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:805 src/dird/ua_label.c:815 +#: src/stored/spool.c:309 #, c-format -msgid "Invalid Slot number: %s\n" +msgid "Spool header read error. ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:824 +#: src/stored/spool.c:312 #, c-format -msgid "Invalid Volume name: %s\n" +msgid "Spool read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/ua_label.c:893 +#: src/stored/spool.c:313 #, c-format -msgid "autochanger slots %s\n" +msgid "Spool header read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/ua_label.c:903 +#: src/stored/spool.c:319 src/stored/spool.c:320 #, c-format -msgid "Device \"%s\" has %d slots.\n" +msgid "Spool block too big. Max %u bytes, got %u\n" msgstr "" -#: src/dird/ua_label.c:925 +#: src/stored/spool.c:325 src/stored/spool.c:326 #, c-format -msgid "autochanger drives %s\n" +msgid "Spool data read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/ua_label.c:952 +#: src/stored/spool.c:383 +msgid "User specified spool size reached.\n" +msgstr "" + +#: src/stored/spool.c:385 +msgid "Bad return from despool in write_block.\n" +msgstr "" + +#: src/stored/spool.c:393 +msgid "Spooling data again ...\n" +msgstr "" + +#: src/stored/spool.c:424 #, c-format -msgid "Pool \"%s\" resource not found!\n" +msgid "Error writing header to spool file. ERR=%s\n" msgstr "" -#: src/dird/authenticate.c:93 -msgid "Director and Storage daemon passwords or names not the same.\n" +#: src/stored/spool.c:438 src/stored/spool.c:476 +msgid "Fatal despooling error." msgstr "" -#: src/dird/authenticate.c:95 -msgid "" -"Director unable to authenticate with Storage daemon. 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 http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +#: src/stored/spool.c:445 +msgid "Retrying after header spooling error failed.\n" +msgstr "" + +#: src/stored/spool.c:459 +#, c-format +msgid "Error writing data to spool file. ERR=%s\n" msgstr "" -#: src/dird/authenticate.c:193 -msgid "Director and File daemon passwords or names not the same.\n" +#: src/stored/spool.c:486 +msgid "Retrying after data spooling error failed.\n" msgstr "" -#: src/dird/authenticate.c:195 -msgid "" -"Unable to authenticate with File daemon. Possible causes:\n" -"Passwords or names not the same or\n" -"Maximum Concurrent Jobs exceeded on the FD or\n" -"FD networking messed up (restart daemon).\n" -"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +#: src/stored/spool.c:541 src/stored/spool.c:548 +#, c-format +msgid "Fseek on attributes file failed: ERR=%s\n" msgstr "" -#: src/dird/authenticate.c:268 +#: src/stored/spool.c:558 #, c-format -msgid "UA Hello from %s:%s:%d is invalid. Len=%d\n" +msgid "Sending spooled attrs to the Director. Despooling %s bytes ...\n" msgstr "" -#: src/dird/authenticate.c:275 +#: src/stored/spool.c:585 #, c-format -msgid "UA Hello from %s:%s:%d is invalid. Got: %s\n" +msgid "fopen attr spool file %s failed: ERR=%s\n" msgstr "" -#: src/dird/authenticate.c:332 +#: src/stored/status.c:67 +#, c-format msgid "" -"Authorization problem: Remote client did not advertise required TLS " -"support.\n" +"\n" +"%s Version: %s (%s) %s %s %s\n" msgstr "" -#: src/dird/authenticate.c:340 -msgid "Authorization problem: Remote client requires TLS.\n" +#: src/stored/status.c:103 +msgid "" +"\n" +"Device status:\n" msgstr "" -#: src/dird/authenticate.c:368 +#: src/stored/status.c:105 #, c-format -msgid "Unable to authenticate console \"%s\" at %s:%s:%d.\n" +msgid "Autochanger \"%s\" with devices:\n" msgstr "" -#: src/dird/authenticate.c:373 +#: src/stored/status.c:119 #, c-format -msgid "1000 OK: %s Version: %s (%s)\n" +msgid "Device %s is mounted with Volume=\"%s\" Pool=\"%s\"\n" msgstr "" -#: src/dird/ua_select.c:39 +#: src/stored/status.c:123 #, c-format -msgid "The current %s retention period is: %s\n" +msgid "Device %s open but no Bacula volume is mounted.\n" msgstr "" -#: src/dird/ua_select.c:41 -msgid "Continue? (yes/mod/no): " +#: src/stored/status.c:133 +#, c-format +msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" msgstr "" -#: src/dird/ua_select.c:45 -msgid "Enter new retention period: " +#: src/stored/status.c:147 +#, c-format +msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" msgstr "" -#: src/dird/ua_select.c:49 -msgid "Invalid period.\n" +#: src/stored/status.c:152 +#, c-format +msgid " Positioned at File=%s Block=%s\n" msgstr "" -#: src/dird/ua_select.c:128 -msgid "You have the following choices:\n" +#: src/stored/status.c:158 +#, c-format +msgid "Device %s is not open or does not exist.\n" msgstr "" -#: src/dird/ua_select.c:144 -msgid "The defined Storage resources are:\n" +#: src/stored/status.c:160 +#, c-format +msgid "Device \"%s\" is not open or does not exist.\n" msgstr "" -#: src/dird/ua_select.c:152 -msgid "Select Storage resource" +#: src/stored/status.c:165 src/stored/status.c:168 src/stored/status.c:172 +#: src/stored/status.c:174 +msgid "" +"====\n" +"\n" msgstr "" -#: src/dird/ua_select.c:193 -msgid "catalog" +#: src/stored/status.c:166 +msgid "In Use Volume status:\n" msgstr "" -#: src/dird/ua_select.c:201 -msgid "The defined Catalog resources are:\n" +#: src/stored/status.c:190 +msgid "" +"No DEVICE structure.\n" +"\n" msgstr "" -#: src/dird/ua_select.c:209 -msgid "Catalog" +#: src/stored/status.c:195 +msgid " Device is BLOCKED. User unmounted.\n" msgstr "" -#: src/dird/ua_select.c:209 -msgid "Select Catalog resource" +#: src/stored/status.c:198 +msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" msgstr "" -#: src/dird/ua_select.c:226 -msgid "The defined Job resources are:\n" +#: src/stored/status.c:202 +#, c-format +msgid " Device is BLOCKED waiting for mount of volume \"%s\".\n" msgstr "" -#: src/dird/ua_select.c:234 -msgid "Select Job resource" +#: src/stored/status.c:205 +msgid " Device is BLOCKED waiting for media.\n" msgstr "" -#: src/dird/ua_select.c:249 -msgid "The defined Restore Job resources are:\n" +#: src/stored/status.c:209 +msgid " Device is being initialized.\n" msgstr "" -#: src/dird/ua_select.c:257 -msgid "Select Restore Job" +#: src/stored/status.c:212 +msgid " Device is blocked labeling a Volume.\n" msgstr "" -#: src/dird/ua_select.c:274 -msgid "The defined Client resources are:\n" +#: src/stored/status.c:220 +#, c-format +msgid " Slot %d is loaded in drive %d.\n" msgstr "" -#: src/dird/ua_select.c:282 -msgid "Select Client (File daemon) resource" +#: src/stored/status.c:223 +#, c-format +msgid " Drive %d is not loaded.\n" msgstr "" -#: src/dird/ua_select.c:309 -#, c-format -msgid "Error: Client resource %s does not exist.\n" +#: src/stored/status.c:242 +msgid "Device state:\n" msgstr "" -#: src/dird/ua_select.c:334 +#: src/stored/status.c:256 #, c-format -msgid "Could not find Client %s: ERR=%s" +msgid "" +"num_writers=%d JobStatus=%c block=%d\n" +"\n" msgstr "" -#: src/dird/ua_select.c:338 -msgid "fd" +#: src/stored/status.c:260 +#, c-format +msgid "Archive name: %s Device name: %s\n" msgstr "" -#: src/dird/ua_select.c:344 src/dird/ua_select.c:398 +#: src/stored/status.c:262 #, c-format -msgid "Could not find Client \"%s\": ERR=%s" +msgid "File=%u block=%u\n" msgstr "" -#: src/dird/ua_select.c:373 +#: src/stored/status.c:263 #, c-format -msgid "Error obtaining client ids. ERR=%s\n" +msgid "Min block=%u Max block=%u\n" msgstr "" -#: src/dird/ua_select.c:377 -msgid "No clients defined. You must run a job before using this command.\n" +#: src/stored/status.c:280 +#, c-format +msgid "%s Job %s waiting for Client connection.\n" msgstr "" -#: src/dird/ua_select.c:381 -msgid "Defined Clients:\n" +#: src/stored/status.c:295 +#, c-format +msgid "" +"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=\"%s\"\n" msgstr "" -#: src/dird/ua_select.c:391 -msgid "Select the Client" +#: src/stored/status.c:307 +#, c-format +msgid "" +"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=\"%s\"\n" msgstr "" -#: src/dird/ua_select.c:424 src/dird/ua_select.c:447 src/dird/ua_select.c:483 +#: src/stored/status.c:330 #, c-format -msgid "Could not find Pool \"%s\": ERR=%s" +msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" msgstr "" -#: src/dird/ua_select.c:458 src/dird/ua_output.c:394 -#, c-format -msgid "Error obtaining pool ids. ERR=%s\n" +#: src/stored/status.c:335 +msgid " FDSocket closed\n" msgstr "" -#: src/dird/ua_select.c:462 -msgid "No pools defined. Use the \"create\" command to create one.\n" +#: src/stored/status.c:352 +msgid "" +"\n" +"Jobs waiting to reserve a drive:\n" msgstr "" -#: src/dird/ua_select.c:466 -msgid "Defined Pools:\n" +#: src/stored/status.c:380 +msgid " JobId Level Files Bytes Status Finished Name \n" msgstr "" -#: src/dird/ua_select.c:476 -msgid "Select the Pool" +#: src/stored/status.c:514 +msgid "3900 Bad .status command, missing argument.\n" msgstr "" -#: src/dird/ua_select.c:506 -#, c-format -msgid "No access to Pool \"%s\"\n" +#: src/stored/status.c:537 +msgid "3900 Bad .status command, wrong argument.\n" msgstr "" -#: src/dird/ua_select.c:532 -msgid "Enter MediaId or Volume name: " +#: src/stored/stored.c:65 +#, c-format +msgid "" +"Copyright (C) 2000-2005 Kern Sibbald.\n" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: stored [options] [-c config_file] [config_file]\n" +" -c use as configuration file\n" +" -dnn set debug level to nn\n" +" -f run in foreground (for debugging)\n" +" -g set groupid to group\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_select.c:558 -msgid "The defined Pool resources are:\n" +#: src/stored/stored.c:220 +msgid "Volume Session Time is ZERO!\n" msgstr "" -#: src/dird/ua_select.c:566 -msgid "Select Pool resource" +#: src/stored/stored.c:233 +#, c-format +msgid "Unable to create thread. ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:601 -msgid "Enter the JobId to select: " +#: src/stored/stored.c:271 +#, c-format +msgid "Only one Storage resource permitted in %s\n" msgstr "" -#: src/dird/ua_select.c:639 +#: src/stored/stored.c:276 #, c-format -msgid "Could not find Job \"%s\": ERR=%s" +msgid "No Director resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_select.c:716 +#: src/stored/stored.c:281 #, c-format -msgid "Automatically selected %s: %s\n" +msgid "No Device resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_select.c:721 +#: src/stored/stored.c:289 #, c-format -msgid "Cannot select %s in batch mode.\n" +msgid "No Messages resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_select.c:735 -msgid "Selection is empty!\n" +#: src/stored/stored.c:316 +#, c-format +msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_select.c:741 -msgid "Item 1 selected automatically.\n" +#: src/stored/stored.c:322 +#, c-format +msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_select.c:752 -msgid "Selection aborted, nothing done.\n" +#: src/stored/stored.c:328 +#, 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 "" -#: src/dird/ua_select.c:757 +#: src/stored/stored.c:455 #, c-format -msgid "Please enter a number between 1 and %d\n" +msgid "Could not initialize %s\n" msgstr "" -#: src/dird/ua_select.c:806 -msgid "Storage name given twice.\n" +#: src/stored/stored.c:468 +#, c-format +msgid "Could not open device %s\n" msgstr "" -#: src/dird/ua_select.c:823 +#: src/stored/stored.c:481 #, c-format -msgid "Expecting jobid=nn command, got: %s\n" +msgid "Could not mount device %s\n" msgstr "" -#: src/dird/ua_select.c:827 +#: src/stored/stored_conf.c:216 #, c-format -msgid "JobId %s is not running.\n" +msgid "Expected a Device Type keyword, got: %s" msgstr "" -#: src/dird/ua_select.c:836 +#: src/stored/stored_conf.c:231 #, c-format -msgid "Expecting job=xxx, got: %s.\n" +msgid "Warning: no \"%s\" resource (%d) defined.\n" msgstr "" -#: src/dird/ua_select.c:840 +#: src/stored/stored_conf.c:234 #, c-format -msgid "Job \"%s\" is not running.\n" +msgid "dump_resource type=%d\n" msgstr "" -#: src/dird/ua_select.c:856 +#: src/stored/stored_conf.c:350 #, c-format -msgid "Storage resource \"%s\": not found\n" +msgid "Warning: unknown resource type %d\n" msgstr "" -#: src/dird/ua_select.c:888 -msgid "Enter autochanger drive[0]: " +#: src/stored/stored_conf.c:539 +#, c-format +msgid "\"%s\" item is required in \"%s\" resource, but not found.\n" msgstr "" -#: src/dird/ua_select.c:918 -msgid "Media Types defined in conf file:\n" +#: src/stored/stored_conf.c:545 +#, c-format +msgid "Too many items in \"%s\" resource\n" msgstr "" -#: src/dird/ua_select.c:924 -msgid "Media Type" +#: src/stored/stored_conf.c:579 +#, c-format +msgid "Cannot find AutoChanger resource %s\n" msgstr "" -#: src/dird/ua_select.c:924 -msgid "Select the Media Type" +#: src/stored/stored_conf.c:650 +#, c-format +msgid "" +"Attempt to define second \"%s\" resource named \"%s\" is not permitted.\n" msgstr "" -#: src/dird/catreq.c:110 src/dird/catreq.c:303 +#: src/stored/wait.c:114 #, c-format -msgid "1990 Invalid Catalog Request: %s" +msgid "pthread timedwait error. ERR=%s\n" msgstr "" -#: src/dird/catreq.c:111 +#: src/stored/wait.c:199 #, c-format -msgid "Invalid Catalog request; DB not open: %s" +msgid "Job %s waiting to reserve a device.\n" msgstr "" -#: src/dird/catreq.c:136 -msgid "1901 No Media.\n" +#: src/tools/bsmtp.c:85 +#, c-format +msgid "Fatal malformed reply from %s: %s\n" msgstr "" -#: src/dird/catreq.c:164 -msgid "not in Pool" +#: src/tools/bsmtp.c:121 +#, c-format +msgid "" +"\n" +"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" +" -c set the Cc: field\n" +" -dnn set debug level to nn\n" +" -f set the From: field\n" +" -h use mailhost:port as the SMTP server\n" +" -s set the Subject: field\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/dird/catreq.c:166 -msgid "not correct MediaType" +#: src/tools/bsmtp.c:204 +msgid "Fatal error: no recipient given.\n" msgstr "" -#: src/dird/catreq.c:182 +#: src/tools/bsmtp.c:225 #, c-format -msgid "1998 Volume \"%s\" status is %s, %s.\n" +msgid "Fatal gethostname error: ERR=%s\n" msgstr "" -#: src/dird/catreq.c:187 +#: src/tools/bsmtp.c:229 #, c-format -msgid "1997 Volume \"%s\" not in catalog.\n" +msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" msgstr "" -#: src/dird/catreq.c:208 +#: src/tools/bsmtp.c:254 #, c-format -msgid "Unable to get Media record for Volume %s: ERR=%s\n" +msgid "Error unknown mail host \"%s\": ERR=%s\n" msgstr "" -#: src/dird/catreq.c:210 -#, c-format -msgid "1991 Catalog Request for vol=%s failed: %s" +#: src/tools/bsmtp.c:257 +msgid "Retrying connection using \"localhost\".\n" msgstr "" -#: src/dird/catreq.c:230 +#: src/tools/bsmtp.c:265 #, c-format -msgid "" -"Volume Files at %u being set to %u for Volume \"%s\". This is incorrect.\n" +msgid "Fatal error: Unknown address family for smtp host: %d\n" msgstr "" -#: src/dird/catreq.c:233 +#: src/tools/bsmtp.c:273 #, c-format -msgid "1992 Update Media error. VolFiles=%u, CatFiles=%u\n" +msgid "Fatal socket error: ERR=%s\n" msgstr "" -#: src/dird/catreq.c:265 +#: src/tools/bsmtp.c:277 #, c-format -msgid "Catalog error updating Media record. %s" -msgstr "" - -#: src/dird/catreq.c:267 -msgid "1993 Update Media error\n" +msgid "Fatal connect error to %s: ERR=%s\n" msgstr "" -#: src/dird/catreq.c:292 +#: src/tools/bsmtp.c:282 #, c-format -msgid "Catalog error creating JobMedia record. %s" +msgid "Fatal dup error: ERR=%s\n" msgstr "" -#: src/dird/catreq.c:294 -msgid "1991 Update JobMedia error\n" +#: src/tools/bsmtp.c:286 src/tools/bsmtp.c:290 +#, c-format +msgid "Fatal fdopen error: ERR=%s\n" msgstr "" -#: src/dird/catreq.c:304 -#, c-format -msgid "Invalid Catalog request: %s" +#: src/tools/dbcheck.c:158 +msgid "" +"Warning skipping the additional parameters for working directory/dbname/user/" +"password/host.\n" msgstr "" -#: src/dird/catreq.c:338 +#: src/tools/dbcheck.c:174 #, c-format -msgid "1991 Invalid Catalog Update: %s" +msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" msgstr "" -#: src/dird/catreq.c:339 +#: src/tools/dbcheck.c:176 #, c-format -msgid "Invalid Catalog Update; DB not open: %s" +msgid "Error there is no Catalog section in the given config file [%s]\n" msgstr "" -#: src/dird/catreq.c:412 -#, c-format -msgid "Got %s but not same File as attributes\n" +#: src/tools/dbcheck.c:185 +msgid "Error no Director resource defined.\n" msgstr "" -#: src/dird/catreq.c:438 -#, c-format -msgid "Catalog error updating file digest. Unsupported digest stream type: %d" +#: src/tools/dbcheck.c:199 +msgid "Wrong number of arguments.\n" msgstr "" -#: src/dird/catreq.c:454 -#, c-format -msgid "Catalog error updating file digest. %s" +#: src/tools/dbcheck.c:204 +msgid "Working directory not supplied.\n" msgstr "" -#: src/dird/getmsg.c:130 +#: src/tools/dbcheck.c:269 #, c-format -msgid "bget_dirmsg: unknown bnet signal %d\n" +msgid "Hello, this is the database check/correct program.\n" msgstr "" -#: src/dird/getmsg.c:148 src/dird/getmsg.c:161 src/dird/getmsg.c:173 -#: src/dird/getmsg.c:220 src/dird/getmsg.c:244 +#: src/tools/dbcheck.c:271 #, c-format -msgid "Malformed message: %s\n" +msgid "Modify database is on." msgstr "" -#: src/dird/getmsg.c:154 +#: src/tools/dbcheck.c:273 #, c-format -msgid "Job not found: %s\n" +msgid "Modify database is off." msgstr "" -#: src/dird/getmsg.c:311 +#: src/tools/dbcheck.c:275 src/tools/dbcheck.c:336 #, c-format -msgid "Bad response to %s command: wanted %s, got %s\n" +msgid " Verbose is on.\n" msgstr "" -#: src/dird/getmsg.c:316 +#: src/tools/dbcheck.c:277 src/tools/dbcheck.c:338 #, c-format -msgid "Socket error on %s command: ERR=%s\n" +msgid " Verbose is off.\n" msgstr "" -#: src/dird/newvol.c:77 +#: src/tools/dbcheck.c:279 #, c-format -msgid "Illegal character in Volume name \"%s\"\n" +msgid "Please select the fuction you want to perform.\n" msgstr "" -#: src/dird/newvol.c:89 +#: src/tools/dbcheck.c:283 #, c-format -msgid "Created new Volume \"%s\" in catalog.\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/dird/newvol.c:117 +#: src/tools/dbcheck.c:302 #, c-format -msgid "Wanted to create Volume \"%s\", but it already exists. Trying again.\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/dird/newvol.c:126 -msgid "Too many failures. Giving up creating Volume name.\n" +#: src/tools/dbcheck.c:322 +msgid "Select function number: " msgstr "" -#: src/dird/autoprune.c:57 -msgid "Begin pruning Jobs.\n" +#: src/tools/dbcheck.c:329 +#, c-format +msgid "Database will be modified.\n" msgstr "" -#: src/dird/autoprune.c:65 -msgid "Begin pruning Files.\n" +#: src/tools/dbcheck.c:331 +#, c-format +msgid "Database will NOT be modified.\n" msgstr "" -#: src/dird/autoprune.c:70 -msgid "" -"End auto prune.\n" -"\n" +#: src/tools/dbcheck.c:421 +#, c-format +msgid "JobId=%s Name=\"%s\" StartTime=%s\n" msgstr "" -#: src/dird/ua_server.c:61 +#: src/tools/dbcheck.c:429 #, c-format -msgid "Cannot create UA thread: %s\n" +msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" msgstr "" -#: src/dird/ua_server.c:142 -msgid "You have messages.\n" +#: src/tools/dbcheck.c:436 +#, c-format +msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" msgstr "" -#: src/dird/inc_conf.c:251 +#: src/tools/dbcheck.c:443 #, c-format -msgid "Expected a FileSet option keyword, got:%s:" +msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" msgstr "" -#: src/dird/inc_conf.c:284 -msgid "Old style Include/Exclude not supported\n" +#: src/tools/dbcheck.c:450 +#, c-format +msgid "Orphaned ClientId=%s Name=\"%s\"\n" msgstr "" -#: src/dird/inc_conf.c:312 src/dird/inc_conf.c:579 +#: src/tools/dbcheck.c:503 #, c-format -msgid "Expecting keyword, got: %s\n" +msgid "Deleting: %s\n" msgstr "" -#: src/dird/inc_conf.c:330 src/dird/inc_conf.c:594 +#: src/tools/dbcheck.c:577 #, c-format -msgid "Keyword %s not permitted in this resource" +msgid "Checking for duplicate Filename entries.\n" msgstr "" -#: src/dird/inc_conf.c:383 +#: src/tools/dbcheck.c:586 #, c-format -msgid "Regex compile error. ERR=%s\n" +msgid "Found %d duplicate Filename records.\n" msgstr "" -#: src/dird/inc_conf.c:404 -#, c-format -msgid "Expected a regex string, got: %s\n" +#: src/tools/dbcheck.c:587 +msgid "Print the list? (yes/no): " msgstr "" -#: src/dird/inc_conf.c:490 +#: src/tools/dbcheck.c:603 src/tools/dbcheck.c:657 #, c-format -msgid "Expected a wild-card string, got: %s\n" +msgid "Found %d for: %s\n" msgstr "" -#: src/dird/inc_conf.c:513 +#: src/tools/dbcheck.c:630 #, c-format -msgid "Expected an fstype string, got: %s\n" +msgid "Checking for duplicate Path entries.\n" msgstr "" -#: src/dird/inc_conf.c:548 +#: src/tools/dbcheck.c:640 #, c-format -msgid "Expected a filename, got: %s" +msgid "Found %d duplicate Path records.\n" msgstr "" -#: src/dird/inc_conf.c:564 -#, c-format -msgid "Expecting open brace. Got %s" +#: src/tools/dbcheck.c:641 src/tools/dbcheck.c:691 src/tools/dbcheck.c:723 +#: src/tools/dbcheck.c:755 src/tools/dbcheck.c:783 src/tools/dbcheck.c:811 +#: src/tools/dbcheck.c:849 src/tools/dbcheck.c:887 src/tools/dbcheck.c:918 +#: src/tools/dbcheck.c:948 src/tools/dbcheck.c:982 src/tools/dbcheck.c:1040 +msgid "Print them? (yes/no): " msgstr "" -#: src/dird/inc_conf.c:619 +#: src/tools/dbcheck.c:683 #, c-format -msgid "Expected a FileSet keyword, got: %s" +msgid "Checking for orphaned JobMedia entries.\n" msgstr "" -#: src/dird/fd_cmds.c:104 +#: src/tools/dbcheck.c:690 #, c-format -msgid "File daemon \"%s\" rejected Job command: %s\n" +msgid "Found %d orphaned JobMedia records.\n" msgstr "" -#: src/dird/fd_cmds.c:117 +#: src/tools/dbcheck.c:703 #, c-format -msgid "Error updating Client record. ERR=%s\n" +msgid "Deleting %d orphaned JobMedia records.\n" msgstr "" -#: src/dird/fd_cmds.c:122 +#: src/tools/dbcheck.c:712 #, c-format -msgid "FD gave bad response to JobId command: %s\n" +msgid "Checking for orphaned File entries. This may take some time!\n" msgstr "" -#: src/dird/fd_cmds.c:144 src/dird/fd_cmds.c:180 -msgid ", since=" +#: src/tools/dbcheck.c:722 +#, c-format +msgid "Found %d orphaned File records.\n" msgstr "" -#: src/dird/fd_cmds.c:164 -msgid "No prior or suitable Full backup found. Doing FULL backup.\n" +#: src/tools/dbcheck.c:735 +#, c-format +msgid "Deleting %d orphaned File records.\n" msgstr "" -#: src/dird/fd_cmds.c:165 src/dird/fd_cmds.c:173 +#: src/tools/dbcheck.c:744 #, c-format -msgid " (upgraded from %s)" +msgid "Checking for orphaned Path entries. This may take some time!\n" msgstr "" -#: src/dird/fd_cmds.c:171 +#: src/tools/dbcheck.c:754 #, c-format -msgid "Prior failed job found. Upgrading to %s.\n" +msgid "Found %d orphaned Path records.\n" msgstr "" -#: src/dird/fd_cmds.c:196 -msgid "since_utime " +#: src/tools/dbcheck.c:763 +#, c-format +msgid "Deleting %d orphaned Path records.\n" msgstr "" -#: src/dird/fd_cmds.c:232 +#: src/tools/dbcheck.c:772 #, c-format -msgid "Unimplemented backup level %d %c\n" +msgid "Checking for orphaned Filename entries. This may take some time!\n" msgstr "" -#: src/dird/fd_cmds.c:331 src/dird/fd_cmds.c:356 src/dird/fd_cmds.c:370 -msgid ">filed: write error on socket\n" +#: src/tools/dbcheck.c:782 +#, c-format +msgid "Found %d orphaned Filename records.\n" msgstr "" -#: src/dird/fd_cmds.c:337 +#: src/tools/dbcheck.c:791 #, c-format -msgid "Error running program: %s. ERR=%s\n" +msgid "Deleting %d orphaned Filename records.\n" msgstr "" -#: src/dird/fd_cmds.c:346 +#: src/tools/dbcheck.c:800 #, c-format -msgid "Cannot open included file: %s. ERR=%s\n" +msgid "Checking for orphaned FileSet entries. This takes some time!\n" msgstr "" -#: src/dird/fd_cmds.c:522 +#: src/tools/dbcheck.c:810 #, c-format -msgid "" -"= 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/dird/ua_query.c:64 -msgid "Available queries:\n" +#: src/tools/testfind.c:134 src/tools/testls.c:130 +#, c-format +msgid "Could not open include file: %s\n" msgstr "" -#: src/dird/ua_query.c:71 -msgid "Choose a query" +#: src/tools/testfind.c:147 src/tools/testls.c:143 +#, c-format +msgid "Could not open exclude file: %s\n" msgstr "" -#: src/dird/ua_query.c:85 -msgid "Could not find query.\n" +#: src/tools/testfind.c:160 +#, c-format +msgid "" +"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/dird/ua_query.c:103 -msgid "Too many prompts in query, max is 9.\n" +#: src/tools/testfind.c:199 +#, c-format +msgid "Reg: %s\n" msgstr "" -#: src/dird/ua_query.c:206 -#, c-format -msgid "Warning prompt %d missing.\n" +#: src/tools/testfind.c:220 +msgid "\t[will not descend: recursion turned off]" msgstr "" -#: src/dird/ua_query.c:252 -msgid "" -"Entering SQL query mode.\n" -"Terminate each query with a semicolon.\n" -"Terminate query mode with a blank line.\n" +#: src/tools/testfind.c:222 +msgid "\t[will not descend: file system change not allowed]" msgstr "" -#: src/dird/ua_query.c:255 src/dird/ua_query.c:272 -msgid "Enter SQL query: " +#: src/tools/testfind.c:224 +msgid "\t[will not descend: disallowed file system]" msgstr "" -#: src/dird/ua_query.c:274 -msgid "Add to SQL query: " +#: src/tools/testfind.c:240 src/tools/testls.c:178 +#, c-format +msgid "Err: Could not access %s: %s\n" msgstr "" -#: src/dird/ua_query.c:278 -msgid "End query mode.\n" +#: src/tools/testfind.c:243 src/tools/testls.c:181 +#, c-format +msgid "Err: Could not follow ff->link %s: %s\n" msgstr "" -#: src/dird/ua_update.c:79 -msgid "Update choice:\n" +#: src/tools/testfind.c:246 src/tools/testls.c:184 +#, c-format +msgid "Err: Could not stat %s: %s\n" msgstr "" -#: src/dird/ua_update.c:80 -msgid "Volume parameters" +#: src/tools/testfind.c:249 src/tools/testls.c:187 +#, c-format +msgid "Skip: File not saved. No change. %s\n" msgstr "" -#: src/dird/ua_update.c:81 -msgid "Pool from resource" +#: src/tools/testfind.c:252 src/tools/testls.c:190 +#, c-format +msgid "Err: Attempt to backup archive. Not saved. %s\n" msgstr "" -#: src/dird/ua_update.c:82 -msgid "Slots from autochanger" +#: src/tools/testfind.c:255 src/tools/testls.c:199 +#, c-format +msgid "Err: Could not open directory %s: %s\n" msgstr "" -#: src/dird/ua_update.c:83 -msgid "item" +#: src/tools/testfind.c:258 src/tools/testls.c:202 +#, c-format +msgid "Err: Unknown file ff->type %d: %s\n" msgstr "" -#: src/dird/ua_update.c:83 -msgid "Choose catalog item to update" +#: src/tools/testfind.c:308 +#, c-format +msgid "===== Filename truncated to 255 chars: %s\n" msgstr "" -#: src/dird/ua_update.c:122 +#: src/tools/testfind.c:325 #, c-format -msgid "Invalid VolStatus specified: %s\n" +msgid "========== Path name truncated to 255 chars: %s\n" msgstr "" -#: src/dird/ua_update.c:131 +#: src/tools/testfind.c:334 #, c-format -msgid "New Volume status is: %s\n" +msgid "========== Path length is zero. File=%s\n" msgstr "" -#: src/dird/ua_update.c:141 +#: src/tools/testfind.c:337 #, c-format -msgid "Invalid retention period specified: %s\n" +msgid "Path: %s\n" msgstr "" -#: src/dird/ua_update.c:149 +#: src/tools/testls.c:45 #, c-format -msgid "New retention period is: %s\n" +msgid "" +"\n" +"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" +" -a print extended attributes (Win32 debug)\n" +" -dnn set debug level to nn\n" +" -e specify file of exclude patterns\n" +" -i specify file of include patterns\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/dird/ua_update.c:160 +#: src/tools/testls.c:193 #, c-format -msgid "Invalid use duration specified: %s\n" +msgid "Recursion turned off. Directory not entered. %s\n" msgstr "" -#: src/dird/ua_update.c:168 +#: src/tools/testls.c:196 #, c-format -msgid "New use duration is: %s\n" +msgid "Skip: File system change prohibited. Directory not entered. %s\n" msgstr "" -#: src/dird/ua_update.c:182 -#, c-format -msgid "New max jobs is: %s\n" +#: src/tray-monitor/authenticate.c:78 +msgid "" +"Director authorization problem.\n" +"Most likely the passwords do not agree.\n" +"Please see http://www.bacula.org/html-manual/faq.html#AuthorizationErrors " +"for help.\n" msgstr "" -#: src/dird/ua_update.c:195 -#, c-format -msgid "New max files is: %s\n" +#: src/tray-monitor/authenticate.c:127 +msgid "" +"Director and Storage daemon passwords or names not the same.\n" +"Please see http://www.bacula.org/html-manual/faq.html#AuthorizationErrors " +"for help.\n" msgstr "" -#: src/dird/ua_update.c:206 -#, c-format -msgid "Invalid max. bytes specification: %s\n" +#: src/tray-monitor/authenticate.c:172 +msgid "" +"Director and File daemon passwords or names not the same.\n" +"Please see http://www.bacula.org/html-manual/faq.html#AuthorizationErrors " +"for help.\n" msgstr "" -#: src/dird/ua_update.c:214 +#: src/tray-monitor/tray-monitor.c:102 #, c-format -msgid "New Max bytes is: %s\n" -msgstr "" - -#: src/dird/ua_update.c:228 src/dird/ua_update.c:252 -msgid "Invalid value. It must be yes or no.\n" +msgid "" +"Copyright (C) 2000-2004 Kern Sibbald and John Walker\n" +"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" +" -dnn set debug level to nn\n" +" -t test - read configuration and exit\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/dird/ua_update.c:236 +#: src/tray-monitor/tray-monitor.c:251 #, c-format -msgid "New Recycle flag is: %s\n" +msgid "" +"Error: %d Monitor resource defined in %s. You must define one and only one " +"Monitor resource.\n" msgstr "" -#: src/dird/ua_update.c:260 +#: src/tray-monitor/tray-monitor.c:282 #, c-format -msgid "New InChanger flag is: %s\n" +msgid "" +"No Client, Storage nor 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/dird/ua_update.c:278 +#: src/tray-monitor/tray-monitor.c:304 #, c-format -msgid "Invalid slot, it must be between 0 and MaxVols=%d\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/dird/ua_update.c:287 src/dird/ua_update.c:577 -#, c-format -msgid "Error updating media record Slot: ERR=%s" +#: src/tray-monitor/tray-monitor.c:319 +msgid "Open status window..." msgstr "" -#: src/dird/ua_update.c:289 -#, c-format -msgid "New Slot is: %d\n" +#: src/tray-monitor/tray-monitor.c:325 +msgid "Exit" msgstr "" -#: src/dird/ua_update.c:316 -#, c-format -msgid "New Pool is: %s\n" +#: src/tray-monitor/tray-monitor.c:337 +msgid "Bacula tray monitor" msgstr "" -#: src/dird/ua_update.c:345 -#, c-format -msgid "Error updating Volume record: ERR=%s" +#: src/tray-monitor/tray-monitor.c:362 +msgid " (DIR)" msgstr "" -#: src/dird/ua_update.c:347 -#, c-format -msgid "Volume defaults updated from \"%s\" Pool record.\n" +#: src/tray-monitor/tray-monitor.c:366 +msgid " (FD)" msgstr "" -#: src/dird/ua_update.c:369 -#, c-format -msgid "Error updating Volume records: ERR=%s" +#: src/tray-monitor/tray-monitor.c:370 +msgid " (SD)" msgstr "" -#: src/dird/ua_update.c:371 -msgid "All Volume defaults updated from Pool record.\n" +#: src/tray-monitor/tray-monitor.c:383 +msgid "Unknown status." msgstr "" -#: src/dird/ua_update.c:391 -msgid "VolStatus" +#: src/tray-monitor/tray-monitor.c:424 +msgid "Refresh interval in seconds: " msgstr "" -#: src/dird/ua_update.c:392 -msgid "VolRetention" +#: src/tray-monitor/tray-monitor.c:432 +msgid "Refresh now" msgstr "" -#: src/dird/ua_update.c:393 -msgid "VolUse" +#: src/tray-monitor/tray-monitor.c:436 +msgid "About" msgstr "" -#: src/dird/ua_update.c:394 -msgid "MaxVolJobs" +#: src/tray-monitor/tray-monitor.c:440 +msgid "Close" msgstr "" -#: src/dird/ua_update.c:395 -msgid "MaxVolFiles" +#: src/tray-monitor/tray-monitor.c:460 +#, c-format +msgid "Disconnecting from Director %s:%d\n" msgstr "" -#: src/dird/ua_update.c:396 -msgid "MaxVolBytes" +#: src/tray-monitor/tray-monitor.c:463 +#, c-format +msgid "Disconnecting from Client %s:%d\n" msgstr "" -#: src/dird/ua_update.c:397 -msgid "Recycle" +#: src/tray-monitor/tray-monitor.c:466 +#, c-format +msgid "Disconnecting from Storage %s:%d\n" msgstr "" -#: src/dird/ua_update.c:398 -msgid "InChanger" +#: src/tray-monitor/tray-monitor.c:502 src/tray-monitor/tray-monitor.c:512 +msgid "Bacula Tray Monitor" msgstr "" -#: src/dird/ua_update.c:399 src/dird/ua_update.c:472 -msgid "Slot" +#: src/tray-monitor/tray-monitor.c:503 src/tray-monitor/tray-monitor.c:513 +msgid "" +"Copyright (C) 2004-2005 Kern Sibbald\n" +"Written by Nicolas Boichat\n" msgstr "" -#: src/dird/ua_update.c:401 -msgid "FromPool" +#: src/tray-monitor/tray-monitor.c:505 src/tray-monitor/tray-monitor.c:515 +msgid "Version:" msgstr "" -#: src/dird/ua_update.c:402 -msgid "AllFromPool" +#: src/tray-monitor/tray-monitor.c:583 +#, c-format +msgid "Error, currentitem is not a Client or a Storage..\n" msgstr "" -#: src/dird/ua_update.c:463 +#: src/tray-monitor/tray-monitor.c:656 #, c-format -msgid "Updating Volume \"%s\"\n" +msgid "" +"Current job: %s\n" +"Last job: %s" msgstr "" -#: src/dird/ua_update.c:465 -msgid "Volume Status" +#: src/tray-monitor/tray-monitor.c:668 +#, c-format +msgid " (%d errors)" msgstr "" -#: src/dird/ua_update.c:466 -msgid "Volume Retention Period" +#: src/tray-monitor/tray-monitor.c:671 +#, c-format +msgid " (%d error)" msgstr "" -#: src/dird/ua_update.c:467 -msgid "Volume Use Duration" +#: src/tray-monitor/tray-monitor.c:708 +msgid "No current job." msgstr "" -#: src/dird/ua_update.c:468 -msgid "Maximum Volume Jobs" +#: src/tray-monitor/tray-monitor.c:711 +msgid "No last job." msgstr "" -#: src/dird/ua_update.c:469 -msgid "Maximum Volume Files" +#: src/tray-monitor/tray-monitor.c:719 +msgid "Job status: Created" msgstr "" -#: src/dird/ua_update.c:470 -msgid "Maximum Volume Bytes" +#: src/tray-monitor/tray-monitor.c:724 +msgid "Job status: Running" msgstr "" -#: src/dird/ua_update.c:471 -msgid "Recycle Flag" +#: src/tray-monitor/tray-monitor.c:728 +msgid "Job status: Blocked" msgstr "" -#: src/dird/ua_update.c:473 -msgid "InChanger Flag" +#: src/tray-monitor/tray-monitor.c:733 +msgid "Job status: Terminated" msgstr "" -#: src/dird/ua_update.c:474 -msgid "Volume Files" +#: src/tray-monitor/tray-monitor.c:738 +msgid "Job status: Terminated in error" msgstr "" -#: src/dird/ua_update.c:476 -msgid "Volume from Pool" +#: src/tray-monitor/tray-monitor.c:744 +msgid "Job status: Error" msgstr "" -#: src/dird/ua_update.c:477 -msgid "All Volumes from Pool" +#: src/tray-monitor/tray-monitor.c:748 +msgid "Job status: Fatal error" msgstr "" -#: src/dird/ua_update.c:478 -msgid "Done" +#: src/tray-monitor/tray-monitor.c:753 +msgid "Job status: Verify differences" msgstr "" -#: src/dird/ua_update.c:489 -#, c-format -msgid "Current Volume status is: %s\n" +#: src/tray-monitor/tray-monitor.c:758 +msgid "Job status: Canceled" msgstr "" -#: src/dird/ua_update.c:490 -msgid "Possible Values are:\n" +#: src/tray-monitor/tray-monitor.c:763 +msgid "Job status: Waiting on File daemon" msgstr "" -#: src/dird/ua_update.c:501 -msgid "Choose new Volume Status" +#: src/tray-monitor/tray-monitor.c:768 +msgid "Job status: Waiting on the Storage daemon" msgstr "" -#: src/dird/ua_update.c:507 -#, c-format -msgid "Current retention period is: %s\n" +#: src/tray-monitor/tray-monitor.c:773 +msgid "Job status: Waiting for new media" msgstr "" -#: src/dird/ua_update.c:509 -msgid "Enter Volume Retention period: " +#: src/tray-monitor/tray-monitor.c:778 +msgid "Job status: Waiting for Mount" msgstr "" -#: src/dird/ua_update.c:516 -#, c-format -msgid "Current use duration is: %s\n" +#: src/tray-monitor/tray-monitor.c:783 +msgid "Job status: Waiting for storage resource" msgstr "" -#: src/dird/ua_update.c:518 -msgid "Enter Volume Use Duration: " +#: src/tray-monitor/tray-monitor.c:788 +msgid "Job status: Waiting for job resource" msgstr "" -#: src/dird/ua_update.c:525 -#, c-format -msgid "Current max jobs is: %u\n" +#: src/tray-monitor/tray-monitor.c:793 +msgid "Job status: Waiting for Client resource" msgstr "" -#: src/dird/ua_update.c:526 -msgid "Enter new Maximum Jobs: " +#: src/tray-monitor/tray-monitor.c:798 +msgid "Job status: Waiting for maximum jobs" msgstr "" -#: src/dird/ua_update.c:533 -#, c-format -msgid "Current max files is: %u\n" +#: src/tray-monitor/tray-monitor.c:803 +msgid "Job status: Waiting for start time" msgstr "" -#: src/dird/ua_update.c:534 -msgid "Enter new Maximum Files: " +#: src/tray-monitor/tray-monitor.c:808 +msgid "Job status: Waiting for higher priority jobs to finish" msgstr "" -#: src/dird/ua_update.c:541 +#: src/tray-monitor/tray-monitor.c:813 #, c-format -msgid "Current value is: %s\n" +msgid "Unknown job status %c." msgstr "" -#: src/dird/ua_update.c:542 -msgid "Enter new Maximum Bytes: " +#: src/tray-monitor/tray-monitor.c:814 +#, c-format +msgid "Job status: Unknown(%c)" msgstr "" -#: src/dird/ua_update.c:550 +#: src/tray-monitor/tray-monitor.c:821 #, c-format -msgid "Current recycle flag is: %s\n" +msgid "Bad scan : '%s' %d\n" msgstr "" -#: src/dird/ua_update.c:552 -msgid "Enter new Recycle status: " +#: src/tray-monitor/tray-monitor.c:859 +#, c-format +msgid "Connecting to Director %s:%d" msgstr "" -#: src/dird/ua_update.c:559 +#: src/tray-monitor/tray-monitor.c:865 #, c-format -msgid "Current Slot is: %d\n" +msgid "Connecting to Client %s:%d\n" msgstr "" -#: src/dird/ua_update.c:560 -msgid "Enter new Slot: " +#: src/tray-monitor/tray-monitor.c:866 +#, c-format +msgid "Connecting to Client %s:%d" msgstr "" -#: src/dird/ua_update.c:567 +#: src/tray-monitor/tray-monitor.c:872 #, c-format -msgid "Current InChanger flag is: %d\n" +msgid "Connecting to Storage %s:%d\n" msgstr "" -#: src/dird/ua_update.c:568 -msgid "Set InChanger flag? yes/no: " +#: src/tray-monitor/tray-monitor.c:873 +#, c-format +msgid "Connecting to Storage %s:%d" msgstr "" -#: src/dird/ua_update.c:579 +#: src/tray-monitor/tray-monitor.c:878 src/tray-monitor/tray-monitor.c:916 #, c-format -msgid "New InChanger flag is: %d\n" +msgid "Error, currentitem is not a Client, a Storage or a Director..\n" msgstr "" -#: src/dird/ua_update.c:586 -msgid "" -"Warning changing Volume Files can result\n" -"in loss of data on your Volume\n" -"\n" +#: src/tray-monitor/tray-monitor.c:884 +msgid "Cannot connect to daemon.\n" msgstr "" -#: src/dird/ua_update.c:588 -#, c-format -msgid "Current Volume Files is: %u\n" +#: src/tray-monitor/tray-monitor.c:885 +msgid "Cannot connect to daemon." msgstr "" -#: src/dird/ua_update.c:589 -msgid "Enter new number of Files for Volume: " +#: src/tray-monitor/tray-monitor.c:897 +#, c-format +msgid "Authentication error : %s" msgstr "" -#: src/dird/ua_update.c:594 -msgid "Normally, you should only increase Volume Files by one!\n" +#: src/tray-monitor/tray-monitor.c:904 +msgid "Opened connection with Director daemon.\n" msgstr "" -#: src/dird/ua_update.c:595 -msgid "Continue? (yes/no): " +#: src/tray-monitor/tray-monitor.c:905 +msgid "Opened connection with Director daemon." msgstr "" -#: src/dird/ua_update.c:605 -#, c-format -msgid "New Volume Files is: %u\n" +#: src/tray-monitor/tray-monitor.c:908 +msgid "Opened connection with File daemon.\n" msgstr "" -#: src/dird/ua_update.c:617 -#, c-format -msgid "Current Pool is: %s\n" +#: src/tray-monitor/tray-monitor.c:909 +msgid "Opened connection with File daemon." msgstr "" -#: src/dird/ua_update.c:618 -msgid "Enter new Pool name: " +#: src/tray-monitor/tray-monitor.c:912 +msgid "Opened connection with Storage daemon.\n" msgstr "" -#: src/dird/ua_update.c:631 -msgid "Selection terminated.\n" +#: src/tray-monitor/tray-monitor.c:913 +msgid "Opened connection with Storage daemon." msgstr "" -#: src/dird/ua_update.c:664 -#, c-format -msgid "db_update_pool_record returned %d. ERR=%s\n" +#: src/tray-monitor/tray-monitor.c:948 +msgid "<< Error: BNET_PROMPT signal received. >>\n" msgstr "" -#: src/dird/ua_update.c:671 -msgid "Pool DB record updated from resource.\n" +#: src/tray-monitor/tray-monitor.c:953 src/wx-console/console_thread.cpp:465 +msgid "<< Heartbeat signal received, answered. >>\n" msgstr "" -#: src/dird/ua_dotcmds.c:131 -msgid "The Director will segment fault.\n" +#: src/tray-monitor/tray-monitor.c:957 +#, c-format +msgid "<< Unexpected signal received : %s >>\n" msgstr "" -#: src/dird/ua_purge.c:177 -msgid "" -"\n" -"This command is 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" -"for retention periods. Normally you should use the\n" -"PRUNE command, which respects retention periods.\n" +#: src/tray-monitor/tray-monitor.c:962 +msgid "\n" msgstr "" -#: src/dird/ua_purge.c:237 -msgid "Choose item to purge" +#: src/tray-monitor/tray-monitor.c:966 +msgid "Error : BNET_HARDEOF or BNET_ERROR" msgstr "" -#: src/dird/ua_purge.c:282 -#, c-format -msgid "Begin purging files for Client \"%s\"\n" +#: src/tray-monitor/tray-monitor.c:972 +msgid "\n" msgstr "" -#: src/dird/ua_purge.c:294 -#, c-format -msgid "No Files found for client %s to purge from %s catalog.\n" +#: src/tray-monitor/tray-monitor.c:976 +msgid "Error : Connection closed." msgstr "" -#: src/dird/ua_purge.c:325 +#: src/tray-monitor/tray_conf.c:161 #, c-format -msgid "%d Files for client \"%s\" purged from %s catalog.\n" +msgid "Monitor: name=%s FDtimeout=%s SDtimeout=%s\n" msgstr "" -#: src/dird/ua_purge.c:361 +#: src/tray-monitor/tray_conf.c:167 #, c-format -msgid "Begin purging jobs from Client \"%s\"\n" +msgid "Director: name=%s address=%s FDport=%d\n" msgstr "" -#: src/dird/ua_purge.c:372 +#: src/tray-monitor/tray_conf.c:171 #, c-format -msgid "No Jobs found for client %s to purge from %s catalog.\n" +msgid "Client: name=%s address=%s FDport=%d\n" msgstr "" -#: src/dird/ua_purge.c:416 +#: src/tray-monitor/tray_conf.c:175 #, c-format -msgid "%d Jobs for client %s purged from %s catalog.\n" +msgid "Storage: name=%s address=%s SDport=%d\n" msgstr "" -#: src/dird/ua_purge.c:467 -#, c-format -msgid "" -"Volume \"%s\" has VolStatus \"%s\" and cannot be purged.\n" -"The VolStatus must be: Append, Full, Used, or Error to be purged.\n" +#: src/wx-console/authenticate.c:129 +msgid "Bad response to Hello command: ERR=" msgstr "" -#: src/dird/ua_purge.c:540 +#: src/baconfig.h:55 #, c-format -msgid "%d File%s on Volume \"%s\" purged from catalog.\n" +msgid "Failed ASSERT: %s\n" msgstr "" -#: src/dird/ua_purge.c:554 -#, c-format -msgid "" -"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" +#: src/baconfig.h:62 +msgid "*None*" msgstr "" -#: src/dird/ua_purge.c:586 -#, c-format -msgid "Cannot purge Volume with VolStatus=%s\n" +#: src/filed/win32/winmain.cpp:228 src/filed/win32/winmain.cpp:236 +msgid "Bacula Usage" msgstr "" -#: src/dird/ua_output.c:64 src/dird/ua_output.c:88 -msgid "ON or OFF keyword missing.\n" +#: src/filed/win32/winmain.cpp:233 +msgid "Bad Command Line Options" msgstr "" -#: src/dird/ua_output.c:176 -msgid "Keywords for the show command are:\n" +#: src/filed/win32/winmain.cpp:326 +msgid "Another instance of Bacula is already running" msgstr "" -#: src/dird/ua_output.c:182 -#, c-format -msgid "%s resource %s not found.\n" +#: src/filed/win32/winservice.cpp:131 src/filed/win32/winservice.cpp:145 +msgid "No existing instance of Bacula could be contacted" msgstr "" -#: src/dird/ua_output.c:185 -#, c-format -msgid "Resource %s not found\n" +#: src/filed/win32/winservice.cpp:218 +msgid "KERNEL32.DLL not found: Bacula service not started" msgstr "" -#: src/dird/ua_output.c:251 -msgid "Hey! DB is NULL\n" +#: src/filed/win32/winservice.cpp:228 +msgid "Registry service not found: Bacula service not started" msgstr "" -#: src/dird/ua_output.c:365 -#, c-format -msgid "Jobid %d used %d Volume(s): %s\n" +#: src/filed/win32/winservice.cpp:230 +msgid "Registry service not found" msgstr "" -#: src/dird/ua_output.c:383 -msgid "No Pool specified.\n" +#: src/filed/win32/winservice.cpp:260 +msgid "StartServiceCtrlDispatcher failed." msgstr "" -#: src/dird/ua_output.c:404 -#, c-format -msgid "Pool: %s\n" +#: src/filed/win32/winservice.cpp:278 +msgid "RegisterServiceCtlHandler failed" msgstr "" -#: src/dird/ua_output.c:420 src/dird/ua_status.c:452 -msgid "Ignoring illegal value for days.\n" +#: src/filed/win32/winservice.cpp:279 +msgid "Contact Register Service Handler failure" msgstr "" -#: src/dird/ua_output.c:429 -#, c-format -msgid "Unknown list keyword: %s\n" +#: src/filed/win32/winservice.cpp:295 +msgid "ReportStatus STOPPED failed 1" msgstr "" -#: src/dird/ua_output.c:455 -#, c-format -msgid "%s is not a job name.\n" +#: src/filed/win32/winservice.cpp:318 +msgid "Report Service failure" msgstr "" -#: src/dird/ua_output.c:476 -#, c-format -msgid "Could not find next Volume for Job %s (%s, %s).\n" +#: src/filed/win32/winservice.cpp:355 +msgid "Unable to install Bacula service" msgstr "" -#: src/dird/ua_output.c:480 -#, c-format -msgid "The next Volume to be used by Job \"%s\" (%s, %s) will be %s\n" +#: src/filed/win32/winservice.cpp:373 +msgid "Service command length too long" msgstr "" -#: src/dird/ua_output.c:490 -#, c-format -msgid "Could not find next Volume for Job %s.\n" +#: src/filed/win32/winservice.cpp:374 +msgid "Service command length too long. Service not registered." msgstr "" -#: src/dird/ua_output.c:679 -msgid "You have no messages.\n" +#: src/filed/win32/winservice.cpp:389 +msgid "Cannot write System Registry" msgstr "" -#: src/dird/ua_status.c:126 -msgid "Status available for:\n" +#: src/filed/win32/winservice.cpp:390 +msgid "" +"The System Registry could not be updated - the Bacula service was not " +"installed" msgstr "" -#: src/dird/ua_status.c:132 -msgid "Select daemon type for status" +#: src/filed/win32/winservice.cpp:397 +msgid "Cannot add Bacula key to System Registry" msgstr "" -#: src/dird/ua_status.c:245 -#, c-format -msgid "%s Version: %s (%s) %s %s %s\n" +#: src/filed/win32/winservice.cpp:398 src/filed/win32/winservice.cpp:449 +msgid "The Bacula service could not be installed" msgstr "" -#: src/dird/ua_status.c:289 -#, c-format +#: src/filed/win32/winservice.cpp:406 msgid "" -"\n" -"Failed to connect to Storage daemon %s.\n" -"====\n" +"The Bacula File service was successfully installed.\n" +"The service may be started by double clicking on the\n" +"Bacula \"Start\" icon and will be automatically\n" +"be run the next time this machine is rebooted. " msgstr "" -#: src/dird/ua_status.c:327 -#, c-format +#: src/filed/win32/winservice.cpp:424 msgid "" -"Failed to connect to Client %s.\n" -"====\n" -msgstr "" - -#: src/dird/ua_status.c:335 -msgid "Connected to file daemon\n" +"The Service Control Manager could not be contacted - the Bacula service was " +"not installed" msgstr "" -#: src/dird/ua_status.c:350 +#: src/filed/win32/winservice.cpp:455 msgid "" -"\n" -"Scheduled Jobs:\n" +"Provides file backup and restore services. Bacula -- the network backup " +"solution." msgstr "" -#: src/dird/ua_status.c:351 +#: src/filed/win32/winservice.cpp:462 msgid "" -"Level Type Pri Scheduled Name Volume\n" +"The Bacula File service was successfully installed.\n" +"The service may be started from the Control Panel and will\n" +"automatically be run the next time this machine is rebooted." msgstr "" -#: src/dird/ua_status.c:352 -msgid "===================================================================================\n" +#: src/filed/win32/winservice.cpp:471 +msgid "" +"Unknown Windows operating system.\n" +"Cannot install Bacula service.\n" msgstr "" -#: src/dird/ua_status.c:399 -#, c-format -msgid "%-14s %-8s %3d %-18s %-18s %s\n" +#: src/filed/win32/winservice.cpp:496 +msgid "" +"Could not find registry entry.\n" +"Service probably not registerd - the Bacula service was not removed" msgstr "" -#: src/dird/ua_status.c:491 -msgid "No Scheduled Jobs.\n" +#: src/filed/win32/winservice.cpp:501 +msgid "" +"Could not delete Registry key.\n" +"The Bacula service could not be removed" msgstr "" -#: src/dird/ua_status.c:516 -#, c-format -msgid "Console connected at %s\n" +#: src/filed/win32/winservice.cpp:511 +msgid "Bacula could not be contacted, probably not running" msgstr "" -#: src/dird/ua_status.c:526 -msgid "" -"No Jobs running.\n" -"====\n" +#: src/filed/win32/winservice.cpp:517 src/filed/win32/winservice.cpp:553 +msgid "The Bacula service has been removed" msgstr "" -#: src/dird/ua_status.c:531 -msgid " JobId Level Name Status\n" +#: src/filed/win32/winservice.cpp:547 +msgid "The Bacula service could not be stopped" msgstr "" -#: src/dird/ua_status.c:540 -msgid "is waiting execution" +#: src/filed/win32/winservice.cpp:555 +msgid "The Bacula service could not be removed" msgstr "" -#: src/dird/ua_status.c:543 -msgid "is running" +#: src/filed/win32/winservice.cpp:560 +msgid "The Bacula service could not be found" msgstr "" -#: src/dird/ua_status.c:546 -msgid "is blocked" +#: src/filed/win32/winservice.cpp:565 +msgid "The SCM could not be contacted - the Bacula service was not removed" msgstr "" -#: src/dird/ua_status.c:549 -msgid "has terminated" +#: src/filed/win32/winservice.cpp:629 +msgid "SetServiceStatus failed" msgstr "" -#: src/dird/ua_status.c:552 -msgid "has erred" +#: src/filed/win32/winservice.cpp:657 +#, c-format +msgid "" +"\n" +"\n" +"%s error: %ld at %s:%d" msgstr "" -#: src/dird/ua_status.c:555 -msgid "has errors" +#: src/filed/win32/winservice.cpp:732 +#, c-format +msgid "Locked by: %s, duration: %ld seconds\n" msgstr "" -#: src/dird/ua_status.c:558 -msgid "has a fatal error" +#: src/filed/win32/winservice.cpp:736 +#, c-format +msgid "No longer locked\n" msgstr "" -#: src/dird/ua_status.c:561 -msgid "has verify differences" +#: src/filed/win32/winservice.cpp:740 +msgid "Could not lock database" msgstr "" -#: src/dird/ua_status.c:564 -msgid "has been canceled" +#: src/wx-console/console_thread.cpp:101 +#, 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 "" -#: src/dird/ua_status.c:568 -#, c-format -msgid "is waiting on Client %s" +#: src/wx-console/console_thread.cpp:108 +msgid "" +"No Director resource defined in config file.\n" +"Without that I don't how to speak to the Director :-(\n" msgstr "" -#: src/dird/ua_status.c:574 +#: src/wx-console/console_thread.cpp:127 #, c-format -msgid "is waiting on Storage %s" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in config file.\n" msgstr "" -#: src/dird/ua_status.c:579 -msgid "is waiting on max Storage jobs" +#: src/wx-console/console_thread.cpp:148 +msgid "Error while initializing windows sockets...\n" msgstr "" -#: src/dird/ua_status.c:582 -msgid "is waiting on max Client jobs" +#: src/wx-console/console_thread.cpp:163 +msgid "Error while cleaning up windows sockets...\n" msgstr "" -#: src/dird/ua_status.c:585 -msgid "is waiting on max Job jobs" +#: src/wx-console/console_thread.cpp:201 +msgid "Error while initializing library." msgstr "" -#: src/dird/ua_status.c:588 -msgid "is waiting on max total jobs" +#: src/wx-console/console_thread.cpp:227 +msgid "Cryptographic library initialization failed.\n" msgstr "" -#: src/dird/ua_status.c:591 -msgid "is waiting for its start time" +#: src/wx-console/console_thread.cpp:231 +msgid "Please correct configuration file.\n" msgstr "" -#: src/dird/ua_status.c:594 -msgid "is waiting for higher priority jobs to finish" +#: src/wx-console/console_thread.cpp:273 +msgid "Error : Library not initialized\n" msgstr "" -#: src/dird/ua_status.c:599 -#, c-format -msgid "is in unknown state %c" +#: src/wx-console/console_thread.cpp:284 +msgid "Error : No configuration file loaded\n" msgstr "" -#: src/dird/ua_status.c:613 -msgid "is waiting for a mount request" +#: src/wx-console/console_thread.cpp:294 +msgid "Connecting...\n" msgstr "" -#: src/dird/ua_status.c:620 -msgid "is waiting for an appendable Volume" +#: src/wx-console/console_thread.cpp:310 +msgid "Error : No director defined in config file.\n" msgstr "" -#: src/dird/ua_status.c:627 -#, c-format -msgid "is waiting for Client %s to connect to Storage %s" +#: src/wx-console/console_thread.cpp:322 +msgid "Multiple directors found in your config file.\n" msgstr "" -#: src/dird/ua_status.c:643 +#: src/wx-console/console_thread.cpp:331 #, c-format -msgid "%6d %-6s %-20s %s\n" +msgid "Please choose a director (1-%d): " msgstr "" -#: src/dird/ua_status.c:671 -msgid " JobId Level Files Bytes Status Finished Name \n" +#: src/wx-console/console_thread.cpp:403 +msgid "Failed to connect to the director\n" msgstr "" -#: src/dird/ua_status.c:672 -msgid "========================================================================\n" +#: src/wx-console/console_thread.cpp:413 +msgid "Connected\n" msgstr "" -#: src/baconfig.h:59 -#, c-format -msgid "Failed ASSERT: %s\n" +#: src/wx-console/console_thread.cpp:470 +msgid "<< Unexpected signal received : " msgstr "" -#: src/baconfig.h:66 -msgid "*None*" +#: src/wx-console/console_thread.cpp:490 +msgid "Connection terminated\n" msgstr "" #: src/wx-console/main.cpp:101 @@ -14290,6 +13869,10 @@ msgstr "" msgid "Error while saving" msgstr "" +#: src/wx-console/wxbconfigpanel.cpp:184 +msgid "Apply" +msgstr "" + #: src/wx-console/wxbhistorytextctrl.cpp:61 #: src/wx-console/wxbhistorytextctrl.cpp:132 #: src/wx-console/wxbmainframe.cpp:272 @@ -14304,10 +13887,6 @@ msgstr "" msgid "Possible completions: " msgstr "" -#: src/wx-console/wxbconfigpanel.cpp:184 -msgid "Apply" -msgstr "" - #: src/wx-console/wxbmainframe.cpp:227 msgid "&About...\tF1" msgstr "" @@ -14425,161 +14004,79 @@ msgid "Configuration file read successfully" msgstr "" #: src/wx-console/wxbmainframe.cpp:454 -#, c-format -msgid "Using this configuration file: %s\n" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:459 -msgid "Connecting to the director..." -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:474 -msgid "Failed to unregister a data parser !" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:482 -msgid "Quitting.\n" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:497 -msgid "" -"Welcome to Bacula wx-console.\n" -"Written by Nicolas Boichat \n" -"(C) 2005 Kern Sibbald\n" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:499 -msgid "About Bacula wx-console" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:505 -msgid "Please choose your default configuration file" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:509 -msgid "Use this configuration file as default?" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:510 -msgid "Configuration file" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:581 -msgid "Console thread terminated." -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:589 -msgid "Connection to the director lost. Quit program?" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:590 -msgid "Connection lost" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:606 -msgid "Connected to the director." -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:629 -msgid "Reconnect" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:630 -msgid "Reconnect to the director" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:644 -msgid "Disconnected of the director." -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:663 src/wx-console/wxbrestorepanel.cpp:689 -msgid "Unexpected question has been received.\n" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:686 src/wx-console/wxbmainframe.cpp:703 -msgid "wx-console: unexpected director's question." -msgstr "" - -#: src/wx-console/console_thread.cpp:101 -#, 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" +#, c-format +msgid "Using this configuration file: %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:108 -msgid "" -"No Director resource defined in config file.\n" -"Without that I don't how to speak to the Director :-(\n" +#: src/wx-console/wxbmainframe.cpp:459 +msgid "Connecting to the director..." msgstr "" -#: src/wx-console/console_thread.cpp:127 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in config file.\n" +#: src/wx-console/wxbmainframe.cpp:474 +msgid "Failed to unregister a data parser !" msgstr "" -#: src/wx-console/console_thread.cpp:148 -msgid "Error while initializing windows sockets...\n" +#: src/wx-console/wxbmainframe.cpp:482 +msgid "Quitting.\n" msgstr "" -#: src/wx-console/console_thread.cpp:163 -msgid "Error while cleaning up windows sockets...\n" +#: src/wx-console/wxbmainframe.cpp:497 +msgid "" +"Welcome to Bacula wx-console.\n" +"Written by Nicolas Boichat \n" +"(C) 2005 Kern Sibbald\n" msgstr "" -#: src/wx-console/console_thread.cpp:201 -msgid "Error while initializing library." +#: src/wx-console/wxbmainframe.cpp:499 +msgid "About Bacula wx-console" msgstr "" -#: src/wx-console/console_thread.cpp:227 -msgid "Cryptographic library initialization failed.\n" +#: src/wx-console/wxbmainframe.cpp:505 +msgid "Please choose your default configuration file" msgstr "" -#: src/wx-console/console_thread.cpp:231 -msgid "Please correct configuration file.\n" +#: src/wx-console/wxbmainframe.cpp:509 +msgid "Use this configuration file as default?" msgstr "" -#: src/wx-console/console_thread.cpp:273 -msgid "Error : Library not initialized\n" +#: src/wx-console/wxbmainframe.cpp:510 +msgid "Configuration file" msgstr "" -#: src/wx-console/console_thread.cpp:284 -msgid "Error : No configuration file loaded\n" +#: src/wx-console/wxbmainframe.cpp:581 +msgid "Console thread terminated." msgstr "" -#: src/wx-console/console_thread.cpp:294 -msgid "Connecting...\n" +#: src/wx-console/wxbmainframe.cpp:589 +msgid "Connection to the director lost. Quit program?" msgstr "" -#: src/wx-console/console_thread.cpp:310 -msgid "Error : No director defined in config file.\n" +#: src/wx-console/wxbmainframe.cpp:590 +msgid "Connection lost" msgstr "" -#: src/wx-console/console_thread.cpp:322 -msgid "Multiple directors found in your config file.\n" +#: src/wx-console/wxbmainframe.cpp:606 +msgid "Connected to the director." msgstr "" -#: src/wx-console/console_thread.cpp:331 -#, c-format -msgid "Please choose a director (1-%d): " +#: src/wx-console/wxbmainframe.cpp:629 +msgid "Reconnect" msgstr "" -#: src/wx-console/console_thread.cpp:403 -msgid "Failed to connect to the director\n" +#: src/wx-console/wxbmainframe.cpp:630 +msgid "Reconnect to the director" msgstr "" -#: src/wx-console/console_thread.cpp:413 -msgid "Connected\n" +#: src/wx-console/wxbmainframe.cpp:644 +msgid "Disconnected of the director." msgstr "" -#: src/wx-console/console_thread.cpp:470 -msgid "<< Unexpected signal received : " +#: src/wx-console/wxbmainframe.cpp:663 src/wx-console/wxbrestorepanel.cpp:689 +msgid "Unexpected question has been received.\n" msgstr "" -#: src/wx-console/console_thread.cpp:490 -msgid "Connection terminated\n" +#: src/wx-console/wxbmainframe.cpp:686 src/wx-console/wxbmainframe.cpp:703 +msgid "wx-console: unexpected director's question." msgstr "" #: src/wx-console/wxbrestorepanel.cpp:216 @@ -14592,6 +14089,11 @@ msgstr "" msgid "Cancel restore" msgstr "" +#: src/wx-console/wxbrestorepanel.cpp:245 +#: src/wx-console/wxbrestorepanel.cpp:299 +msgid "Add" +msgstr "" + #: src/wx-console/wxbrestorepanel.cpp:247 #: src/wx-console/wxbrestorepanel.cpp:301 msgid "Remove" @@ -14961,176 +14463,3 @@ msgstr "" #: src/wx-console/wxbrestorepanel.cpp:1976 msgid "Restoring..." msgstr "" - -#: src/filed/win32/winservice.cpp:131 src/filed/win32/winservice.cpp:145 -msgid "No existing instance of Bacula could be contacted" -msgstr "" - -#: src/filed/win32/winservice.cpp:218 -msgid "KERNEL32.DLL not found: Bacula service not started" -msgstr "" - -#: src/filed/win32/winservice.cpp:228 -msgid "Registry service not found: Bacula service not started" -msgstr "" - -#: src/filed/win32/winservice.cpp:230 -msgid "Registry service not found" -msgstr "" - -#: src/filed/win32/winservice.cpp:260 -msgid "StartServiceCtrlDispatcher failed." -msgstr "" - -#: src/filed/win32/winservice.cpp:278 -msgid "RegisterServiceCtlHandler failed" -msgstr "" - -#: src/filed/win32/winservice.cpp:279 -msgid "Contact Register Service Handler failure" -msgstr "" - -#: src/filed/win32/winservice.cpp:295 -msgid "ReportStatus STOPPED failed 1" -msgstr "" - -#: src/filed/win32/winservice.cpp:318 -msgid "Report Service failure" -msgstr "" - -#: src/filed/win32/winservice.cpp:355 -msgid "Unable to install Bacula service" -msgstr "" - -#: src/filed/win32/winservice.cpp:373 -msgid "Service command length too long" -msgstr "" - -#: src/filed/win32/winservice.cpp:374 -msgid "Service command length too long. Service not registered." -msgstr "" - -#: src/filed/win32/winservice.cpp:389 -msgid "Cannot write System Registry" -msgstr "" - -#: src/filed/win32/winservice.cpp:390 -msgid "" -"The System Registry could not be updated - the Bacula service was not " -"installed" -msgstr "" - -#: src/filed/win32/winservice.cpp:397 -msgid "Cannot add Bacula key to System Registry" -msgstr "" - -#: src/filed/win32/winservice.cpp:398 src/filed/win32/winservice.cpp:449 -msgid "The Bacula service could not be installed" -msgstr "" - -#: src/filed/win32/winservice.cpp:406 -msgid "" -"The Bacula File service was successfully installed.\n" -"The service may be started by double clicking on the\n" -"Bacula \"Start\" icon and will be automatically\n" -"be run the next time this machine is rebooted. " -msgstr "" - -#: src/filed/win32/winservice.cpp:424 -msgid "" -"The Service Control Manager could not be contacted - the Bacula service was " -"not installed" -msgstr "" - -#: src/filed/win32/winservice.cpp:455 -msgid "" -"Provides file backup and restore services. Bacula -- the network backup " -"solution." -msgstr "" - -#: src/filed/win32/winservice.cpp:462 -msgid "" -"The Bacula File service was successfully installed.\n" -"The service may be started from the Control Panel and will\n" -"automatically be run the next time this machine is rebooted." -msgstr "" - -#: src/filed/win32/winservice.cpp:471 -msgid "" -"Unknown Windows operating system.\n" -"Cannot install Bacula service.\n" -msgstr "" - -#: src/filed/win32/winservice.cpp:496 -msgid "" -"Could not find registry entry.\n" -"Service probably not registerd - the Bacula service was not removed" -msgstr "" - -#: src/filed/win32/winservice.cpp:501 -msgid "" -"Could not delete Registry key.\n" -"The Bacula service could not be removed" -msgstr "" - -#: src/filed/win32/winservice.cpp:511 -msgid "Bacula could not be contacted, probably not running" -msgstr "" - -#: src/filed/win32/winservice.cpp:517 src/filed/win32/winservice.cpp:553 -msgid "The Bacula service has been removed" -msgstr "" - -#: src/filed/win32/winservice.cpp:547 -msgid "The Bacula service could not be stopped" -msgstr "" - -#: src/filed/win32/winservice.cpp:555 -msgid "The Bacula service could not be removed" -msgstr "" - -#: src/filed/win32/winservice.cpp:560 -msgid "The Bacula service could not be found" -msgstr "" - -#: src/filed/win32/winservice.cpp:565 -msgid "The SCM could not be contacted - the Bacula service was not removed" -msgstr "" - -#: src/filed/win32/winservice.cpp:629 -msgid "SetServiceStatus failed" -msgstr "" - -#: src/filed/win32/winservice.cpp:657 -#, c-format -msgid "" -"\n" -"\n" -"%s error: %ld at %s:%d" -msgstr "" - -#: src/filed/win32/winservice.cpp:732 -#, c-format -msgid "Locked by: %s, duration: %ld seconds\n" -msgstr "" - -#: src/filed/win32/winservice.cpp:736 -#, c-format -msgid "No longer locked\n" -msgstr "" - -#: src/filed/win32/winservice.cpp:740 -msgid "Could not lock database" -msgstr "" - -#: src/filed/win32/winmain.cpp:228 src/filed/win32/winmain.cpp:236 -msgid "Bacula Usage" -msgstr "" - -#: src/filed/win32/winmain.cpp:233 -msgid "Bad Command Line Options" -msgstr "" - -#: src/filed/win32/winmain.cpp:326 -msgid "Another instance of Bacula is already running" -msgstr "" diff --git a/bacula/po/fr.gmo b/bacula/po/fr.gmo index 6b6024ce33e23703fdd0b37aff65f28e998a5efe..f365a43973df12264430697a4e62045391a5e667 100644 GIT binary patch delta 15 WcmbQlHi>OR4kMGH!R9>1C5!+iegt>` delta 15 WcmbQlHi>OR4kMF+`Q|*vC5!+ip#**a diff --git a/bacula/po/fr.po b/bacula/po/fr.po index 31f222c56b..4db0815dab 100644 --- a/bacula/po/fr.po +++ b/bacula/po/fr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Bacula 1.38\n" "Report-Msgid-Bugs-To: bacula-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2006-02-26 13:07+0100\n" +"POT-Creation-Date: 2006-02-26 13:10+0100\n" "PO-Revision-Date: 2005-08-10 16:45+0100\n" "Last-Translator: Nicolas Boichat \n" "Language-Team: French \n" @@ -16,6954 +16,6831 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: src/stored/block.c:79 -#, c-format -msgid "" -"Dump block %s %x: size=%d BlkNum=%d\n" -" Hdrcksum=%x cksum=%x\n" +#: src/cats/bdb.c:128 +msgid "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" msgstr "" -#: src/stored/block.c:92 -#, c-format -msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d p=%x\n" +#: src/cats/bdb.c:129 +msgid "WARNING!!!! The Internal Database is NOT OPERATIONAL!\n" msgstr "" -#: src/stored/block.c:148 +#: src/cats/bdb.c:130 +msgid "You should use SQLite, PostgreSQL, or MySQL\n" +msgstr "" + +#: src/cats/bdb.c:152 src/cats/mysql.c:124 src/cats/postgresql.c:128 +#: src/cats/sqlite.c:122 #, c-format -msgid "%d block read errors not printed.\n" +msgid "Unable to initialize DB lock. ERR=%s\n" msgstr "" -#: src/stored/block.c:236 src/stored/block.c:252 src/stored/block.c:262 +#: src/cats/bdb.c:162 #, c-format -msgid "" -"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " -"discarded.\n" +msgid "Unable to open Catalog DB control file %s: ERR=%s\n" msgstr "" -#: src/stored/block.c:276 +#: src/cats/bdb.c:217 #, c-format -msgid "" -"Volume data error at %u:%u! Block length %u is insane (too large), probably " -"due to a bad archive.\n" +msgid "Error reading catalog DB control file. ERR=%s\n" msgstr "" -#: src/stored/block.c:302 +#: src/cats/bdb.c:220 #, c-format msgid "" -"Volume data error at %u:%u!\n" -"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" +"Error, catalog DB control file wrong version. Wanted %d, got %d\n" +"Please reinitialize the working directory.\n" msgstr "" -#: src/stored/block.c:354 src/stored/block.c:677 src/stored/block.c:746 -#: src/stored/acquire.c:437 +#: src/cats/bdb_update.c:83 src/cats/bdb_update.c:114 #, c-format -msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" +msgid "Error updating DB Job file. ERR=%s\n" msgstr "" -#: src/stored/block.c:410 -msgid "Cannot write block. Device at EOM.\n" +#: src/cats/bdb_update.c:153 src/cats/bdb_update.c:189 +#, c-format +msgid "Error updating DB Media file. ERR=%s\n" msgstr "" -#: src/stored/block.c:415 -msgid "Attempt to write on read-only Volume.\n" +#: src/cats/mysql.c:60 +msgid "A user name for MySQL must be supplied.\n" msgstr "" -#: src/stored/block.c:467 +#: src/cats/mysql.c:161 #, c-format -msgid "User defined maximum volume capacity %s exceeded on device %s.\n" +msgid "" +"Unable to connect to MySQL server. \n" +"Database=%s User=%s\n" +"It is probably not running or your password is incorrect.\n" msgstr "" -#: src/stored/block.c:482 +#: src/cats/mysql.c:320 src/cats/postgresql.c:264 src/cats/sqlite.c:323 #, c-format -msgid "Unable to write EOF. ERR=%s\n" +msgid "Query failed: %s: ERR=%s\n" msgstr "" -#: src/stored/block.c:508 src/stored/block.c:519 -msgid "Write block header zeroed.\n" +#: src/cats/postgresql.c:62 +msgid "A user name for PostgreSQL must be supplied.\n" msgstr "" -#: src/stored/block.c:537 +#: src/cats/postgresql.c:165 #, c-format -msgid "Write error at %u:%u on device %s. ERR=%s.\n" +msgid "" +"Unable to connect to PostgreSQL server.\n" +"Database=%s User=%s\n" +"It is probably not running or your password is incorrect.\n" msgstr "" -#: src/stored/block.c:544 +#: src/cats/postgresql.c:506 #, c-format -msgid "End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n" +msgid "error fetching currval: %s\n" msgstr "" -#: src/stored/block.c:619 src/stored/block.c:625 +#: src/cats/sql.c:96 #, c-format -msgid "Backspace file at EOT failed. ERR=%s\n" +msgid "" +"query %s failed:\n" +"%s\n" msgstr "" -#: src/stored/block.c:632 +#: src/cats/sql.c:118 #, c-format -msgid "Backspace record at EOT failed. ERR=%s\n" +msgid "" +"insert %s failed:\n" +"%s\n" msgstr "" -#: src/stored/block.c:649 +#: src/cats/sql.c:132 #, c-format -msgid "Re-read last block at EOT failed. ERR=%s" +msgid "Insertion problem: affected_rows=%s\n" msgstr "" -#: src/stored/block.c:653 -msgid "Re-read of last block succeeded.\n" +#: src/cats/sql.c:152 +#, c-format +msgid "" +"update %s failed:\n" +"%s\n" msgstr "" -#: src/stored/block.c:656 +#: src/cats/sql.c:162 #, c-format -msgid "Re-read of last block failed. Last block=%u Current block=%u.\n" +msgid "Update problem: affected_rows=%s\n" msgstr "" -#: src/stored/block.c:685 +#: src/cats/sql.c:183 #, c-format msgid "" -"Error writing final EOF to tape. This Volume may not be readable.\n" -"%s" +"delete %s failed:\n" +"%s\n" msgstr "" -#: src/stored/block.c:795 src/stored/dvd.c:694 +#: src/cats/sql.c:209 src/cats/sql.c:216 src/cats/sql_create.c:773 +#: src/cats/sql_get.c:180 src/cats/sql_get.c:231 src/cats/sql_get.c:564 +#: src/cats/sql_get.c:639 src/cats/sql_get.c:866 #, c-format -msgid "" -"Error while writing, current part number is less than the total number of " -"parts (%d/%d, device=%s)\n" +msgid "error fetching row: %s\n" msgstr "" -#: src/stored/block.c:803 src/stored/block.c:913 +#: src/cats/sql.c:326 src/dird/catreq.c:369 src/dird/catreq.c:401 +#: src/dird/catreq.c:426 #, c-format -msgid "Unable to open device next part %s: ERR=%s\n" +msgid "Attribute create error. %s" msgstr "" -#: src/stored/block.c:821 +#: src/cats/sql.c:407 #, 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 "Path length is zero. File=%s\n" msgstr "" -#: src/stored/block.c:834 -#, c-format -msgid "" -"End of Volume \"%s\" at %u:%u on device %s (part_size=%s, free_space=%s, " -"free_space_errno=%d).\n" +#: src/cats/sql.c:451 +msgid "No results to list.\n" msgstr "" -#: src/stored/block.c:888 +#: src/cats/sql_create.c:86 #, c-format -msgid "Block buffer size looping problem on device %s\n" +msgid "Create DB Job record %s failed. ERR=%s\n" msgstr "" -#: src/stored/block.c:939 +#: src/cats/sql_create.c:132 #, c-format -msgid "Read error at file:blk %u:%u on device %s. ERR=%s.\n" +msgid "Create JobMedia record %s failed: ERR=%s\n" msgstr "" -#: src/stored/block.c:952 +#: src/cats/sql_create.c:141 #, c-format -msgid "Read zero bytes at %u:%u on device %s.\n" +msgid "Update Media record %s failed: ERR=%s\n" msgstr "" -#: src/stored/block.c:965 +#: src/cats/sql_create.c:171 #, c-format -msgid "" -"Volume data error at %u:%u! Very short block of %d bytes on device %s " -"discarded.\n" +msgid "pool record %s already exists\n" msgstr "" -#: src/stored/block.c:990 +#: src/cats/sql_create.c:197 #, c-format -msgid "Block length %u is greater than buffer %u. Attempting recovery.\n" +msgid "Create db Pool record %s failed: ERR=%s\n" msgstr "" -#: src/stored/block.c:1009 +#: src/cats/sql_create.c:228 #, c-format -msgid "Setting block buffer size to %u bytes.\n" +msgid "Device record %s already exists\n" msgstr "" -#: src/stored/block.c:1024 +#: src/cats/sql_create.c:244 #, c-format -msgid "" -"Volume data error at %u:%u! Short block of %d bytes on device %s discarded.\n" +msgid "Create db Device record %s failed: ERR=%s\n" msgstr "" -#: src/stored/spool.c:69 +#: src/cats/sql_create.c:277 #, c-format -msgid "" -"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" +msgid "More than one Storage record!: %d\n" msgstr "" -#: src/stored/spool.c:75 +#: src/cats/sql_create.c:282 #, c-format -msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" +msgid "error fetching Storage row: %s\n" msgstr "" -#: src/stored/spool.c:91 -msgid "Spooling data ...\n" +#: src/cats/sql_create.c:302 +#, c-format +msgid "Create DB Storage record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:117 +#: src/cats/sql_create.c:334 #, c-format -msgid "Bad return from despool WroteVol=%d\n" +msgid "mediatype record %s already exists\n" msgstr "" -#: src/stored/spool.c:150 +#: src/cats/sql_create.c:350 #, c-format -msgid "Open data spool file %s failed: ERR=%s\n" +msgid "Create db mediatype record %s failed: ERR=%s\n" msgstr "" -#: src/stored/spool.c:199 +#: src/cats/sql_create.c:384 #, c-format -msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" +msgid "Volume \"%s\" already exists.\n" msgstr "" -#: src/stored/spool.c:204 +#: src/cats/sql_create.c:422 #, c-format -msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" +msgid "Create DB Media record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:248 src/stored/append.c:207 src/stored/append.c:274 -#: src/stored/mac.c:98 src/stored/mac.c:176 +#: src/cats/sql_create.c:470 #, c-format -msgid "Fatal append error on device %s: ERR=%s\n" +msgid "More than one Client!: %d\n" msgstr "" -#: src/stored/spool.c:258 src/stored/spool.c:432 src/stored/spool.c:470 +#: src/cats/sql_create.c:475 #, c-format -msgid "Ftruncate spool file failed: ERR=%s\n" +msgid "error fetching Client row: %s\n" msgstr "" -#: src/stored/spool.c:260 +#: src/cats/sql_create.c:502 #, c-format -msgid "Bad return from ftruncate. ERR=%s\n" +msgid "Create DB Client record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:309 +#: src/cats/sql_create.c:545 #, c-format -msgid "Spool header read error. ERR=%s\n" +msgid "Create DB Counters record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:312 +#: src/cats/sql_create.c:578 #, c-format -msgid "Spool read error. Wanted %u bytes, got %d\n" +msgid "More than one FileSet!: %d\n" msgstr "" -#: src/stored/spool.c:313 +#: src/cats/sql_create.c:583 #, c-format -msgid "Spool header read error. Wanted %u bytes, got %d\n" +msgid "error fetching FileSet row: ERR=%s\n" msgstr "" -#: src/stored/spool.c:319 src/stored/spool.c:320 +#: src/cats/sql_create.c:613 #, c-format -msgid "Spool block too big. Max %u bytes, got %u\n" +msgid "Create DB FileSet record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:325 src/stored/spool.c:326 +#: src/cats/sql_create.c:670 #, c-format -msgid "Spool data read error. Wanted %u bytes, got %d\n" +msgid "Attempt to put non-attributes into catalog. Stream=%d\n" msgstr "" -#: src/stored/spool.c:383 -msgid "User specified spool size reached.\n" +#: src/cats/sql_create.c:733 +#, c-format +msgid "Create db File record %s failed. ERR=%s" msgstr "" -#: src/stored/spool.c:385 -msgid "Bad return from despool in write_block.\n" +#: src/cats/sql_create.c:766 src/cats/sql_get.c:224 +#, c-format +msgid "More than one Path!: %s for path: %s\n" msgstr "" -#: src/stored/spool.c:393 -msgid "Spooling data again ...\n" +#: src/cats/sql_create.c:797 +#, c-format +msgid "Create db Path record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:424 +#: src/cats/sql_create.c:830 #, c-format -msgid "Error writing header to spool file. ERR=%s\n" +msgid "More than one Filename! %s for file: %s\n" msgstr "" -#: src/stored/spool.c:438 src/stored/spool.c:476 -msgid "Fatal despooling error." +#: src/cats/sql_create.c:836 +#, c-format +msgid "Error fetching row for file=%s: ERR=%s\n" msgstr "" -#: src/stored/spool.c:445 -msgid "Retrying after header spooling error failed.\n" +#: src/cats/sql_create.c:852 +#, c-format +msgid "Create db Filename record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:459 +#: src/cats/sql_delete.c:79 #, c-format -msgid "Error writing data to spool file. ERR=%s\n" +msgid "No pool record %s exists\n" msgstr "" -#: src/stored/spool.c:486 -msgid "Retrying after data spooling error failed.\n" +#: src/cats/sql_delete.c:84 +#, c-format +msgid "Expecting one pool record, got %d\n" msgstr "" -#: src/stored/spool.c:541 src/stored/spool.c:548 +#: src/cats/sql_delete.c:90 #, c-format -msgid "Fseek on attributes file failed: ERR=%s\n" +msgid "Error fetching row %s\n" msgstr "" -#: src/stored/spool.c:558 +#: src/cats/sql_find.c:90 src/cats/sql_find.c:119 #, c-format -msgid "Sending spooled attrs to the Director. Despooling %s bytes ...\n" +msgid "" +"Query error for start time request: ERR=%s\n" +"CMD=%s\n" msgstr "" -#: src/stored/spool.c:585 -#, c-format -msgid "fopen attr spool file %s failed: ERR=%s\n" +#: src/cats/sql_find.c:96 +msgid "No prior Full backup Job record found.\n" msgstr "" -#: src/stored/reserve.c:430 src/stored/reserve.c:442 +#: src/cats/sql_find.c:108 #, c-format -msgid "Failed command: %s\n" +msgid "Unknown level=%d\n" msgstr "" -#: src/stored/reserve.c:432 +#: src/cats/sql_find.c:125 #, c-format msgid "" -"\n" -" Device \"%s\" with MediaType \"%s\" requested by DIR not found in SD " -"Device resources.\n" +"No Job record found: ERR=%s\n" +"CMD=%s\n" msgstr "" -#: src/stored/reserve.c:607 src/stored/dircmd.c:543 +#: src/cats/sql_find.c:224 #, c-format -msgid "" -"\n" -" Device \"%s\" in changer \"%s\" requested by DIR could not be opened or " -"does not exist.\n" +msgid "Unknown Job level=%d\n" msgstr "" -#: src/stored/reserve.c:611 src/stored/dircmd.c:521 +#: src/cats/sql_find.c:234 #, c-format -msgid "" -"\n" -" Device \"%s\" requested by DIR could not be opened or does not exist.\n" +msgid "No Job found for: %s.\n" msgstr "" -#: src/stored/reserve.c:624 +#: src/cats/sql_find.c:245 #, c-format -msgid "3926 Could not get dcr for device: %s\n" +msgid "No Job found for: %s\n" msgstr "" -#: src/stored/reserve.c:686 +#: src/cats/sql_find.c:317 #, c-format -msgid "3601 JobId=%u device %s is BLOCKED due to user unmount.\n" +msgid "Request for Volume item %d greater than max %d\n" msgstr "" -#: src/stored/reserve.c:695 +#: src/cats/sql_find.c:329 #, c-format -msgid "3602 JobId=%u device %s is busy (already reading/writing).\n" +msgid "No Volume record found for item %d.\n" msgstr "" -#: src/stored/reserve.c:742 +#: src/cats/sql_get.c:130 #, c-format -msgid "3603 JobId=%u device %s is busy reading.\n" +msgid "get_file_record want 1 got rows=%d\n" msgstr "" -#: src/stored/reserve.c:751 +#: src/cats/sql_get.c:135 #, c-format -msgid "3604 JobId=%u device %s is BLOCKED due to user unmount.\n" +msgid "Error fetching row: %s\n" msgstr "" -#: src/stored/reserve.c:817 +#: src/cats/sql_get.c:143 #, c-format -msgid "3605 JobId=%u wants free drive but device %s is busy.\n" +msgid "File record for PathId=%s FilenameId=%s not found.\n" msgstr "" -#: src/stored/reserve.c:825 -#, c-format -msgid "3606 JobId=%u wants mounted, but drive %s has no Volume.\n" +#: src/cats/sql_get.c:149 +msgid "File record not found in Catalog.\n" msgstr "" -#: src/stored/reserve.c:835 +#: src/cats/sql_get.c:174 #, c-format -msgid "3607 JobId=%u wants Vol=\"%s\" drive has Vol=\"%s\" on drive %s.\n" +msgid "More than one Filename!: %s for file: %s\n" msgstr "" -#: src/stored/reserve.c:871 +#: src/cats/sql_get.c:184 #, c-format -msgid "3608 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" on drive %s.\n" +msgid "Get DB Filename record %s found bad record: %d\n" msgstr "" -#: src/stored/reserve.c:914 +#: src/cats/sql_get.c:190 #, c-format -msgid "3609 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" on drive %s.\n" -msgstr "" - -#: src/stored/reserve.c:922 src/stored/reserve.c:926 -msgid "Logic error!!!! Should not get here.\n" +msgid "Filename record: %s not found.\n" msgstr "" -#: src/stored/reserve.c:923 +#: src/cats/sql_get.c:194 #, c-format -msgid "3910 JobId=%u Logic error!!!! drive %s Should not get here.\n" +msgid "Filename record: %s not found in Catalog.\n" msgstr "" -#: src/stored/reserve.c:929 +#: src/cats/sql_get.c:235 #, c-format -msgid "3911 JobId=%u failed reserve drive %s.\n" -msgstr "" - -#: src/stored/askdir.c:161 -msgid "Network error on bnet_recv in req_vol_info.\n" +msgid "Get DB path record %s found bad record: %s\n" msgstr "" -#: src/stored/askdir.c:178 +#: src/cats/sql_get.c:248 #, c-format -msgid "Error getting Volume info: %s" -msgstr "" - -#: src/stored/askdir.c:294 src/stored/askdir.c:295 src/stored/append.c:80 -#: src/stored/append.c:89 src/stored/append.c:101 src/stored/append.c:269 -#: src/stored/append.c:281 -msgid "NULL Volume name. This shouldn't happen!!!\n" -msgstr "" - -#: src/stored/askdir.c:299 src/stored/askdir.c:300 -msgid "Attempt to update_volume_info in read mode!!!\n" +msgid "Path record: %s not found.\n" msgstr "" -#: src/stored/askdir.c:328 +#: src/cats/sql_get.c:252 #, c-format -msgid "Didn't get vol info vol=%s: ERR=%s" +msgid "Path record: %s not found in Catalog.\n" msgstr "" -#: src/stored/askdir.c:359 +#: src/cats/sql_get.c:287 #, c-format -msgid "Error creating JobMedia record: ERR=%s\n" +msgid "No Job found for JobId %s\n" msgstr "" -#: src/stored/askdir.c:366 +#: src/cats/sql_get.c:344 src/cats/sql_get.c:399 #, c-format -msgid "Error creating JobMedia record: %s\n" +msgid "No volumes found for JobId=%d\n" msgstr "" -#: src/stored/askdir.c:432 +#: src/cats/sql_get.c:350 src/cats/sql_get.c:408 #, c-format -msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" +msgid "Error fetching row %d: ERR=%s\n" msgstr "" -#: src/stored/askdir.c:445 +#: src/cats/sql_get.c:364 #, c-format -msgid "" -"Job %s waiting. Cannot find any appendable volumes.\n" -"Please use the \"label\" command to create a new Volume for:\n" -" Storage: %s\n" -" Media type: %s\n" -" Pool: %s\n" +msgid "No Volume for JobId %d found in Catalog.\n" msgstr "" -#: src/stored/askdir.c:469 src/stored/askdir.c:551 +#: src/cats/sql_get.c:480 #, c-format -msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" -msgstr "" - -#: src/stored/askdir.c:479 -msgid "pthread error in mount_next_volume.\n" -msgstr "" - -#: src/stored/askdir.c:511 -msgid "Cannot request another volume: no volume name given.\n" +msgid "Pool id select failed: ERR=%s\n" msgstr "" -#: src/stored/askdir.c:517 +#: src/cats/sql_get.c:517 #, c-format -msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" +msgid "Client id select failed: ERR=%s\n" msgstr "" -#: src/stored/askdir.c:532 +#: src/cats/sql_get.c:559 #, c-format -msgid "Please mount Volume \"%s\" on Storage Device %s for Job %s\n" +msgid "More than one Pool!: %s\n" msgstr "" -#: src/stored/askdir.c:561 -msgid "pthread error in mount_volume\n" +#: src/cats/sql_get.c:600 +msgid "Pool record not found in Catalog.\n" msgstr "" -#: src/stored/job.c:80 +#: src/cats/sql_get.c:634 #, c-format -msgid "Bad Job Command from Director: %s\n" +msgid "More than one Client!: %s\n" msgstr "" -#: src/stored/job.c:190 -#, c-format -msgid "Job name not found: %s\n" +#: src/cats/sql_get.c:651 src/cats/sql_get.c:655 +msgid "Client record not found in Catalog.\n" msgstr "" -#: src/stored/job.c:201 +#: src/cats/sql_get.c:680 #, c-format -msgid "Hey!!!! JobId %u Job %s already authenticated.\n" -msgstr "" - -#: src/stored/job.c:212 -msgid "Unable to authenticate File daemon\n" +msgid "More than one Counter!: %d\n" msgstr "" -#: src/stored/job.c:335 -msgid "In free_jcr(), but still attached to device!!!!\n" +#: src/cats/sql_get.c:685 +#, c-format +msgid "error fetching Counter row: %s\n" msgstr "" -#: src/stored/bls.c:68 +#: src/cats/sql_get.c:705 #, c-format -msgid "" -"Copyright (C) 2000-2005 Kern Sibbald.\n" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bls [options] \n" -" -b specify a bootstrap file\n" -" -c specify a config file\n" -" -d specify debug level\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 "Counter record: %s not found in Catalog.\n" msgstr "" -#: src/stored/bls.c:128 src/stored/bextract.c:127 +#: src/cats/sql_get.c:741 #, c-format -msgid "Could not open exclude file: %s, ERR=%s\n" +msgid "Error got %s FileSets but expected only one!\n" msgstr "" -#: src/stored/bls.c:142 src/stored/bextract.c:142 +#: src/cats/sql_get.c:746 #, c-format -msgid "Could not open include file: %s, ERR=%s\n" +msgid "FileSet record \"%s\" not found.\n" msgstr "" -#: src/stored/bls.c:189 -msgid "No archive name specified\n" +#: src/cats/sql_get.c:756 +msgid "FileSet record not found in Catalog.\n" msgstr "" -#: src/stored/bls.c:224 +#: src/cats/sql_get.c:813 #, c-format -msgid "" -"\n" -"Warning, this Volume is a continuation of Volume %s\n" +msgid "Media id select failed: ERR=%s\n" msgstr "" -#: src/stored/bls.c:267 +#: src/cats/sql_get.c:861 #, c-format -msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" +msgid "More than one Volume!: %s\n" msgstr "" -#: src/stored/bls.c:278 +#: src/cats/sql_get.c:906 #, c-format -msgid "Mounted Volume \"%s\".\n" +msgid "Media record MediaId=%s not found.\n" msgstr "" -#: src/stored/bls.c:280 +#: src/cats/sql_get.c:909 #, c-format -msgid "Got EOF at file %u on device %s, Volume \"%s\"\n" +msgid "Media record for Volume \"%s\" not found.\n" msgstr "" -#: src/stored/bls.c:304 +#: src/cats/sql_get.c:916 #, 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" +msgid "Media record for MediaId=%u not found in Catalog.\n" msgstr "" -#: src/stored/bls.c:313 +#: src/cats/sql_get.c:919 #, c-format -msgid "Block: %d size=%d\n" +msgid "Media record for Vol=%s not found in Catalog.\n" msgstr "" -#: src/stored/bls.c:364 src/stored/bscan.c:648 src/stored/bextract.c:285 -msgid "Cannot continue.\n" +#: src/cats/sql_list.c:53 +#, c-format +msgid "Query failed: %s\n" msgstr "" -#: src/stored/bls.c:371 src/stored/bscan.c:652 src/stored/bextract.c:289 -#: src/filed/restore.c:256 src/filed/verify_vol.c:143 +#: src/cats/sqlite.c:136 #, c-format -msgid "Record header file index %ld not equal record index %ld\n" +msgid "Database %s does not exist, please create it.\n" msgstr "" -#: src/stored/bls.c:380 +#: src/cats/sqlite.c:161 #, c-format -msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" +msgid "Unable to open Database=%s. ERR=%s\n" msgstr "" -#: src/stored/bls.c:397 src/stored/read_record.c:327 -msgid "Fresh Volume Label" +#: src/cats/sqlite.c:162 src/lib/bnet_server.c:371 +msgid "unknown" msgstr "" -#: src/stored/bls.c:400 src/stored/read_record.c:330 -msgid "Volume Label" +#: src/cats/sqlite.c:221 +#, c-format +msgid "next_index query error: ERR=%s\n" msgstr "" -#: src/stored/bls.c:404 src/stored/label.c:972 -msgid "Begin Job Session" +#: src/cats/sqlite.c:226 +#, c-format +msgid "Error fetching index: ERR=%s\n" msgstr "" -#: src/stored/bls.c:408 src/stored/label.c:975 -msgid "End Job Session" +#: src/cats/sqlite.c:236 +#, c-format +msgid "next_index update error: ERR=%s\n" msgstr "" -#: src/stored/bls.c:412 -msgid "End of Medium" +#: src/console/authenticate.c:100 src/dird/authenticate.c:106 +#: src/dird/authenticate.c:206 src/filed/authenticate.c:119 +#: src/filed/authenticate.c:215 src/stored/authenticate.c:128 +#: src/stored/authenticate.c:232 src/wx-console/authenticate.c:106 +msgid "" +"Authorization problem: Remote server did not advertise required TLS " +"support.\n" msgstr "" -#: src/stored/bls.c:415 src/stored/label.c:984 -msgid "Unknown" +#: src/console/authenticate.c:107 src/dird/authenticate.c:113 +#: src/dird/authenticate.c:213 src/filed/authenticate.c:127 +#: src/filed/authenticate.c:223 src/stored/authenticate.c:136 +#: src/stored/authenticate.c:240 src/wx-console/authenticate.c:112 +msgid "Authorization problem: Remote server requires TLS.\n" msgstr "" -#: src/stored/bls.c:421 src/stored/read_record.c:348 -#, c-format -msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" +#: src/console/authenticate.c:117 src/wx-console/authenticate.c:121 +msgid "TLS negotiation failed\n" msgstr "" -#: src/stored/bls.c:441 src/stored/bscan.c:1256 src/stored/bextract.c:477 -#: src/stored/btape.c:2684 src/stored/bcopy.c:287 +#: src/console/authenticate.c:129 src/gnome2-console/authenticate.c:85 +#: src/tray-monitor/authenticate.c:87 #, c-format -msgid "Mount Volume \"%s\" on device %s and press return when ready: " +msgid "Bad response to Hello command: ERR=%s\n" msgstr "" -#: src/stored/read.c:55 -msgid "No Volume names found for restore.\n" +#: src/console/authenticate.c:136 src/gnome2-console/authenticate.c:95 +#: src/tray-monitor/authenticate.c:94 src/wx-console/authenticate.c:136 +msgid "Director rejected Hello command\n" msgstr "" -#: src/stored/read.c:109 -#, c-format -msgid ">filed: Error Hdr=%s\n" +#: src/console/authenticate.c:146 src/wx-console/authenticate.c:146 +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 http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " +"help.\n" msgstr "" -#: src/stored/read.c:110 src/stored/read.c:125 +#: src/console/console.c:102 #, c-format -msgid "Error sending to File daemon. ERR=%s\n" +msgid "" +"Copyright (C) 2000-2005 Kern Sibbald\n" +"\n" +"Version: " msgstr "" -#: src/stored/read.c:124 +#: src/console/console.c:103 src/dird/admin.c:108 #, c-format -msgid "Error sending to FD. ERR=%s\n" +msgid " (" msgstr "" -#: src/stored/status.c:67 +#: src/console/console.c:103 #, c-format msgid "" +") %s %s %s\n" +"\n" +"Usage: bconsole [-s] [-c config_file] [-d debug_level]\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" -"%s Version: %s (%s) %s %s %s\n" msgstr "" -#: src/stored/status.c:71 src/dird/ua_status.c:249 -#, c-format -msgid "Daemon started %s, 1 Job run since started.\n" +#: src/console/console.c:150 +msgid "input from file" msgstr "" -#: src/stored/status.c:74 src/dird/ua_status.c:252 -#, c-format -msgid "Daemon started %s, %d Jobs run since started.\n" +#: src/console/console.c:151 +msgid "output to file" msgstr "" -#: src/stored/status.c:78 src/filed/status.c:121 src/dird/ua_status.c:257 -#, c-format -msgid " Heap: bytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" +#: src/console/console.c:152 src/dird/ua_cmds.c:110 +msgid "quit" msgstr "" -#: src/stored/status.c:103 -msgid "" -"\n" -"Device status:\n" +#: src/console/console.c:153 +msgid "output to file and terminal" msgstr "" -#: src/stored/status.c:105 -#, c-format -msgid "Autochanger \"%s\" with devices:\n" +#: src/console/console.c:154 +msgid "sleep specified time" msgstr "" -#: src/stored/status.c:119 -#, c-format -msgid "Device %s is mounted with Volume=\"%s\" Pool=\"%s\"\n" +#: src/console/console.c:155 src/dird/ua_cmds.c:122 +msgid "print current time" msgstr "" -#: src/stored/status.c:123 -#, c-format -msgid "Device %s open but no Bacula volume is mounted.\n" +#: src/console/console.c:156 +msgid "print Console's version" msgstr "" -#: src/stored/status.c:133 -#, c-format -msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" +#: src/console/console.c:157 src/dird/ua_cmds.c:99 +msgid "exit = quit" msgstr "" -#: src/stored/status.c:147 -#, c-format -msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" +#: src/console/console.c:158 +msgid "zed_keys = use zed keys instead of bash keys" msgstr "" -#: src/stored/status.c:152 -#, c-format -msgid " Positioned at File=%s Block=%s\n" +#: src/console/console.c:191 src/dird/ua_dotcmds.c:108 +msgid ": is an illegal command\n" msgstr "" -#: src/stored/status.c:158 -#, c-format -msgid "Device %s is not open.\n" +#: src/console/console.c:400 src/filed/filed.c:183 +#: src/gnome2-console/console.c:271 +msgid "TLS library initialization failed.\n" msgstr "" -#: src/stored/status.c:160 +#: src/console/console.c:404 src/dird/dird.c:200 src/dird/dird.c:410 +#: src/dird/dird.c:413 src/filed/filed.c:188 src/gnome2-console/console.c:275 +#: src/stored/stored.c:193 #, c-format -msgid "Device \"%s\" is not open or does not exist.\n" +msgid "Please correct configuration file: %s\n" msgstr "" -#: src/stored/status.c:165 src/stored/status.c:168 src/stored/status.c:172 -#: src/stored/status.c:174 -msgid "" -"====\n" -"\n" +#: src/console/console.c:421 +msgid "Available Directors:\n" msgstr "" -#: src/stored/status.c:166 -msgid "In Use Volume status:\n" +#: src/console/console.c:425 +#, c-format +msgid "%d %s at %s:%d\n" msgstr "" -#: src/stored/status.c:190 -msgid "" -"No DEVICE structure.\n" -"\n" +#: src/console/console.c:429 +msgid "Select Director: " msgstr "" -#: src/stored/status.c:195 -msgid " Device is BLOCKED. User unmounted.\n" +#: src/console/console.c:435 +#, c-format +msgid "You must enter a number between 1 and %d\n" msgstr "" -#: src/stored/status.c:198 -msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" -msgstr "" +#: src/console/console.c:455 src/tray-monitor/tray-monitor.c:858 +#, c-format +msgid "Connecting to Director %s:%d\n" +msgstr "Connection au Director %s:%d\n" -#: src/stored/status.c:202 +#: src/console/console.c:471 src/gnome2-console/console.c:504 +#: src/wx-console/console_thread.cpp:370 #, c-format -msgid " Device is BLOCKED waiting for mount of volume \"%s\".\n" +msgid "Failed to initialize TLS context for Console \"%s\".\n" msgstr "" -#: src/stored/status.c:205 -msgid " Device is BLOCKED waiting for media.\n" +#: src/console/console.c:492 src/gnome2-console/console.c:526 +#: src/wx-console/console_thread.cpp:391 +#, c-format +msgid "Failed to initialize TLS context for Director \"%s\".\n" msgstr "" -#: src/stored/status.c:209 -msgid " Device is being initialized.\n" +#: src/console/console.c:515 +msgid "Enter a period to cancel a command.\n" msgstr "" -#: src/stored/status.c:212 -msgid " Device is blocked labeling a Volume.\n" +#: src/console/console.c:582 src/console/console.c:611 src/dird/dird.c:496 +#: src/dird/dird.c:711 src/dird/dird.c:777 src/dird/dird.c:829 +#: src/filed/filed.c:302 src/filed/filed.c:348 +#: src/gnome2-console/console.c:140 src/gnome2-console/console.c:169 +#: src/stored/stored.c:309 src/wx-console/console_thread.cpp:94 +#: src/wx-console/console_thread.cpp:120 +msgid "TLS required but not configured in Bacula.\n" msgstr "" -#: src/stored/status.c:220 +#: src/console/console.c:589 src/gnome2-console/console.c:147 #, c-format -msgid " Slot %d is loaded in drive %d.\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.\n" msgstr "" -#: src/stored/status.c:223 +#: src/console/console.c:598 src/gnome2-console/console.c:156 #, c-format -msgid " Drive %d is not loaded.\n" +msgid "" +"No Director resource defined in %s\n" +"Without that I don't how to speak to the Director :-(\n" msgstr "" -#: src/stored/status.c:227 src/stored/btape.c:548 +#: src/console/console.c:618 src/gnome2-console/console.c:176 #, c-format -msgid "Configured device capabilities:\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in %s.\n" msgstr "" -#: src/stored/status.c:242 -msgid "Device state:\n" +#: src/console/console.c:763 +msgid "Too many arguments on input command.\n" msgstr "" -#: src/stored/status.c:256 -#, c-format -msgid "" -"num_writers=%d JobStatus=%c block=%d\n" -"\n" +#: src/console/console.c:767 +msgid "First argument to input command must be a filename.\n" msgstr "" -#: src/stored/status.c:259 src/stored/btape.c:580 +#: src/console/console.c:772 #, c-format -msgid "Device parameters:\n" +msgid "Cannot open file %s for input. ERR=%s\n" msgstr "" -#: src/stored/status.c:260 +#: src/console/console.c:802 +msgid "Too many arguments on output/tee command.\n" +msgstr "" + +#: src/console/console.c:818 #, c-format -msgid "Archive name: %s Device name: %s\n" +msgid "Cannot open file %s for output. ERR=%s\n" msgstr "" -#: src/stored/status.c:262 +#: src/console/console_conf.c:123 src/gnome2-console/console_conf.c:122 +#: src/wx-console/console_conf.c:128 #, c-format -msgid "File=%u block=%u\n" +msgid "No record for %d %s\n" msgstr "" -#: src/stored/status.c:263 +#: src/console/console_conf.c:132 src/wx-console/console_conf.c:137 #, c-format -msgid "Min block=%u Max block=%u\n" +msgid "Console: name=%s rcfile=%s histfile=%s\n" msgstr "" -#: src/stored/status.c:277 src/dird/ua_status.c:508 -msgid "" -"\n" -"Running Jobs:\n" +#: src/console/console_conf.c:136 src/gnome2-console/console_conf.c:131 +#: src/wx-console/console_conf.c:141 +#, c-format +msgid "Director: name=%s address=%s DIRport=%d\n" msgstr "" -#: src/stored/status.c:280 +#: src/console/console_conf.c:140 src/console/console_conf.c:216 +#: src/console/console_conf.c:261 src/console/console_conf.c:288 +#: src/filed/filed_conf.c:268 src/filed/filed_conf.c:327 +#: src/filed/filed_conf.c:357 src/gnome2-console/console_conf.c:142 +#: src/gnome2-console/console_conf.c:220 src/gnome2-console/console_conf.c:268 +#: src/gnome2-console/console_conf.c:298 src/stored/stored_conf.c:510 +#: src/stored/stored_conf.c:598 src/stored/stored_conf.c:633 +#: src/wx-console/console_conf.c:145 src/wx-console/console_conf.c:220 +#: src/wx-console/console_conf.c:265 src/wx-console/console_conf.c:292 #, c-format -msgid "%s Job %s waiting for Client connection.\n" +msgid "Unknown resource type %d\n" msgstr "" -#: src/stored/status.c:295 +#: src/console/console_conf.c:242 src/dird/dird_conf.c:1112 +#: src/dird/dird_conf.c:1127 src/filed/filed_conf.c:296 +#: src/gnome2-console/console_conf.c:246 src/tray-monitor/tray_conf.c:262 +#: src/wx-console/console_conf.c:246 #, c-format -msgid "" -"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=\"%s\"\n" +msgid "%s item is required in %s resource, but not found.\n" msgstr "" -#: src/stored/status.c:307 +#: src/console/console_conf.c:304 src/dird/dird_conf.c:1299 +#: src/filed/filed_conf.c:374 src/gnome2-console/console_conf.c:314 +#: src/tray-monitor/tray_conf.c:341 src/wx-console/console_conf.c:308 #, c-format -msgid "" -"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=\"%s\"\n" +msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" msgstr "" -#: src/stored/status.c:323 src/filed/status.c:166 +#: src/dird/admin.c:55 #, c-format -msgid " Files=%s Bytes=%s Bytes/sec=%s\n" +msgid "Start Admin JobId %d, Job=%s\n" msgstr "" -#: src/stored/status.c:330 +#: src/dird/admin.c:82 src/dird/backup.c:343 src/dird/mac.c:287 #, c-format -msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" +msgid "Error getting job record for stats: %s" msgstr "" -#: src/stored/status.c:335 -msgid " FDSocket closed\n" +#: src/dird/admin.c:90 +msgid "Admin OK" msgstr "" -#: src/stored/status.c:343 src/filed/status.c:195 src/dird/ua_cmds.c:416 -msgid "No Jobs running.\n" +#: src/dird/admin.c:94 +msgid "*** Admin Error ***" msgstr "" -#: src/stored/status.c:345 src/stored/status.c:361 src/stored/status.c:438 -#: src/filed/status.c:198 src/filed/status.c:277 src/dird/ua_status.c:277 -#: src/dird/ua_status.c:493 src/dird/ua_status.c:655 -msgid "====\n" +#: src/dird/admin.c:98 +msgid "Admin Canceled" msgstr "" -#: src/stored/status.c:352 -msgid "" -"\n" -"Jobs waiting to reserve a drive:\n" +#: src/dird/admin.c:102 src/dird/backup.c:455 src/dird/mac.c:389 +#: src/dird/restore.c:246 +#, c-format +msgid "Inappropriate term code: %c\n" msgstr "" -#: src/stored/status.c:373 src/filed/status.c:211 src/dird/ua_status.c:665 -msgid "No Terminated Jobs.\n" +#: src/dird/admin.c:108 +msgid "Bacula " msgstr "" -#: src/stored/status.c:378 src/dird/ua_status.c:670 +#: src/dird/admin.c:108 +#, c-format msgid "" +"): %s\n" +" JobId: %d\n" +" Job: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Termination: %s\n" "\n" -"Terminated Jobs:\n" msgstr "" -#: src/stored/status.c:380 -msgid " JobId Level Files Bytes Status Finished Name \n" +#: src/dird/authenticate.c:67 src/dird/authenticate.c:68 +#: src/tray-monitor/authenticate.c:121 +#, c-format +msgid "Error sending Hello to Storage daemon. ERR=%s\n" msgstr "" -#: src/stored/status.c:382 src/filed/status.c:221 src/dird/ua_status.c:532 -msgid "======================================================================\n" +#: src/dird/authenticate.c:93 +msgid "Director and Storage daemon passwords or names not the same.\n" msgstr "" -#: src/stored/status.c:402 src/lib/util.c:178 src/filed/status.c:241 -#: src/dird/ua_status.c:703 -msgid "Created" +#: src/dird/authenticate.c:95 +msgid "" +"Director unable to authenticate with Storage daemon. 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 http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " +"help.\n" msgstr "" -#: src/stored/status.c:406 src/lib/util.c:191 src/lib/util.c:258 -#: src/filed/status.c:245 src/dird/ua_status.c:707 -msgid "Error" +#: src/dird/authenticate.c:123 src/dird/authenticate.c:223 +#: src/dird/authenticate.c:356 src/filed/authenticate.c:136 +#: src/filed/authenticate.c:232 src/stored/authenticate.c:145 +#: src/stored/authenticate.c:249 +msgid "TLS negotiation failed.\n" msgstr "" -#: src/stored/status.c:409 src/filed/status.c:248 src/dird/ua_status.c:710 -msgid "Diffs" +#: src/dird/authenticate.c:132 src/tray-monitor/authenticate.c:134 +#, c-format +msgid "bdird set configuration file to file\n" +" -dnn set debug level to nn\n" +" -f run in foreground (for debugging)\n" +" -g groupid\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/stored/parse_bsr.c:448 -msgid "JobLevel not yet implemented\n" +#: src/dird/dird.c:196 src/stored/stored.c:189 +msgid "Cryptography library initialization failed.\n" msgstr "" -#: src/stored/parse_bsr.c:631 -#, c-format -msgid "Slot %d in bsr at inappropriate place.\n" +#: src/dird/dird.c:396 +msgid "Too many open reload requests. Request ignored.\n" msgstr "" -#: src/stored/parse_bsr.c:655 -#, c-format -msgid "VolFile : %u-%u\n" +#: src/dird/dird.c:411 +msgid "Out of reload table entries. Giving up.\n" msgstr "" -#: src/stored/parse_bsr.c:663 -#, c-format -msgid "VolBlock : %u-%u\n" +#: src/dird/dird.c:414 +msgid "Resetting previous configuration.\n" msgstr "" -#: src/stored/parse_bsr.c:673 +#: src/dird/dird.c:474 #, c-format -msgid "FileIndex : %u\n" +msgid "" +"No Director resource defined in %s\n" +"Without that I don't know who I am :-(\n" msgstr "" -#: src/stored/parse_bsr.c:675 +#: src/dird/dird.c:482 src/filed/filed.c:295 #, c-format -msgid "FileIndex : %u-%u\n" +msgid "No Messages resource defined in %s\n" msgstr "" -#: src/stored/parse_bsr.c:685 +#: src/dird/dird.c:487 #, c-format -msgid "JobId : %u\n" +msgid "Only one Director resource permitted in %s\n" msgstr "" -#: src/stored/parse_bsr.c:687 +#: src/dird/dird.c:502 src/filed/filed.c:357 src/stored/stored.c:361 #, c-format -msgid "JobId : %u-%u\n" +msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:697 +#: src/dird/dird.c:508 src/filed/filed.c:363 src/stored/stored.c:367 #, c-format -msgid "SessId : %u\n" +msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:699 +#: src/dird/dird.c:514 src/filed/filed.c:369 src/stored/stored.c:373 #, c-format -msgid "SessId : %u-%u\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/stored/parse_bsr.c:708 +#: src/dird/dird.c:533 src/filed/filed.c:388 src/stored/stored.c:392 #, c-format -msgid "VolumeName : %s\n" +msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:709 +#: src/dird/dird.c:541 #, c-format -msgid " MediaType : %s\n" +msgid "No Job records defined in %s\n" msgstr "" -#: src/stored/parse_bsr.c:710 +#: src/dird/dird.c:585 src/dird/dird.c:598 #, c-format -msgid " Device : %s\n" +msgid "Hey something is wrong. p=0x%lu\n" msgstr "" -#: src/stored/parse_bsr.c:711 +#: src/dird/dird.c:647 #, c-format -msgid " Slot : %d\n" +msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" msgstr "" -#: src/stored/parse_bsr.c:720 -#, c-format -msgid "Client : %s\n" +#: src/dird/dird.c:654 +msgid "Too many items in Job resource\n" msgstr "" -#: src/stored/parse_bsr.c:728 +#: src/dird/dird.c:672 src/dird/job.c:101 src/dird/ua_cmds.c:1480 +#: src/dird/ua_output.c:600 #, c-format -msgid "Job : %s\n" +msgid "Could not open database \"%s\".\n" msgstr "" -#: src/stored/parse_bsr.c:736 +#: src/dird/dird.c:675 #, c-format -msgid "SessTime : %u\n" +msgid "%s" msgstr "" -#: src/stored/parse_bsr.c:750 -msgid "BSR is NULL\n" +#: src/dird/dird.c:717 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Storage \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:754 +#: src/dird/dird.c:733 src/stored/stored.c:347 #, c-format -msgid "Next : 0x%x\n" +msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:755 +#: src/dird/dird.c:784 #, c-format -msgid "Root bsr : 0x%x\n" +msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:766 +#: src/dird/dird.c:790 #, c-format -msgid "count : %u\n" +msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:767 +#: src/dird/dird.c:796 #, c-format -msgid "found : %u\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/stored/parse_bsr.c:770 +#: src/dird/dird.c:813 src/dird/dird.c:853 src/filed/filed.c:326 #, c-format -msgid "done : %s\n" +msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:770 src/tools/dbcheck.c:1098 src/dird/ua_run.c:928 -#: src/dird/ua_input.c:120 src/dird/ua_select.c:54 src/dird/ua_update.c:223 -#: src/dird/ua_update.c:237 src/dird/ua_update.c:247 src/dird/ua_update.c:261 -#: src/dird/ua_update.c:551 -msgid "yes" -msgstr "" - -#: src/stored/parse_bsr.c:770 src/dird/ua_input.c:124 src/dird/ua_select.c:57 -#: src/dird/ua_update.c:225 src/dird/ua_update.c:237 src/dird/ua_update.c:249 -#: src/dird/ua_update.c:261 src/dird/ua_update.c:551 -msgid "no" +#: src/dird/dird.c:836 +#, c-format +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:771 +#: src/dird/dird_conf.c:443 src/tray-monitor/tray_conf.c:152 #, c-format -msgid "positioning : %d\n" +msgid "No %s resource defined\n" msgstr "" -#: src/stored/parse_bsr.c:772 +#: src/dird/dird_conf.c:452 #, c-format -msgid "fast_reject : %d\n" +msgid "Director: name=%s MaxJobs=%d FDtimeout=%s SDtimeout=%s\n" msgstr "" -#: src/stored/wait.c:114 +#: src/dird/dird_conf.c:457 #, c-format -msgid "pthread timedwait error. ERR=%s\n" +msgid " query_file=%s\n" msgstr "" -#: src/stored/wait.c:199 -#, c-format -msgid "Job %s waiting to reserve a device.\n" +#: src/dird/dird_conf.c:460 src/dird/dird_conf.c:485 src/dird/dird_conf.c:499 +#: src/dird/dird_conf.c:544 src/dird/dird_conf.c:548 src/dird/dird_conf.c:552 +#: src/dird/dird_conf.c:576 src/dird/dird_conf.c:581 src/dird/dird_conf.c:585 +#: src/dird/dird_conf.c:589 src/dird/dird_conf.c:593 src/dird/dird_conf.c:597 +#: src/dird/dird_conf.c:607 +msgid " --> " msgstr "" -#: src/stored/acquire.c:54 +#: src/dird/dird_conf.c:466 src/dird/dird_conf.c:469 #, c-format -msgid "Num_writers=%d not zero. Job %d canceled.\n" +msgid "Console: name=%s SSL=%d\n" msgstr "" -#: src/stored/acquire.c:62 +#: src/dird/dird_conf.c:475 #, c-format -msgid "No volumes specified. Job %d canceled.\n" +msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" msgstr "" -#: src/stored/acquire.c:122 +#: src/dird/dird_conf.c:480 #, c-format -msgid "Media Type change. New device %s chosen.\n" +msgid "Counter: name=%s min=%d max=%d\n" msgstr "" -#: src/stored/acquire.c:133 +#: src/dird/dird_conf.c:491 #, c-format -msgid "No suitable device found to read Volume \"%s\"\n" +msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" msgstr "" -#: src/stored/acquire.c:155 src/stored/mount.c:83 +#: src/dird/dird_conf.c:494 #, c-format -msgid "Job %d canceled.\n" +msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" msgstr "" -#: src/stored/acquire.c:166 +#: src/dird/dird_conf.c:506 #, c-format -msgid "Read open device %s Volume \"%s\" failed (EIO): ERR=%s\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/stored/acquire.c:171 +#: src/dird/dird_conf.c:516 #, c-format -msgid "Read open device %s Volume \"%s\" failed: ERR=%s\n" +msgid "" +"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" +" DeviceName=%s MediaType=%s StorageId=%s\n" msgstr "" -#: src/stored/acquire.c:237 src/stored/mount.c:77 +#: src/dird/dird_conf.c:525 #, c-format -msgid "Too many errors trying to mount device %s.\n" +msgid "" +"Catalog: name=%s address=%s DBport=%d db_name=%s\n" +" db_user=%s MutliDBConn=%d\n" msgstr "" -#: src/stored/acquire.c:246 +#: src/dird/dird_conf.c:533 #, c-format -msgid "Ready to read from volume \"%s\" on device %s.\n" +msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" msgstr "" -#: src/stored/acquire.c:289 -#, c-format -msgid "Device %s is busy reading.\n" +#: src/dird/dird_conf.c:534 src/dird/ua_cmds.c:430 src/dird/ua_prune.c:454 +#: src/dird/ua_run.c:643 src/dird/ua_select.c:234 src/dird/ua_select.c:257 +msgid "Job" msgstr "" -#: src/stored/acquire.c:319 -#, c-format -msgid "Wanted Volume \"%s\", but device %s is busy writing on \"%s\" .\n" +#: src/dird/dird_conf.c:534 +msgid "JobDefs" msgstr "" -#: src/stored/acquire.c:338 +#: src/dird/dird_conf.c:538 #, c-format msgid "" -"Cannot recycle volume \"%s\" on device %s because it is in use by another " -"job.\n" +" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=%" +"d\n" msgstr "" -#: src/stored/acquire.c:360 +#: src/dird/dird_conf.c:556 #, c-format -msgid "Could not ready device %s for append.\n" +msgid " --> Where=%s\n" msgstr "" -#: src/stored/acquire.c:478 +#: src/dird/dird_conf.c:559 #, c-format -msgid "Alert: %s" +msgid " --> Bootstrap=%s\n" msgstr "" -#: src/stored/acquire.c:486 +#: src/dird/dird_conf.c:562 #, c-format -msgid "3997 Bad alert command: %s: ERR=%s.\n" +msgid " --> RunBefore=%s\n" msgstr "" -#: src/stored/acquire.c:570 +#: src/dird/dird_conf.c:565 #, c-format -msgid "Hey! num_writers=%d!!!!\n" +msgid " --> RunAfter=%s\n" msgstr "" -#: src/stored/bscan.c:109 +#: src/dird/dird_conf.c:568 #, c-format -msgid "" -"Copyright (C) 2001-2005 Kern Sibbald.\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 nn\n" -" -m update media info in database\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\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 " --> RunAfterFailed=%s\n" msgstr "" -#: src/stored/bscan.c:221 src/stored/bextract.c:177 src/stored/bcopy.c:137 -msgid "Wrong number of arguments: \n" +#: src/dird/dird_conf.c:571 +#, c-format +msgid " --> WriteBootstrap=%s\n" msgstr "" -#: src/stored/bscan.c:234 src/stored/stored.c:265 +#: src/dird/dird_conf.c:603 #, c-format -msgid "No Storage resource defined in %s. Cannot continue.\n" +msgid " --> Run=%s\n" msgstr "" -#: src/stored/bscan.c:242 src/stored/stored.c:296 +#: src/dird/dird_conf.c:614 #, c-format -msgid "No Working Directory defined in %s. Cannot continue.\n" +msgid "FileSet: name=%s\n" msgstr "" -#: src/stored/bscan.c:250 +#: src/dird/dird_conf.c:676 src/dird/dird_conf.c:755 #, c-format -msgid "Working Directory: %s not found. Cannot continue.\n" +msgid "Schedule: name=%s\n" msgstr "" -#: src/stored/bscan.c:254 +#: src/dird/dird_conf.c:681 #, c-format -msgid "Working Directory: %s is not a directory. Cannot continue.\n" +msgid " --> Run Level=%s\n" msgstr "" -#: src/stored/bscan.c:268 src/stored/bscan.c:341 -#, c-format -msgid "First Volume Size = %sn" +#: src/dird/dird_conf.c:682 +msgid " hour=" msgstr "" -#: src/stored/bscan.c:274 -msgid "Could not init Bacula database\n" +#: src/dird/dird_conf.c:691 +msgid " mday=" msgstr "" -#: src/stored/bscan.c:281 -#, c-format -msgid "Using Database: %s, User: %s\n" +#: src/dird/dird_conf.c:700 +msgid " month=" msgstr "" -#: src/stored/bscan.c:315 -#, c-format -msgid "Create JobMedia for Job %s\n" +#: src/dird/dird_conf.c:709 +msgid " wday=" msgstr "" -#: src/stored/bscan.c:326 -#, c-format -msgid "Could not create JobMedia record for Volume=%s Job=%s\n" +#: src/dird/dird_conf.c:718 +msgid " wom=" msgstr "" -#: src/stored/bscan.c:383 -#, c-format -msgid "done: %d%%\n" +#: src/dird/dird_conf.c:727 +msgid " woy=" msgstr "" -#: src/stored/bscan.c:391 src/stored/bcopy.c:205 +#: src/dird/dird_conf.c:736 #, c-format -msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" +msgid " mins=%d\n" msgstr "" -#: src/stored/bscan.c:407 -msgid "Volume is prelabeled. This tape cannot be scanned.\n" +#: src/dird/dird_conf.c:738 src/dird/dird_conf.c:742 src/dird/dird_conf.c:746 +msgid " --> " msgstr "" -#: src/stored/bscan.c:419 +#: src/dird/dird_conf.c:759 #, c-format -msgid "Pool record for %s found in DB.\n" +msgid "Pool: name=%s PoolType=%s\n" msgstr "" -#: src/stored/bscan.c:423 +#: src/dird/dird_conf.c:761 #, c-format -msgid "VOL_LABEL: Pool record not found for Pool: %s\n" +msgid " use_cat=%d use_once=%d acpt_any=%d cat_files=%d\n" msgstr "" -#: src/stored/bscan.c:429 +#: src/dird/dird_conf.c:764 #, c-format -msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" +msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" msgstr "" -#: src/stored/bscan.c:433 +#: src/dird/dird_conf.c:767 #, c-format -msgid "Pool type \"%s\" is OK.\n" +msgid " VolUse=%s recycle=%d LabelFormat=%s\n" msgstr "" -#: src/stored/bscan.c:443 +#: src/dird/dird_conf.c:771 #, c-format -msgid "Media record for %s found in DB.\n" +msgid " CleaningPrefix=%s LabelType=%d\n" msgstr "" -#: src/stored/bscan.c:450 +#: src/dird/dird_conf.c:773 #, c-format -msgid "VOL_LABEL: Media record not found for Volume: %s\n" +msgid " RecyleOldest=%d PurgeOldest=%d MaxVolJobs=%d MaxVolFiles=%d\n" msgstr "" -#: src/stored/bscan.c:457 +#: src/dird/dird_conf.c:779 #, c-format -msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" +msgid "Messages: name=%s\n" msgstr "" -#: src/stored/bscan.c:461 +#: src/dird/dird_conf.c:781 #, c-format -msgid "Media type \"%s\" is OK.\n" +msgid " mailcmd=%s\n" msgstr "" -#: src/stored/bscan.c:470 +#: src/dird/dird_conf.c:783 #, c-format -msgid "VOL_LABEL: OK for Volume: %s\n" +msgid " opcmd=%s\n" msgstr "" -#: src/stored/bscan.c:477 +#: src/dird/dird_conf.c:786 src/tray-monitor/tray_conf.c:179 #, c-format -msgid "%d \"errors\" ignored before first Start of Session record.\n" +msgid "Unknown resource type %d in dump_resource.\n" msgstr "" -#: src/stored/bscan.c:488 +#: src/dird/dird_conf.c:1080 src/tray-monitor/tray_conf.c:232 #, c-format -msgid "SOS_LABEL: Found Job record for JobId: %d\n" +msgid "Unknown resource type %d in free_resource.\n" msgstr "" -#: src/stored/bscan.c:493 +#: src/dird/dird_conf.c:1118 src/lib/parse_conf.c:211 +#: src/tray-monitor/tray_conf.c:268 #, c-format -msgid "SOS_LABEL: Job record not found for JobId: %d\n" +msgid "Too many items in %s resource\n" msgstr "" -#: src/stored/bscan.c:533 +#: src/dird/dird_conf.c:1152 #, c-format -msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" +msgid "Cannot find Console resource %s\n" msgstr "" -#: src/stored/bscan.c:539 +#: src/dird/dird_conf.c:1158 src/filed/filed_conf.c:316 +#: src/stored/stored_conf.c:566 #, c-format -msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" +msgid "Cannot find Director resource %s\n" msgstr "" -#: src/stored/bscan.c:545 +#: src/dird/dird_conf.c:1165 src/stored/stored_conf.c:572 #, c-format -msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" +msgid "Cannot find Storage resource %s\n" msgstr "" -#: src/stored/bscan.c:563 src/stored/bscan.c:1041 +#: src/dird/dird_conf.c:1174 #, c-format -msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" +msgid "Cannot find Job resource %s\n" msgstr "" -#: src/stored/bscan.c:607 +#: src/dird/dird_conf.c:1192 #, c-format -msgid "Could not update job record. ERR=%s\n" +msgid "Cannot find Counter resource %s\n" msgstr "" -#: src/stored/bscan.c:618 +#: src/dird/dird_conf.c:1200 src/filed/filed_conf.c:322 #, c-format -msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" +msgid "Cannot find Client resource %s\n" msgstr "" -#: src/stored/bscan.c:630 +#: src/dird/dird_conf.c:1212 #, c-format -msgid "Could not find Job for SessId=%d SessTime=%d record.\n" +msgid "Cannot find Schedule resource %s\n" msgstr "" -#: src/stored/bscan.c:666 +#: src/dird/dird_conf.c:1217 src/tray-monitor/tray_conf.c:287 #, c-format -msgid "%s file records. At file:blk=%s:%s bytes=%s\n" +msgid "Unknown resource type %d in save_resource.\n" msgstr "" -#: src/stored/bscan.c:708 +#: src/dird/dird_conf.c:1277 src/tray-monitor/tray_conf.c:322 #, c-format -msgid "Got MD5 record: %s\n" +msgid "Unknown resource type %d in save_resrouce.\n" msgstr "" -#: src/stored/bscan.c:716 +#: src/dird/dird_conf.c:1292 #, c-format -msgid "Got SHA1 record: %s\n" +msgid "Name item is required in %s resource, but not found.\n" msgstr "" -#: src/stored/bscan.c:724 +#: src/dird/dird_conf.c:1304 #, c-format -msgid "Got SHA256 record: %s\n" +msgid "Inserting %s res: %s index=%d pass=%d\n" msgstr "" -#: src/stored/bscan.c:732 +#: src/dird/dird_conf.c:1377 #, c-format -msgid "Got SHA512 record: %s\n" -msgstr "" - -#: src/stored/bscan.c:740 src/stored/bscan.c:747 -msgid "Got signed digest record\n" +msgid "Expected a Job Type keyword, got: %s" msgstr "" -#: src/stored/bscan.c:753 +#: src/dird/dird_conf.c:1401 #, c-format -msgid "Got Prog Names Stream: %s\n" -msgstr "" - -#: src/stored/bscan.c:759 -msgid "Got Prog Data Stream record.\n" +msgid "Expected a Job Level keyword, got: %s" msgstr "" -#: src/stored/bscan.c:763 +#: src/dird/dird_conf.c:1421 #, c-format -msgid "Unknown stream type!!! stream=%d data=%s\n" +msgid "Expected a Restore replacement option, got: %s" msgstr "" -#: src/stored/bscan.c:827 +#: src/dird/expand.c:240 #, c-format -msgid "Could not create File Attributes record. ERR=%s\n" +msgid "Count not update counter %s: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:833 +#: src/dird/expand.c:412 #, c-format -msgid "Created File record: %s\n" +msgid "Cannot create var context: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:870 +#: src/dird/expand.c:417 #, c-format -msgid "Could not create media record. ERR=%s\n" +msgid "Cannot set var callback: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:874 src/stored/bscan.c:895 +#: src/dird/expand.c:423 #, c-format -msgid "Could not update media record. ERR=%s\n" +msgid "Cannot set var operate: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:878 +#: src/dird/expand.c:429 src/dird/expand.c:444 #, c-format -msgid "Created Media record for Volume: %s\n" +msgid "Cannot unescape string: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:899 +#: src/dird/expand.c:437 #, c-format -msgid "Updated Media record at end of Volume: %s\n" +msgid "Cannot expand expression \"%s\": ERR=%s\n" msgstr "" -#: src/stored/bscan.c:916 +#: src/dird/expand.c:455 #, c-format -msgid "Could not create pool record. ERR=%s\n" +msgid "Cannot destroy var context: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:920 -#, c-format -msgid "Created Pool record for Pool: %s\n" +#: src/dird/fd_cmds.c:73 src/tray-monitor/tray-monitor.c:867 +msgid "File daemon" msgstr "" -#: src/stored/bscan.c:936 src/dird/job.c:624 +#: src/dird/fd_cmds.c:104 #, c-format -msgid "Could not create Client record. ERR=%s\n" +msgid "File daemon \"%s\" rejected Job command: %s\n" msgstr "" -#: src/stored/bscan.c:940 +#: src/dird/fd_cmds.c:117 #, c-format -msgid "Created Client record for Client: %s\n" +msgid "Error updating Client record. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:957 +#: src/dird/fd_cmds.c:122 #, c-format -msgid "Fileset \"%s\" already exists.\n" +msgid "FD gave bad response to JobId command: %s\n" msgstr "" -#: src/stored/bscan.c:961 -#, c-format -msgid "Could not create FileSet record \"%s\". ERR=%s\n" +#: src/dird/fd_cmds.c:144 src/dird/fd_cmds.c:180 +msgid ", since=" msgstr "" -#: src/stored/bscan.c:966 -#, c-format -msgid "Created FileSet record \"%s\"\n" +#: src/dird/fd_cmds.c:164 +msgid "No prior or suitable Full backup found. Doing FULL backup.\n" msgstr "" -#: src/stored/bscan.c:1013 +#: src/dird/fd_cmds.c:165 src/dird/fd_cmds.c:173 #, c-format -msgid "Could not create JobId record. ERR=%s\n" +msgid " (upgraded from %s)" msgstr "" -#: src/stored/bscan.c:1019 +#: src/dird/fd_cmds.c:171 #, c-format -msgid "Could not update job start record. ERR=%s\n" +msgid "Prior failed job found. Upgrading to %s.\n" msgstr "" -#: src/stored/bscan.c:1022 -#, c-format -msgid "Created new JobId=%u record for original JobId=%u\n" +#: src/dird/fd_cmds.c:196 +msgid "since_utime " msgstr "" -#: src/stored/bscan.c:1072 +#: src/dird/fd_cmds.c:232 #, c-format -msgid "Could not update JobId=%u record. ERR=%s\n" +msgid "Unimplemented backup level %d %c\n" msgstr "" -#: src/stored/bscan.c:1077 +#: src/dird/fd_cmds.c:320 src/filed/job.c:566 #, c-format -msgid "Updated Job termination record for JobId=%u TermStat=%c\n" +msgid "Cannot run program: %s. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1088 src/dird/backup.c:357 -msgid "Backup OK" +#: src/dird/fd_cmds.c:331 src/dird/fd_cmds.c:356 src/dird/fd_cmds.c:370 +msgid ">filed: write error on socket\n" msgstr "" -#: src/stored/bscan.c:1092 src/dird/backup.c:362 -msgid "*** Backup Error ***" +#: src/dird/fd_cmds.c:337 +#, c-format +msgid "Error running program: %s. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1095 src/dird/backup.c:372 -msgid "Backup Canceled" +#: src/dird/fd_cmds.c:346 +#, c-format +msgid "Cannot open included file: %s. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1099 +#: src/dird/fd_cmds.c:441 src/filed/job.c:1622 #, c-format -msgid "Job Termination code: %d" +msgid "Could not open bootstrap file %s: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1104 +#: src/dird/fd_cmds.c:526 #, 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" +" \n" -" -b specify a bootstrap file\n" -" -c specify a configuration file\n" -" -d set debug level to nn\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 "Max Volume files exceeded. Marking Volume \"%s\" as Used.\n" msgstr "" -#: src/stored/bextract.c:198 +#: src/dird/next_vol.c:211 #, c-format -msgid "%d Program Name and/or Program Data Stream records ignored.\n" +msgid "Max configured use duration exceeded. Marking Volume \"%s\" as Used.\n" msgstr "" -#: src/stored/bextract.c:202 +#: src/dird/next_vol.c:221 #, c-format -msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" +msgid "Catalog error updating volume \"%s\". ERR=%s" msgstr "" -#: src/stored/bextract.c:226 -#, c-format -msgid "Cannot stat %s. It must exist. ERR=%s\n" +#: src/dird/next_vol.c:242 +msgid "volume has expired" msgstr "" -#: src/stored/bextract.c:230 +#: src/dird/next_vol.c:260 src/dird/next_vol.c:296 #, c-format -msgid "%s must be a directory.\n" +msgid "Recycled current volume \"%s\"\n" msgstr "" -#: src/stored/bextract.c:251 -#, c-format -msgid "%u files restored.\n" +#: src/dird/next_vol.c:265 +msgid "and recycling of current volume failed" msgstr "" -#: src/stored/bextract.c:278 src/stored/bextract.c:451 -msgid "Logic error output file should be open but is not.\n" +#: src/dird/next_vol.c:271 +msgid "but should be Append, Purged or Recycle" msgstr "" -#: src/stored/bextract.c:298 src/filed/restore.c:269 -#, c-format -msgid "%s stream not supported on this Client.\n" +#: src/dird/next_vol.c:299 +msgid "" +"but should be Append, Purged or Recycle (recycling of the current volume " +"failed)" msgstr "" -#: src/stored/bextract.c:347 -#, c-format -msgid "Seek error on %s: %s\n" +#: src/dird/next_vol.c:303 +msgid "" +"but should be Append, Purged or Recycle (cannot automatically recycle " +"current volume, as it still contains unpruned data)" msgstr "" -#: src/stored/bextract.c:359 src/stored/bextract.c:409 src/filed/restore.c:810 -#: src/filed/restore.c:855 +#: src/dird/next_vol.c:343 #, c-format -msgid "Write error on %s: %s\n" +msgid "Unable to get Pool record: ERR=%s" msgstr "" -#: src/stored/bextract.c:387 src/filed/restore.c:728 +#: src/dird/next_vol.c:348 #, c-format -msgid "Seek to %s error on %s: ERR=%s\n" +msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" msgstr "" -#: src/stored/bextract.c:400 +#: src/dird/next_vol.c:361 #, c-format -msgid "Uncompression error. ERR=%d\n" +msgid "Failed to move Scratch Volume. ERR=%s\n" msgstr "" -#: src/stored/bextract.c:408 -msgid "===Write error===\n" +#: src/dird/next_vol.c:365 +#, c-format +msgid "Using Volume \"%s\" from 'Scratch' pool.\n" msgstr "" -#: src/stored/bextract.c:421 src/filed/restore.c:764 -msgid "GZIP data stream found, but GZIP not configured!\n" +#: src/dird/next_vol.c:373 +#, c-format +msgid "Unable to update Volume record: ERR=%s" msgstr "" -#: src/stored/bextract.c:442 -msgid "Got Program Name or Data Stream. Ignored.\n" +#: src/dird/pythondir.c:105 src/filed/pythonfd.c:102 src/filed/pythonfd.c:156 +#: src/filed/pythonfd.c:220 src/stored/pythonsd.c:95 src/stored/pythonsd.c:160 +msgid "Job pointer not found." msgstr "" -#: src/stored/bextract.c:456 src/filed/restore.c:518 -#, c-format -msgid "Unknown stream=%d ignored. This shouldn't happen!\n" +#: src/dird/pythondir.c:137 +msgid "Pool record not found." msgstr "" -#: src/stored/stored.c:65 +#: src/dird/pythondir.c:166 src/filed/pythonfd.c:133 src/stored/pythonsd.c:137 #, c-format -msgid "" -"Copyright (C) 2000-2005 Kern Sibbald.\n" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: stored [options] [-c config_file] [config_file]\n" -" -c use as configuration file\n" -" -dnn set debug level to nn\n" -" -f run in foreground (for debugging)\n" -" -g set groupid to group\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 "Attribute %s not found." msgstr "" -#: src/stored/stored.c:107 src/stored/btape.c:157 -#, c-format -msgid "Tape block size (%d) not multiple of system size (%d)\n" +#: src/dird/pythondir.c:209 src/dird/pythondir.c:215 src/filed/pythonfd.c:175 +#: src/stored/pythonsd.c:177 +msgid "Read-only attribute" msgstr "" -#: src/stored/stored.c:111 src/stored/btape.c:161 +#: src/dird/recycle.c:99 #, c-format -msgid "Tape block size (%d) is not a power of 2\n" +msgid "Recycled volume \"%s\"\n" msgstr "" -#: src/stored/stored.c:189 src/console/console.c:400 -#: src/gnome2-console/console.c:271 src/filed/filed.c:183 src/dird/dird.c:196 -msgid "Cryptography library initialization failed.\n" +#: src/dird/restore.c:70 +msgid "Cannot restore without bootstrap file.\n" msgstr "" -#: src/stored/stored.c:193 src/console/console.c:404 -#: src/gnome2-console/console.c:275 src/filed/filed.c:188 src/dird/dird.c:200 -#: src/dird/dird.c:410 src/dird/dird.c:413 +#: src/dird/restore.c:77 #, c-format -msgid "Please correct configuration file: %s\n" +msgid "Start Restore Job %s\n" msgstr "" -#: src/stored/stored.c:220 -msgid "Volume Session Time is ZERO!\n" +#: src/dird/restore.c:219 +msgid "Restore OK -- warning file count mismatch" msgstr "" -#: src/stored/stored.c:233 -#, c-format -msgid "Unable to create thread. ERR=%s\n" +#: src/dird/restore.c:221 +msgid "Restore OK" msgstr "" -#: src/stored/stored.c:271 -#, c-format -msgid "Only one Storage resource permitted in %s\n" +#: src/dird/restore.c:226 +msgid "*** Restore Error ***" msgstr "" -#: src/stored/stored.c:276 -#, c-format -msgid "No Director resource defined in %s. Cannot continue.\n" +#: src/dird/restore.c:236 +msgid "Restore Canceled" msgstr "" -#: src/stored/stored.c:281 +#: src/dird/restore.c:263 #, c-format -msgid "No Device resource defined in %s. Cannot continue.\n" +msgid "" +"Bacula %s (%s): %s\n" +" JobId: %d\n" +" Job: %s\n" +" 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/stored.c:289 +#: src/dird/run_conf.c:188 #, c-format -msgid "No Messages resource defined in %s. Cannot continue.\n" -msgstr "" - -#: src/stored/stored.c:309 src/console/console.c:582 src/console/console.c:611 -#: src/gnome2-console/console.c:140 src/gnome2-console/console.c:169 -#: src/filed/filed.c:302 src/filed/filed.c:470 src/dird/dird.c:496 -#: src/dird/dird.c:722 src/dird/dird.c:788 src/dird/dird.c:840 -#: src/wx-console/console_thread.cpp:94 src/wx-console/console_thread.cpp:120 -msgid "TLS required but not configured in Bacula.\n" +msgid "Expected an equals, got: %s" msgstr "" -#: src/stored/stored.c:316 +#: src/dird/run_conf.c:201 src/dird/run_conf.c:213 #, c-format -msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" +msgid "Expect a YES or NO, got: %s" msgstr "" -#: src/stored/stored.c:322 +#: src/dird/run_conf.c:227 #, c-format -msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" +msgid "Job level field: %s not found in run record" msgstr "" -#: src/stored/stored.c:328 +#: src/dird/run_conf.c:245 #, 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 "Could not find specified Pool Resource: %s" msgstr "" -#: src/stored/stored.c:347 src/dird/dird.c:744 +#: src/dird/run_conf.c:270 #, c-format -msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" +msgid "Could not find specified Storage Resource: %s" msgstr "" -#: src/stored/stored.c:361 src/filed/filed.c:479 src/dird/dird.c:502 +#: src/dird/run_conf.c:282 #, c-format -msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" +msgid "Could not find specified Messages Resource: %s" msgstr "" -#: src/stored/stored.c:367 src/filed/filed.c:485 src/dird/dird.c:508 +#: src/dird/run_conf.c:290 #, c-format -msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" +msgid "Expected a keyword name, got: %s" msgstr "" -#: src/stored/stored.c:373 src/filed/filed.c:491 src/dird/dird.c:514 -#, 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/dird/run_conf.c:327 +msgid "Day number out of range (1-31)" msgstr "" -#: src/stored/stored.c:392 src/filed/filed.c:510 src/dird/dird.c:533 -#, c-format -msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" +#: src/dird/run_conf.c:344 src/dird/run_conf.c:490 +msgid "Week number out of range (0-53)" msgstr "" -#: src/stored/stored.c:455 +#: src/dird/run_conf.c:359 #, c-format -msgid "Could not initialize %s\n" +msgid "Job type field: %s in run record not found" msgstr "" -#: src/stored/stored.c:468 +#: src/dird/run_conf.c:366 #, c-format -msgid "Could not open device %s\n" +msgid "Unexpected token: %d:%s" msgstr "" -#: src/stored/stored.c:481 -#, c-format -msgid "Could not mount device %s\n" +#: src/dird/run_conf.c:410 +msgid "Time must be preceded by keyword AT." msgstr "" -#: src/stored/btape.c:164 -#, c-format -msgid "" -"\n" -"\n" -"!!!! Warning large disk addressing disabled. off_t=%d should be 8 or " -"more !!!!!\n" -"\n" -"\n" +#: src/dird/run_conf.c:418 +msgid "Time logic error.\n" msgstr "" -#: src/stored/btape.c:171 -#, c-format -msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" +#: src/dird/run_conf.c:430 src/dird/run_conf.c:446 +msgid "Bad time specification." msgstr "" -#: src/stored/btape.c:180 -msgid "64 bit printf/scanf problem. i=%d x64=%" +#: src/dird/run_conf.c:459 +msgid "Range logic error.\n" msgstr "" -#: src/stored/btape.c:180 -msgid " y64=%" +#: src/dird/run_conf.c:468 +msgid "Bad day range specification." msgstr "" -#: src/stored/btape.c:180 src/dird/ua_status.c:730 -msgid "\n" +#: src/dird/run_conf.c:515 +msgid "Invalid month, week or position day range" msgstr "" -#: src/stored/btape.c:184 -#, c-format -msgid "Tape block granularity is %d bytes.\n" +#: src/dird/run_conf.c:530 +msgid "Invalid month, weekday or position range" msgstr "" -#: src/stored/btape.c:251 -msgid "No archive name specified.\n" +#: src/dird/run_conf.c:589 +msgid "Unexpected run state\n" msgstr "" -#: src/stored/btape.c:255 -msgid "Improper number of arguments specified.\n" +#: src/dird/scheduler.c:80 +#, c-format +msgid "Job %s not found\n" msgstr "" -#: src/stored/btape.c:333 src/stored/bcopy.c:172 src/stored/device.c:266 -#, c-format -msgid "dev open failed: %s\n" +#: src/dird/scheduler.c:103 +msgid "Walk queue" msgstr "" -#: src/stored/btape.c:338 -#, c-format -msgid "open device %s: OK\n" +#: src/dird/scheduler.c:113 +msgid "Dequeued job" msgstr "" -#: src/stored/btape.c:359 -msgid "Enter Volume Name: " +#: src/dird/scheduler.c:116 +msgid "Scheduler logic error\n" msgstr "" -#: src/stored/btape.c:366 -#, c-format -msgid "Device open failed. ERR=%s\n" +#: src/dird/scheduler.c:132 +msgid "Run job" msgstr "" -#: src/stored/btape.c:371 -#, c-format -msgid "Wrote Volume label for volume \"%s\".\n" -msgstr "" - -#: src/stored/btape.c:385 -msgid "Volume has no label.\n" +#: src/dird/scheduler.c:349 +msgid "Inserted job" msgstr "" -#: src/stored/btape.c:388 -msgid "Volume label read correctly.\n" +#: src/dird/scheduler.c:357 +msgid "Appended job" msgstr "" -#: src/stored/btape.c:391 -#, c-format -msgid "I/O error on device: ERR=%s" +#: src/dird/scheduler.c:361 +msgid "Run queue" msgstr "" -#: src/stored/btape.c:394 -msgid "Volume name error\n" +#: src/dird/ua_cmds.c:90 +msgid "add media to a pool" msgstr "" -#: src/stored/btape.c:397 -#, c-format -msgid "Error creating label. ERR=%s" +#: src/dird/ua_cmds.c:91 +msgid "autodisplay [on|off] -- console messages" msgstr "" -#: src/stored/btape.c:400 -msgid "Volume version error.\n" +#: src/dird/ua_cmds.c:92 +msgid "automount [on|off] -- after label" msgstr "" -#: src/stored/btape.c:403 -msgid "Bad Volume label type.\n" +#: src/dird/ua_cmds.c:93 +msgid "cancel [ | ] -- cancel a job" msgstr "" -#: src/stored/btape.c:406 -msgid "Unknown error.\n" +#: src/dird/ua_cmds.c:94 +msgid "create DB Pool from resource" msgstr "" -#: src/stored/btape.c:424 -#, c-format -msgid "Bad status from load. ERR=%s\n" +#: src/dird/ua_cmds.c:95 +msgid "delete [pool= | media volume=]" msgstr "" -#: src/stored/btape.c:426 -#, c-format -msgid "Loaded %s\n" +#: src/dird/ua_cmds.c:96 +msgid "disable -- disable a job" msgstr "" -#: src/stored/btape.c:435 src/stored/btape.c:775 src/stored/btape.c:817 -#: src/stored/btape.c:887 src/stored/btape.c:929 src/stored/btape.c:1197 -#, c-format -msgid "Bad status from rewind. ERR=%s\n" +#: src/dird/ua_cmds.c:97 +msgid "enable -- enable a job" msgstr "" -#: src/stored/btape.c:438 src/stored/btape.c:1205 -#, c-format -msgid "Rewound %s\n" +#: src/dird/ua_cmds.c:98 +msgid "performs FileSet estimate, listing gives full listing" msgstr "" -#: src/stored/btape.c:465 src/stored/btape.c:1209 -#, c-format -msgid "Bad status from weof %d. ERR=%s\n" +#: src/dird/ua_cmds.c:100 +msgid "gui [on|off] -- non-interactive gui mode" msgstr "" -#: src/stored/btape.c:469 -#, c-format -msgid "Wrote 1 EOF to %s\n" +#: src/dird/ua_cmds.c:101 src/stored/btape.c:2540 +msgid "print this command" msgstr "" -#: src/stored/btape.c:472 -#, c-format -msgid "Wrote %d EOFs to %s\n" +#: src/dird/ua_cmds.c:102 +msgid "" +"list [pools | jobs | jobtotals | media | files ]; " +"from catalog" msgstr "" -#: src/stored/btape.c:490 -msgid "Moved to end of medium.\n" +#: src/dird/ua_cmds.c:103 +msgid "label a tape" msgstr "" -#: src/stored/btape.c:517 -#, c-format -msgid "Bad status from bsf. ERR=%s\n" +#: src/dird/ua_cmds.c:104 +msgid "full or long list like list command" msgstr "" -#: src/stored/btape.c:519 -#, c-format -msgid "Backspaced %d file%s.\n" +#: src/dird/ua_cmds.c:105 +msgid "messages" msgstr "" -#: src/stored/btape.c:536 -#, c-format -msgid "Bad status from bsr. ERR=%s\n" +#: src/dird/ua_cmds.c:106 +msgid "mount " msgstr "" -#: src/stored/btape.c:538 -#, c-format -msgid "Backspaced %d record%s.\n" +#: src/dird/ua_cmds.c:107 +msgid "prune expired records from catalog" msgstr "" -#: src/stored/btape.c:566 -#, c-format -msgid "Device status:\n" +#: src/dird/ua_cmds.c:108 +msgid "purge records from catalog" msgstr "" -#: src/stored/btape.c:585 -#, c-format -msgid "Status:\n" +#: src/dird/ua_cmds.c:109 +msgid "python control commands" msgstr "" -#: src/stored/btape.c:600 -msgid "" -"Test writting 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/ua_cmds.c:111 +msgid "query catalog" msgstr "" -#: src/stored/btape.c:606 src/dird/ua_label.c:498 -msgid "Do you want to continue? (y/n): " +#: src/dird/ua_cmds.c:112 +msgid "restore files" msgstr "" -#: src/stored/btape.c:608 src/stored/btape.c:1814 -msgid "Command aborted.\n" +#: src/dird/ua_cmds.c:113 +msgid "relabel a tape" msgstr "" -#: src/stored/btape.c:624 -#, c-format -msgid "Block %d i=%d\n" +#: src/dird/ua_cmds.c:114 +msgid "release " msgstr "" -#: src/stored/btape.c:650 -msgid "Skipping read backwards test because BSR turned off.\n" +#: src/dird/ua_cmds.c:115 +msgid "reload conf file" msgstr "" -#: src/stored/btape.c:654 -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_cmds.c:116 +msgid "run " msgstr "" -#: src/stored/btape.c:667 src/stored/btape.c:678 src/stored/btape.c:689 -#: src/stored/btape.c:787 src/stored/btape.c:803 src/stored/btape.c:899 -#: src/stored/btape.c:915 src/stored/btape.c:1523 src/stored/btape.c:2405 -msgid "Error writing record to block.\n" +#: src/dird/ua_cmds.c:117 +msgid "status [storage | client]=" msgstr "" -#: src/stored/btape.c:671 src/stored/btape.c:682 src/stored/btape.c:693 -#: src/stored/btape.c:791 src/stored/btape.c:807 src/stored/btape.c:903 -#: src/stored/btape.c:919 src/stored/btape.c:1527 src/stored/btape.c:2409 -msgid "Error writing block to device.\n" +#: src/dird/ua_cmds.c:118 +msgid "sets debug level" msgstr "" -#: src/stored/btape.c:674 -#, c-format -msgid "Wrote first record of %d bytes.\n" +#: src/dird/ua_cmds.c:119 +msgid "sets new client address -- if authorized" msgstr "" -#: src/stored/btape.c:685 -#, c-format -msgid "Wrote second record of %d bytes.\n" +#: src/dird/ua_cmds.c:120 +msgid "show (resource records) [jobs | pools | ... | all]" msgstr "" -#: src/stored/btape.c:696 -#, c-format -msgid "Wrote third record of %d bytes.\n" +#: src/dird/ua_cmds.c:121 +msgid "use SQL to query catalog" msgstr "" -#: src/stored/btape.c:703 src/stored/btape.c:708 -#, c-format -msgid "Backspace file failed! ERR=%s\n" +#: src/dird/ua_cmds.c:123 +msgid "turn on/off trace to file" msgstr "" -#: src/stored/btape.c:712 -msgid "Backspaced over EOF OK.\n" +#: src/dird/ua_cmds.c:124 +msgid "unmount " msgstr "" -#: src/stored/btape.c:714 -#, c-format -msgid "Backspace record failed! ERR=%s\n" +#: src/dird/ua_cmds.c:125 +msgid "umount for old-time Unix guys" msgstr "" -#: src/stored/btape.c:717 -msgid "Backspace record OK.\n" +#: src/dird/ua_cmds.c:126 +msgid "update Volume, Pool or slots" msgstr "" -#: src/stored/btape.c:720 src/stored/btape.c:726 -#, c-format -msgid "Read block failed! ERR=%s\n" +#: src/dird/ua_cmds.c:127 +msgid "use catalog xxx" msgstr "" -#: src/stored/btape.c:731 -msgid "Bad data in record. Test failed!\n" +#: src/dird/ua_cmds.c:128 +msgid "does variable expansion" msgstr "" -#: src/stored/btape.c:735 -msgid "" -"\n" -"Block re-read correct. Test succeeded!\n" +#: src/dird/ua_cmds.c:129 +msgid "print Director version" msgstr "" -#: src/stored/btape.c:736 -msgid "" -"=== End Write, backup, and re-read test ===\n" -"\n" +#: src/dird/ua_cmds.c:130 +msgid "wait until no jobs are running" msgstr "" -#: src/stored/btape.c:743 -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_cmds.c:168 +#, c-format +msgid "%s: is an illegal command.\n" msgstr "" -#: src/stored/btape.c:767 +#: src/dird/ua_cmds.c:206 msgid "" -"\n" -"=== Write, rewind, and re-read test ===\n" -"\n" -"I'm going to write 1000 records and an EOF\n" -"then write 1000 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" +"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/stored/btape.c:795 src/stored/btape.c:811 src/stored/btape.c:907 -#: src/stored/btape.c:923 +#: src/dird/ua_cmds.c:225 #, c-format -msgid "Wrote 1000 blocks of %d bytes.\n" -msgstr "" - -#: src/stored/btape.c:820 src/stored/btape.c:932 -msgid "Rewind OK.\n" +msgid "Pool already has maximum volumes = %d\n" msgstr "" -#: src/stored/btape.c:827 src/stored/btape.c:981 -msgid "Got EOF on tape.\n" +#: src/dird/ua_cmds.c:227 +msgid "Enter new maximum (zero for unlimited): " msgstr "" -#: src/stored/btape.c:832 +#: src/dird/ua_cmds.c:248 #, c-format -msgid "Read block %d failed! ERR=%s\n" +msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " msgstr "" -#: src/stored/btape.c:838 +#: src/dird/ua_cmds.c:254 #, c-format -msgid "Read record failed. Block %d! ERR=%s\n" +msgid "The number must be between 0 and %d\n" msgstr "" -#: src/stored/btape.c:844 src/stored/btape.c:1011 -#, c-format -msgid "Bad data in record. Expected %d, got %d at byte %d. Test failed!\n" +#: src/dird/ua_cmds.c:261 +msgid "Enter Volume name: " msgstr "" -#: src/stored/btape.c:851 -msgid "1000 blocks re-read correctly.\n" +#: src/dird/ua_cmds.c:265 +msgid "Enter base volume name: " msgstr "" -#: src/stored/btape.c:854 src/stored/btape.c:1018 -msgid "" -"=== Test Succeeded. End Write, rewind, and re-read test ===\n" -"\n" +#: src/dird/ua_cmds.c:274 src/dird/ua_label.c:605 +msgid "Volume name too long.\n" msgstr "" -#: src/stored/btape.c:879 -msgid "" -"\n" -"=== Write, rewind, and position test ===\n" -"\n" -"I'm going to write 1000 records and an EOF\n" -"then write 1000 records and an EOF, then rewind,\n" -"and position to a few blocks and verify that it is correct.\n" -"\n" -"This is an *essential* feature ...\n" -"\n" +#: src/dird/ua_cmds.c:278 src/dird/ua_label.c:611 src/lib/edit.c:413 +msgid "Volume name must be at least one character long.\n" msgstr "" -#: src/stored/btape.c:972 -#, c-format -msgid "Reposition to file:block %d:%d\n" +#: src/dird/ua_cmds.c:287 +msgid "Enter the starting number: " msgstr "" -#: src/stored/btape.c:974 -msgid "Reposition error.\n" +#: src/dird/ua_cmds.c:292 +msgid "Start number must be greater than zero.\n" msgstr "" -#: src/stored/btape.c:987 -#, c-format -msgid "" -"Read block %d failed! file=%d blk=%d. ERR=%s\n" -"\n" +#: src/dird/ua_cmds.c:303 +msgid "Enter slot (0 for none): " msgstr "" -#: src/stored/btape.c:989 -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_cmds.c:307 +msgid "InChanger? yes/no: " msgstr "" -#: src/stored/btape.c:1005 +#: src/dird/ua_cmds.c:334 #, c-format -msgid "Read record failed! ERR=%s\n" +msgid "%d Volumes created in pool %s\n" msgstr "" -#: src/stored/btape.c:1016 -#, c-format -msgid "Block %d re-read correctly.\n" +#: src/dird/ua_cmds.c:350 src/dird/ua_cmds.c:917 +msgid "Turn on or off? " msgstr "" -#: src/stored/btape.c:1037 -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_cmds.c:358 src/dird/ua_cmds.c:925 +msgid "off" msgstr "" -#: src/stored/btape.c:1061 -msgid "Now moving to end of medium.\n" +#: src/dird/ua_cmds.c:378 +msgid "jobid" msgstr "" -#: src/stored/btape.c:1063 src/stored/btape.c:1292 +#: src/dird/ua_cmds.c:385 #, c-format -msgid "We should be in file 3. I am at file %d. %s\n" +msgid "JobId %s is not running. Use Job name to cancel inactive jobs.\n" msgstr "" -#: src/stored/btape.c:1064 src/stored/btape.c:1082 src/stored/btape.c:1281 -#: src/stored/btape.c:1293 src/stored/btape.c:1306 src/stored/btape.c:1323 -msgid "This is correct!" +#: src/dird/ua_cmds.c:389 +msgid "job" msgstr "" -#: src/stored/btape.c:1064 src/stored/btape.c:1082 src/stored/btape.c:1281 -#: src/stored/btape.c:1293 src/stored/btape.c:1306 src/stored/btape.c:1323 -msgid "This is NOT correct!!!!" +#: src/dird/ua_cmds.c:394 +#, c-format +msgid "Warning Job %s is not running. Continuing anyway ...\n" msgstr "" -#: src/stored/btape.c:1070 -msgid "" -"\n" -"Now the important part, I am going to attempt to append to the tape.\n" -"\n" +#: src/dird/ua_cmds.c:416 src/filed/status.c:195 src/stored/status.c:343 +msgid "No Jobs running.\n" msgstr "" -#: src/stored/btape.c:1077 -msgid "" -"Done appending, there should be no I/O errors\n" -"\n" +#: src/dird/ua_cmds.c:419 +msgid "Select Job:\n" msgstr "" -#: src/stored/btape.c:1078 -msgid "Doing Bacula scan of blocks:\n" +#: src/dird/ua_cmds.c:425 +#, c-format +msgid "JobId=%s Job=%s" msgstr "" -#: src/stored/btape.c:1080 -msgid "End scanning the tape.\n" +#: src/dird/ua_cmds.c:430 +msgid "Choose Job to cancel" +msgstr "" + +#: src/dird/ua_cmds.c:434 +msgid "Confirm cancel (yes/no): " msgstr "" -#: src/stored/btape.c:1081 src/stored/btape.c:1305 +#: src/dird/ua_cmds.c:442 #, c-format -msgid "We should be in file 4. I am at file %d. %s\n" +msgid "Job %s not found.\n" msgstr "" -#: src/stored/btape.c:1106 +#: src/dird/ua_cmds.c:547 +#, c-format msgid "" -"\n" -"Autochanger enabled, but no name or no command device specified.\n" +"Error: Pool %s already exists.\n" +"Use update to change it.\n" msgstr "" -#: src/stored/btape.c:1110 -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_cmds.c:558 +#, c-format +msgid "Pool %s created.\n" msgstr "" -#: src/stored/btape.c:1113 -msgid "" -"\n" -"Do you wish to continue with the Autochanger test? (y/n): " +#: src/dird/ua_cmds.c:571 +msgid "restart" msgstr "" -#: src/stored/btape.c:1120 -msgid "" -"\n" -"\n" -"=== Autochanger test ===\n" -"\n" +#: src/dird/ua_cmds.c:575 +msgid "Python interpreter restarted.\n" msgstr "" -#: src/stored/btape.c:1129 -msgid "3301 Issuing autochanger \"loaded\" command.\n" +#: src/dird/ua_cmds.c:577 src/dird/ua_cmds.c:1145 +msgid "Nothing done.\n" msgstr "" -#: src/stored/btape.c:1138 -#, c-format -msgid "3991 Bad autochanger command: %s\n" +#: src/dird/ua_cmds.c:593 src/dird/ua_cmds.c:639 +msgid "Illegal command from this console.\n" msgstr "" -#: src/stored/btape.c:1139 +#: src/dird/ua_cmds.c:600 src/dird/ua_run.c:353 #, c-format -msgid "3991 result=\"%s\": ERR=%s\n" +msgid "Client \"%s\" not found.\n" msgstr "" -#: src/stored/btape.c:1143 +#: src/dird/ua_cmds.c:609 #, c-format -msgid "Slot %d loaded. I am going to unload it.\n" +msgid "Client \"%s\" address set to %s\n" msgstr "" -#: src/stored/btape.c:1145 -msgid "Nothing loaded in the drive. OK.\n" +#: src/dird/ua_cmds.c:634 +#, c-format +msgid "Job \"%s\" not found.\n" msgstr "" -#: src/stored/btape.c:1152 +#: src/dird/ua_cmds.c:643 #, c-format -msgid "3302 Issuing autochanger \"unload %d %d\" command.\n" +msgid "Job \"%s\" %sabled\n" msgstr "" -#: src/stored/btape.c:1157 +#: src/dird/ua_cmds.c:667 src/dird/ua_status.c:286 #, c-format -msgid "unload status=%s %d\n" +msgid "Connecting to Storage daemon %s at %s:%d\n" msgstr "" -#: src/stored/btape.c:1157 -msgid "Bad" +#: src/dird/ua_cmds.c:673 src/dird/ua_status.c:297 +msgid "Connected to storage daemon\n" msgstr "" -#: src/stored/btape.c:1160 +#: src/dird/ua_cmds.c:693 src/dird/ua_cmds.c:1032 src/dird/ua_status.c:324 #, c-format -msgid "3992 Bad autochanger command: %s\n" +msgid "Connecting to Client %s at %s:%d\n" msgstr "" -#: src/stored/btape.c:1161 -#, c-format -msgid "3992 result=\"%s\": ERR=%s\n" +#: src/dird/ua_cmds.c:696 src/dird/ua_cmds.c:1035 +msgid "Failed to connect to Client.\n" msgstr "" -#: src/stored/btape.c:1171 -#, c-format -msgid "3303 Issuing autochanger \"load %d %d\" command.\n" +#: src/dird/ua_cmds.c:812 +msgid "Enter new debug level: " msgstr "" -#: src/stored/btape.c:1179 -#, c-format -msgid "3303 Autochanger \"load %d %d\" status is OK.\n" +#: src/dird/ua_cmds.c:878 +msgid "Available daemons are: \n" msgstr "" -#: src/stored/btape.c:1183 -#, c-format -msgid "3993 Bad autochanger command: %s\n" +#: src/dird/ua_cmds.c:883 +msgid "Select daemon type to set debug level" msgstr "" -#: src/stored/btape.c:1184 +#: src/dird/ua_cmds.c:987 src/dird/ua_run.c:478 #, c-format -msgid "3993 result=\"%s\": ERR=%s\n" +msgid "Level %s not valid.\n" msgstr "" -#: src/stored/btape.c:1199 -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_cmds.c:1000 +msgid "No job specified.\n" msgstr "" -#: src/stored/btape.c:1212 -#, c-format -msgid "Wrote EOF to %s\n" +#: src/dird/ua_cmds.c:1040 +msgid "Error sending include list.\n" msgstr "" -#: src/stored/btape.c:1216 -#, 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_cmds.c:1045 +msgid "Error sending exclude list.\n" msgstr "" -#: src/stored/btape.c:1221 +#: src/dird/ua_cmds.c:1131 msgid "" -"\n" -"The test autochanger worked!!\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/stored/btape.c:1232 -msgid "You must correct this error or the Autochanger will not work.\n" +#: src/dird/ua_cmds.c:1134 +msgid "Choose catalog item to delete" msgstr "" -#: src/stored/btape.c:1250 -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_cmds.c:1202 +msgid "Enter JobId to delete: " msgstr "" -#: src/stored/btape.c:1275 -msgid "Now forward spacing 1 file.\n" +#: src/dird/ua_cmds.c:1245 +#, c-format +msgid "Job %s and associated records deleted from the catalog.\n" msgstr "" -#: src/stored/btape.c:1277 src/stored/btape.c:1289 src/stored/btape.c:1302 -#: src/stored/btape.c:1320 src/stored/btape.c:1489 +#: src/dird/ua_cmds.c:1258 #, c-format -msgid "Bad status from fsr. 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/stored/btape.c:1280 -#, c-format -msgid "We should be in file 1. I am at file %d. %s\n" +#: src/dird/ua_cmds.c:1262 +msgid "Are you sure you want to delete this Volume? (yes/no): " msgstr "" -#: src/stored/btape.c:1287 -msgid "Now forward spacing 2 files.\n" +#: src/dird/ua_cmds.c:1283 +msgid "Are you sure you want to delete this Pool? (yes/no): " msgstr "" -#: src/stored/btape.c:1300 -msgid "Now forward spacing 4 files.\n" +#: src/dird/ua_cmds.c:1380 +#, c-format +msgid "Using Catalog name=%s DB=%s\n" msgstr "" -#: src/stored/btape.c:1312 +#: src/dird/ua_cmds.c:1421 src/dird/ua_tree.c:622 src/stored/btape.c:2587 +#, c-format 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/stored/btape.c:1318 -msgid "Now forward spacing 1 more file.\n" +" Command Description\n" +" ======= ===========\n" msgstr "" -#: src/stored/btape.c:1322 +#: src/dird/ua_cmds.c:1423 #, c-format -msgid "We should be in file 5. I am at file %d. %s\n" +msgid " %-10s %s\n" msgstr "" -#: src/stored/btape.c:1327 +#: src/dird/ua_cmds.c:1425 msgid "" "\n" -"=== End Forward space files test ===\n" +"When at a prompt, entering a period cancels the command.\n" "\n" msgstr "" -#: src/stored/btape.c:1331 -msgid "" -"\n" -"The forward space file test failed.\n" +#: src/dird/ua_cmds.c:1441 +#, c-format +msgid "%s Version: %s (%s)\n" msgstr "" -#: src/stored/btape.c:1333 -msgid "" -"You have Fast Forward Space File enabled.\n" -"I am turning it off then retrying the test.\n" +#: src/dird/ua_cmds.c:1460 +msgid "Could not find a Catalog resource\n" msgstr "" -#: src/stored/btape.c:1339 -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_cmds.c:1463 +msgid "You must specify a \"use \" command before continuing.\n" msgstr "" -#: src/stored/btape.c:1371 -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_cmds.c:1467 +#, c-format +msgid "Using default Catalog name=%s DB=%s\n" msgstr "" -#: src/stored/btape.c:1379 -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_dotcmds.c:131 +msgid "The Director will segment fault.\n" msgstr "" -#: src/stored/btape.c:1386 -msgid "" -"\n" -"\n" -"That appears *NOT* to have corrected the problem.\n" +#: src/dird/ua_dotcmds.c:231 src/dird/ua_restore.c:740 +#: src/dird/ua_restore.c:778 src/dird/ua_restore.c:809 +#, c-format +msgid "Query failed: %s. ERR=%s\n" msgstr "" -#: src/stored/btape.c:1391 -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_input.c:82 +msgid "Enter slot" msgstr "" -#: src/stored/btape.c:1396 -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_input.c:86 src/dird/ua_input.c:92 +#, c-format +msgid "Expected a positive integer, got: %s\n" msgstr "" -#: src/stored/btape.c:1407 -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_input.c:120 src/dird/ua_run.c:862 src/dird/ua_select.c:54 +#: src/dird/ua_update.c:223 src/dird/ua_update.c:237 src/dird/ua_update.c:247 +#: src/dird/ua_update.c:261 src/dird/ua_update.c:551 +#: src/stored/parse_bsr.c:741 src/tools/dbcheck.c:1098 +msgid "yes" msgstr "" -#: src/stored/btape.c:1428 -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_input.c:124 src/dird/ua_select.c:57 src/dird/ua_update.c:225 +#: src/dird/ua_update.c:237 src/dird/ua_update.c:249 src/dird/ua_update.c:261 +#: src/dird/ua_update.c:551 src/stored/parse_bsr.c:741 +msgid "no" msgstr "" -#: src/stored/btape.c:1467 -#, c-format -msgid "Bad status from fsf. ERR=%s\n" +#: src/dird/ua_input.c:127 +msgid "Invalid response. You must answer yes or no.\n" msgstr "" -#: src/stored/btape.c:1471 -msgid "Forward spaced 1 file.\n" +#: src/dird/ua_label.c:89 +msgid "Negative numbers not permitted\n" msgstr "" -#: src/stored/btape.c:1474 -#, c-format -msgid "Forward spaced %d files.\n" +#: src/dird/ua_label.c:95 +msgid "Range end is not integer.\n" msgstr "" -#: src/stored/btape.c:1493 -msgid "Forward spaced 1 record.\n" +#: src/dird/ua_label.c:100 +msgid "Range start is not an integer.\n" msgstr "" -#: src/stored/btape.c:1496 -#, c-format -msgid "Forward spaced %d records.\n" +#: src/dird/ua_label.c:106 +msgid "Range end not bigger than start.\n" msgstr "" -#: src/stored/btape.c:1530 -#, c-format -msgid "Wrote one record of %d bytes.\n" +#: src/dird/ua_label.c:112 +msgid "Input value is not an integer.\n" msgstr "" -#: src/stored/btape.c:1532 -msgid "Wrote block to device.\n" +#: src/dird/ua_label.c:118 +msgid "Values must be be greater than zero.\n" msgstr "" -#: src/stored/btape.c:1547 -msgid "Enter length to read: " +#: src/dird/ua_label.c:122 +msgid "Slot too large.\n" msgstr "" -#: src/stored/btape.c:1552 -msgid "Bad length entered, using default of 1024 bytes.\n" +#: src/dird/ua_label.c:176 src/dird/ua_label.c:473 +msgid "No slots in changer to scan.\n" msgstr "" -#: src/stored/btape.c:1561 -#, c-format -msgid "Read of %d bytes gives stat=%d. ERR=%s\n" +#: src/dird/ua_label.c:188 src/dird/ua_label.c:484 +msgid "No Volumes found to label, or no barcodes.\n" msgstr "" -#: src/stored/btape.c:1584 src/stored/btape.c:1633 +#: src/dird/ua_label.c:198 #, c-format -msgid "End of tape\n" +msgid "Slot %d greater than max %d ignored.\n" msgstr "" -#: src/stored/btape.c:1589 +#: src/dird/ua_label.c:227 #, c-format -msgid "Starting scan at file %u\n" +msgid "No VolName for Slot=%d InChanger set to zero.\n" msgstr "" -#: src/stored/btape.c:1594 src/stored/dev.c:1228 +#: src/dird/ua_label.c:242 #, c-format -msgid "read error on %s. ERR=%s.\n" +msgid "Catalog record for Volume \"%s\" updated to reference slot %d.\n" msgstr "" -#: src/stored/btape.c:1596 +#: src/dird/ua_label.c:246 #, c-format -msgid "Bad status from read %d. ERR=%s\n" +msgid "Catalog record for Volume \"%s\" is up to date.\n" msgstr "" -#: src/stored/btape.c:1599 src/stored/btape.c:1613 src/stored/btape.c:1677 -#: src/stored/btape.c:1689 src/stored/btape.c:1702 src/stored/btape.c:1718 +#: src/dird/ua_label.c:252 #, c-format -msgid "1 block of %d bytes in file %d\n" +msgid "Volume \"%s\" not found in catalog. Slot=%d InChanger set to zero.\n" msgstr "" -#: src/stored/btape.c:1602 src/stored/btape.c:1616 src/stored/btape.c:1680 -#: src/stored/btape.c:1692 src/stored/btape.c:1705 src/stored/btape.c:1721 +#: src/dird/ua_label.c:344 #, c-format -msgid "%d blocks of %d bytes in file %d\n" +msgid "" +"Volume \"%s\" has VolStatus %s. It must be Purged or Recycled before " +"relabeling.\n" msgstr "" -#: src/stored/btape.c:1624 src/stored/btape.c:1696 -#, c-format -msgid "End of File mark.\n" +#: src/dird/ua_label.c:360 +msgid "Enter new Volume name: " msgstr "" -#: src/stored/btape.c:1645 src/stored/btape.c:1749 +#: src/dird/ua_label.c:373 #, c-format -msgid "Total files=%d, blocks=%d, bytes = %s\n" +msgid "Media record for new Volume \"%s\" already exists.\n" msgstr "" -#: src/stored/btape.c:1709 -#, c-format -msgid "Short block read.\n" +#: src/dird/ua_label.c:388 +msgid "Enter slot (0 or Enter for none): " msgstr "" -#: src/stored/btape.c:1712 +#: src/dird/ua_label.c:413 #, c-format -msgid "Error reading block. ERR=%s\n" +msgid "Delete of Volume \"%s\" failed. ERR=%s" msgstr "" -#: src/stored/btape.c:1736 +#: src/dird/ua_label.c:416 #, c-format -msgid "" -"Blk_block: %u dev_blk=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=%" -"s rlen=%d\n" +msgid "Old volume \"%s\" deleted from catalog.\n" msgstr "" -#: src/stored/btape.c:1758 +#: src/dird/ua_label.c:427 #, c-format -msgid "Device status: %u. ERR=%s\n" +msgid "Requesting to mount %s ...\n" msgstr "" -#: src/stored/btape.c:1788 -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 3.2 GB. 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" +#: src/dird/ua_label.c:449 +msgid "Do not forget to mount the drive!!!\n" msgstr "" -#: src/stored/btape.c:1805 +#: src/dird/ua_label.c:489 msgid "" -"Do you want to run the simplified test (s) with one tape\n" -"or the complete multiple tape (m) test: (s/m) " +"The following Volumes will be labeled:\n" +"Slot Volume\n" +"==============\n" msgstr "" -#: src/stored/btape.c:1808 -msgid "Simple test (single tape) selected.\n" +#: src/dird/ua_label.c:498 src/stored/btape.c:606 +msgid "Do you want to continue? (y/n): " msgstr "" -#: src/stored/btape.c:1811 -msgid "Multiple tape test selected.\n" +#: src/dird/ua_label.c:519 +#, c-format +msgid "Media record for Slot %d Volume \"%s\" already exists.\n" msgstr "" -#: src/stored/btape.c:1827 -msgid "Rewind failed.\n" +#: src/dird/ua_label.c:525 +#, c-format +msgid "Error setting InChanger: ERR=%s" msgstr "" -#: src/stored/btape.c:1830 -msgid "Write EOF failed.\n" +#: src/dird/ua_label.c:548 +#, c-format +msgid "Maximum pool Volumes=%d reached.\n" msgstr "" -#: src/stored/btape.c:1857 -msgid "Wrote Start of Session label.\n" +#: src/dird/ua_label.c:555 +#, c-format +msgid "Catalog record for cleaning tape \"%s\" successfully created.\n" msgstr "" -#: src/stored/btape.c:1888 +#: src/dird/ua_label.c:562 #, c-format -msgid "%s Begin writing Bacula records to tape ...\n" +msgid "Catalog error on cleaning tape: %s" msgstr "" -#: src/stored/btape.c:1890 +#: src/dird/ua_label.c:598 #, c-format -msgid "%s Begin writing Bacula records to first tape ...\n" +msgid "Illegal character \"%c\" in a volume name.\n" msgstr "" -#: src/stored/btape.c:1931 +#: src/dird/ua_label.c:643 #, c-format -msgid "Wrote blk_block=%u, dev_blk_num=%u VolBytes=%s rate=%.1f KB/s\n" +msgid "Sending relabel command from \"%s\" to \"%s\" ...\n" msgstr "" -#: src/stored/btape.c:1941 +#: src/dird/ua_label.c:650 #, c-format -msgid "%s Flush block, write EOF\n" +msgid "Sending label command for Volume \"%s\" Slot %d ...\n" msgstr "" -#: src/stored/btape.c:1952 -msgid "Not OK\n" +#: src/dird/ua_label.c:682 +#, c-format +msgid "Catalog record for Volume \"%s\", Slot %d successfully created.\n" msgstr "" -#: src/stored/btape.c:1980 -msgid "Set ok=false after write_block_to_device.\n" +#: src/dird/ua_label.c:695 +#, c-format +msgid "Label command failed for Volume %s.\n" msgstr "" -#: src/stored/btape.c:1983 -msgid "Wrote End of Session label.\n" +#: src/dird/ua_label.c:705 +#, c-format +msgid "Connecting to Storage daemon %s at %s:%d ...\n" msgstr "" -#: src/stored/btape.c:2007 -#, c-format -msgid "Wrote state file last_block_num1=%d last_block_num2=%d\n" +#: src/dird/ua_label.c:733 +msgid "Could not open SD socket.\n" msgstr "" -#: src/stored/btape.c:2011 +#: src/dird/ua_label.c:739 #, c-format -msgid "Could not create state file: %s ERR=%s\n" +msgid "readlabel %s Slot=%d drive=%d\n" msgstr "" -#: src/stored/btape.c:2019 +#: src/dird/ua_label.c:781 #, c-format -msgid "" -"\n" -"\n" -"%s Done filling tape at %d:%d. Now beginning re-read of tape ...\n" +msgid "autochanger list %s \n" msgstr "" -#: src/stored/btape.c:2023 +#: src/dird/ua_label.c:805 src/dird/ua_label.c:815 #, c-format -msgid "" -"\n" -"\n" -"%s Done filling tapes at %d:%d. Now beginning re-read of first tape ...\n" +msgid "Invalid Slot number: %s\n" msgstr "" -#: src/stored/btape.c:2062 -msgid "" -"\n" -"The state file level has changed. You must redo\n" -"the fill command.\n" +#: src/dird/ua_label.c:824 +#, c-format +msgid "Invalid Volume name: %s\n" msgstr "" -#: src/stored/btape.c:2068 +#: src/dird/ua_label.c:893 #, c-format -msgid "" -"\n" -"Could not find the state file: %s ERR=%s\n" -"You must redo the fill command.\n" +msgid "autochanger slots %s\n" msgstr "" -#: src/stored/btape.c:2110 -msgid "Mount first tape. Press enter when ready: " +#: src/dird/ua_label.c:903 +#, c-format +msgid "Device \"%s\" has %d slots.\n" msgstr "" -#: src/stored/btape.c:2129 -msgid "Rewinding.\n" +#: src/dird/ua_label.c:925 +#, c-format +msgid "autochanger drives %s\n" msgstr "" -#: src/stored/btape.c:2134 +#: src/dird/ua_label.c:952 #, c-format -msgid "Reading the first 10000 records from %u:%u.\n" +msgid "Pool \"%s\" resource not found!\n" msgstr "" -#: src/stored/btape.c:2138 src/stored/btape.c:2205 -#, c-format -msgid "Reposition from %u:%u to %u:%u\n" +#: src/dird/ua_output.c:64 src/dird/ua_output.c:88 +msgid "ON or OFF keyword missing.\n" msgstr "" -#: src/stored/btape.c:2141 src/stored/btape.c:2192 src/stored/btape.c:2208 -#, c-format -msgid "Reposition error. ERR=%s\n" +#: src/dird/ua_output.c:176 +msgid "Keywords for the show command are:\n" msgstr "" -#: src/stored/btape.c:2144 +#: src/dird/ua_output.c:182 #, c-format -msgid "Reading block %u.\n" +msgid "%s resource %s not found.\n" msgstr "" -#: src/stored/btape.c:2146 src/stored/btape.c:2197 src/stored/btape.c:2213 +#: src/dird/ua_output.c:185 #, c-format -msgid "Error reading block: ERR=%s\n" +msgid "Resource %s not found\n" msgstr "" -#: src/stored/btape.c:2151 -msgid "" -"\n" -"The last block on the tape matches. Test succeeded.\n" -"\n" +#: src/dird/ua_output.c:251 +msgid "Hey! DB is NULL\n" msgstr "" -#: src/stored/btape.c:2153 -msgid "" -"\n" -"The last block of the first tape matches.\n" -"\n" +#: src/dird/ua_output.c:358 +#, c-format +msgid "Jobid %d used %d Volume(s): %s\n" msgstr "" -#: src/stored/btape.c:2178 -msgid "Mount second tape. Press enter when ready: " +#: src/dird/ua_output.c:376 +msgid "No Pool specified.\n" msgstr "" -#: src/stored/btape.c:2190 +#: src/dird/ua_output.c:387 src/dird/ua_select.c:458 #, c-format -msgid "Reposition from %u:%u to 0:1\n" +msgid "Error obtaining pool ids. ERR=%s\n" msgstr "" -#: src/stored/btape.c:2195 src/stored/btape.c:2211 +#: src/dird/ua_output.c:397 #, c-format -msgid "Reading block %d.\n" +msgid "Pool: %s\n" msgstr "" -#: src/stored/btape.c:2201 -msgid "" -"\n" -"The first block on the second tape matches.\n" -"\n" +#: src/dird/ua_output.c:413 src/dird/ua_status.c:452 +msgid "Ignoring illegal value for days.\n" msgstr "" -#: src/stored/btape.c:2217 -msgid "" -"\n" -"The last block on the second tape matches. Test succeeded.\n" -"\n" +#: src/dird/ua_output.c:422 +#, c-format +msgid "Unknown list keyword: %s\n" msgstr "" -#: src/stored/btape.c:2232 +#: src/dird/ua_output.c:448 #, c-format -msgid "10000 records read now at %d:%d\n" +msgid "%s is not a job name.\n" msgstr "" -#: src/stored/btape.c:2255 src/stored/btape.c:2266 src/stored/btape.c:2314 -msgid "Last block written" +#: src/dird/ua_output.c:469 +#, c-format +msgid "Could not find next Volume for Job %s (%s, %s).\n" msgstr "" -#: src/stored/btape.c:2257 src/stored/btape.c:2267 -msgid "Block read back" +#: src/dird/ua_output.c:473 +#, c-format +msgid "The next Volume to be used by Job \"%s\" (%s, %s) will be %s\n" msgstr "" -#: src/stored/btape.c:2258 +#: src/dird/ua_output.c:483 #, c-format -msgid "" -"\n" -"\n" -"The blocks differ at byte %u\n" +msgid "Could not find next Volume for Job %s.\n" msgstr "" -#: src/stored/btape.c:2259 -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_output.c:673 +msgid "You have no messages.\n" +msgstr "" + +#: src/dird/ua_prune.c:173 +msgid "Choose item to prune" +msgstr "" + +#: src/dird/ua_prune.c:254 +msgid "No Files found to prune.\n" msgstr "" -#: src/stored/btape.c:2298 +#: src/dird/ua_prune.c:286 #, c-format -msgid "Last block at: %u:%u this_dev_block_num=%d\n" +msgid "Pruned Files from %s Jobs for client %s from catalog.\n" +msgstr "" + +#: src/dird/ua_prune.c:392 +msgid "No Jobs found to prune.\n" msgstr "" -#: src/stored/btape.c:2312 +#: src/dird/ua_prune.c:453 #, c-format -msgid "Block not written: FileIndex=%u blk_block=%u Size=%u\n" +msgid "Pruned %d %s for client %s from catalog.\n" msgstr "" -#: src/stored/btape.c:2316 -msgid "Block not written" +#: src/dird/ua_prune.c:454 +msgid "Jobs" msgstr "" -#: src/stored/btape.c:2331 +#: src/dird/ua_prune.c:501 #, c-format -msgid "End of tape %d:%d. VolumeCapacity=%s. Write rate = %.1f KB/s\n" +msgid "There are no Jobs associated with Volume \"%s\". Prune not needed.\n" msgstr "" -#: src/stored/btape.c:2340 src/stored/bcopy.c:235 src/stored/bcopy.c:242 -#: src/stored/bcopy.c:265 +#: src/dird/ua_prune.c:508 src/dird/ua_purge.c:482 #, c-format -msgid "Cannot fixup device error. %s\n" +msgid "There are no Jobs associated with Volume \"%s\". Marking it purged.\n" msgstr "" -#: src/stored/btape.c:2381 -msgid "Test writing blocks of 64512 bytes to tape.\n" +#: src/dird/ua_prune.c:566 +#, c-format +msgid "Pruned %d %s on Volume \"%s\" from catalog.\n" msgstr "" -#: src/stored/btape.c:2383 -msgid "How many blocks do you want to write? (1000): " +#: src/dird/ua_purge.c:177 +msgid "" +"\n" +"This command is 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" +"for retention periods. Normally you should use the\n" +"PRUNE command, which respects retention periods.\n" msgstr "" -#: src/stored/btape.c:2398 -#, c-format -msgid "Begin writing %d Bacula blocks to tape ...\n" +#: src/dird/ua_purge.c:237 +msgid "Choose item to purge" msgstr "" -#: src/stored/btape.c:2450 +#: src/dird/ua_purge.c:282 #, c-format -msgid "Begin writing raw blocks of %u bytes.\n" +msgid "Begin purging files for Client \"%s\"\n" msgstr "" -#: src/stored/btape.c:2470 +#: src/dird/ua_purge.c:294 #, c-format -msgid "Write failed at block %u. stat=%d ERR=%s\n" +msgid "No Files found for client %s to purge from %s catalog.\n" msgstr "" -#: src/stored/btape.c:2500 +#: src/dird/ua_purge.c:325 #, c-format -msgid "Begin writing Bacula blocks of %u bytes.\n" +msgid "%d Files for client \"%s\" purged from %s catalog.\n" msgstr "" -#: src/stored/btape.c:2519 +#: src/dird/ua_purge.c:362 #, c-format -msgid "Write failed at block %u.\n" +msgid "Begin purging jobs from Client \"%s\"\n" msgstr "" -#: src/stored/btape.c:2526 -msgid "test autochanger" +#: src/dird/ua_purge.c:373 +#, c-format +msgid "No Jobs found for client %s to purge from %s catalog.\n" msgstr "" -#: src/stored/btape.c:2527 -msgid "backspace file" +#: src/dird/ua_purge.c:413 +#, c-format +msgid "%d Jobs for client %s purged from %s catalog.\n" msgstr "" -#: src/stored/btape.c:2528 -msgid "backspace record" +#: src/dird/ua_purge.c:464 +#, c-format +msgid "" +"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/stored/btape.c:2529 -msgid "fill tape using Bacula writes" +#: src/dird/ua_purge.c:535 +#, c-format +msgid "%d File%s on Volume \"%s\" purged from catalog.\n" msgstr "" -#: src/stored/btape.c:2530 -msgid "list device capabilities" +#: src/dird/ua_purge.c:549 +#, c-format +msgid "" +"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" msgstr "" -#: src/stored/btape.c:2531 -msgid "clear tape errors" +#: src/dird/ua_purge.c:581 +#, c-format +msgid "Cannot purge Volume with VolStatus=%s\n" msgstr "" -#: src/stored/btape.c:2532 -msgid "go to end of Bacula data for append" +#: src/dird/ua_query.c:59 src/findlib/create_file.c:282 +#: src/findlib/create_file.c:339 +#, c-format +msgid "Could not open %s: ERR=%s\n" msgstr "" -#: src/stored/btape.c:2533 -msgid "go to the physical end of medium" +#: src/dird/ua_query.c:64 +msgid "Available queries:\n" msgstr "" -#: src/stored/btape.c:2534 -msgid "fill tape, write onto second volume" +#: src/dird/ua_query.c:71 +msgid "Choose a query" msgstr "" -#: src/stored/btape.c:2535 -msgid "read filled tape" +#: src/dird/ua_query.c:85 +msgid "Could not find query.\n" msgstr "" -#: src/stored/btape.c:2536 -msgid "forward space a file" +#: src/dird/ua_query.c:103 +msgid "Too many prompts in query, max is 9.\n" msgstr "" -#: src/stored/btape.c:2537 -msgid "forward space a record" +#: src/dird/ua_query.c:206 +#, c-format +msgid "Warning prompt %d missing.\n" msgstr "" -#: src/stored/btape.c:2538 src/dird/ua_cmds.c:101 -msgid "print this command" +#: src/dird/ua_query.c:252 +msgid "" +"Entering SQL query mode.\n" +"Terminate each query with a semicolon.\n" +"Terminate query mode with a blank line.\n" msgstr "" -#: src/stored/btape.c:2539 -msgid "write a Bacula label to the tape" +#: src/dird/ua_query.c:255 src/dird/ua_query.c:272 +msgid "Enter SQL query: " msgstr "" -#: src/stored/btape.c:2540 -msgid "load a tape" +#: src/dird/ua_query.c:274 +msgid "Add to SQL query: " msgstr "" -#: src/stored/btape.c:2541 -msgid "quit btape" +#: src/dird/ua_query.c:278 +msgid "End query mode.\n" msgstr "" -#: src/stored/btape.c:2542 -msgid "use write() to fill tape" +#: src/dird/ua_restore.c:115 +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/btape.c:2543 -msgid "read and print the Bacula tape label" +#: src/dird/ua_restore.c:131 +msgid "Restore not done.\n" msgstr "" -#: src/stored/btape.c:2544 -msgid "test record handling functions" +#: src/dird/ua_restore.c:142 +msgid "Unable to construct a valid BSR. Cannot continue.\n" msgstr "" -#: src/stored/btape.c:2545 -msgid "rewind the tape" +#: src/dird/ua_restore.c:146 src/dird/ua_restore.c:160 +msgid "No files selected to be restored.\n" msgstr "" -#: src/stored/btape.c:2546 -msgid "read() tape block by block to EOT and report" +#: src/dird/ua_restore.c:154 +msgid "" +"\n" +"1 file selected to be restored.\n" +"\n" msgstr "" -#: src/stored/btape.c:2547 -msgid "Bacula read block by block to EOT and report" +#: src/dird/ua_restore.c:157 +#, c-format +msgid "" +"\n" +"%u files selected to be restored.\n" +"\n" msgstr "" -#: src/stored/btape.c:2548 -msgid "print tape status" +#: src/dird/ua_restore.c:175 +msgid "No Restore Job resource found!\n" msgstr "" -#: src/stored/btape.c:2549 -msgid "General test Bacula tape functions" +#: src/dird/ua_restore.c:237 +#, c-format +msgid "Missing value for keyword: %s\n" msgstr "" -#: src/stored/btape.c:2550 -msgid "write an EOF on the tape" +#: src/dird/ua_restore.c:286 +msgid "List last 20 Jobs run" msgstr "" -#: src/stored/btape.c:2551 -msgid "write a single Bacula block" +#: src/dird/ua_restore.c:287 +msgid "List Jobs where a given File is saved" msgstr "" -#: src/stored/btape.c:2552 -msgid "read a single record" +#: src/dird/ua_restore.c:288 +msgid "Enter list of comma separated JobIds to select" msgstr "" -#: src/stored/btape.c:2553 -msgid "quick fill command" +#: src/dird/ua_restore.c:289 +msgid "Enter SQL list command" msgstr "" -#: src/stored/btape.c:2574 -#, c-format -msgid "%s is an illegal command\n" +#: src/dird/ua_restore.c:290 +msgid "Select the most recent backup for a client" msgstr "" -#: src/stored/btape.c:2584 -#, c-format -msgid "Interactive commands:\n" +#: src/dird/ua_restore.c:291 +msgid "Select backup for a client before a specified time" msgstr "" -#: src/stored/btape.c:2585 src/dird/ua_tree.c:622 src/dird/ua_cmds.c:1423 -#, c-format -msgid "" -" Command Description\n" -" ======= ===========\n" +#: src/dird/ua_restore.c:292 +msgid "Enter a list of files to restore" msgstr "" -#: src/stored/btape.c:2594 -#, c-format -msgid "" -"Copyright (C) 2000-2005 Kern Sibbald.\n" -"\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 nn\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_restore.c:293 +msgid "Enter a list of files to restore before a specified time" msgstr "" -#: src/stored/btape.c:2681 -#, c-format -msgid "Mount second Volume on device %s and press return when ready: " +#: src/dird/ua_restore.c:294 +msgid "Find the JobIds of the most recent backup for a client" msgstr "" -#: src/stored/btape.c:2708 -#, c-format -msgid "Mount blank Volume on device %s and press return when ready: " +#: src/dird/ua_restore.c:295 +msgid "Find the JobIds for a backup for a client before a specified time" msgstr "" -#: src/stored/btape.c:2726 -#, c-format -msgid "End of Volume \"%s\"\n" +#: src/dird/ua_restore.c:296 +msgid "Enter a list of directories to restore for found JobIds" msgstr "" -#: src/stored/btape.c:2738 -#, c-format -msgid "Read block=%u, VolBytes=%s rate=%.1f KB/s\n" +#: src/dird/ua_restore.c:297 src/dird/ua_status.c:713 src/filed/status.c:251 +#: src/stored/status.c:412 src/wx-console/wxbconfigpanel.cpp:191 +msgid "Cancel" msgstr "" -#: src/stored/btape.c:2752 src/stored/mount.c:540 +#: src/dird/ua_restore.c:333 #, c-format -msgid "Cannot open Dev=%s, Vol=%s\n" +msgid "Unknown keyword: %s\n" msgstr "" -#: src/stored/autochanger.c:53 +#: src/dird/ua_restore.c:357 #, c-format -msgid "No Changer Name given for device %s. Cannot continue.\n" +msgid "Improper date format: %s\n" msgstr "" -#: src/stored/autochanger.c:59 +#: src/dird/ua_restore.c:397 src/dird/ua_select.c:590 #, c-format -msgid "No Changer Command given for device %s. Cannot continue.\n" +msgid "Error: Pool resource \"%s\" does not exist.\n" msgstr "" -#: src/stored/autochanger.c:72 +#: src/dird/ua_restore.c:402 #, c-format +msgid "Error: Pool resource \"%s\" access not allowed.\n" +msgstr "" + +#: src/dird/ua_restore.c:421 msgid "" -"Media Type not the same for all devices in changer %s. Cannot continue.\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" +"\n" msgstr "" -#: src/stored/autochanger.c:153 -#, c-format -msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" +#: src/dird/ua_restore.c:433 +msgid "To select the JobIds, you have the following choices:\n" msgstr "" -#: src/stored/autochanger.c:162 -#, c-format -msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" +#: src/dird/ua_restore.c:438 +msgid "Select item: " msgstr "" -#: src/stored/autochanger.c:168 -#, c-format -msgid "3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" +#: src/dird/ua_restore.c:452 +msgid "Enter Filename (no path):" msgstr "" -#: src/stored/autochanger.c:209 -msgid "3992 Missing Changer command.\n" +#: src/dird/ua_restore.c:467 src/dird/ua_restore.c:567 +msgid "Enter JobId(s), comma separated, to restore: " msgstr "" -#: src/stored/autochanger.c:219 -#, c-format -msgid "3301 Issuing autochanger \"loaded drive %d\" command.\n" +#: src/dird/ua_restore.c:473 +msgid "Enter SQL list command: " msgstr "" -#: src/stored/autochanger.c:229 -#, c-format -msgid "3302 Autochanger \"loaded drive %d\", result is Slot %d.\n" +#: src/dird/ua_restore.c:501 src/dird/ua_restore.c:526 +msgid "" +"Enter file names with paths, or < to enter a filename\n" +"containg a list of file names with paths, and terminate\n" +"them with a blank line.\n" msgstr "" -#: src/stored/autochanger.c:233 -#, c-format -msgid "3302 Autochanger \"loaded drive %d\", result: nothing loaded.\n" +#: src/dird/ua_restore.c:505 src/dird/ua_restore.c:530 +msgid "Enter full filename: " msgstr "" -#: src/stored/autochanger.c:240 +#: src/dird/ua_restore.c:565 #, c-format -msgid "3991 Bad autochanger \"loaded drive %d\" command: ERR=%s.\n" +msgid "You have already seleted the following JobIds: %s\n" msgstr "" -#: src/stored/autochanger.c:299 src/stored/autochanger.c:381 -#, c-format -msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" +#: src/dird/ua_restore.c:580 +msgid "" +"Enter full directory names or start the name\n" +"with a < to indicate it is a filename containg a list\n" +"of directories and terminate them with a blank line.\n" msgstr "" -#: src/stored/autochanger.c:312 src/stored/autochanger.c:403 -#, c-format -msgid "3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" +#: src/dird/ua_restore.c:584 +msgid "Enter directory name: " msgstr "" -#: src/stored/autochanger.c:370 -#, c-format -msgid "Volume \"%s\" is in use by device %s\n" +#: src/dird/ua_restore.c:609 +msgid "No Jobs selected.\n" msgstr "" -#: src/stored/autochanger.c:441 +#: src/dird/ua_restore.c:613 #, c-format -msgid "3993 Device %s not an autochanger device.\n" +msgid "You have selected the following JobIds: %s\n" msgstr "" -#: src/stored/autochanger.c:466 +#: src/dird/ua_restore.c:616 #, c-format -msgid "3306 Issuing autochanger \"%s\" command.\n" +msgid "You have selected the following JobId: %s\n" msgstr "" -#: src/stored/autochanger.c:469 -msgid "3996 Open bpipe failed.\n" +#: src/dird/ua_restore.c:624 +msgid "Invalid JobId in list.\n" msgstr "" -#: src/stored/autochanger.c:496 +#: src/dird/ua_restore.c:637 #, c-format -msgid "Autochanger error: ERR=%s\n" +msgid "Unable to get Job record for JobId=%s: ERR=%s\n" msgstr "" -#: src/stored/dvd.c:155 src/stored/dev.c:1822 +#: src/dird/ua_restore.c:642 #, c-format -msgid "Device %s cannot be mounted. ERR=%s\n" +msgid "No authorization. Job \"%s\" not selected.\n" msgstr "" -#: src/stored/dvd.c:276 -#, c-format -msgid "Cannot run free space command (%s)\n" +#: src/dird/ua_restore.c:656 +msgid "" +"The restored files will the most current backup\n" +"BEFORE the date you specify below.\n" +"\n" msgstr "" -#: src/stored/dvd.c:379 -#, c-format -msgid "Error while writing current part to the DVD: %s" +#: src/dird/ua_restore.c:659 +msgid "Enter date as YYYY-MM-DD HH:MM:SS :" msgstr "" -#: src/stored/dvd.c:399 -#, c-format -msgid "Remaining free space %s on %s\n" +#: src/dird/ua_restore.c:665 +msgid "Improper date format.\n" msgstr "" -#: src/stored/dvd.c:469 +#: src/dird/ua_restore.c:686 #, c-format -msgid "Next Volume part already exists on DVD. Cannot continue: %s\n" +msgid "Cannot open file %s: ERR=%s\n" msgstr "" -#: src/stored/dvd.c:486 +#: src/dird/ua_restore.c:694 src/dird/ua_restore.c:698 #, c-format -msgid "open_next_part can't unlink existing part %s, ERR=%s\n" +msgid "Error occurred on line %d of %s\n" msgstr "" -#: src/stored/dvd.c:705 +#: src/dird/ua_restore.c:744 src/dird/ua_restore.c:782 #, c-format -msgid "Unable to write part %s: ERR=%s\n" +msgid "No database record found for: %s\n" msgstr "" -#: src/stored/dvd.c:739 src/stored/dev.c:1734 -#, c-format -msgid "Unable to truncate device %s. ERR=%s\n" +#: src/dird/ua_restore.c:769 +msgid "No JobId specified cannot continue.\n" msgstr "" -#: src/stored/fd_cmds.c:334 src/filed/job.c:991 +#: src/dird/ua_restore.c:813 #, c-format -msgid "Could not create bootstrap file %s: ERR=%s\n" +msgid "No table found: %s\n" msgstr "" -#: src/stored/fd_cmds.c:345 -msgid "Error parsing bootstrap file.\n" +#: src/dird/ua_restore.c:918 +#, c-format +msgid "" +"\n" +"Building directory tree for JobId %s ... " msgstr "" -#: src/stored/mount.c:223 src/stored/mount.c:445 -#, c-format -msgid "Volume \"%s\" not on device %s.\n" +#: src/dird/ua_restore.c:937 +msgid "" +"\n" +"There were no files inserted into the tree, so file selection\n" +"is not possible.Most likely your retention policy pruned the files\n" msgstr "" -#: src/stored/mount.c:255 -#, c-format +#: src/dird/ua_restore.c:939 msgid "" -"Director wanted Volume \"%s\".\n" -" Current Volume \"%s\" not acceptable because:\n" -" %s" +"\n" +"Do you want to restore all the files? (yes|no): " msgstr "" -#: src/stored/mount.c:334 +#: src/dird/ua_restore.c:955 #, c-format -msgid "Volume \"%s\" previously written, moving to end of data.\n" +msgid "" +"\n" +"1 Job, %s files inserted into the tree and marked for extraction.\n" msgstr "" -#: src/stored/mount.c:337 +#: src/dird/ua_restore.c:959 #, c-format -msgid "Unable to position to end of data on device %s: ERR=%s\n" +msgid "" +"\n" +"1 Job, %s files inserted into the tree.\n" msgstr "" -#: src/stored/mount.c:349 +#: src/dird/ua_restore.c:965 #, c-format -msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" +msgid "" +"\n" +"%d Jobs, %s files inserted into the tree and marked for extraction.\n" msgstr "" -#: src/stored/mount.c:352 +#: src/dird/ua_restore.c:969 #, c-format msgid "" -"I cannot write on Volume \"%s\" because:\n" -"The number of files mismatch! Volume=%u Catalog=%u\n" +"\n" +"%d Jobs, %s files inserted into the tree.\n" msgstr "" -#: src/stored/mount.c:380 +#: src/dird/ua_restore.c:1046 #, c-format -msgid "Ready to append to end of Volume \"%s\" at file address=%u.\n" +msgid "Error getting FileSet \"%s\": ERR=%s\n" msgstr "" -#: src/stored/mount.c:384 -#, c-format -msgid "" -"I cannot write on Volume \"%s\" because:\n" -"The EOD file address is wrong: Volume file address=%u != Catalog Endblock=%u" -"(+1)\n" -"You probably removed DVD last part in spool directory.\n" +#: src/dird/ua_restore.c:1054 src/dird/ua_select.c:167 +msgid "The defined FileSet resources are:\n" msgstr "" -#: src/stored/mount.c:435 -#, c-format -msgid "Labeled new Volume \"%s\" on device %s.\n" +#: src/dird/ua_restore.c:1058 src/dird/ua_run.c:644 src/dird/ua_select.c:175 +msgid "FileSet" msgstr "" -#: src/stored/mount.c:440 -#, c-format -msgid "Warning device %s not configured to autolabel Volumes.\n" +#: src/dird/ua_restore.c:1058 src/dird/ua_select.c:175 +msgid "Select FileSet resource" msgstr "" -#: src/stored/mount.c:460 +#: src/dird/ua_restore.c:1065 #, c-format -msgid "Marking Volume \"%s\" in Error in Catalog.\n" +msgid "Error getting FileSet record: %s\n" msgstr "" -#: src/stored/mount.c:476 -#, c-format +#: src/dird/ua_restore.c:1066 msgid "" -"Autochanger Volume \"%s\" not found in slot %d.\n" -" Setting InChanger to zero in catalog.\n" -msgstr "" - -#: src/stored/mount.c:495 -msgid "Hey!!!!! WroteVol non-zero !!!!!\n" +"This probably means you modified the FileSet.\n" +"Continuing anyway.\n" msgstr "" -#: src/stored/label.c:81 src/stored/label.c:122 src/stored/label.c:210 +#: src/dird/ua_restore.c:1081 #, c-format -msgid "Wrong Volume mounted on device %s: Wanted %s have %s\n" +msgid "Pool \"%s\" not found, using any pool.\n" msgstr "" -#: src/stored/label.c:88 src/stored/label.c:125 src/stored/label.c:197 +#: src/dird/ua_restore.c:1107 src/dird/ua_restore.c:1123 #, c-format -msgid "Too many tries: %s" +msgid "No Full backup before %s found.\n" msgstr "" -#: src/stored/label.c:104 -#, c-format -msgid "Couldn't rewind device %s: ERR=%s\n" +#: src/dird/ua_restore.c:1146 +msgid "No jobs found.\n" msgstr "" -#: src/stored/label.c:142 -#, c-format +#: src/dird/ua_restore.c:1312 msgid "" -"Requested Volume \"%s\" on %s is not a Bacula labeled Volume, because: ERR=%s" +"Warning, the JobIds that you selected refer to more than one MediaType.\n" +"Restore is not possible. The MediaTypes used are:\n" msgstr "" -#: src/stored/label.c:147 -msgid "Could not read Volume label from block.\n" +#: src/dird/ua_restore.c:1320 +msgid "No MediaType found for your JobIds.\n" msgstr "" -#: src/stored/label.c:150 +#: src/dird/ua_restore.c:1352 #, c-format -msgid "Could not unserialize Volume label: ERR=%s\n" +msgid "Warning default storage overridden by %s on command line.\n" msgstr "" -#: src/stored/label.c:155 +#: src/dird/ua_restore.c:1363 #, c-format -msgid "Volume Header Id bad: %s\n" +msgid "" +"\n" +"Warning. Unable to find Storage resource for\n" +"MediaType \"%s\", needed by the Jobs you selected.\n" +"You will be allowed to select a Storage device later.\n" msgstr "" -#: src/stored/label.c:182 +#: src/dird/ua_run.c:112 #, c-format -msgid "Volume on %s has wrong Bacula version. Wanted %d got %d\n" +msgid "Value missing for keyword %s\n" msgstr "" -#: src/stored/label.c:193 -#, c-format -msgid "Volume on %s has bad Bacula label type: %x\n" +#: src/dird/ua_run.c:119 +msgid "Job name specified twice.\n" msgstr "" -#: src/stored/label.c:274 -#, c-format -msgid "Cannot write Volume label to block for device %s\n" +#: src/dird/ua_run.c:127 +msgid "JobId specified twice.\n" msgstr "" -#: src/stored/label.c:403 -#, c-format -msgid "Rewind error on device %s: ERR=%s\n" +#: src/dird/ua_run.c:136 +msgid "Client specified twice.\n" msgstr "" -#: src/stored/label.c:408 -#, c-format -msgid "Truncate error on device %s: ERR=%s\n" +#: src/dird/ua_run.c:144 +msgid "FileSet specified twice.\n" msgstr "" -#: src/stored/label.c:430 -#, c-format -msgid "Unable to write device %s: ERR=%s\n" +#: src/dird/ua_run.c:152 +msgid "Level specified twice.\n" msgstr "" -#: src/stored/label.c:458 -#, c-format -msgid "Recycled volume \"%s\" on device %s, all previous data lost.\n" +#: src/dird/ua_run.c:161 +msgid "Storage specified twice.\n" msgstr "" -#: src/stored/label.c:461 -#, c-format -msgid "Wrote label to prelabeled Volume \"%s\" on device %s\n" +#: src/dird/ua_run.c:169 +msgid "Pool specified twice.\n" msgstr "" -#: src/stored/label.c:660 -#, c-format -msgid "Bad session label = %d\n" +#: src/dird/ua_run.c:177 +msgid "Where specified twice.\n" msgstr "" -#: src/stored/label.c:678 src/stored/label.c:685 -#, c-format -msgid "Error writing Session label to %s: %s\n" +#: src/dird/ua_run.c:185 +msgid "Bootstrap specified twice.\n" msgstr "" -#: src/stored/label.c:720 -#, c-format -msgid "Expecting Volume Label, got FI=%s Stream=%s len=%d\n" +#: src/dird/ua_run.c:193 +msgid "Replace specified twice.\n" msgstr "" -#: src/stored/label.c:847 -#, c-format -msgid "Unknown %d" +#: src/dird/ua_run.c:201 +msgid "When specified twice.\n" msgstr "" -#: src/stored/label.c:851 -#, 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/dird/ua_run.c:209 +msgid "Priority specified twice.\n" msgstr "" -#: src/stored/label.c:873 -#, c-format -msgid "Date label written: %s\n" +#: src/dird/ua_run.c:214 +msgid "Priority must be positive nonzero setting it to 10.\n" msgstr "" -#: src/stored/label.c:879 -#, c-format -msgid "Date label written: %04d-%02d-%02d at %02d:%02d\n" +#: src/dird/ua_run.c:224 +msgid "Verify Job specified twice.\n" msgstr "" -#: src/stored/label.c:899 +#: src/dird/ua_run.c:268 #, 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 "Invalid keyword: %s\n" msgstr "" -#: src/stored/label.c:912 +#: src/dird/ua_run.c:280 #, c-format -msgid "" -"Job (unique name) : %s\n" -"FileSet : %s\n" -"JobType : %c\n" -"JobLevel : %c\n" +msgid "Catalog \"%s\" not found\n" msgstr "" -#: src/stored/label.c:921 +#: src/dird/ua_run.c:291 #, 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 "Job \"%s\" not found\n" msgstr "" -#: src/stored/label.c:942 -#, c-format -msgid "Date written : %s\n" +#: src/dird/ua_run.c:298 +msgid "A job name must be specified.\n" msgstr "" -#: src/stored/label.c:947 +#: src/dird/ua_run.c:304 #, c-format -msgid "Date written : %04d-%02d-%02d at %02d:%02d\n" -msgstr "" - -#: src/stored/label.c:966 -msgid "Fresh Volume" +msgid "No authorization. Job \"%s\".\n" msgstr "" -#: src/stored/label.c:969 -msgid "Volume" +#: src/dird/ua_run.c:313 +#, c-format +msgid "Storage \"%s\" not found.\n" msgstr "" -#: src/stored/label.c:978 src/stored/read_record.c:341 -msgid "End of Media" +#: src/dird/ua_run.c:323 +#, c-format +msgid "No authorization. Storage \"%s\".\n" msgstr "" -#: src/stored/label.c:981 -msgid "End of Tape" +#: src/dird/ua_run.c:333 +#, c-format +msgid "Pool \"%s\" not found.\n" msgstr "" -#: src/stored/label.c:1001 src/stored/label.c:1009 src/stored/label.c:1042 +#: src/dird/ua_run.c:343 #, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n" +msgid "No authorization. Pool \"%s\".\n" msgstr "" -#: src/stored/label.c:1006 -msgid "End of physical tape.\n" +#: src/dird/ua_run.c:363 +#, c-format +msgid "No authorization. Client \"%s\".\n" msgstr "" -#: src/stored/label.c:1021 src/stored/label.c:1030 +#: src/dird/ua_run.c:372 #, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d\n" +msgid "FileSet \"%s\" not found.\n" msgstr "" -#: src/stored/label.c:1023 +#: src/dird/ua_run.c:381 #, c-format -msgid " Job=%s Date=%s Level=%c Type=%c\n" +msgid "No authorization. FileSet \"%s\".\n" msgstr "" -#: src/stored/label.c:1032 +#: src/dird/ua_run.c:389 #, c-format -msgid " Date=%s Level=%c Type=%c Files=%s Bytes=%s Errors=%d Status=%c\n" +msgid "Verify Job \"%s\" not found.\n" msgstr "" -#: src/stored/butil.c:46 -msgid "Nohdr," +#: src/dird/ua_run.c:422 src/dird/ua_run.c:764 +msgid "Invalid time, using current time.\n" msgstr "" -#: src/stored/butil.c:49 -msgid "partial," +#: src/dird/ua_run.c:442 +#, c-format +msgid "Invalid replace option: %s\n" msgstr "" -#: src/stored/butil.c:52 -msgid "empty," +#: src/dird/ua_run.c:500 +#, c-format +msgid "" +"Run %s job\n" +"JobName: %s\n" +"FileSet: %s\n" +"Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/stored/butil.c:55 -msgid "Nomatch," +#: src/dird/ua_run.c:507 src/lib/util.c:295 +msgid "Admin" msgstr "" -#: src/stored/butil.c:58 -msgid "cont," +#: src/dird/ua_run.c:519 +#, c-format +msgid "" +"Run %s job\n" +"JobName: %s\n" +"FileSet: %s\n" +"Level: %s\n" +"Client: %s\n" +"Storage: %s\n" +"Pool: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/stored/butil.c:131 -msgid "Volume name or names is too long. Please use a .bsr file.\n" +#: src/dird/ua_run.c:528 src/lib/util.c:286 +msgid "Backup" msgstr "" -#: src/stored/butil.c:151 +#: src/dird/ua_run.c:544 #, c-format -msgid "Cannot find device \"%s\" in config file %s.\n" +msgid "" +"Run %s job\n" +"JobName: %s\n" +"FileSet: %s\n" +"Level: %s\n" +"Client: %s\n" +"Storage: %s\n" +"Pool: %s\n" +"Verify Job: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/stored/butil.c:158 -#, c-format -msgid "Cannot init device %s\n" +#: src/dird/ua_run.c:554 src/lib/util.c:289 +msgid "Verify" msgstr "" -#: src/stored/butil.c:179 -#, c-format -msgid "Cannot open %s\n" +#: src/dird/ua_run.c:571 +msgid "Please enter a JobId for restore: " msgstr "" -#: src/stored/butil.c:262 +#: src/dird/ua_run.c:580 #, c-format -msgid "Could not find device \"%s\" in config file %s.\n" +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"Where: %s\n" +"Replace: %s\n" +"FileSet: %s\n" +"Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/stored/butil.c:267 +#: src/dird/ua_run.c:602 #, c-format -msgid "Using device: \"%s\" for reading.\n" +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"Where: %s\n" +"Replace: %s\n" +"Client: %s\n" +"Storage: %s\n" +"JobId: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/stored/butil.c:270 +#: src/dird/ua_run.c:626 #, c-format -msgid "Using device: \"%s\" for writing.\n" +msgid "Unknown Job Type=%d\n" msgstr "" -#: src/stored/butil.c:286 -msgid "Unexpected End of Data\n" +#: src/dird/ua_run.c:631 +msgid "OK to run? (yes/mod/no): " msgstr "" -#: src/stored/butil.c:288 -msgid "Unexpected End of Tape\n" +#: src/dird/ua_run.c:637 src/dird/ua_select.c:44 +msgid "mod" msgstr "" -#: src/stored/butil.c:290 -msgid "Unexpected End of File\n" +#: src/dird/ua_run.c:640 src/dird/ua_update.c:464 +msgid "Parameters to modify:\n" msgstr "" -#: src/stored/butil.c:292 -msgid "Tape Door is Open\n" +#: src/dird/ua_run.c:641 +msgid "Level" msgstr "" -#: src/stored/butil.c:294 -msgid "Unexpected Tape is Off-line\n" +#: src/dird/ua_run.c:642 src/dird/ua_select.c:152 +#: src/wx-console/wxbrestorepanel.cpp:321 +#: src/wx-console/wxbrestorepanel.cpp:337 +#: src/wx-console/wxbrestorepanel.cpp:458 +#: src/wx-console/wxbrestorepanel.cpp:459 +#: src/wx-console/wxbrestorepanel.cpp:469 +#: src/wx-console/wxbrestorepanel.cpp:470 +#: src/wx-console/wxbrestorepanel.cpp:1133 +#: src/wx-console/wxbrestorepanel.cpp:1794 +#: src/wx-console/wxbrestorepanel.cpp:1865 +msgid "Storage" msgstr "" -#: src/stored/dev.c:112 -#, c-format -msgid "Unable to stat device %s: ERR=%s\n" +#: src/dird/ua_run.c:645 src/dird/ua_select.c:282 src/dird/ua_select.c:391 +#: src/wx-console/wxbrestorepanel.cpp:318 +#: src/wx-console/wxbrestorepanel.cpp:336 +#: src/wx-console/wxbrestorepanel.cpp:410 +#: src/wx-console/wxbrestorepanel.cpp:411 +#: src/wx-console/wxbrestorepanel.cpp:421 +#: src/wx-console/wxbrestorepanel.cpp:422 +#: src/wx-console/wxbrestorepanel.cpp:669 +#: src/wx-console/wxbrestorepanel.cpp:1103 +#: src/wx-console/wxbrestorepanel.cpp:1190 +#: src/wx-console/wxbrestorepanel.cpp:1787 +#: src/wx-console/wxbrestorepanel.cpp:1789 +#: src/wx-console/wxbrestorepanel.cpp:1863 +#: src/wx-console/wxbrestorepanel.cpp:1918 +msgid "Client" msgstr "" -#: src/stored/dev.c:123 -#, 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_run.c:646 src/wx-console/wxbrestorepanel.cpp:338 +#: src/wx-console/wxbrestorepanel.cpp:823 +#: src/wx-console/wxbrestorepanel.cpp:1867 +msgid "When" msgstr "" -#: src/stored/dev.c:181 -#, c-format -msgid "Unable to stat mount point %s: ERR=%s\n" +#: src/dird/ua_run.c:647 src/wx-console/wxbrestorepanel.cpp:339 +#: src/wx-console/wxbrestorepanel.cpp:1096 +#: src/wx-console/wxbrestorepanel.cpp:1869 +msgid "Priority" msgstr "" -#: src/stored/dev.c:188 -msgid "" -"Mount and unmount commands must defined for a device which requires mount.\n" +#: src/dird/ua_run.c:650 src/dird/ua_select.c:476 src/dird/ua_select.c:566 +#: src/dird/ua_update.c:400 src/dird/ua_update.c:475 +#: src/wx-console/wxbrestorepanel.cpp:320 +#: src/wx-console/wxbrestorepanel.cpp:506 +#: src/wx-console/wxbrestorepanel.cpp:516 +#: src/wx-console/wxbrestorepanel.cpp:1783 +msgid "Pool" msgstr "" -#: src/stored/dev.c:191 -msgid "Write part command must be defined for a device which requires mount.\n" +#: src/dird/ua_run.c:652 +msgid "Verify Job" msgstr "" -#: src/stored/dev.c:196 -#, c-format -msgid "Block size %u on device %s is too large, using default %u\n" +#: src/dird/ua_run.c:655 src/wx-console/wxbrestorepanel.cpp:331 +#: src/wx-console/wxbrestorepanel.cpp:1848 +msgid "Bootstrap" msgstr "" -#: src/stored/dev.c:201 -#, c-format -msgid "Max block size %u not multiple of device %s block size.\n" +#: src/dird/ua_run.c:656 src/wx-console/wxbrestorepanel.cpp:332 +#: src/wx-console/wxbrestorepanel.cpp:1072 +#: src/wx-console/wxbrestorepanel.cpp:1850 +msgid "Where" msgstr "" -#: src/stored/dev.c:217 src/stored/dev.c:223 -#, c-format -msgid "Unable to init cond variable: ERR=%s\n" +#: src/dird/ua_run.c:657 src/wx-console/wxbrestorepanel.cpp:334 +#: src/wx-console/wxbrestorepanel.cpp:1080 +#: src/wx-console/wxbrestorepanel.cpp:1854 +#: src/wx-console/wxbrestorepanel.cpp:1855 +#: src/wx-console/wxbrestorepanel.cpp:1856 +#: src/wx-console/wxbrestorepanel.cpp:1857 +#: src/wx-console/wxbrestorepanel.cpp:1858 +msgid "Replace" msgstr "" -#: src/stored/dev.c:313 -msgid "Illegal mode given to open dev.\n" +#: src/dird/ua_run.c:658 +msgid "JobId" msgstr "" -#: src/stored/dev.c:356 src/stored/device.c:295 -#, c-format -msgid "Unable to open device %s: ERR=%s\n" +#: src/dird/ua_run.c:660 src/dird/ua_update.c:479 +msgid "Select parameter to modify" msgstr "" -#: src/stored/dev.c:428 src/stored/dev.c:483 -#, c-format -msgid "Could not open file device %s. No Volume name given.\n" +#: src/dird/ua_run.c:664 src/dird/ua_run.c:691 +msgid "Levels:\n" msgstr "" -#: src/stored/dev.c:451 src/stored/dev.c:563 -#, c-format -msgid "Could not open: %s, ERR=%s\n" +#: src/dird/ua_run.c:665 src/filed/status.c:368 src/lib/util.c:319 +#: src/stored/status.c:451 +msgid "Base" msgstr "" -#: src/stored/dev.c:508 -#, c-format -msgid "" -"The media in the device %s is not empty, please blank it before writing " -"anything to it.\n" +#: src/dird/ua_run.c:666 src/filed/status.c:370 src/lib/util.c:321 +#: src/stored/status.c:453 +msgid "Full" msgstr "" -#: src/stored/dev.c:524 -#, c-format -msgid "There is no valid media in the device %s.\n" +#: src/dird/ua_run.c:667 src/filed/status.c:373 src/lib/util.c:324 +#: src/stored/status.c:456 +msgid "Incremental" msgstr "" -#: src/stored/dev.c:531 -#, c-format -msgid "Could not mount device %s.\n" +#: src/dird/ua_run.c:668 src/filed/status.c:376 src/lib/util.c:327 +#: src/stored/status.c:459 +msgid "Differential" msgstr "" -#: src/stored/dev.c:589 -#, c-format -msgid "Could not fstat: %s, ERR=%s\n" +#: src/dird/ua_run.c:669 src/filed/status.c:379 src/lib/util.c:330 +#: src/stored/status.c:462 +msgid "Since" msgstr "" -#: src/stored/dev.c:632 -#, c-format -msgid "Bad call to rewind. Device %s not open\n" +#: src/dird/ua_run.c:670 src/dird/ua_run.c:697 +msgid "Select level" msgstr "" -#: src/stored/dev.c:678 -#, c-format -msgid "Rewind error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:692 +msgid "Initialize Catalog" msgstr "" -#: src/stored/dev.c:688 src/stored/dev.c:801 src/stored/dev.c:937 -#: src/stored/dev.c:1453 -#, c-format -msgid "lseek_dev error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:693 src/filed/status.c:382 src/lib/util.c:333 +#: src/stored/status.c:465 +msgid "Verify Catalog" msgstr "" -#: src/stored/dev.c:728 -msgid "unknown blocked code" +#: src/dird/ua_run.c:694 src/lib/util.c:339 +msgid "Verify Volume to Catalog" msgstr "" -#: src/stored/dev.c:772 -#, c-format -msgid "Bad call to eod_dev. Device %s not open\n" +#: src/dird/ua_run.c:695 src/lib/util.c:342 +msgid "Verify Disk to Catalog" msgstr "" -#: src/stored/dev.c:837 -#, c-format -msgid "ioctl MTEOM error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:696 +msgid "Verify Volume Data (not yet implemented)" msgstr "" -#: src/stored/dev.c:845 src/stored/dev.c:977 -#, c-format -msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:718 +msgid "Level not appropriate for this Job. Cannot be changed.\n" msgstr "" -#: src/stored/dev.c:923 -msgid "Bad device call. Device not open\n" +#: src/dird/ua_run.c:756 +msgid "" +"Please enter desired start time as YYYY-MM-DD HH:MM:SS (return for now): " msgstr "" -#: src/stored/dev.c:936 -#, c-format -msgid "Seek error: ERR=%s\n" +#: src/dird/ua_run.c:771 +msgid "Enter new Priority: " msgstr "" -#: src/stored/dev.c:972 -msgid " Bacula status:" +#: src/dird/ua_run.c:775 +msgid "Priority must be a positive integer.\n" +msgstr "" + +#: src/dird/ua_run.c:793 +msgid "Please enter the Bootstrap file name: " msgstr "" -#: src/stored/dev.c:973 src/stored/dev.c:1022 src/stored/dev.c:1024 +#: src/dird/ua_run.c:804 #, c-format -msgid " file=%d block=%d\n" +msgid "Warning cannot open %s: ERR=%s\n" msgstr "" -#: src/stored/dev.c:981 -msgid " Device status:" +#: src/dird/ua_run.c:823 +msgid "Please enter path prefix for restore (/ for none): " msgstr "" -#: src/stored/dev.c:1046 -msgid "Bad call to load_dev. Device not open\n" +#: src/dird/ua_run.c:837 +msgid "Replace:\n" msgstr "" -#: src/stored/dev.c:1057 src/stored/dev.c:1070 -#, c-format -msgid "ioctl MTLOAD error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:841 +msgid "Select replace option" msgstr "" -#: src/stored/dev.c:1106 -#, c-format -msgid "ioctl MTOFFL error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:851 +msgid "" +"You must set the bootstrap file to NULL to be able to specify a JobId.\n" msgstr "" -#: src/stored/dev.c:1147 -msgid "Bad call to fsf_dev. Device not open\n" +#: src/dird/ua_run.c:869 +msgid "Job failed.\n" msgstr "" -#: src/stored/dev.c:1157 src/stored/dev.c:1278 +#: src/dird/ua_run.c:872 #, c-format -msgid "Device %s at End of Tape.\n" +msgid "Job started. JobId=%s\n" +msgstr "" + +#: src/dird/ua_run.c:878 +msgid "Job not run.\n" msgstr "" -#: src/stored/dev.c:1182 src/stored/dev.c:1258 +#: src/dird/ua_select.c:39 #, c-format -msgid "ioctl MTFSF error on %s. ERR=%s.\n" +msgid "The current %s retention period is: %s\n" msgstr "" -#: src/stored/dev.c:1306 -msgid "Bad call to bsf. Device not open\n" +#: src/dird/ua_select.c:41 +msgid "Continue? (yes/mod/no): " msgstr "" -#: src/stored/dev.c:1312 -#, c-format -msgid "Device %s cannot BSF because it is not a tape.\n" +#: src/dird/ua_select.c:45 +msgid "Enter new retention period: " msgstr "" -#: src/stored/dev.c:1327 -#, c-format -msgid "ioctl MTBSF error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:49 +msgid "Invalid period.\n" msgstr "" -#: src/stored/dev.c:1347 -msgid "Bad call to fsr. Device not open\n" +#: src/dird/ua_select.c:128 +msgid "You have the following choices:\n" msgstr "" -#: src/stored/dev.c:1356 -#, c-format -msgid "ioctl MTFSR not permitted on %s.\n" +#: src/dird/ua_select.c:144 +msgid "The defined Storage resources are:\n" msgstr "" -#: src/stored/dev.c:1384 -#, c-format -msgid "ioctl MTFSR %d error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:152 +msgid "Select Storage resource" msgstr "" -#: src/stored/dev.c:1403 -msgid "Bad call to bsr_dev. Device not open\n" +#: src/dird/ua_select.c:193 +msgid "catalog" msgstr "" -#: src/stored/dev.c:1413 -#, c-format -msgid "ioctl MTBSR not permitted on %s.\n" +#: src/dird/ua_select.c:201 +msgid "The defined Catalog resources are:\n" msgstr "" -#: src/stored/dev.c:1426 -#, c-format -msgid "ioctl MTBSR error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:209 +msgid "Catalog" msgstr "" -#: src/stored/dev.c:1442 -msgid "Bad call to reposition. Device not open\n" +#: src/dird/ua_select.c:209 +msgid "Select Catalog resource" msgstr "" -#: src/stored/dev.c:1510 -msgid "Bad call to weof_dev. Device not open\n" +#: src/dird/ua_select.c:226 +msgid "The defined Job resources are:\n" msgstr "" -#: src/stored/dev.c:1520 -msgid "Attempt to WEOF on non-appendable Volume\n" +#: src/dird/ua_select.c:234 +msgid "Select Job resource" msgstr "" -#: src/stored/dev.c:1537 -#, c-format -msgid "ioctl MTWEOF error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:249 +msgid "The defined Restore Job resources are:\n" msgstr "" -#: src/stored/dev.c:1567 -msgid "Got ENOTTY on read/write!\n" +#: src/dird/ua_select.c:257 +msgid "Select Restore Job" msgstr "" -#: src/stored/dev.c:1614 +#: src/dird/ua_select.c:274 +msgid "The defined Client resources are:\n" +msgstr "" + +#: src/dird/ua_select.c:282 +msgid "Select Client (File daemon) resource" +msgstr "" + +#: src/dird/ua_select.c:309 #, c-format -msgid "unknown func code %d" +msgid "Error: Client resource %s does not exist.\n" msgstr "" -#: src/stored/dev.c:1620 +#: src/dird/ua_select.c:334 #, c-format -msgid "I/O function \"%s\" not supported on this device.\n" +msgid "Could not find Client %s: ERR=%s" msgstr "" -#: src/stored/pythonsd.c:95 src/stored/pythonsd.c:160 src/filed/pythonfd.c:102 -#: src/filed/pythonfd.c:156 src/filed/pythonfd.c:220 src/dird/pythondir.c:105 -msgid "Job pointer not found." +#: src/dird/ua_select.c:337 src/lib/bnet_server.c:284 +#: src/lib/bnet_server.c:378 +msgid "client" msgstr "" -#: src/stored/pythonsd.c:137 src/filed/pythonfd.c:133 src/dird/pythondir.c:166 -#, c-format -msgid "Attribute %s not found." +#: src/dird/ua_select.c:338 +msgid "fd" msgstr "" -#: src/stored/pythonsd.c:154 src/filed/pythonfd.c:150 +#: src/dird/ua_select.c:344 src/dird/ua_select.c:398 #, c-format -msgid "Cannot delete attribute %s" +msgid "Could not find Client \"%s\": ERR=%s" msgstr "" -#: src/stored/pythonsd.c:177 src/filed/pythonfd.c:175 src/dird/pythondir.c:209 -#: src/dird/pythondir.c:215 -msgid "Read-only attribute" +#: src/dird/ua_select.c:373 +#, c-format +msgid "Error obtaining client ids. ERR=%s\n" msgstr "" -#: src/stored/pythonsd.c:187 src/filed/pythonfd.c:168 src/filed/pythonfd.c:184 -#, c-format -msgid "Cannot find attribute %s" +#: src/dird/ua_select.c:377 +msgid "No clients defined. You must run a job before using this command.\n" msgstr "" -#: src/stored/pythonsd.c:202 -msgid "Error in ParseTuple\n" +#: src/dird/ua_select.c:381 +msgid "Defined Clients:\n" msgstr "" -#: src/stored/pythonsd.c:218 -msgid "Parse tuple error in job_write\n" +#: src/dird/ua_select.c:391 +msgid "Select the Client" msgstr "" -#: src/stored/pythonsd.c:254 +#: src/dird/ua_select.c:424 src/dird/ua_select.c:447 src/dird/ua_select.c:483 #, c-format -msgid "Error in Python method %s\n" +msgid "Could not find Pool \"%s\": ERR=%s" msgstr "" -#: src/stored/bcopy.c:58 -#, c-format -msgid "" -"Copyright (C) 2002-2005 Kern Sibbald.\n" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bcopy [-d debug_level] \n" -" -b bootstrap specify a bootstrap file\n" -" -c specify configuration file\n" -" -d set debug level to nn\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/stored/bcopy.c:185 -msgid "Write of last block failed.\n" +#: src/dird/ua_select.c:462 +msgid "No pools defined. Use the \"create\" command to create one.\n" msgstr "" -#: src/stored/bcopy.c:188 -#, c-format -msgid "%u Jobs copied. %u records copied.\n" +#: src/dird/ua_select.c:466 +msgid "Defined Pools:\n" msgstr "" -#: src/stored/bcopy.c:220 -msgid "Volume is prelabeled. This volume cannot be copied.\n" +#: src/dird/ua_select.c:476 +msgid "Select the Pool" msgstr "" -#: src/stored/bcopy.c:223 -msgid "Volume label not copied.\n" +#: src/dird/ua_select.c:506 +#, c-format +msgid "No access to Pool \"%s\"\n" msgstr "" -#: src/stored/bcopy.c:247 -msgid "EOM label not copied.\n" +#: src/dird/ua_select.c:532 +msgid "Enter MediaId or Volume name: " msgstr "" -#: src/stored/bcopy.c:250 -msgid "EOT label not copied.\n" +#: src/dird/ua_select.c:558 +msgid "The defined Pool resources are:\n" msgstr "" -#: src/stored/record.c:60 -#, c-format -msgid "unknown: %d" +#: src/dird/ua_select.c:566 +msgid "Select Pool resource" msgstr "" -#: src/stored/record.c:367 -msgid "Damaged buffer\n" +#: src/dird/ua_select.c:601 +msgid "Enter the JobId to select: " msgstr "" -#: src/stored/device.c:100 +#: src/dird/ua_select.c:638 #, c-format -msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" +msgid "Could not find Job \"%s\": ERR=%s" msgstr "" -#: src/stored/device.c:114 +#: src/dird/ua_select.c:705 #, c-format -msgid "New volume \"%s\" mounted on device %s at %s.\n" +msgid "Automatically selected %s: %s\n" msgstr "" -#: src/stored/device.c:126 +#: src/dird/ua_select.c:710 #, c-format -msgid "write_block_to_device Volume label failed. ERR=%s" +msgid "Cannot select %s in batch mode.\n" msgstr "" -#: src/stored/device.c:162 -#, c-format -msgid "write_block_to_device overflow block failed. ERR=%s" +#: src/dird/ua_select.c:722 +msgid "Selection is empty!\n" msgstr "" -#: src/stored/device.c:297 -#, c-format -msgid "Unable to open archive %s: ERR=%s\n" +#: src/dird/ua_select.c:728 +msgid "Item 1 selected automatically.\n" msgstr "" -#: src/stored/device.c:311 -#, c-format -msgid "Device write lock failure. ERR=%s\n" +#: src/dird/ua_select.c:739 +msgid "Selection aborted, nothing done.\n" msgstr "" -#: src/stored/device.c:319 +#: src/dird/ua_select.c:744 #, c-format -msgid "Device write unlock failure. ERR=%s\n" +msgid "Please enter a number between 1 and %d\n" msgstr "" -#: src/stored/device.c:338 -#, c-format -msgid "pthread_cond_wait failure. ERR=%s\n" +#: src/dird/ua_select.c:793 +msgid "Storage name given twice.\n" msgstr "" -#: src/stored/read_record.c:68 +#: src/dird/ua_select.c:810 #, c-format -msgid "End of Volume at file %u on device %s, Volume \"%s\"\n" -msgstr "" - -#: src/stored/read_record.c:71 -msgid "End of all volumes.\n" +msgid "Expecting jobid=nn command, got: %s\n" msgstr "" -#: src/stored/read_record.c:110 +#: src/dird/ua_select.c:814 #, c-format -msgid "Got EOF at file %u on device %s, Volume \"%s\"\n" -msgstr "" - -#: src/stored/read_record.c:124 -msgid "Did fsr\n" +msgid "JobId %s is not running.\n" msgstr "" -#: src/stored/read_record.c:281 +#: src/dird/ua_select.c:823 #, c-format -msgid "Reposition from (file:block) %u:%u to %u:%u\n" +msgid "Expecting job=xxx, got: %s.\n" msgstr "" -#: src/stored/read_record.c:308 +#: src/dird/ua_select.c:827 #, c-format -msgid "Forward spacing to file:block %u:%u.\n" +msgid "Job \"%s\" is not running.\n" msgstr "" -#: src/stored/read_record.c:334 -msgid "Begin Session" +#: src/dird/ua_select.c:843 +#, c-format +msgid "Storage resource \"%s\": not found\n" msgstr "" -#: src/stored/read_record.c:338 -msgid "End Session" +#: src/dird/ua_select.c:875 +msgid "Enter autochanger drive[0]: " msgstr "" -#: src/stored/read_record.c:344 -#, c-format -msgid "Unknown code %d\n" +#: src/dird/ua_select.c:905 +msgid "Media Types defined in conf file:\n" msgstr "" -#: src/stored/mac.c:68 -#, c-format -msgid "No Volume names found for %s.\n" +#: src/dird/ua_select.c:911 +msgid "Media Type" msgstr "" -#: src/testprogs/schedule.c:37 -#, c-format -msgid "" -"\n" -"Version: " +#: src/dird/ua_select.c:911 +msgid "Select the Media Type" msgstr "" -#: src/testprogs/schedule.c:37 src/console/console.c:103 src/dird/admin.c:108 +#: src/dird/ua_server.c:61 #, c-format -msgid " (" +msgid "Cannot create UA thread: %s\n" msgstr "" -#: src/testprogs/schedule.c:37 -#, c-format -msgid "" -")\n" -"\n" -"Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c set configuration file to file\n" -" -dnn set debug level to nn\n" -" -f run in foreground (for debugging)\n" -" -r run now\n" -" -s no signals\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" +#: src/dird/ua_server.c:142 +msgid "You have messages.\n" msgstr "" -#: src/testprogs/schedule.c:192 src/dird/dird.c:474 -#, c-format -msgid "" -"No Director resource defined in %s\n" -"Without that I don't know who I am :-(\n" +#: src/dird/ua_status.c:126 +msgid "Status available for:\n" msgstr "" -#: src/testprogs/schedule.c:197 -msgid "No working directory specified. Cannot continue.\n" +#: src/dird/ua_status.c:132 +msgid "Select daemon type for status" msgstr "" -#: src/testprogs/schedule.c:204 src/filed/filed.c:295 src/dird/dird.c:482 +#: src/dird/ua_status.c:245 #, c-format -msgid "No Messages resource defined in %s\n" +msgid "%s Version: %s (%s) %s %s %s\n" msgstr "" -#: src/testprogs/schedule.c:209 src/dird/dird.c:487 +#: src/dird/ua_status.c:249 src/stored/status.c:71 #, c-format -msgid "Only one Director resource permitted in %s\n" +msgid "Daemon started %s, 1 Job run since started.\n" msgstr "" -#: src/testprogs/schedule.c:216 src/dird/dird.c:541 +#: src/dird/ua_status.c:252 src/stored/status.c:74 #, c-format -msgid "No Job records defined in %s\n" +msgid "Daemon started %s, %d Jobs run since started.\n" msgstr "" -#: src/testprogs/schedule.c:221 +#: src/dird/ua_status.c:257 src/filed/status.c:121 src/stored/status.c:78 #, c-format -msgid "No Client record defined for job %s\n" +msgid " Heap: bytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" msgstr "" -#: src/testprogs/schedule.c:225 -#, c-format -msgid "No FileSet record defined for job %s\n" +#: src/dird/ua_status.c:277 src/dird/ua_status.c:493 src/dird/ua_status.c:655 +#: src/filed/status.c:198 src/filed/status.c:277 src/stored/status.c:345 +#: src/stored/status.c:361 src/stored/status.c:438 +msgid "====\n" msgstr "" -#: src/testprogs/schedule.c:229 +#: src/dird/ua_status.c:289 #, c-format -msgid "No Storage resource defined for job %s\n" +msgid "" +"\n" +"Failed to connect to Storage daemon %s.\n" +"====\n" msgstr "" -#: src/testprogs/schedule.c:233 +#: src/dird/ua_status.c:327 #, c-format -msgid "No Pool resource defined for job %s\n" +msgid "" +"Failed to connect to Client %s.\n" +"====\n" msgstr "" -#: src/testprogs/schedule.c:242 -#, c-format -msgid "No Catalog resource defined for client %s\n" +#: src/dird/ua_status.c:335 +msgid "Connected to file daemon\n" msgstr "" -#: src/testprogs/testfind.c:46 src/testprogs/testfind.map.c:48 -#, c-format +#: src/dird/ua_status.c:350 msgid "" "\n" -"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -dnn set debug level to nn\n" -" -e specify file of exclude patterns\n" -" -i specify file of include patterns\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" +"Scheduled Jobs:\n" msgstr "" -#: src/testprogs/testfind.c:155 src/testprogs/testfind.map.c:160 -#: src/tools/testfind.c:160 -#, c-format +#: src/dird/ua_status.c:351 msgid "" -"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" +"Level Type Pri Scheduled Name Volume\n" msgstr "" -#: src/testprogs/testfind.c:292 src/testprogs/testfind.map.c:256 -#: src/tools/testls.c:178 src/tools/testfind.c:240 -#, c-format -msgid "Err: Could not access %s: %s\n" +#: src/dird/ua_status.c:352 +msgid "===================================================================================\n" msgstr "" -#: src/testprogs/testfind.c:295 src/testprogs/testfind.map.c:259 -#: src/tools/testls.c:181 src/tools/testfind.c:243 +#: src/dird/ua_status.c:399 #, c-format -msgid "Err: Could not follow ff->link %s: %s\n" +msgid "%-14s %-8s %3d %-18s %-18s %s\n" msgstr "" -#: src/testprogs/testfind.c:298 src/testprogs/testfind.map.c:262 -#: src/tools/testls.c:184 src/tools/testfind.c:246 -#, c-format -msgid "Err: Could not stat %s: %s\n" +#: src/dird/ua_status.c:491 +msgid "No Scheduled Jobs.\n" msgstr "" -#: src/testprogs/testfind.c:301 src/testprogs/testfind.map.c:265 -#: src/tools/testls.c:187 src/tools/testfind.c:249 -#, c-format -msgid "Skip: File not saved. No change. %s\n" +#: src/dird/ua_status.c:508 src/stored/status.c:277 +msgid "" +"\n" +"Running Jobs:\n" msgstr "" -#: src/testprogs/testfind.c:304 src/testprogs/testfind.map.c:268 -#: src/tools/testls.c:190 src/tools/testfind.c:252 +#: src/dird/ua_status.c:516 #, c-format -msgid "Err: Attempt to backup archive. Not saved. %s\n" +msgid "Console connected at %s\n" msgstr "" -#: src/testprogs/testfind.c:307 src/testprogs/testfind.map.c:271 -#: src/tools/testls.c:193 -#, c-format -msgid "Recursion turned off. Directory not entered. %s\n" +#: src/dird/ua_status.c:526 +msgid "" +"No Jobs running.\n" +"====\n" msgstr "" -#: src/testprogs/testfind.c:310 src/testprogs/testfind.map.c:274 -#: src/tools/testls.c:196 -#, c-format -msgid "Skip: File system change prohibited. Directory not entered. %s\n" +#: src/dird/ua_status.c:531 +msgid " JobId Level Name Status\n" msgstr "" -#: src/testprogs/testfind.c:313 src/testprogs/testfind.map.c:277 -#: src/tools/testls.c:199 src/tools/testfind.c:255 -#, c-format -msgid "Err: Could not open directory %s: %s\n" +#: src/dird/ua_status.c:532 src/filed/status.c:221 src/stored/status.c:382 +msgid "======================================================================\n" msgstr "" -#: src/testprogs/testfind.c:316 src/testprogs/testfind.map.c:280 -#: src/tools/testls.c:202 src/tools/testfind.c:258 -#, c-format -msgid "Err: Unknown file ff->type %d: %s\n" +#: src/dird/ua_status.c:540 +msgid "is waiting execution" msgstr "" -#: src/testprogs/testfind.c:366 src/testprogs/testfind.map.c:330 -#: src/tools/testfind.c:308 -#, c-format -msgid "===== Filename truncated to 255 chars: %s\n" +#: src/dird/ua_status.c:543 +msgid "is running" msgstr "" -#: src/testprogs/testfind.c:383 src/testprogs/testfind.map.c:347 -#: src/tools/testfind.c:325 -#, c-format -msgid "========== Path name truncated to 255 chars: %s\n" +#: src/dird/ua_status.c:546 +msgid "is blocked" msgstr "" -#: src/testprogs/testfind.c:392 src/testprogs/testfind.map.c:356 -#: src/tools/testfind.c:334 -#, c-format -msgid "========== Path length is zero. File=%s\n" +#: src/dird/ua_status.c:549 +msgid "has terminated" msgstr "" -#: src/testprogs/window.c:608 -msgid "Folder" +#: src/dird/ua_status.c:552 +msgid "has erred" msgstr "" -#: src/testprogs/window.c:744 src/testprogs/window.c:753 -#: src/testprogs/window.c:2449 src/testprogs/window.c:4167 -msgid "File Roller" +#: src/dird/ua_status.c:555 +msgid "has errors" msgstr "" -#: src/testprogs/window.c:752 -msgid "[read only]" +#: src/dird/ua_status.c:558 +msgid "has a fatal error" msgstr "" -#: src/testprogs/window.c:846 -#, c-format -msgid "1 file (%s)" +#: src/dird/ua_status.c:561 +msgid "has verify differences" msgstr "" -#: src/testprogs/window.c:849 -#, c-format -msgid "%d files (%s)" +#: src/dird/ua_status.c:564 +msgid "has been canceled" msgstr "" -#: src/testprogs/window.c:857 +#: src/dird/ua_status.c:568 #, c-format -msgid "1 file selected (%s)" +msgid "is waiting on Client %s" msgstr "" -#: src/testprogs/window.c:860 +#: src/dird/ua_status.c:574 #, c-format -msgid "%d files selected (%s)" +msgid "is waiting on Storage %s" msgstr "" -#: src/testprogs/window.c:1149 -msgid "Reading archive" +#: src/dird/ua_status.c:579 +msgid "is waiting on max Storage jobs" msgstr "" -#: src/testprogs/window.c:1152 -msgid "Deleting files from archive" +#: src/dird/ua_status.c:582 +msgid "is waiting on max Client jobs" msgstr "" -#: src/testprogs/window.c:1155 -msgid "Adding files to archive" -msgstr "" +#: src/dird/ua_status.c:585 +msgid "is waiting on max Job jobs" +msgstr "" -#: src/testprogs/window.c:1158 -msgid "Extracting files from archive" +#: src/dird/ua_status.c:588 +msgid "is waiting on max total jobs" msgstr "" -#: src/testprogs/window.c:1161 -msgid "Testing archive" +#: src/dird/ua_status.c:591 +msgid "is waiting for its start time" msgstr "" -#: src/testprogs/window.c:1167 -msgid "wait please..." +#: src/dird/ua_status.c:594 +msgid "is waiting for higher priority jobs to finish" msgstr "" -#: src/testprogs/window.c:1253 -msgid "Operation stopped" +#: src/dird/ua_status.c:599 +#, c-format +msgid "is in unknown state %c" msgstr "" -#: src/testprogs/window.c:1271 -msgid "An error occurred while extracting files." +#: src/dird/ua_status.c:613 +msgid "is waiting for a mount request" msgstr "" -#: src/testprogs/window.c:1275 -msgid "An error occurred while loading the archive." +#: src/dird/ua_status.c:620 +msgid "is waiting for an appendable Volume" msgstr "" -#: src/testprogs/window.c:1279 -msgid "An error occurred while deleting files from the archive." +#: src/dird/ua_status.c:627 +#, c-format +msgid "is waiting for Client %s to connect to Storage %s" msgstr "" -#: src/testprogs/window.c:1283 -msgid "An error occurred while adding files to the archive." +#: src/dird/ua_status.c:643 +#, c-format +msgid "%6d %-6s %-20s %s\n" msgstr "" -#: src/testprogs/window.c:1287 -msgid "An error occurred while testing archive." +#: src/dird/ua_status.c:665 src/filed/status.c:211 src/stored/status.c:373 +msgid "No Terminated Jobs.\n" msgstr "" -#: src/testprogs/window.c:1293 -msgid "Command not found." +#: src/dird/ua_status.c:670 src/stored/status.c:378 +msgid "" +"\n" +"Terminated Jobs:\n" msgstr "" -#: src/testprogs/window.c:1296 -msgid "Command exited abnormally." +#: src/dird/ua_status.c:671 +msgid " JobId Level Files Bytes Status Finished Name \n" msgstr "" -#: src/testprogs/window.c:1588 -msgid "You don't have permissions to add files to this archive." +#: src/dird/ua_status.c:672 +msgid "========================================================================\n" msgstr "" -#: src/testprogs/window.c:1610 -msgid "You can't add an archive to itself." +#: src/dird/ua_status.c:703 src/filed/status.c:241 src/lib/util.c:178 +#: src/stored/status.c:402 +msgid "Created" msgstr "" -#: src/testprogs/window.c:1770 -msgid "" -"Do you want to add this file to the current archive or open it as a new " -"archive?" +#: src/dird/ua_status.c:707 src/filed/status.c:245 src/lib/util.c:191 +#: src/lib/util.c:258 src/stored/status.c:406 +msgid "Error" msgstr "" -#: src/testprogs/window.c:1813 -msgid "Do you want to create a new archive with these files?" +#: src/dird/ua_status.c:710 src/filed/status.c:248 src/stored/status.c:409 +msgid "Diffs" msgstr "" -#: src/testprogs/window.c:1815 -msgid "Create _Archive" +#: src/dird/ua_status.c:716 src/filed/status.c:254 src/lib/util.c:187 +#: src/lib/util.c:254 src/stored/btape.c:1158 src/stored/status.c:415 +#: src/wx-console/wxbconfigpanel.cpp:180 +msgid "OK" msgstr "" -#: src/testprogs/window.c:2158 -msgid "Name" +#: src/dird/ua_status.c:719 src/filed/status.c:257 src/stored/status.c:418 +msgid "Other" msgstr "" -#: src/testprogs/window.c:2617 -msgid "_Up" +#: src/dird/ua_status.c:722 src/filed/status.c:268 src/stored/status.c:429 +#, c-format +msgid "%6d %-6s %8s %14s %-7s %-8s %s\n" msgstr "" -#: src/testprogs/window.c:2639 -msgid "Current Location:" +#: src/dird/ua_status.c:730 src/stored/btape.c:180 +msgid "\n" msgstr "" -#: src/testprogs/window.c:2671 src/wx-console/wxbrestorepanel.cpp:245 -#: src/wx-console/wxbrestorepanel.cpp:299 -msgid "Add" +#: src/dird/ua_tree.c:58 +msgid "change current directory" msgstr "" -#: src/testprogs/window.c:2672 -msgid "Add files to the archive" +#: src/dird/ua_tree.c:59 +msgid "count marked files in and below the cd" msgstr "" -#: src/testprogs/window.c:2682 -msgid "Extract" +#: src/dird/ua_tree.c:60 src/dird/ua_tree.c:61 +msgid "long list current directory, wildcards allowed" msgstr "" -#: src/testprogs/window.c:2683 -msgid "Extract files from the archive" +#: src/dird/ua_tree.c:62 +msgid "leave file selection mode" msgstr "" -#: src/testprogs/window.c:2693 -msgid "View" +#: src/dird/ua_tree.c:63 +msgid "estimate restore size" msgstr "" -#: src/testprogs/window.c:2694 -msgid "View selected file" +#: src/dird/ua_tree.c:64 +msgid "same as done command" msgstr "" -#: src/testprogs/window.c:3093 -msgid "File type not supported." +#: src/dird/ua_tree.c:65 +msgid "find files, wildcards allowed" msgstr "" -#: src/testprogs/window.c:3162 -msgid "Cannot load archive." +#: src/dird/ua_tree.c:66 src/dird/ua_tree.c:75 +msgid "print help" msgstr "" -#: src/testprogs/window.c:3227 -msgid "Destination folder does not exist. Do you want to create it?" +#: src/dird/ua_tree.c:67 +msgid "list current directory, wildcards allowed" msgstr "" -#: src/testprogs/window.c:3229 -msgid "Create _Folder" +#: src/dird/ua_tree.c:68 +msgid "list the marked files in and below the cd" msgstr "" -#: src/testprogs/window.c:3249 -#, c-format -msgid "" -"Could not create the destination folder: %s.\n" -"Extraction not performed." +#: src/dird/ua_tree.c:69 +msgid "mark dir/file to be restored recursively, wildcards allowed" msgstr "" -#: src/testprogs/window.c:3264 -msgid "Extraction not performed." +#: src/dird/ua_tree.c:70 +msgid "mark directory name to be restored (no files)" msgstr "" -#: src/testprogs/window.c:3576 -msgid "Last Output" +#: src/dird/ua_tree.c:71 +msgid "print current working directory" msgstr "" -#: src/testprogs/window.c:4102 -msgid "Add files to an archive" +#: src/dird/ua_tree.c:72 +msgid "unmark dir/file to be restored recursively in dir" msgstr "" -#: src/testprogs/window.c:4127 -msgid "Extract archive" +#: src/dird/ua_tree.c:73 +msgid "unmark directory name only no recursion" msgstr "" -#: src/cats/sql_list.c:53 -#, c-format -msgid "Query failed: %s\n" +#: src/dird/ua_tree.c:74 +msgid "quit and do not do restore" msgstr "" -#: src/cats/sql.c:96 -#, c-format +#: src/dird/ua_tree.c:94 msgid "" -"query %s failed:\n" -"%s\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/cats/sql.c:118 +#: src/dird/ua_tree.c:104 src/dird/ua_tree.c:664 src/dird/ua_tree.c:672 #, c-format -msgid "" -"insert %s failed:\n" -"%s\n" +msgid "cwd is: %s\n" msgstr "" -#: src/cats/sql.c:132 -#, c-format -msgid "Insertion problem: affected_rows=%s\n" +#: src/dird/ua_tree.c:125 +msgid "Illegal command. Enter \"done\" to exit.\n" msgstr "" -#: src/cats/sql.c:152 -#, c-format -msgid "" -"update %s failed:\n" -"%s\n" +#: src/dird/ua_tree.c:298 src/dird/ua_tree.c:309 src/dird/ua_tree.c:326 +msgid "No files marked.\n" msgstr "" -#: src/cats/sql.c:162 -#, c-format -msgid "Update problem: affected_rows=%s\n" +#: src/dird/ua_tree.c:311 +msgid "1 file marked.\n" msgstr "" -#: src/cats/sql.c:183 +#: src/dird/ua_tree.c:313 #, c-format -msgid "" -"delete %s failed:\n" -"%s\n" +msgid "%s files marked.\n" msgstr "" -#: src/cats/sql.c:209 src/cats/sql.c:216 src/cats/sql_create.c:823 -#: src/cats/sql_get.c:180 src/cats/sql_get.c:231 src/cats/sql_get.c:624 -#: src/cats/sql_get.c:699 src/cats/sql_get.c:926 -#, c-format -msgid "error fetching row: %s\n" +#: src/dird/ua_tree.c:340 +msgid "No directories marked.\n" msgstr "" -#: src/cats/sql.c:326 src/dird/catreq.c:375 src/dird/catreq.c:449 -#, c-format -msgid "Attribute create error. %s" +#: src/dird/ua_tree.c:342 +msgid "1 directory marked.\n" msgstr "" -#: src/cats/sql.c:407 +#: src/dird/ua_tree.c:344 #, c-format -msgid "Path length is zero. File=%s\n" +msgid "%s directories marked.\n" msgstr "" -#: src/cats/sql.c:451 -msgid "No results to list.\n" +#: src/dird/ua_tree.c:365 +#, c-format +msgid "%s total files/dirs. %s marked to be restored.\n" msgstr "" -#: src/cats/mysql.c:60 -msgid "A user name for MySQL must be supplied.\n" +#: src/dird/ua_tree.c:376 +msgid "No file specification given.\n" msgstr "" -#: src/cats/mysql.c:124 src/cats/postgresql.c:128 src/cats/sqlite.c:122 -#: src/cats/bdb.c:152 +#: src/dird/ua_tree.c:520 #, c-format -msgid "Unable to initialize DB lock. ERR=%s\n" +msgid "Node %s has no children.\n" msgstr "" -#: src/cats/mysql.c:161 +#: src/dird/ua_tree.c:611 #, c-format -msgid "" -"Unable to connect to MySQL server. \n" -"Database=%s User=%s\n" -"It is probably not running or your password is incorrect.\n" +msgid "%d total files; %d marked to be restored; %s bytes.\n" msgstr "" -#: src/cats/mysql.c:320 src/cats/postgresql.c:264 src/cats/sqlite.c:323 -#, c-format -msgid "Query failed: %s: ERR=%s\n" +#: src/dird/ua_tree.c:656 +msgid "Invalid path given.\n" msgstr "" -#: src/cats/postgresql.c:62 -msgid "A user name for PostgreSQL must be supplied.\n" +#: src/dird/ua_tree.c:683 src/dird/ua_tree.c:694 +msgid "No files unmarked.\n" msgstr "" -#: src/cats/postgresql.c:165 -#, c-format -msgid "" -"Unable to connect to PostgreSQL server.\n" -"Database=%s User=%s\n" -"It is probably not running or your password is incorrect.\n" +#: src/dird/ua_tree.c:696 +msgid "1 file unmarked.\n" msgstr "" -#: src/cats/postgresql.c:506 +#: src/dird/ua_tree.c:698 #, c-format -msgid "error fetching currval: %s\n" +msgid "%d files unmarked.\n" msgstr "" -#: src/cats/sql_delete.c:79 -#, c-format -msgid "No pool record %s exists\n" +#: src/dird/ua_tree.c:709 src/dird/ua_tree.c:725 +msgid "No directories unmarked.\n" msgstr "" -#: src/cats/sql_delete.c:84 -#, c-format -msgid "Expecting one pool record, got %d\n" +#: src/dird/ua_tree.c:727 +msgid "1 directory unmarked.\n" msgstr "" -#: src/cats/sql_delete.c:90 +#: src/dird/ua_tree.c:729 #, c-format -msgid "Error fetching row %s\n" +msgid "%d directories unmarked.\n" msgstr "" -#: src/cats/sql_create.c:86 -#, c-format -msgid "Create DB Job record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:79 +msgid "Update choice:\n" msgstr "" -#: src/cats/sql_create.c:135 -#, c-format -msgid "Create DB MAC record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:80 +msgid "Volume parameters" msgstr "" -#: src/cats/sql_create.c:182 -#, c-format -msgid "Create JobMedia record %s failed: ERR=%s\n" +#: src/dird/ua_update.c:81 +msgid "Pool from resource" msgstr "" -#: src/cats/sql_create.c:191 -#, c-format -msgid "Update Media record %s failed: ERR=%s\n" +#: src/dird/ua_update.c:82 +msgid "Slots from autochanger" msgstr "" -#: src/cats/sql_create.c:221 -#, c-format -msgid "pool record %s already exists\n" +#: src/dird/ua_update.c:83 +msgid "item" msgstr "" -#: src/cats/sql_create.c:247 -#, c-format -msgid "Create db Pool record %s failed: ERR=%s\n" +#: src/dird/ua_update.c:83 +msgid "Choose catalog item to update" msgstr "" -#: src/cats/sql_create.c:278 +#: src/dird/ua_update.c:122 #, c-format -msgid "Device record %s already exists\n" +msgid "Invalid VolStatus specified: %s\n" msgstr "" -#: src/cats/sql_create.c:294 +#: src/dird/ua_update.c:131 #, c-format -msgid "Create db Device record %s failed: ERR=%s\n" +msgid "New Volume status is: %s\n" msgstr "" -#: src/cats/sql_create.c:327 +#: src/dird/ua_update.c:141 #, c-format -msgid "More than one Storage record!: %d\n" +msgid "Invalid retention period specified: %s\n" msgstr "" -#: src/cats/sql_create.c:332 +#: src/dird/ua_update.c:149 #, c-format -msgid "error fetching Storage row: %s\n" +msgid "New retention period is: %s\n" msgstr "" -#: src/cats/sql_create.c:352 +#: src/dird/ua_update.c:160 #, c-format -msgid "Create DB Storage record %s failed. ERR=%s\n" +msgid "Invalid use duration specified: %s\n" msgstr "" -#: src/cats/sql_create.c:384 +#: src/dird/ua_update.c:168 #, c-format -msgid "mediatype record %s already exists\n" +msgid "New use duration is: %s\n" msgstr "" -#: src/cats/sql_create.c:400 +#: src/dird/ua_update.c:182 #, c-format -msgid "Create db mediatype record %s failed: ERR=%s\n" +msgid "New max jobs is: %s\n" msgstr "" -#: src/cats/sql_create.c:434 +#: src/dird/ua_update.c:195 #, c-format -msgid "Volume \"%s\" already exists.\n" +msgid "New max files is: %s\n" msgstr "" -#: src/cats/sql_create.c:472 +#: src/dird/ua_update.c:206 #, c-format -msgid "Create DB Media record %s failed. ERR=%s\n" +msgid "Invalid max. bytes specification: %s\n" msgstr "" -#: src/cats/sql_create.c:520 +#: src/dird/ua_update.c:214 #, c-format -msgid "More than one Client!: %d\n" +msgid "New Max bytes is: %s\n" msgstr "" -#: src/cats/sql_create.c:525 -#, c-format -msgid "error fetching Client row: %s\n" +#: src/dird/ua_update.c:228 src/dird/ua_update.c:252 +msgid "Invalid value. It must be yes or no.\n" msgstr "" -#: src/cats/sql_create.c:552 +#: src/dird/ua_update.c:236 #, c-format -msgid "Create DB Client record %s failed. ERR=%s\n" +msgid "New Recycle flag is: %s\n" msgstr "" -#: src/cats/sql_create.c:595 +#: src/dird/ua_update.c:260 #, c-format -msgid "Create DB Counters record %s failed. ERR=%s\n" +msgid "New InChanger flag is: %s\n" msgstr "" -#: src/cats/sql_create.c:628 +#: src/dird/ua_update.c:278 #, c-format -msgid "More than one FileSet!: %d\n" +msgid "Invalid slot, it must be between 0 and MaxVols=%d\n" msgstr "" -#: src/cats/sql_create.c:633 +#: src/dird/ua_update.c:287 src/dird/ua_update.c:577 #, c-format -msgid "error fetching FileSet row: ERR=%s\n" +msgid "Error updating media record Slot: ERR=%s" msgstr "" -#: src/cats/sql_create.c:663 +#: src/dird/ua_update.c:289 #, c-format -msgid "Create DB FileSet record %s failed. ERR=%s\n" +msgid "New Slot is: %d\n" msgstr "" -#: src/cats/sql_create.c:720 +#: src/dird/ua_update.c:316 #, c-format -msgid "Attempt to put non-attributes into catalog. Stream=%d\n" +msgid "New Pool is: %s\n" msgstr "" -#: src/cats/sql_create.c:783 +#: src/dird/ua_update.c:345 #, c-format -msgid "Create db File record %s failed. ERR=%s" +msgid "Error updating Volume record: ERR=%s" msgstr "" -#: src/cats/sql_create.c:816 src/cats/sql_get.c:224 +#: src/dird/ua_update.c:347 #, c-format -msgid "More than one Path!: %s for path: %s\n" +msgid "Volume defaults updated from \"%s\" Pool record.\n" msgstr "" -#: src/cats/sql_create.c:847 +#: src/dird/ua_update.c:369 #, c-format -msgid "Create db Path record %s failed. ERR=%s\n" +msgid "Error updating Volume records: ERR=%s" msgstr "" -#: src/cats/sql_create.c:880 -#, c-format -msgid "More than one Filename! %s for file: %s\n" +#: src/dird/ua_update.c:371 +msgid "All Volume defaults updated from Pool record.\n" msgstr "" -#: src/cats/sql_create.c:886 -#, c-format -msgid "Error fetching row for file=%s: ERR=%s\n" +#: src/dird/ua_update.c:391 +msgid "VolStatus" msgstr "" -#: src/cats/sql_create.c:902 -#, c-format -msgid "Create db Filename record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:392 +msgid "VolRetention" msgstr "" -#: src/cats/bdb_update.c:83 src/cats/bdb_update.c:114 -#, c-format -msgid "Error updating DB Job file. ERR=%s\n" +#: src/dird/ua_update.c:393 +msgid "VolUse" msgstr "" -#: src/cats/bdb_update.c:153 src/cats/bdb_update.c:189 -#, c-format -msgid "Error updating DB Media file. ERR=%s\n" +#: src/dird/ua_update.c:394 +msgid "MaxVolJobs" msgstr "" -#: src/cats/sqlite.c:136 -#, c-format -msgid "Database %s does not exist, please create it.\n" +#: src/dird/ua_update.c:395 +msgid "MaxVolFiles" msgstr "" -#: src/cats/sqlite.c:161 -#, c-format -msgid "Unable to open Database=%s. ERR=%s\n" +#: src/dird/ua_update.c:396 +msgid "MaxVolBytes" msgstr "" -#: src/cats/sqlite.c:162 src/lib/bnet_server.c:371 -msgid "unknown" +#: src/dird/ua_update.c:397 +msgid "Recycle" msgstr "" -#: src/cats/sqlite.c:221 -#, c-format -msgid "next_index query error: ERR=%s\n" +#: src/dird/ua_update.c:398 +msgid "InChanger" msgstr "" -#: src/cats/sqlite.c:226 -#, c-format -msgid "Error fetching index: ERR=%s\n" +#: src/dird/ua_update.c:399 src/dird/ua_update.c:472 +msgid "Slot" msgstr "" -#: src/cats/sqlite.c:236 -#, c-format -msgid "next_index update error: ERR=%s\n" +#: src/dird/ua_update.c:401 +msgid "FromPool" msgstr "" -#: src/cats/sql_find.c:90 src/cats/sql_find.c:119 -#, c-format -msgid "" -"Query error for start time request: ERR=%s\n" -"CMD=%s\n" +#: src/dird/ua_update.c:402 +msgid "AllFromPool" msgstr "" -#: src/cats/sql_find.c:96 -msgid "No prior Full backup Job record found.\n" +#: src/dird/ua_update.c:463 +#, c-format +msgid "Updating Volume \"%s\"\n" msgstr "" -#: src/cats/sql_find.c:108 -#, c-format -msgid "Unknown level=%d\n" +#: src/dird/ua_update.c:465 +msgid "Volume Status" msgstr "" -#: src/cats/sql_find.c:125 -#, c-format -msgid "" -"No Job record found: ERR=%s\n" -"CMD=%s\n" +#: src/dird/ua_update.c:466 +msgid "Volume Retention Period" msgstr "" -#: src/cats/sql_find.c:224 -#, c-format -msgid "Unknown Job level=%d\n" +#: src/dird/ua_update.c:467 +msgid "Volume Use Duration" msgstr "" -#: src/cats/sql_find.c:234 -#, c-format -msgid "No Job found for: %s.\n" +#: src/dird/ua_update.c:468 +msgid "Maximum Volume Jobs" msgstr "" -#: src/cats/sql_find.c:245 -#, c-format -msgid "No Job found for: %s\n" +#: src/dird/ua_update.c:469 +msgid "Maximum Volume Files" msgstr "" -#: src/cats/sql_find.c:317 -#, c-format -msgid "Request for Volume item %d greater than max %d\n" +#: src/dird/ua_update.c:470 +msgid "Maximum Volume Bytes" msgstr "" -#: src/cats/sql_find.c:329 -#, c-format -msgid "No Volume record found for item %d.\n" +#: src/dird/ua_update.c:471 +msgid "Recycle Flag" msgstr "" -#: src/cats/sql_get.c:130 -#, c-format -msgid "get_file_record want 1 got rows=%d\n" +#: src/dird/ua_update.c:473 +msgid "InChanger Flag" msgstr "" -#: src/cats/sql_get.c:135 -#, c-format -msgid "Error fetching row: %s\n" +#: src/dird/ua_update.c:474 +msgid "Volume Files" msgstr "" -#: src/cats/sql_get.c:143 -#, c-format -msgid "File record for PathId=%s FilenameId=%s not found.\n" +#: src/dird/ua_update.c:476 +msgid "Volume from Pool" msgstr "" -#: src/cats/sql_get.c:149 -msgid "File record not found in Catalog.\n" +#: src/dird/ua_update.c:477 +msgid "All Volumes from Pool" msgstr "" -#: src/cats/sql_get.c:174 -#, c-format -msgid "More than one Filename!: %s for file: %s\n" +#: src/dird/ua_update.c:478 +msgid "Done" msgstr "" -#: src/cats/sql_get.c:184 +#: src/dird/ua_update.c:489 #, c-format -msgid "Get DB Filename record %s found bad record: %d\n" +msgid "Current Volume status is: %s\n" msgstr "" -#: src/cats/sql_get.c:190 -#, c-format -msgid "Filename record: %s not found.\n" +#: src/dird/ua_update.c:490 +msgid "Possible Values are:\n" msgstr "" -#: src/cats/sql_get.c:194 -#, c-format -msgid "Filename record: %s not found in Catalog.\n" +#: src/dird/ua_update.c:501 +msgid "Choose new Volume Status" msgstr "" -#: src/cats/sql_get.c:235 +#: src/dird/ua_update.c:507 #, c-format -msgid "Get DB path record %s found bad record: %s\n" +msgid "Current retention period is: %s\n" msgstr "" -#: src/cats/sql_get.c:248 -#, c-format -msgid "Path record: %s not found.\n" +#: src/dird/ua_update.c:509 +msgid "Enter Volume Retention period: " msgstr "" -#: src/cats/sql_get.c:252 +#: src/dird/ua_update.c:516 #, c-format -msgid "Path record: %s not found in Catalog.\n" +msgid "Current use duration is: %s\n" msgstr "" -#: src/cats/sql_get.c:287 -#, c-format -msgid "No Job found for JobId %s\n" +#: src/dird/ua_update.c:518 +msgid "Enter Volume Use Duration: " msgstr "" -#: src/cats/sql_get.c:334 +#: src/dird/ua_update.c:525 #, c-format -msgid "No MAC record found for JobId %s\n" +msgid "Current max jobs is: %u\n" msgstr "" -#: src/cats/sql_get.c:385 src/cats/sql_get.c:441 -#, c-format -msgid "No volumes found for JobId=%d\n" +#: src/dird/ua_update.c:526 +msgid "Enter new Maximum Jobs: " msgstr "" -#: src/cats/sql_get.c:391 src/cats/sql_get.c:452 +#: src/dird/ua_update.c:533 #, c-format -msgid "Error fetching row %d: ERR=%s\n" +msgid "Current max files is: %u\n" msgstr "" -#: src/cats/sql_get.c:405 -#, c-format -msgid "No Volume for JobId %d found in Catalog.\n" +#: src/dird/ua_update.c:534 +msgid "Enter new Maximum Files: " msgstr "" -#: src/cats/sql_get.c:540 +#: src/dird/ua_update.c:541 #, c-format -msgid "Pool id select failed: ERR=%s\n" +msgid "Current value is: %s\n" msgstr "" -#: src/cats/sql_get.c:577 -#, c-format -msgid "Client id select failed: ERR=%s\n" +#: src/dird/ua_update.c:542 +msgid "Enter new Maximum Bytes: " msgstr "" -#: src/cats/sql_get.c:619 +#: src/dird/ua_update.c:550 #, c-format -msgid "More than one Pool!: %s\n" +msgid "Current recycle flag is: %s\n" msgstr "" -#: src/cats/sql_get.c:660 -msgid "Pool record not found in Catalog.\n" +#: src/dird/ua_update.c:552 +msgid "Enter new Recycle status: " msgstr "" -#: src/cats/sql_get.c:694 +#: src/dird/ua_update.c:559 #, c-format -msgid "More than one Client!: %s\n" +msgid "Current Slot is: %d\n" msgstr "" -#: src/cats/sql_get.c:711 src/cats/sql_get.c:715 -msgid "Client record not found in Catalog.\n" +#: src/dird/ua_update.c:560 +msgid "Enter new Slot: " msgstr "" -#: src/cats/sql_get.c:740 +#: src/dird/ua_update.c:567 #, c-format -msgid "More than one Counter!: %d\n" +msgid "Current InChanger flag is: %d\n" msgstr "" -#: src/cats/sql_get.c:745 -#, c-format -msgid "error fetching Counter row: %s\n" +#: src/dird/ua_update.c:568 +msgid "Set InChanger flag? yes/no: " msgstr "" -#: src/cats/sql_get.c:765 +#: src/dird/ua_update.c:579 #, c-format -msgid "Counter record: %s not found in Catalog.\n" +msgid "New InChanger flag is: %d\n" msgstr "" -#: src/cats/sql_get.c:801 -#, c-format -msgid "Error got %s FileSets but expected only one!\n" +#: src/dird/ua_update.c:586 +msgid "" +"Warning changing Volume Files can result\n" +"in loss of data on your Volume\n" +"\n" msgstr "" -#: src/cats/sql_get.c:806 +#: src/dird/ua_update.c:588 #, c-format -msgid "FileSet record \"%s\" not found.\n" +msgid "Current Volume Files is: %u\n" msgstr "" -#: src/cats/sql_get.c:816 -msgid "FileSet record not found in Catalog.\n" +#: src/dird/ua_update.c:589 +msgid "Enter new number of Files for Volume: " msgstr "" -#: src/cats/sql_get.c:873 -#, c-format -msgid "Media id select failed: ERR=%s\n" +#: src/dird/ua_update.c:594 +msgid "Normally, you should only increase Volume Files by one!\n" msgstr "" -#: src/cats/sql_get.c:921 -#, c-format -msgid "More than one Volume!: %s\n" +#: src/dird/ua_update.c:595 +msgid "Continue? (yes/no): " msgstr "" -#: src/cats/sql_get.c:966 +#: src/dird/ua_update.c:605 #, c-format -msgid "Media record MediaId=%s not found.\n" +msgid "New Volume Files is: %u\n" msgstr "" -#: src/cats/sql_get.c:969 +#: src/dird/ua_update.c:617 #, c-format -msgid "Media record for Volume \"%s\" not found.\n" +msgid "Current Pool is: %s\n" msgstr "" -#: src/cats/sql_get.c:976 -#, c-format -msgid "Media record for MediaId=%u not found in Catalog.\n" +#: src/dird/ua_update.c:618 +msgid "Enter new Pool name: " +msgstr "" + +#: src/dird/ua_update.c:631 +msgid "Selection terminated.\n" msgstr "" -#: src/cats/sql_get.c:979 +#: src/dird/ua_update.c:664 #, c-format -msgid "Media record for Vol=%s not found in Catalog.\n" +msgid "db_update_pool_record returned %d. ERR=%s\n" msgstr "" -#: src/cats/bdb.c:128 -msgid "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +#: src/dird/ua_update.c:671 +msgid "Pool DB record updated from resource.\n" msgstr "" -#: src/cats/bdb.c:129 -msgid "WARNING!!!! The Internal Database is NOT OPERATIONAL!\n" -msgstr "" - -#: src/cats/bdb.c:130 -msgid "You should use SQLite, PostgreSQL, or MySQL\n" +#: src/dird/verify.c:87 +msgid "" +"Unable to find JobId of previous InitCatalog Job.\n" +"Please run a Verify with Level=InitCatalog before\n" +"running the current Job.\n" msgstr "" -#: src/cats/bdb.c:162 +#: src/dird/verify.c:117 #, c-format -msgid "Unable to open Catalog DB control file %s: ERR=%s\n" +msgid "Verifying against JobId=%d Job=%s\n" msgstr "" -#: src/cats/bdb.c:217 +#: src/dird/verify.c:187 #, c-format -msgid "Error reading catalog DB control file. ERR=%s\n" +msgid "Start Verify JobId=%s Level=%s Job=%s\n" msgstr "" -#: src/cats/bdb.c:220 -#, c-format -msgid "" -"Error, catalog DB control file wrong version. Wanted %d, got %d\n" -"Please reinitialize the working directory.\n" +#: src/dird/verify.c:266 +msgid "Deprecated feature ... use bootstrap.\n" msgstr "" -#: src/console/authenticate.c:117 src/wx-console/authenticate.c:121 -msgid "TLS negotiation failed\n" +#: src/dird/verify.c:279 +#, c-format +msgid "Unimplemented Verify level %d(%c)\n" msgstr "" -#: src/console/authenticate.c:129 src/gnome2-console/authenticate.c:85 -#: src/tray-monitor/authenticate.c:87 src/pyqt/pconsole.cpp:97 -#: src/pyqt/bacula-gui-gtk/pconsole.cpp:97 src/pyqt/save/pconsole.cpp:97 +#: src/dird/verify.c:331 #, c-format -msgid "Bad response to Hello command: ERR=%s\n" +msgid "Unimplemented verify level %d\n" msgstr "" -#: src/console/authenticate.c:136 src/wx-console/authenticate.c:136 -#: src/gnome2-console/authenticate.c:95 src/tray-monitor/authenticate.c:94 -#: src/pyqt/pconsole.cpp:103 src/pyqt/bacula-gui-gtk/pconsole.cpp:103 -#: src/pyqt/save/pconsole.cpp:103 -msgid "Director rejected Hello command\n" +#: src/dird/verify.c:386 +msgid "Verify OK" msgstr "" -#: src/console/authenticate.c:146 src/wx-console/authenticate.c:146 -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 http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +#: src/dird/verify.c:390 +msgid "*** Verify Error ***" msgstr "" -#: src/console/console_conf.c:123 src/wx-console/console_conf.c:128 -#: src/gnome2-console/console_conf.c:122 -#, c-format -msgid "No record for %d %s\n" +#: src/dird/verify.c:394 +msgid "Verify warnings" msgstr "" -#: src/console/console_conf.c:132 src/wx-console/console_conf.c:137 -#, c-format -msgid "Console: name=%s rcfile=%s histfile=%s\n" +#: src/dird/verify.c:397 +msgid "Verify Canceled" msgstr "" -#: src/console/console_conf.c:136 src/wx-console/console_conf.c:141 -#: src/gnome2-console/console_conf.c:131 -#, c-format -msgid "Director: name=%s address=%s DIRport=%d\n" +#: src/dird/verify.c:400 +msgid "Verify Differences" msgstr "" -#: src/console/console_conf.c:242 src/wx-console/console_conf.c:246 -#: src/gnome2-console/console_conf.c:246 src/tray-monitor/tray_conf.c:262 -#: src/filed/filed_conf.c:332 src/dird/dird_conf.c:1137 -#: src/dird/dird_conf.c:1152 +#: src/dird/verify.c:405 #, c-format -msgid "%s item is required in %s resource, but not found.\n" +msgid "Inappropriate term code: %d %c\n" msgstr "" -#: src/console/console_conf.c:304 src/wx-console/console_conf.c:308 -#: src/gnome2-console/console_conf.c:314 src/tray-monitor/tray_conf.c:341 -#: src/filed/filed_conf.c:416 src/dird/dird_conf.c:1338 +#: src/dird/verify.c:419 #, c-format -msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" +msgid "" +"Bacula %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 "" -#: src/console/console.c:102 +#: src/dird/verify.c:454 #, c-format msgid "" -"Copyright (C) 2000-2005 Kern Sibbald\n" +"Bacula %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" -"Version: " msgstr "" -#: src/console/console.c:103 +#: src/dird/verify.c:530 #, c-format msgid "" -") %s %s %s\n" -"\n" -"Usage: bconsole [-s] [-c config_file] [-d debug_level]\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" +"birdSD.\n" msgstr "" -#: src/console/console.c:802 -msgid "Too many arguments on output/tee command.\n" +#: src/filed/backup.c:155 +#, c-format +msgid " Recursion turned off. Will not descend into %s\n" msgstr "" -#: src/console/console.c:818 +#: src/filed/backup.c:162 #, c-format -msgid "Cannot open file %s for output. ERR=%s\n" +msgid " Filesystem change prohibited. Will not descend into %s\n" msgstr "" -#: src/wx-console/authenticate.c:129 -msgid "Bad response to Hello command: ERR=" +#: src/filed/backup.c:168 +#, c-format +msgid " Disallowed filesystem. Will not descend into %s\n" msgstr "" -#: src/lib/bshm.c:69 +#: src/filed/backup.c:186 src/filed/verify.c:113 #, c-format -msgid "shmget failure key = %x\n" +msgid " Could not access %s: ERR=%s\n" msgstr "" -#: src/lib/bshm.c:77 +#: src/filed/backup.c:193 src/filed/verify.c:120 #, c-format -msgid "Could not get %d bytes of shared memory: %s\n" +msgid " Could not follow link %s: ERR=%s\n" msgstr "" -#: src/lib/bshm.c:102 +#: src/filed/backup.c:200 src/filed/verify.c:127 #, c-format -msgid "Could not attach shared memory: %s\n" +msgid " Could not stat %s: ERR=%s\n" msgstr "" -#: src/lib/bshm.c:123 +#: src/filed/backup.c:207 src/filed/verify.c:133 #, c-format -msgid "Error detaching shared memory: %s\n" +msgid " Unchanged file skipped: %s\n" msgstr "" -#: src/lib/bshm.c:139 +#: src/filed/backup.c:210 #, c-format -msgid "Could not destroy shared memory: %s\n" +msgid " Archive file not saved: %s\n" msgstr "" -#: src/lib/lex.c:79 src/wx-console/console_thread.cpp:186 +#: src/filed/backup.c:214 src/filed/verify.c:147 #, c-format -msgid "Problem probably begins at line %d.\n" +msgid " Could not open directory %s: ERR=%s\n" msgstr "" -#: src/lib/lex.c:84 src/wx-console/console_thread.cpp:191 +#: src/filed/backup.c:220 #, c-format -msgid "" -"Config error: %s\n" -" : line %d, col %d of file %s\n" -"%s\n" -"%s" +msgid " Unknown file type %d; not saved: %s\n" msgstr "" -#: src/lib/lex.c:88 +#: src/filed/backup.c:240 #, c-format -msgid "Config error: %s\n" +msgid "Python reader program \"%s\" not found.\n" msgstr "" -#: src/lib/lex.c:108 -msgid "Close of NULL file\n" +#: src/filed/backup.c:269 src/filed/verify.c:214 +#, c-format +msgid " Cannot open %s: ERR=%s.\n" msgstr "" -#: src/lib/lex.c:181 -msgid "get_char: called after EOF\n" +#: src/filed/backup.c:298 src/filed/verify.c:229 +#, c-format +msgid " Cannot open resource fork for %s: ERR=%s.\n" msgstr "" -#: src/lib/lex.c:220 +#: src/filed/backup.c:349 #, c-format -msgid "Config token too long, file: %s, line %d, begins at line %d\n" +msgid "Unknown signature type %i.\n" msgstr "" -#: src/lib/lex.c:244 -msgid "none" -msgstr "" - -#: src/lib/lex.c:245 -msgid "comment" +#: src/filed/backup.c:414 src/filed/backup.c:499 src/filed/backup.c:525 +#: src/filed/backup.c:557 src/filed/backup.c:570 src/filed/backup.c:578 +#: src/filed/backup.c:619 src/filed/backup.c:653 +#, c-format +msgid "Network send error to SD. ERR=%s\n" msgstr "" -#: src/lib/lex.c:246 -msgid "number" +#: src/filed/backup.c:479 +#, c-format +msgid "Compression error: %d\n" msgstr "" -#: src/lib/lex.c:247 -msgid "ip_addr" +#: src/filed/backup.c:516 +#, c-format +msgid "Read error on file %s. ERR=%s\n" msgstr "" -#: src/lib/lex.c:248 -msgid "identifier" +#: src/filed/backup.c:519 +msgid "Too many errors.\n" msgstr "" -#: src/lib/lex.c:249 -msgid "string" +#: src/filed/backup.c:548 +#, c-format +msgid "Error reading ACL of %s\n" msgstr "" -#: src/lib/lex.c:250 -msgid "quoted_string" +#: src/filed/filed.c:62 +#, c-format +msgid "" +"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" +" -c use as configuration file\n" +" -dnn set debug level to nn\n" +" -f run in foreground (for debugging)\n" +" -g groupid\n" +" -i inetd request\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" msgstr "" -#: src/lib/lex.c:286 +#: src/filed/filed.c:282 #, c-format -msgid "expected a positive integer number, got: %s" +msgid "" +"No File daemon resource defined in %s\n" +"Without that I don't know who I am :-(\n" msgstr "" -#: src/lib/lex.c:292 +#: src/filed/filed.c:287 #, c-format -msgid "expected a postive integer number, got: %s" +msgid "Only one Client resource permitted in %s\n" msgstr "" -#: src/lib/lex.c:504 +#: src/filed/filed.c:310 #, c-format -msgid "Cannot open included config file %s: %s\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon in %s.\n" msgstr "" -#: src/lib/lex.c:539 +#: src/filed/filed.c:339 #, c-format -msgid "expected an integer or a range, got %s: %s" +msgid "No Director resource defined in %s\n" msgstr "" -#: src/lib/lex.c:553 src/lib/lex.c:561 src/lib/lex.c:572 src/lib/lex.c:580 +#: src/filed/job.c:324 #, c-format -msgid "expected an integer number, got %s: %s" +msgid "2901 Job %s not found.\n" msgstr "" -#: src/lib/lex.c:590 +#: src/filed/job.c:340 #, c-format -msgid "expected a name, got %s: %s" +msgid "2001 Job %s marked to be canceled.\n" msgstr "" -#: src/lib/lex.c:594 -#, c-format -msgid "name %s length %d too long, max is %d\n" +#: src/filed/job.c:343 +msgid "2902 Error scanning cancel command.\n" msgstr "" -#: src/lib/lex.c:602 +#: src/filed/job.c:362 #, c-format -msgid "expected a string, got %s: %s" +msgid "2991 Bad setdebug command: %s\n" msgstr "" -#: src/lib/tls.c:81 +#: src/filed/job.c:378 #, c-format -msgid "" -"Error with certificate at depth: %d, issuer = %s, subject = %s, ERR=%d:%s\n" +msgid "Bad estimate command: %s" msgstr "" -#: src/lib/tls.c:118 -msgid "Error initializing SSL context" +#: src/filed/job.c:379 +msgid "2992 Bad estimate command.\n" msgstr "" -#: src/lib/tls.c:139 -msgid "Error loading certificate verification stores" +#: src/filed/job.c:402 +#, c-format +msgid "Bad Job Command: %s" msgstr "" -#: src/lib/tls.c:144 -msgid "" -"Either a certificate file or a directory must be specified as a verification " -"store\n" +#: src/filed/job.c:422 +#, c-format +msgid "Bad RunBeforeJob command: %s\n" msgstr "" -#: src/lib/tls.c:155 -msgid "Error loading certificate file" +#: src/filed/job.c:423 src/filed/job.c:436 +msgid "2905 Bad RunBeforeJob command.\n" msgstr "" -#: src/lib/tls.c:163 -msgid "Error loading private key" +#: src/filed/job.c:449 +#, c-format +msgid "Bad RunAfter command: %s\n" msgstr "" -#: src/lib/tls.c:171 -msgid "Unable to open DH parameters file" +#: src/filed/job.c:450 +msgid "2905 Bad RunAfterJob command.\n" msgstr "" -#: src/lib/tls.c:177 -msgid "Unable to load DH parameters from specified file" +#: src/filed/job.c:476 +#, c-format +msgid "%s could not execute. ERR=%s\n" msgstr "" -#: src/lib/tls.c:181 -msgid "Failed to set TLS Diffie-Hellman parameters" +#: src/filed/job.c:485 +#, c-format +msgid "%s: %s\n" msgstr "" -#: src/lib/tls.c:190 -msgid "Error setting cipher list, no valid ciphers available\n" +#: src/filed/job.c:490 +#, c-format +msgid "%s returned non-zero status=%d. ERR=%s\n" msgstr "" -#: src/lib/tls.c:238 -msgid "Peer failed to present a TLS certificate\n" +#: src/filed/job.c:575 +#, c-format +msgid "Error running program: %s. RtnStat=%d ERR=%s\n" msgstr "" -#: src/lib/tls.c:280 +#: src/filed/job.c:585 #, c-format -msgid "Peer %s failed to present a TLS certificate\n" +msgid "Cannot open FileSet input file: %s. ERR=%s\n" msgstr "" -#: src/lib/tls.c:383 -msgid "Error creating file descriptor-based BIO" +#: src/filed/job.c:679 +#, c-format +msgid "REGEX %s compile error. ERR=%s\n" msgstr "" -#: src/lib/tls.c:394 -msgid "Error creating new SSL object" +#: src/filed/job.c:733 +#, c-format +msgid "Invalid FileSet command: %s\n" msgstr "" -#: src/lib/tls.c:458 src/lib/tls.c:481 -msgid "Connect failure" +#: src/filed/job.c:902 src/findlib/match.c:184 +#, c-format +msgid "Unknown include/exclude option: %c\n" msgstr "" -#: src/lib/tls.c:558 src/lib/tls.c:562 -msgid "TLS shutdown failure." +#: src/filed/job.c:962 src/stored/fd_cmds.c:329 +#, c-format +msgid "Could not create bootstrap file %s: ERR=%s\n" msgstr "" -#: src/lib/tls.c:611 src/lib/tls.c:631 -msgid "TLS read/write failure." +#: src/filed/job.c:1061 +#, c-format +msgid "DIR and FD clocks differ by %d seconds, FD automatically adjusting.\n" msgstr "" -#: src/lib/parse_conf.c:160 -msgid "***UNKNOWN***" +#: src/filed/job.c:1069 +#, c-format +msgid "Unknown backup level: %s\n" msgstr "" -#: src/lib/parse_conf.c:179 +#: src/filed/job.c:1081 #, c-format -msgid "Unable to initialize resource lock. ERR=%s\n" +msgid "Bad level command: %s\n" msgstr "" -#: src/lib/parse_conf.c:213 src/tray-monitor/tray_conf.c:268 -#: src/dird/dird_conf.c:1143 +#: src/filed/job.c:1102 #, c-format -msgid "Too many items in %s resource\n" +msgid "Bad session command: %s" msgstr "" -#: src/lib/parse_conf.c:264 src/lib/parse_conf.c:283 +#: src/filed/job.c:1123 #, c-format -msgid "expected an =, got: %s" +msgid "Bad storage command: %s" msgstr "" -#: src/lib/parse_conf.c:291 +#: src/filed/job.c:1132 #, c-format -msgid "Unknown item code: %d\n" +msgid "Failed to connect to Storage daemon: %s:%d\n" msgstr "" -#: src/lib/parse_conf.c:331 -#, c-format -msgid "message type: %s not found" +#: src/filed/job.c:1144 +msgid "Failed to authenticate Storage daemon.\n" msgstr "" -#: src/lib/parse_conf.c:368 -#, c-format -msgid "Attempt to redefine name \"%s\" to \"%s\"." +#: src/filed/job.c:1170 +msgid "Cannot contact Storage daemon\n" msgstr "" -#: src/lib/parse_conf.c:459 +#: src/filed/job.c:1188 #, c-format -msgid "Could not find config Resource %s referenced on line %d : %s\n" +msgid "Bad response to append open: %s\n" +msgstr "" + +#: src/filed/job.c:1193 +msgid "Bad response from stored to open command\n" msgstr "" -#: src/lib/parse_conf.c:463 +#: src/filed/job.c:1222 #, c-format -msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" +msgid "Generate VSS snapshots. Driver=\"%s\", Drive(s)=\"%s\"\n" msgstr "" -#: src/lib/parse_conf.c:498 +#: src/filed/job.c:1225 #, c-format -msgid "Too many %s directives. Max. is %d. line %d: %s\n" +msgid "Generate VSS snapshots failed. ERR=%s\n" msgstr "" -#: src/lib/parse_conf.c:508 +#: src/filed/job.c:1232 #, c-format -msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" +msgid "Generate VSS snapshot of drive \"%c:\\\" failed\n" msgstr "" -#: src/lib/parse_conf.c:570 +#: src/filed/job.c:1241 #, c-format -msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" +msgid "VSS Writer: %s\n" +msgstr "" + +#: src/filed/job.c:1245 +msgid "No drive letters found for generating VSS snapshots.\n" +msgstr "" + +#: src/filed/job.c:1248 +msgid "VSS was not initialized properly. VSS support is disabled.\n" msgstr "" -#: src/lib/parse_conf.c:634 +#: src/filed/job.c:1297 +msgid "Append Close with SD failed.\n" +msgstr "" + +#: src/filed/job.c:1301 #, c-format -msgid "expected a size number, got: %s" +msgid "Bad status %d returned from Storage Daemon.\n" msgstr "" -#: src/lib/parse_conf.c:639 +#: src/filed/job.c:1336 #, c-format -msgid "expected a size, got: %s" +msgid "2994 Bad verify command: %s\n" msgstr "" -#: src/lib/parse_conf.c:676 src/lib/parse_conf.c:681 +#: src/filed/job.c:1351 src/filed/job.c:1390 #, c-format -msgid "expected a time period, got: %s" +msgid "2994 Bad verify level: %s\n" msgstr "" -#: src/lib/parse_conf.c:700 src/lib/parse_conf.c:715 +#: src/filed/job.c:1430 #, c-format -msgid "Expect %s, got: %s" +msgid "Bad replace command. CMD=%s\n" +msgstr "" + +#: src/filed/job.c:1507 +msgid "Improper calling sequence.\n" msgstr "" -#: src/lib/parse_conf.c:740 +#: src/filed/job.c:1527 #, c-format -msgid "Expected a Tape Label keyword, got: %s" +msgid "Bad response to SD read open: %s\n" +msgstr "" + +#: src/filed/job.c:1532 +msgid "Bad response from stored to read open command\n" msgstr "" -#: src/lib/parse_conf.c:789 +#: src/filed/job.c:1598 #, c-format -msgid "Cannot open config file \"%s\": %s\n" +msgid "Comm error with SD. bad response to %s. ERR=%s\n" msgstr "" -#: src/lib/parse_conf.c:802 +#: src/filed/job.c:1601 #, c-format -msgid "Expected a Resource name identifier, got: %s" +msgid "Bad response to %s command. Wanted %s, got %s\n" msgstr "" -#: src/lib/parse_conf.c:814 +#: src/filed/pythonfd.c:150 src/stored/pythonsd.c:154 #, c-format -msgid "expected resource name, got: %s" +msgid "Cannot delete attribute %s" msgstr "" -#: src/lib/parse_conf.c:825 +#: src/filed/pythonfd.c:168 src/filed/pythonfd.c:184 src/stored/pythonsd.c:187 #, c-format -msgid "not in resource definition: %s" +msgid "Cannot find attribute %s" msgstr "" -#: src/lib/parse_conf.c:836 src/dird/inc_conf.c:320 src/dird/inc_conf.c:585 +#: src/filed/restore.c:55 #, c-format -msgid "expected an equals, got: %s" +msgid "Size of data or stream of %s not correct. Original %s, restored %s.\n" msgstr "" -#: src/lib/parse_conf.c:850 +#: src/filed/restore.c:165 src/filed/verify_vol.c:90 #, c-format -msgid "" -"Keyword \"%s\" not permitted in this resource.\n" -"Perhaps you left the trailing brace off of the previous resource." +msgid "Record header scan error: %s\n" msgstr "" -#: src/lib/parse_conf.c:867 +#: src/filed/restore.c:172 src/filed/verify_vol.c:99 #, c-format -msgid "unexpected token %d %s in resource definition" +msgid "Data record error. ERR=%s\n" msgstr "" -#: src/lib/parse_conf.c:873 +#: src/filed/restore.c:176 src/filed/verify_vol.c:103 #, c-format -msgid "Unknown parser state %d\n" +msgid "Actual data size %d not same as header %d\n" msgstr "" -#: src/lib/parse_conf.c:878 -msgid "End of conf file reached with unclosed resource." +#: src/filed/restore.c:201 src/filed/restore.c:383 +msgid "Logic error: output file should be open\n" msgstr "" -#: src/lib/mem_pool.c:95 -#, c-format -msgid "MemPool index %d larger than max %d\n" +#: src/filed/restore.c:207 src/filed/restore.c:388 +msgid "Logic error: output file should not be open\n" msgstr "" -#: src/lib/mem_pool.c:113 src/lib/mem_pool.c:133 src/lib/mem_pool.c:168 -#: src/lib/mem_pool.c:239 src/lib/mem_pool.c:259 src/lib/mem_pool.c:297 -#: src/lib/mem_pool.c:550 +#: src/filed/restore.c:218 src/filed/verify_vol.c:142 +#: src/stored/bextract.c:289 src/stored/bls.c:371 src/stored/bscan.c:651 #, c-format -msgid "Out of memory requesting %d bytes\n" +msgid "Record header file index %ld not equal record index %ld\n" msgstr "" -#: src/lib/watchdog.c:69 +#: src/filed/restore.c:231 src/stored/bextract.c:298 #, c-format -msgid "Unable to initialize watchdog lock. ERR=%s\n" +msgid "%s stream not supported on this Client.\n" msgstr "" -#: src/lib/watchdog.c:165 -msgid "BUG! register_watchdog called before start_watchdog\n" +#: src/filed/restore.c:308 +#, c-format +msgid " Cannot open resource fork for %s.\n" msgstr "" -#: src/lib/watchdog.c:168 +#: src/filed/restore.c:331 #, c-format -msgid "BUG! Watchdog %p has NULL callback\n" +msgid " Invalid length of Finder Info (got %d, not 32)\n" msgstr "" -#: src/lib/watchdog.c:171 +#: src/filed/restore.c:335 #, c-format -msgid "BUG! Watchdog %p has zero interval\n" +msgid " Could not set Finder Info on %s\n" msgstr "" -#: src/lib/watchdog.c:191 -msgid "BUG! unregister_watchdog_unlocked called before start_watchdog\n" +#: src/filed/restore.c:347 +#, c-format +msgid "Can't restore ACL of %s\n" msgstr "" -#: src/lib/watchdog.c:309 +#: src/filed/restore.c:359 #, c-format -msgid "rwl_writelock failure. ERR=%s\n" +msgid "Can't restore default ACL of %s\n" msgstr "" -#: src/lib/watchdog.c:323 +#: src/filed/restore.c:391 src/stored/bextract.c:455 #, c-format -msgid "rwl_writeunlock failure. ERR=%s\n" +msgid "Unknown stream=%d ignored. This shouldn't happen!\n" msgstr "" -#: src/lib/regex.c:1040 -msgid "Success" +#: src/filed/restore.c:428 +#, c-format +msgid "" +"%d non-supported data streams and %d non-supported attrib streams ignored.\n" msgstr "" -#: src/lib/regex.c:1043 -msgid "No match" +#: src/filed/restore.c:432 +#, c-format +msgid "%d non-supported resource fork streams ignored.\n" msgstr "" -#: src/lib/regex.c:1046 -msgid "Invalid regular expression" +#: src/filed/restore.c:435 +#, c-format +msgid "%d non-supported Finder Info streams ignored.\n" msgstr "" -#: src/lib/regex.c:1049 -msgid "Invalid collation character" +#: src/filed/restore.c:438 +#, c-format +msgid "%d non-supported acl streams ignored.\n" msgstr "" -#: src/lib/regex.c:1052 -msgid "Invalid character class name" +#: src/filed/restore.c:450 +msgid "None" msgstr "" -#: src/lib/regex.c:1055 -msgid "Trailing backslash" +#: src/filed/restore.c:454 +msgid "Zlib errno" msgstr "" -#: src/lib/regex.c:1058 -msgid "Invalid back reference" +#: src/filed/restore.c:456 +msgid "Zlib stream error" msgstr "" -#: src/lib/regex.c:1061 -msgid "Unmatched [ or [^" +#: src/filed/restore.c:458 +msgid "Zlib data error" msgstr "" -#: src/lib/regex.c:1064 -msgid "Unmatched ( or \\(" +#: src/filed/restore.c:460 +msgid "Zlib memory error" msgstr "" -#: src/lib/regex.c:1067 -msgid "Unmatched \\{" +#: src/filed/restore.c:462 +msgid "Zlib buffer error" msgstr "" -#: src/lib/regex.c:1070 -msgid "Invalid content of \\{\\}" +#: src/filed/restore.c:464 +msgid "Zlib version error" msgstr "" -#: src/lib/regex.c:1073 -msgid "Invalid range end" +#: src/filed/restore.c:466 src/lib/util.c:546 src/lib/util.c:556 +#: src/lib/util.c:564 src/lib/util.c:571 src/lib/util.c:578 src/lib/util.c:592 +#: src/lib/util.c:602 src/lib/util.c:609 src/lib/util.c:620 +msgid "*none*" msgstr "" -#: src/lib/regex.c:1076 -msgid "Memory exhausted" +#: src/filed/restore.c:498 src/stored/bextract.c:387 +#, c-format +msgid "Seek to %s error on %s: ERR=%s\n" msgstr "" -#: src/lib/regex.c:1079 -msgid "Invalid preceding regular expression" +#: src/filed/restore.c:522 +#, c-format +msgid "Uncompression error on file %s. ERR=%s\n" msgstr "" -#: src/lib/regex.c:1082 -msgid "Premature end of regular expression" +#: src/filed/restore.c:530 src/stored/bextract.c:421 +msgid "GZIP data stream found, but GZIP not configured!\n" msgstr "" -#: src/lib/regex.c:1085 -msgid "Regular expression too big" +#: src/filed/restore.c:539 src/stored/bextract.c:359 src/stored/bextract.c:409 +#, c-format +msgid "Write error on %s: %s\n" msgstr "" -#: src/lib/regex.c:1088 -msgid "Unmatched ) or \\)" +#: src/filed/status.c:67 +#, c-format +msgid "%s Version: %s (%s) %s %s %s %s\n" msgstr "" -#: src/lib/regex.c:5874 -msgid "No previous regular expression" +#: src/filed/status.c:71 +#, c-format +msgid "Daemon started %s, %d Job%s run since started.\n" msgstr "" -#: src/lib/util.c:181 -msgid "Running" +#: src/filed/status.c:127 +#, c-format +msgid " Sizeof: off_t=%d size_t=%d debug=%d trace=%d\n" msgstr "" -#: src/lib/util.c:184 -msgid "Blocked" +#: src/filed/status.c:138 +msgid "Running Jobs:\n" msgstr "" -#: src/lib/util.c:194 -msgid "Non-fatal error" +#: src/filed/status.c:149 +#, c-format +msgid "Director connected at: %s\n" msgstr "" -#: src/lib/util.c:197 src/lib/util.c:264 -msgid "Canceled" +#: src/filed/status.c:151 +#, c-format +msgid "JobId %d Job %s is running.\n" msgstr "" -#: src/lib/util.c:200 -msgid "Verify differences" +#: src/filed/status.c:154 +#, c-format +msgid " %s%s Job started: %s\n" msgstr "" -#: src/lib/util.c:203 -msgid "Waiting on FD" +#: src/filed/status.c:166 src/stored/status.c:323 +#, c-format +msgid " Files=%s Bytes=%s Bytes/sec=%s\n" msgstr "" -#: src/lib/util.c:206 -msgid "Wait on SD" +#: src/filed/status.c:171 +#, c-format +msgid " Files Examined=%s\n" msgstr "" -#: src/lib/util.c:209 -msgid "Wait for new Volume" +#: src/filed/status.c:176 +#, c-format +msgid " Processing file: %s\n" msgstr "" -#: src/lib/util.c:212 -msgid "Waiting for mount" +#: src/filed/status.c:187 +msgid " SDSocket closed.\n" msgstr "" -#: src/lib/util.c:215 -msgid "Waiting for Storage resource" +#: src/filed/status.c:217 +msgid "Terminated Jobs:\n" msgstr "" -#: src/lib/util.c:218 -msgid "Waiting for Job resource" +#: src/filed/status.c:219 +msgid " JobId Level Files Bytes Status Finished Name \n" msgstr "" -#: src/lib/util.c:221 -msgid "Waiting for Client resource" +#: src/filed/status.c:323 src/filed/status.c:347 src/stored/status.c:513 +#: src/stored/status.c:536 +#, c-format +msgid "Bad .status command: %s\n" msgstr "" -#: src/lib/util.c:224 -msgid "Waiting on Max Jobs" +#: src/filed/status.c:324 +msgid "2900 Bad .status command, missing argument.\n" msgstr "" -#: src/lib/util.c:227 -msgid "Waiting for Start Time" +#: src/filed/status.c:348 +msgid "2900 Bad .status command, wrong argument.\n" msgstr "" -#: src/lib/util.c:230 -msgid "Waiting on Priority" +#: src/filed/status.c:385 src/stored/status.c:468 +msgid "Init Catalog" msgstr "" -#: src/lib/util.c:237 -#, c-format -msgid "Unknown Job termination status=%d" +#: src/filed/status.c:388 src/stored/status.c:471 +msgid "Volume to Catalog" msgstr "" -#: src/lib/util.c:261 -msgid "Fatal Error" +#: src/filed/status.c:391 src/stored/status.c:474 +msgid "Disk to Catalog" msgstr "" -#: src/lib/util.c:267 -msgid "Differences" +#: src/filed/status.c:394 src/stored/status.c:477 +msgid "Data" msgstr "" -#: src/lib/util.c:270 -msgid "Unknown term code" +#: src/filed/status.c:400 src/lib/util.c:351 src/stored/status.c:483 +msgid "Unknown Job Level" msgstr "" -#: src/lib/util.c:286 src/dird/ua_run.c:561 -msgid "Backup" +#: src/filed/status.c:451 +msgid "Bacula Idle" msgstr "" -#: src/lib/util.c:289 src/dird/ua_run.c:594 -msgid "Verify" +#: src/filed/status.c:462 +msgid "Bacula Running" msgstr "" -#: src/lib/util.c:292 src/gnome2-console/interface.c:261 -#: src/wx-console/wxbrestorepanel.cpp:384 -#: src/wx-console/wxbrestorepanel.cpp:1949 -msgid "Restore" +#: src/filed/status.c:476 +msgid "Last Job Canceled" msgstr "" -#: src/lib/util.c:295 src/dird/ua_run.c:540 -msgid "Admin" +#: src/filed/status.c:480 +msgid "Last Job Failed" msgstr "" -#: src/lib/util.c:298 -msgid "Migrate" +#: src/filed/status.c:484 +msgid "Last Job had Warnings" msgstr "" -#: src/lib/util.c:301 -msgid "Copy" +#: src/filed/verify.c:45 +#, c-format +msgid "Cannot malloc %d network read buffer\n" msgstr "" -#: src/lib/util.c:304 -msgid "Unknown Type" +#: src/filed/verify.c:136 +#, c-format +msgid " Archive file skipped: %s\n" msgstr "" -#: src/lib/util.c:336 -msgid "Verify Init Catalog" +#: src/filed/verify.c:139 +#, c-format +msgid " Recursion turned off. Directory skipped: %s\n" msgstr "" -#: src/lib/util.c:339 src/dird/ua_run.c:760 -msgid "Verify Volume to Catalog" +#: src/filed/verify.c:142 +#, c-format +msgid " File system change prohibited. Directory skipped: %s\n" msgstr "" -#: src/lib/util.c:342 src/dird/ua_run.c:761 -msgid "Verify Disk to Catalog" +#: src/filed/verify.c:152 +#, c-format +msgid " Unknown file type %d: %s\n" msgstr "" -#: src/lib/util.c:345 -msgid "Verify Data" +#: src/filed/verify.c:195 src/filed/verify_vol.c:200 +#, c-format +msgid "Network error in send to Director: ERR=%s\n" msgstr "" -#: src/lib/util.c:546 src/lib/util.c:556 src/lib/util.c:564 src/lib/util.c:571 -#: src/lib/util.c:578 src/lib/util.c:592 src/lib/util.c:602 src/lib/util.c:609 -#: src/lib/util.c:620 src/filed/restore.c:629 -msgid "*none*" +#: src/filed/verify.c:284 +#, c-format +msgid "Error reading file %s: ERR=%s\n" msgstr "" -#: src/lib/util.c:647 -msgid "Working directory not defined. Cannot continue.\n" +#: src/filed/verify_vol.c:56 +msgid "Storage command not issued before Verify.\n" msgstr "" -#: src/lib/util.c:650 +#: src/filed/verify_vol.c:136 #, c-format -msgid "Working Directory: \"%s\" not found. Cannot continue.\n" +msgid "Error scanning record header: %s\n" msgstr "" -#: src/lib/util.c:654 +#: src/findlib/attribs.c:335 #, c-format -msgid "Working Directory: \"%s\" is not a directory. Cannot continue.\n" +msgid "File size of restored file %s not correct. Original %s, restored %s.\n" msgstr "" -#: src/lib/bpipe.c:282 src/lib/bpipe.c:361 -msgid "Program killed by Bacula watchdog (timeout)\n" +#: src/findlib/attribs.c:353 src/findlib/attribs.c:360 +#, c-format +msgid "Unable to set file owner %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:50 +#: src/findlib/attribs.c:366 #, c-format -msgid "Only ipv4 and ipv6 are supported (%d)\n" +msgid "Unable to set file modes %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:54 +#: src/findlib/attribs.c:376 #, c-format -msgid "Only ipv4 is supported (%d)\n" +msgid "Unable to set file times %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:163 +#: src/findlib/attribs.c:390 #, c-format -msgid "It was tried to assign a ipv6 address to a ipv4(%d)\n" +msgid "Unable to set file flags %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:172 +#: src/findlib/attribs.c:635 #, c-format -msgid "It was tried to assign a ipv4 address to a ipv6(%d)\n" +msgid "Error in %s file %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:251 +#: src/findlib/attribs.c:652 #, c-format -msgid "Can't add default address (%s)\n" +msgid "Error in %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:281 -msgid "the old style addresses cannot be mixed with new style" +#: src/findlib/bfile.c:67 +msgid "GZIP data" msgstr "" -#: src/lib/address_conf.c:304 -#, c-format -msgid "can't resolve service(%s)" +#: src/findlib/bfile.c:69 +msgid "GZIP sparse data" msgstr "" -#: src/lib/address_conf.c:314 -#, c-format -msgid "can't resolve hostname(%s) %s" +#: src/findlib/bfile.c:71 +msgid "Win32 data" msgstr "" -#: src/lib/address_conf.c:403 -#, c-format -msgid "Expected a block begin { , got: %s" +#: src/findlib/bfile.c:73 +msgid "Win32 GZIP data" msgstr "" -#: src/lib/address_conf.c:408 -msgid "Empty addr block is not allowed" +#: src/findlib/bfile.c:75 +msgid "File attributes" msgstr "" -#: src/lib/address_conf.c:412 -#, c-format -msgid "Expected a string, got: %s" +#: src/findlib/bfile.c:77 +msgid "File data" msgstr "" -#: src/lib/address_conf.c:421 -#, c-format -msgid "Expected a string [ip|ipv4|ipv6], got: %s" +#: src/findlib/bfile.c:79 +msgid "MD5 signature" msgstr "" -#: src/lib/address_conf.c:425 -#, c-format -msgid "Expected a string [ip|ipv4], got: %s" +#: src/findlib/bfile.c:81 +msgid "Extended attributes" msgstr "" -#: src/lib/address_conf.c:430 src/lib/address_conf.c:460 -#, c-format -msgid "Expected a equal =, got: %s" +#: src/findlib/bfile.c:83 +msgid "Sparse data" msgstr "" -#: src/lib/address_conf.c:434 -#, c-format -msgid "Expected a block beginn { , got: %s" +#: src/findlib/bfile.c:85 +msgid "Program names" msgstr "" -#: src/lib/address_conf.c:441 src/lib/address_conf.c:456 -#, c-format -msgid "Expected a identifier [addr|port], got: %s" +#: src/findlib/bfile.c:87 +msgid "Program data" msgstr "" -#: src/lib/address_conf.c:446 -msgid "Only one port per address block" +#: src/findlib/bfile.c:89 +msgid "SHA1 signature" msgstr "" -#: src/lib/address_conf.c:452 -msgid "Only one addr per address block" +#: src/findlib/bfile.c:91 +msgid "HFS+ resource fork" msgstr "" -#: src/lib/address_conf.c:468 -#, c-format -msgid "Expected a number or a string, got: %s" +#: src/findlib/bfile.c:93 +msgid "HFS+ Finder Info" msgstr "" -#: src/lib/address_conf.c:474 +#: src/findlib/create_file.c:86 #, c-format -msgid "Expected an IP number or a hostname, got: %s" +msgid "File skipped. Not newer: %s\n" msgstr "" -#: src/lib/address_conf.c:480 -msgid "State machine missmatch" +#: src/findlib/create_file.c:93 +#, c-format +msgid "File skipped. Not older: %s\n" msgstr "" -#: src/lib/address_conf.c:486 src/lib/address_conf.c:499 +#: src/findlib/create_file.c:99 #, c-format -msgid "Expected a end of block }, got: %s" +msgid "File skipped. Already exists: %s\n" msgstr "" -#: src/lib/address_conf.c:492 +#: src/findlib/create_file.c:124 #, c-format -msgid "Can't add hostname(%s) and port(%s) to addrlist (%s)" +msgid "File %s already exists and could not be replaced. ERR=%s.\n" msgstr "" -#: src/lib/address_conf.c:508 +#: src/findlib/create_file.c:176 src/findlib/create_file.c:277 +#: src/findlib/create_file.c:328 #, c-format -msgid "Expected a hostname or IP nummer, got: %s" +msgid "bpkt already open fid=%d\n" msgstr "" -#: src/lib/address_conf.c:513 src/lib/address_conf.c:527 -#, c-format -msgid "can't add port (%s) to (%s)" +#: src/findlib/create_file.c:198 +msgid "Could not save_dirn" msgstr "" -#: src/lib/address_conf.c:522 +#: src/findlib/create_file.c:207 src/findlib/create_file.c:220 #, c-format -msgid "Expected a port number or string, got: %s" -msgstr "" - -#: src/lib/jcr.c:279 -msgid "NULL jcr.\n" +msgid "Could not chdir to %s: ERR=%s\n" msgstr "" -#: src/lib/jcr.c:400 +#: src/findlib/create_file.c:240 #, c-format -msgid "JCR use_count=%d JobId=%d\n" +msgid "Could not create %s: ERR=%s\n" msgstr "" -#: src/lib/jcr.c:682 +#: src/findlib/create_file.c:253 #, c-format -msgid "" -"Watchdog sending kill after %d secs to thread stalled reading Storage " -"daemon.\n" +msgid "Cannot make fifo %s: ERR=%s\n" msgstr "" -#: src/lib/jcr.c:694 +#: src/findlib/create_file.c:261 #, c-format -msgid "" -"Watchdog sending kill after %d secs to thread stalled reading File daemon.\n" +msgid "Cannot make node %s: ERR=%s\n" msgstr "" -#: src/lib/jcr.c:706 +#: src/findlib/create_file.c:297 #, c-format -msgid "" -"Watchdog sending kill after %d secs to thread stalled reading Director.\n" +msgid "Could not symlink %s -> %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:253 src/lib/message.c:263 +#: src/findlib/create_file.c:307 #, c-format -msgid "Could not open console message file %s: ERR=%s\n" +msgid "Could not hard link %s -> %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:268 +#: src/findlib/create_file.c:358 #, c-format -msgid "Could not get con mutex: ERR=%s\n" +msgid "Original file %s not saved: type=%d\n" msgstr "" -#: src/lib/message.c:372 +#: src/findlib/create_file.c:361 #, c-format -msgid "open mail pipe %s failed: ERR=%s\n" +msgid "Unknown file type %d; not restored: %s\n" msgstr "" -#: src/lib/message.c:378 -msgid "Bacula Message" +#: src/findlib/create_file.c:392 +#, c-format +msgid "Zero length filename: %s\n" msgstr "" -#: src/lib/message.c:431 -msgid "open mail pipe failed.\n" +#: src/findlib/enable_priv.c:85 +msgid "AdjustTokenPrivileges set " msgstr "" -#: src/lib/message.c:443 +#: src/findlib/find_one.c:168 #, c-format -msgid "close error: ERR=%s\n" +msgid "Top level directory \"%s\" has an unlisted fstype\n" msgstr "" -#: src/lib/message.c:454 +#: src/findlib/makepath.c:117 #, c-format -msgid "Mail prog: %s" +msgid "Cannot create directory %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:463 +#: src/findlib/makepath.c:121 src/findlib/makepath.c:378 #, c-format -msgid "" -"Mail program terminated in error.\n" -"CMD=%s\n" -"ERR=%s\n" +msgid "%s exists but is not a directory\n" msgstr "" -#: src/lib/message.c:650 +#: src/findlib/makepath.c:276 src/findlib/makepath.c:337 +#: src/findlib/makepath.c:397 #, c-format -msgid "" -"Operator mail program terminated in error.\n" -"CMD=%s\n" -"ERR=%s\n" +msgid "Cannot change owner and/or group of %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:667 src/lib/message.c:689 src/lib/message.c:705 +#: src/findlib/makepath.c:297 #, c-format -msgid "fopen %s failed: ERR=%s\n" +msgid "Cannot chdir to directory, %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:933 +#: src/findlib/makepath.c:352 src/findlib/makepath.c:368 +#: src/findlib/makepath.c:402 #, c-format -msgid "%s: ABORTING due to ERROR in %s:%d\n" +msgid "Cannot change permissions of %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:937 +#: src/findlib/save-cwd.c:48 #, c-format -msgid "%s: ERROR TERMINATION at %s:%d\n" +msgid "Cannot open current directory: %s\n" msgstr "" -#: src/lib/message.c:942 +#: src/findlib/save-cwd.c:62 #, c-format -msgid "%s: Fatal Error because: " +msgid "Current directory: %s\n" msgstr "" -#: src/lib/message.c:944 +#: src/findlib/save-cwd.c:84 #, c-format -msgid "%s: Fatal Error at %s:%d because:\n" +msgid "Cannot get current directory: %s\n" msgstr "" -#: src/lib/message.c:948 +#: src/findlib/save-cwd.c:105 #, c-format -msgid "%s: ERROR: " +msgid "Cannot return to %s from %s: %s\n" msgstr "" -#: src/lib/message.c:950 +#: src/findlib/save-cwd.c:109 #, c-format -msgid "%s: ERROR in %s:%d " +msgid "Cannot return to saved working directory from %s: %s\n" msgstr "" -#: src/lib/message.c:953 +#: src/findlib/save-cwd.c:115 #, c-format -msgid "%s: Warning: " +msgid "Cannot return to %s: %s\n" msgstr "" -#: src/lib/message.c:956 +#: src/findlib/save-cwd.c:119 #, c-format -msgid "%s: Security violation: " +msgid "Cannot return to saved working directory: %s\n" msgstr "" -#: src/lib/message.c:1032 +#: src/gnome2-console/authenticate.c:74 #, c-format -msgid "%s ABORTING due to ERROR\n" +msgid "%s: Director authorization problem.\n" msgstr "" -#: src/lib/message.c:1035 -#, c-format -msgid "%s ERROR TERMINATION\n" +#: src/gnome2-console/authenticate.c:75 +msgid "Director authorization problem.\n" msgstr "" -#: src/lib/message.c:1038 -#, c-format -msgid "%s: %s Fatal error: " +#: src/gnome2-console/authenticate.c:77 +msgid "" +"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " +"help.\n" msgstr "" -#: src/lib/message.c:1044 +#: src/gnome2-console/authenticate.c:87 #, c-format -msgid "%s: %s Error: " +msgid "%s: Bad response to Hello command: ERR=%s\n" msgstr "" -#: src/lib/message.c:1050 -#, c-format -msgid "%s: %s Warning: " +#: src/gnome2-console/authenticate.c:89 +msgid "The Director is probably not running.\n" msgstr "" -#: src/lib/message.c:1053 +#: src/gnome2-console/console.c:88 #, c-format -msgid "%s: %s Security violation: " +msgid "" +"Copyright (C) 2002-2005 Kern Sibbald\n" +"\n" +"Version: %s (%s) %s %s %s\n" +"\n" +"Usage: gnome-console [-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 "" -#: src/lib/edit.c:433 +#: src/gnome2-console/console.c:219 #, c-format -msgid "Illegal character \"%c\" in name.\n" -msgstr "" - -#: src/lib/edit.c:440 -msgid "Name too long.\n" +msgid "Pthread cond init error = %s\n" msgstr "" -#: src/lib/edit.c:446 src/dird/ua_cmds.c:278 src/dird/ua_label.c:611 -msgid "Volume name must be at least one character long.\n" +#: src/gnome2-console/console.c:357 +msgid " Not Connected" msgstr "" -#: src/lib/bnet_server.c:96 +#: src/gnome2-console/console.c:478 #, c-format -msgid "Cannot open stream socket. ERR=%s. Current %s All %s\n" +msgid " Connecting to Director %s:%d" msgstr "" -#: src/lib/bnet_server.c:109 src/lib/bnet_server.c:258 +#: src/gnome2-console/console.c:479 #, c-format -msgid "Cannot set SO_REUSEADDR on socket: %s\n" +msgid "" +"Connecting to Director %s:%d\n" +"\n" msgstr "" -#: src/lib/bnet_server.c:118 +#: src/gnome2-console/console.c:494 src/wx-console/console_thread.cpp:360 #, c-format -msgid "Cannot bind port %d: ERR=%s: Retrying ...\n" +msgid "Passphrase for Console \"%s\" TLS private key: " msgstr "" -#: src/lib/bnet_server.c:123 +#: src/gnome2-console/console.c:516 src/wx-console/console_thread.cpp:381 #, c-format -msgid "Cannot bind port %d: ERR=%s.\n" +msgid "Passphrase for Director \"%s\" TLS private key: " msgstr "" -#: src/lib/bnet_server.c:134 -#, c-format -msgid "Could not init client queue: ERR=%s\n" +#: src/gnome2-console/console.c:535 src/tray-monitor/tray-monitor.c:860 +#: src/wx-console/console_thread.cpp:399 +msgid "Director daemon" msgstr "" -#: src/lib/bnet_server.c:157 src/lib/bnet_server.c:320 -#, c-format -msgid "Error in select: %s\n" +#: src/gnome2-console/console.c:547 +msgid " Initializing ..." msgstr "" -#: src/lib/bnet_server.c:178 src/lib/bnet_server.c:339 -#, c-format -msgid "Connection from %s:%d refused by hosts.access\n" +#: src/gnome2-console/console.c:583 +msgid " Connected" msgstr "" -#: src/lib/bnet_server.c:193 src/lib/bnet_server.c:351 src/lib/bnet.c:796 -#: src/lib/bnet.c:821 -#, c-format -msgid "Cannot set SO_KEEPALIVE on socket: %s\n" +#: src/gnome2-console/console.c:591 +msgid " Processing command ..." msgstr "" -#: src/lib/bnet_server.c:204 -msgid "Could not create client BSOCK.\n" +#: src/gnome2-console/console.c:626 +msgid " At prompt waiting for input ..." msgstr "" -#: src/lib/bnet_server.c:211 -#, c-format -msgid "Could not add job to client queue: ERR=%s\n" +#: src/gnome2-console/console.c:746 +msgid " Ready" msgstr "" -#: src/lib/bnet_server.c:222 +#: src/gnome2-console/console_conf.c:135 #, c-format -msgid "Could not destroy client queue: ERR=%s\n" +msgid "Console: name=%s\n" msgstr "" -#: src/lib/bnet_server.c:249 +#: src/gnome2-console/console_conf.c:138 #, c-format -msgid "Cannot open stream socket: %s\n" +msgid "ConsoleFont: name=%s font face=%s\n" msgstr "" -#: src/lib/bnet_server.c:278 -#, c-format -msgid "Cannot bind port %d: ERR=%s: retrying ...\n" +#: src/gnome2-console/interface.c:32 +msgid "_Connect" msgstr "" -#: src/lib/bnet_server.c:284 -msgid "Server socket" +#: src/gnome2-console/interface.c:33 src/gnome2-console/interface.c:232 +msgid "Connect to Director" msgstr "" -#: src/lib/bnet_server.c:284 src/lib/bnet_server.c:378 -#: src/dird/ua_select.c:337 -msgid "client" +#: src/gnome2-console/interface.c:39 +msgid "_Disconnect" msgstr "" -#: src/lib/bnet_server.c:366 -#, c-format -msgid "Socket accept error for %s. ERR=%s\n" +#: src/gnome2-console/interface.c:40 +msgid "Disconnect from Director" msgstr "" -#: src/lib/bget_msg.c:86 -msgid "Status OK\n" +#: src/gnome2-console/interface.c:93 +msgid "_Display Messages" msgstr "" -#: src/lib/bget_msg.c:90 -#, c-format -msgid "bget_msg: unknown signal %d\n" +#: src/gnome2-console/interface.c:129 +msgid "_File" msgstr "" -#: src/lib/rwlock.c:289 -msgid "rwl_writeunlock called too many times.\n" +#: src/gnome2-console/interface.c:136 +msgid "_Edit" msgstr "" -#: src/lib/rwlock.c:293 -msgid "rwl_writeunlock by non-owner.\n" +#: src/gnome2-console/interface.c:143 +msgid "_View" msgstr "" -#: src/lib/rwlock.c:358 src/lib/semlock.c:248 -#, c-format -msgid "Write lock failed. ERR=%s\n" +#: src/gnome2-console/interface.c:144 src/gnome2-console/interface.c:252 +msgid "Display Messages" msgstr "" -#: src/lib/rwlock.c:365 src/lib/semlock.c:255 -#, c-format -msgid "Write unlock failed. ERR=%s\n" +#: src/gnome2-console/interface.c:150 +msgid "_Settings" msgstr "" -#: src/lib/rwlock.c:375 src/lib/semlock.c:265 -#, c-format -msgid "Read lock failed. ERR=%s\n" +#: src/gnome2-console/interface.c:157 +msgid "_Help" msgstr "" -#: src/lib/rwlock.c:382 src/lib/semlock.c:272 -#, c-format -msgid "Read unlock failed. ERR=%s\n" +#: src/gnome2-console/interface.c:197 +msgid "Bacula Console" msgstr "" -#: src/lib/rwlock.c:391 src/lib/semlock.c:281 -#, c-format -msgid "Thread %d found unchanged elements %d times\n" +#: src/gnome2-console/interface.c:231 src/wx-console/wxbmainframe.cpp:229 +#: src/wx-console/wxbmainframe.cpp:597 +msgid "Connect" msgstr "" -#: src/lib/rwlock.c:423 src/lib/semlock.c:313 -#, c-format -msgid "Init rwlock failed. ERR=%s\n" +#: src/gnome2-console/interface.c:241 +msgid "Run" msgstr "" -#: src/lib/rwlock.c:438 src/lib/semlock.c:328 -#, c-format -msgid "Create thread failed. ERR=%s\n" +#: src/gnome2-console/interface.c:242 src/gnome2-console/interface.c:677 +#: src/gnome2-console/interface.c:690 +msgid "Run a Job" msgstr "" -#: src/lib/rwlock.c:449 src/lib/semlock.c:339 -#, c-format -msgid "Join thread failed. ERR=%s\n" +#: src/gnome2-console/interface.c:251 +msgid "Msgs" msgstr "" -#: src/lib/rwlock.c:452 src/lib/semlock.c:342 -#, c-format -msgid "%02d: interval %d, writes %d, reads %d\n" +#: src/gnome2-console/interface.c:261 src/lib/util.c:292 +#: src/wx-console/wxbrestorepanel.cpp:384 +#: src/wx-console/wxbrestorepanel.cpp:1949 +msgid "Restore" msgstr "" -#: src/lib/rwlock.c:462 src/lib/semlock.c:352 -#, c-format -msgid "data %02d: value %d, %d writes\n" +#: src/gnome2-console/interface.c:271 +msgid "Label" msgstr "" -#: src/lib/rwlock.c:467 src/lib/semlock.c:357 -#, c-format -msgid "Total: %d thread writes, %d data writes\n" +#: src/gnome2-console/interface.c:299 +msgid " Command: " msgstr "" -#: src/lib/rwlock.c:539 src/lib/semlock.c:429 -msgid "Try write lock" +#: src/gnome2-console/interface.c:307 +msgid "Enter Commands Here" msgstr "" -#: src/lib/rwlock.c:545 src/lib/semlock.c:435 -msgid "Try read lock" +#: src/gnome2-console/interface.c:318 +msgid " Status: " msgstr "" -#: src/lib/rwlock.c:600 src/lib/semlock.c:490 -msgid "Create thread" +#: src/gnome2-console/interface.c:326 +msgid " " msgstr "" -#: src/lib/rwlock.c:610 src/lib/semlock.c:500 -msgid "Join thread" +#: src/gnome2-console/interface.c:422 +msgid "About Bacula Console" msgstr "" -#: src/lib/rwlock.c:612 src/lib/semlock.c:502 -#, c-format -msgid "%02d: interval %d, updates %d, r_collisions %d, w_collisions %d\n" +#: src/gnome2-console/interface.c:436 +msgid "Bacula Console\n" msgstr "" -#: src/lib/rwlock.c:624 src/lib/semlock.c:514 -#, c-format -msgid "data %02d: value %d, %d updates\n" +#: src/gnome2-console/interface.c:444 +msgid "Copyright (c) 2000 - 2004, Kern Sibbald and John Walker" msgstr "" -#: src/lib/cram-md5.c:76 src/lib/cram-md5.c:101 -msgid "1999 Authorization failed.\n" +#: src/gnome2-console/interface.c:450 +msgid "Authors: Kern Sibbald and John Walker" msgstr "" -#: src/lib/smartall.c:132 src/lib/smartall.c:223 src/lib/smartall.c:238 -msgid "Out of memory\n" +#: src/gnome2-console/interface.c:456 +msgid "It comes by night and sucks the essence from your computers" msgstr "" -#: src/lib/smartall.c:160 -#, c-format -msgid "Attempt to free NULL called from %s:%d\n" +#: src/gnome2-console/interface.c:521 src/gnome2-console/interface.c:536 +msgid "Select Director" msgstr "" -#: src/lib/smartall.c:176 -#, c-format -msgid "qp->qnext->qprev != qp called from %s:%d\n" +#: src/gnome2-console/interface.c:708 src/gnome2-console/interface.c:1616 +msgid "Job:" msgstr "" -#: src/lib/smartall.c:180 -#, c-format -msgid "qp->qprev->qnext != qp called from %s:%d\n" +#: src/gnome2-console/interface.c:728 +msgid " Type:" msgstr "" -#: src/lib/smartall.c:189 -#, c-format -msgid "Buffer overrun called from %s:%d\n" +#: src/gnome2-console/interface.c:757 src/gnome2-console/interface.c:1644 +#: src/wx-console/wxbrestorepanel.cpp:1862 +msgid "Client:" msgstr "" -#: src/lib/smartall.c:260 -#, c-format -msgid "sm_realloc size: %d\n" +#: src/gnome2-console/interface.c:787 src/gnome2-console/interface.c:1672 +msgid "FileSet: " msgstr "" -#: src/lib/smartall.c:301 -#, c-format -msgid "sm_realloc %d at %x from %s:%d\n" +#: src/gnome2-console/interface.c:813 src/wx-console/wxbrestorepanel.cpp:1868 +msgid "Priority:" msgstr "" -#: src/lib/smartall.c:363 -#, 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: %lx\n" +#: src/gnome2-console/interface.c:836 +msgid "Level:" msgstr "" -#: src/lib/smartall.c:374 -#, c-format -msgid "Orphaned buffer: %6u bytes allocated at line %d of %s %s\n" +#: src/gnome2-console/interface.c:866 src/gnome2-console/interface.c:1418 +#: src/gnome2-console/interface.c:1700 +msgid "Pool:" msgstr "" -#: src/lib/smartall.c:410 -#, c-format -msgid "Damaged buffer found. Called from %s:%d\n" +#: src/gnome2-console/interface.c:895 src/gnome2-console/interface.c:1393 +#: src/gnome2-console/interface.c:1728 src/wx-console/wxbrestorepanel.cpp:1864 +msgid "Storage:" msgstr "" -#: src/lib/smartall.c:440 -#, c-format -msgid "" -"\n" -"Damaged buffers found at %s:%d\n" +#: src/gnome2-console/interface.c:924 +msgid "Messages:" msgstr "" -#: src/lib/smartall.c:443 -#, c-format -msgid " discovery of bad prev link.\n" +#: src/gnome2-console/interface.c:952 +msgid "Where: " msgstr "" -#: src/lib/smartall.c:446 -#, c-format -msgid " discovery of bad next link.\n" +#: src/gnome2-console/interface.c:970 src/wx-console/wxbrestorepanel.cpp:1866 +msgid "When:" msgstr "" -#: src/lib/smartall.c:449 -#, c-format -msgid " discovery of data overrun.\n" +#: src/gnome2-console/interface.c:988 src/wx-console/wxbrestorepanel.cpp:1847 +msgid "Bootstrap:" msgstr "" -#: src/lib/smartall.c:452 -#, c-format -msgid " Buffer address: %lx\n" +#: src/gnome2-console/interface.c:1108 +msgid "_New" msgstr "" -#: src/lib/smartall.c:459 -#, c-format -msgid "Damaged buffer: %6u bytes allocated at line %d of %s %s\n" +#: src/gnome2-console/interface.c:1177 +msgid "Restore File Selection" msgstr "" -#: src/lib/bsys.c:176 src/lib/bsys.c:192 src/lib/bsys.c:202 src/lib/bsys.c:214 -#, c-format -msgid "Out of memory: ERR=%s\n" +#: src/gnome2-console/interface.c:1226 +msgid "Current dir:" msgstr "" -#: src/lib/bsys.c:256 -msgid "Buffer overflow.\n" +#: src/gnome2-console/interface.c:1252 +msgid "Files Selected: " msgstr "" -#: src/lib/bsys.c:322 -msgid "Bad errno" +#: src/gnome2-console/interface.c:1373 src/gnome2-console/interface.c:1383 +msgid "Label a Volume" msgstr "" -#: src/lib/bsys.c:339 -msgid "Possible mutex deadlock.\n" +#: src/gnome2-console/interface.c:1444 +msgid "Volume Name:" msgstr "" -#: src/lib/bsys.c:343 src/lib/bsys.c:375 -#, c-format -msgid "Mutex lock failure. ERR=%s\n" +#: src/gnome2-console/interface.c:1459 +msgid "Slot:" msgstr "" -#: src/lib/bsys.c:346 -msgid "Possible mutex deadlock resolved.\n" +#: src/gnome2-console/interface.c:1585 +msgid "Restore Files Dialog" msgstr "" -#: src/lib/bsys.c:358 -#, c-format -msgid "Mutex unlock not locked. ERR=%s\n" +#: src/gnome2-console/interface.c:1599 +msgid "Restore Files" msgstr "" -#: src/lib/bsys.c:363 src/lib/bsys.c:385 -#, c-format -msgid "Mutex unlock failure. ERR=%s\n" +#: src/gnome2-console/interface.c:1756 +msgid "Before:" msgstr "" -#: src/lib/bsys.c:399 -#, c-format -msgid "Memset for %d bytes at %s:%d\n" +#: src/gnome2-console/interface.c:1799 +msgid "Select Files" msgstr "" -#: src/lib/bsys.c:428 -#, c-format -msgid "Cannot open pid file. %s ERR=%s\n" +#: src/gnome2-console/interface.c:1883 +msgid "Progress" msgstr "" -#: src/lib/bsys.c:432 -#, c-format -msgid "" -"%s is already running. pid=%d\n" -"Check file %s\n" +#: src/gnome2-console/restore.c:121 +msgid "Mark" msgstr "" -#: src/lib/bsys.c:445 -#, c-format -msgid "Could not open pid file. %s ERR=%s\n" +#: src/gnome2-console/restore.c:121 +msgid "File" msgstr "" -#: src/lib/bsys.c:565 -#, c-format -msgid "Could not create state file. %s ERR=%s\n" +#: src/gnome2-console/restore.c:121 +msgid "Mode" msgstr "" -#: src/lib/bsys.c:584 -#, c-format -msgid "Write final hdr error: ERR=%s\n" +#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:288 +msgid "User" msgstr "" -#: src/lib/bsys.c:611 -#, c-format -msgid "Could not find specified group: %s\n" +#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:292 +msgid "Group" msgstr "" -#: src/lib/bsys.c:614 src/lib/bsys.c:618 -#, c-format -msgid "Could not set specified group: %s\n" +#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:276 +msgid "Size" msgstr "" -#: src/lib/bsys.c:627 -#, c-format -msgid "Could not find specified userid: %s\n" +#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:280 +msgid "Date" msgstr "" -#: src/lib/bsys.c:630 +#: src/gnome2-console/support.c:41 #, c-format -msgid "Could not set specified userid: %s\n" +msgid "Widget not found: %s" +msgstr "" + +#: src/gnome2-console/support.c:60 src/gnome2-console/support.c:85 +#, c-format +msgid "Couldn't find pixmap file: %s" +msgstr "" + +#: src/gnome2-console/support.c:92 +#, c-format +msgid "Failed to load pixbuf file: %s: %s\n" +msgstr "" + +#: src/lib/tls.c:105 +#, c-format +msgid "" +"Error with certificate at depth: %d, issuer = %s, subject = %s, ERR=%d:%s\n" +msgstr "" + +#: src/lib/tls.c:152 +msgid "Error initializing SSL context" +msgstr "" + +#: src/lib/tls.c:173 +msgid "Error loading certificate verification stores" +msgstr "" + +#: src/lib/tls.c:178 +msgid "" +"Either a certificate file or a directory must be specified as a verification " +"store\n" +msgstr "" + +#: src/lib/tls.c:189 +msgid "Error loading certificate file" +msgstr "" + +#: src/lib/tls.c:197 +msgid "Error loading private key" +msgstr "" + +#: src/lib/tls.c:205 +msgid "Unable to open DH parameters file" +msgstr "" + +#: src/lib/tls.c:211 +msgid "Unable to load DH parameters from specified file" +msgstr "" + +#: src/lib/tls.c:215 +msgid "Failed to set TLS Diffie-Hellman parameters" +msgstr "" + +#: src/lib/tls.c:224 +msgid "Error setting cipher list, no valid ciphers available\n" +msgstr "" + +#: src/lib/tls.c:272 +msgid "Peer failed to present a TLS certificate\n" +msgstr "" + +#: src/lib/tls.c:314 +#, c-format +msgid "Peer %s failed to present a TLS certificate\n" +msgstr "" + +#: src/lib/tls.c:417 +msgid "Error creating file descriptor-based BIO" +msgstr "" + +#: src/lib/tls.c:428 +msgid "Error creating new SSL object" +msgstr "" + +#: src/lib/tls.c:492 src/lib/tls.c:515 +msgid "Connect failure" +msgstr "" + +#: src/lib/tls.c:592 src/lib/tls.c:596 +msgid "TLS shutdown failure." +msgstr "" + +#: src/lib/tls.c:645 src/lib/tls.c:665 +msgid "TLS read/write failure." +msgstr "" + +#: src/lib/tls.c:723 src/lib/tls.c:780 src/stored/dev.c:209 +#: src/stored/dev.c:227 src/stored/dev.c:233 src/stored/stored_conf.c:593 +#, c-format +msgid "Unable to init mutex: ERR=%s\n" +msgstr "" + +#: src/lib/tls.c:743 src/lib/tls.c:812 +#, c-format +msgid "Unable to destroy mutex: ERR=%s\n" +msgstr "" + +#: src/lib/tls.c:877 +#, c-format +msgid "Unable to init OpenSSL threading: ERR=%s\n" +msgstr "" + +#: src/lib/tls.c:887 +msgid "Failed to seed OpenSSL PRNG\n" +msgstr "" + +#: src/lib/tls.c:913 +msgid "Failed to save OpenSSL PRNG\n" +msgstr "" + +#: src/lib/address_conf.c:50 +#, c-format +msgid "Only ipv4 and ipv6 are supported (%d)\n" +msgstr "" + +#: src/lib/address_conf.c:54 +#, c-format +msgid "Only ipv4 is supported (%d)\n" +msgstr "" + +#: src/lib/address_conf.c:163 +#, c-format +msgid "It was tried to assign a ipv6 address to a ipv4(%d)\n" +msgstr "" + +#: src/lib/address_conf.c:172 +#, c-format +msgid "It was tried to assign a ipv4 address to a ipv6(%d)\n" +msgstr "" + +#: src/lib/address_conf.c:251 +#, c-format +msgid "Can't add default address (%s)\n" +msgstr "" + +#: src/lib/address_conf.c:281 +msgid "the old style addresses cannot be mixed with new style" +msgstr "" + +#: src/lib/address_conf.c:304 +#, c-format +msgid "can't resolve service(%s)" +msgstr "" + +#: src/lib/address_conf.c:314 +#, c-format +msgid "can't resolve hostname(%s) %s" +msgstr "" + +#: src/lib/address_conf.c:403 +#, c-format +msgid "Expected a block begin { , got: %s" +msgstr "" + +#: src/lib/address_conf.c:408 +msgid "Empty addr block is not allowed" +msgstr "" + +#: src/lib/address_conf.c:412 +#, c-format +msgid "Expected a string, got: %s" +msgstr "" + +#: src/lib/address_conf.c:421 +#, c-format +msgid "Expected a string [ip|ipv4|ipv6], got: %s" +msgstr "" + +#: src/lib/address_conf.c:425 +#, c-format +msgid "Expected a string [ip|ipv4], got: %s" +msgstr "" + +#: src/lib/address_conf.c:430 src/lib/address_conf.c:460 +#, c-format +msgid "Expected a equal =, got: %s" +msgstr "" + +#: src/lib/address_conf.c:434 +#, c-format +msgid "Expected a block beginn { , got: %s" +msgstr "" + +#: src/lib/address_conf.c:441 src/lib/address_conf.c:456 +#, c-format +msgid "Expected a identifier [addr|port], got: %s" +msgstr "" + +#: src/lib/address_conf.c:446 +msgid "Only one port per address block" +msgstr "" + +#: src/lib/address_conf.c:452 +msgid "Only one addr per address block" +msgstr "" + +#: src/lib/address_conf.c:468 +#, c-format +msgid "Expected a number or a string, got: %s" +msgstr "" + +#: src/lib/address_conf.c:474 +#, c-format +msgid "Expected an IP number or a hostname, got: %s" +msgstr "" + +#: src/lib/address_conf.c:480 +msgid "State machine missmatch" +msgstr "" + +#: src/lib/address_conf.c:486 src/lib/address_conf.c:499 +#, c-format +msgid "Expected a end of block }, got: %s" +msgstr "" + +#: src/lib/address_conf.c:492 +#, c-format +msgid "Can't add hostname(%s) and port(%s) to addrlist (%s)" +msgstr "" + +#: src/lib/address_conf.c:508 +#, c-format +msgid "Expected a hostname or IP nummer, got: %s" +msgstr "" + +#: src/lib/address_conf.c:513 src/lib/address_conf.c:527 +#, c-format +msgid "can't add port (%s) to (%s)" +msgstr "" + +#: src/lib/address_conf.c:522 +#, c-format +msgid "Expected a port number or string, got: %s" +msgstr "" + +#: src/lib/attr.c:64 +#, c-format +msgid "Error scanning attributes: %s\n" msgstr "" #: src/lib/berrno.c:48 @@ -6988,14 +6865,13 @@ msgstr "" msgid "Invalid errno. No error message possible." msgstr "" -#: src/lib/res.c:66 -#, c-format -msgid "rwl_writelock failure at %s:%d: ERR=%s\n" +#: src/lib/bget_msg.c:86 +msgid "Status OK\n" msgstr "" -#: src/lib/res.c:76 +#: src/lib/bget_msg.c:90 #, c-format -msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" +msgid "bget_msg: unknown signal %d\n" msgstr "" #: src/lib/bnet.c:109 @@ -7097,6 +6973,12 @@ msgstr "" msgid "Socket open error. proto=%d port=%d. ERR=%s\n" msgstr "" +#: src/lib/bnet.c:796 src/lib/bnet.c:821 src/lib/bnet_server.c:193 +#: src/lib/bnet_server.c:351 +#, c-format +msgid "Cannot set SO_KEEPALIVE on socket: %s\n" +msgstr "" + #: src/lib/bnet.c:852 #, c-format msgid "" @@ -7143,7117 +7025,6813 @@ msgstr "" msgid "Unknown sig %d" msgstr "" -#: src/lib/pythonlib.c:108 -msgid "Could not initialize Python\n" -msgstr "" - -#: src/lib/pythonlib.c:113 +#: src/lib/bnet_pkt.c:89 src/lib/bnet_pkt.c:147 #, c-format -msgid "Could not Run Python string %s\n" +msgid "Unknown BPKT type: %d\n" msgstr "" -#: src/lib/pythonlib.c:125 -msgid "Could not initialize Python Job type.\n" +#: src/lib/bnet_server.c:96 +#, c-format +msgid "Cannot open stream socket. ERR=%s. Current %s All %s\n" msgstr "" -#: src/lib/pythonlib.c:130 +#: src/lib/bnet_server.c:109 src/lib/bnet_server.c:258 #, c-format -msgid "Could not import Python script %s/%s. Python disabled.\n" +msgid "Cannot set SO_REUSEADDR on socket: %s\n" msgstr "" -#: src/lib/pythonlib.c:230 -msgid "Could not create Python Job Object.\n" +#: src/lib/bnet_server.c:118 +#, c-format +msgid "Cannot bind port %d: ERR=%s: Retrying ...\n" msgstr "" -#: src/lib/pythonlib.c:243 src/lib/pythonlib.c:267 +#: src/lib/bnet_server.c:123 #, c-format -msgid "Python function \"%s\" not found.\n" +msgid "Cannot bind port %d: ERR=%s.\n" msgstr "" -#: src/lib/pythonlib.c:282 +#: src/lib/bnet_server.c:134 #, c-format -msgid "Unknown Python daemon event %s\n" +msgid "Could not init client queue: ERR=%s\n" msgstr "" -#: src/lib/attr.c:64 +#: src/lib/bnet_server.c:157 src/lib/bnet_server.c:320 #, c-format -msgid "Error scanning attributes: %s\n" +msgid "Error in select: %s\n" msgstr "" -#: src/lib/daemon.c:53 +#: src/lib/bnet_server.c:178 src/lib/bnet_server.c:339 #, c-format -msgid "Cannot fork to become daemon: %s\n" +msgid "Connection from %s:%d refused by hosts.access\n" msgstr "" -#: src/lib/signal.c:61 -msgid "Invalid signal number" +#: src/lib/bnet_server.c:204 +msgid "Could not create client BSOCK.\n" msgstr "" -#: src/lib/signal.c:87 +#: src/lib/bnet_server.c:211 #, c-format -msgid "Bacula interrupted by signal %d: %s\n" +msgid "Could not add job to client queue: ERR=%s\n" msgstr "" -#: src/lib/signal.c:100 +#: src/lib/bnet_server.c:222 #, c-format -msgid "Kaboom! %s, %s got signal %d. Attempting traceback.\n" +msgid "Could not destroy client queue: ERR=%s\n" msgstr "" -#: src/lib/signal.c:102 +#: src/lib/bnet_server.c:249 #, c-format -msgid "Kaboom! exepath=%s\n" +msgid "Cannot open stream socket: %s\n" msgstr "" -#: src/lib/signal.c:136 +#: src/lib/bnet_server.c:278 #, c-format -msgid "Fork error: ERR=%s\n" +msgid "Cannot bind port %d: ERR=%s: retrying ...\n" msgstr "" -#: src/lib/signal.c:143 -#, c-format -msgid "Calling: %s %s %s\n" +#: src/lib/bnet_server.c:284 +msgid "Server socket" msgstr "" -#: src/lib/signal.c:145 +#: src/lib/bnet_server.c:366 #, c-format -msgid "execv: %s failed: ERR=%s\n" +msgid "Socket accept error for %s. ERR=%s\n" msgstr "" -#: src/lib/signal.c:160 -#, c-format -msgid "Traceback complete, attempting cleanup ...\n" +#: src/lib/bpipe.c:282 src/lib/bpipe.c:361 +msgid "Program killed by Bacula watchdog (timeout)\n" msgstr "" -#: src/lib/signal.c:168 +#: src/lib/bshm.c:69 #, c-format -msgid "It looks like the traceback worked ...\n" +msgid "shmget failure key = %x\n" msgstr "" -#: src/lib/signal.c:197 +#: src/lib/bshm.c:77 #, c-format -msgid "BA_NSIG too small (%d) should be (%d)\n" +msgid "Could not get %d bytes of shared memory: %s\n" msgstr "" -#: src/lib/signal.c:203 -msgid "UNKNOWN SIGNAL" +#: src/lib/bshm.c:102 +#, c-format +msgid "Could not attach shared memory: %s\n" msgstr "" -#: src/lib/signal.c:204 -msgid "Hangup" +#: src/lib/bshm.c:123 +#, c-format +msgid "Error detaching shared memory: %s\n" msgstr "" -#: src/lib/signal.c:205 -msgid "Interrupt" +#: src/lib/bshm.c:139 +#, c-format +msgid "Could not destroy shared memory: %s\n" msgstr "" -#: src/lib/signal.c:206 -msgid "Quit" +#: src/lib/bsys.c:176 src/lib/bsys.c:192 src/lib/bsys.c:202 src/lib/bsys.c:214 +#, c-format +msgid "Out of memory: ERR=%s\n" msgstr "" -#: src/lib/signal.c:207 -msgid "Illegal instruction" +#: src/lib/bsys.c:256 +msgid "Buffer overflow.\n" msgstr "" -#: src/lib/signal.c:208 -msgid "Trace/Breakpoint trap" +#: src/lib/bsys.c:322 +msgid "Bad errno" msgstr "" -#: src/lib/signal.c:209 -msgid "Abort" +#: src/lib/bsys.c:339 +msgid "Possible mutex deadlock.\n" msgstr "" -#: src/lib/signal.c:211 -msgid "EMT instruction (Emulation Trap)" +#: src/lib/bsys.c:343 src/lib/bsys.c:375 +#, c-format +msgid "Mutex lock failure. ERR=%s\n" msgstr "" -#: src/lib/signal.c:214 -msgid "IOT trap" +#: src/lib/bsys.c:346 +msgid "Possible mutex deadlock resolved.\n" msgstr "" -#: src/lib/signal.c:216 -msgid "BUS error" +#: src/lib/bsys.c:358 +#, c-format +msgid "Mutex unlock not locked. ERR=%s\n" msgstr "" -#: src/lib/signal.c:217 -msgid "Floating-point exception" +#: src/lib/bsys.c:363 src/lib/bsys.c:385 +#, c-format +msgid "Mutex unlock failure. ERR=%s\n" msgstr "" -#: src/lib/signal.c:218 -msgid "Kill, unblockable" +#: src/lib/bsys.c:399 +#, c-format +msgid "Memset for %d bytes at %s:%d\n" msgstr "" -#: src/lib/signal.c:219 -msgid "User-defined signal 1" +#: src/lib/bsys.c:428 +#, c-format +msgid "Cannot open pid file. %s ERR=%s\n" msgstr "" -#: src/lib/signal.c:220 -msgid "Segmentation violation" +#: src/lib/bsys.c:432 +#, c-format +msgid "" +"%s is already running. pid=%d\n" +"Check file %s\n" msgstr "" -#: src/lib/signal.c:221 -msgid "User-defined signal 2" +#: src/lib/bsys.c:445 +#, c-format +msgid "Could not open pid file. %s ERR=%s\n" msgstr "" -#: src/lib/signal.c:222 -msgid "Broken pipe" +#: src/lib/bsys.c:565 +#, c-format +msgid "Could not create state file. %s ERR=%s\n" msgstr "" -#: src/lib/signal.c:223 -msgid "Alarm clock" +#: src/lib/bsys.c:584 +#, c-format +msgid "Write final hdr error: ERR=%s\n" msgstr "" -#: src/lib/signal.c:224 -msgid "Termination" +#: src/lib/bsys.c:611 +#, c-format +msgid "Could not find specified group: %s\n" msgstr "" -#: src/lib/signal.c:226 -msgid "Stack fault" +#: src/lib/bsys.c:614 src/lib/bsys.c:618 +#, c-format +msgid "Could not set specified group: %s\n" msgstr "" -#: src/lib/signal.c:228 -msgid "Child status has changed" +#: src/lib/bsys.c:627 +#, c-format +msgid "Could not find specified userid: %s\n" msgstr "" -#: src/lib/signal.c:229 -msgid "Continue" +#: src/lib/bsys.c:630 +#, c-format +msgid "Could not set specified userid: %s\n" msgstr "" -#: src/lib/signal.c:230 -msgid "Stop, unblockable" +#: src/lib/btimers.c:241 +msgid "stop_btimer called with NULL btimer_id\n" msgstr "" -#: src/lib/signal.c:231 -msgid "Keyboard stop" +#: src/lib/cram-md5.c:76 src/lib/cram-md5.c:101 +msgid "1999 Authorization failed.\n" msgstr "" -#: src/lib/signal.c:232 -msgid "Background read from tty" +#: src/lib/daemon.c:53 +#, c-format +msgid "Cannot fork to become daemon: %s\n" msgstr "" -#: src/lib/signal.c:233 -msgid "Background write to tty" +#: src/lib/edit.c:400 +#, c-format +msgid "Illegal character \"%c\" in name.\n" msgstr "" -#: src/lib/signal.c:234 -msgid "Urgent condition on socket" +#: src/lib/edit.c:407 +msgid "Name too long.\n" msgstr "" -#: src/lib/signal.c:235 -msgid "CPU limit exceeded" +#: src/lib/events.c:161 +msgid "Events not available" msgstr "" -#: src/lib/signal.c:236 -msgid "File size limit exceeded" +#: src/lib/jcr.c:278 +msgid "NULL jcr.\n" msgstr "" -#: src/lib/signal.c:237 -msgid "Virtual alarm clock" +#: src/lib/jcr.c:399 +#, c-format +msgid "JCR use_count=%d JobId=%d\n" msgstr "" -#: src/lib/signal.c:238 -msgid "Profiling alarm clock" +#: src/lib/jcr.c:680 +#, c-format +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading Storage " +"daemon.\n" msgstr "" -#: src/lib/signal.c:239 -msgid "Window size change" +#: src/lib/jcr.c:692 +#, c-format +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading File daemon.\n" msgstr "" -#: src/lib/signal.c:240 -msgid "I/O now possible" +#: src/lib/jcr.c:704 +#, c-format +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading Director.\n" msgstr "" -#: src/lib/signal.c:242 -msgid "Power failure restart" +#: src/lib/lex.c:79 src/wx-console/console_thread.cpp:186 +#, c-format +msgid "Problem probably begins at line %d.\n" msgstr "" -#: src/lib/signal.c:245 -msgid "No runnable lwp" +#: src/lib/lex.c:84 src/wx-console/console_thread.cpp:191 +#, c-format +msgid "" +"Config error: %s\n" +" : line %d, col %d of file %s\n" +"%s\n" +"%s" msgstr "" -#: src/lib/signal.c:248 -msgid "SIGLWP special signal used by thread library" +#: src/lib/lex.c:88 +#, c-format +msgid "Config error: %s\n" msgstr "" -#: src/lib/signal.c:251 -msgid "Checkpoint Freeze" +#: src/lib/lex.c:108 +msgid "Close of NULL file\n" msgstr "" -#: src/lib/signal.c:254 -msgid "Checkpoint Thaw" +#: src/lib/lex.c:181 +msgid "get_char: called after EOF\n" msgstr "" -#: src/lib/signal.c:257 -msgid "Thread Cancellation" +#: src/lib/lex.c:220 +#, c-format +msgid "Config token too long, file: %s, line %d, begins at line %d\n" msgstr "" -#: src/lib/signal.c:260 -msgid "Resource Lost (e.g. record-lock lost)" +#: src/lib/lex.c:244 +msgid "none" msgstr "" -#: src/lib/events.c:161 -msgid "Events not available" +#: src/lib/lex.c:245 +msgid "comment" msgstr "" -#: src/lib/btimers.c:241 -msgid "stop_btimer called with NULL btimer_id\n" +#: src/lib/lex.c:246 +msgid "number" msgstr "" -#: src/lib/var.c:2659 -msgid "everything ok" +#: src/lib/lex.c:247 +msgid "ip_addr" msgstr "" -#: src/lib/var.c:2660 -msgid "incomplete named character" +#: src/lib/lex.c:248 +msgid "identifier" msgstr "" -#: src/lib/var.c:2661 -msgid "incomplete hexadecimal value" +#: src/lib/lex.c:249 +msgid "string" msgstr "" -#: src/lib/var.c:2662 -msgid "invalid hexadecimal value" +#: src/lib/lex.c:250 +msgid "quoted_string" msgstr "" -#: src/lib/var.c:2663 -msgid "octal value too large" +#: src/lib/lex.c:286 +#, c-format +msgid "expected a positive integer number, got: %s" msgstr "" -#: src/lib/var.c:2664 -msgid "invalid octal value" +#: src/lib/lex.c:292 +#, c-format +msgid "expected a postive integer number, got: %s" msgstr "" -#: src/lib/var.c:2665 -msgid "incomplete octal value" +#: src/lib/lex.c:504 +#, c-format +msgid "Cannot open included config file %s: %s\n" msgstr "" -#: src/lib/var.c:2666 -msgid "incomplete grouped hexadecimal value" +#: src/lib/lex.c:539 +#, c-format +msgid "expected an integer or a range, got %s: %s" msgstr "" -#: src/lib/var.c:2667 -msgid "incorrect character class specification" +#: src/lib/lex.c:553 src/lib/lex.c:561 src/lib/lex.c:572 src/lib/lex.c:580 +#, c-format +msgid "expected an integer number, got %s: %s" msgstr "" -#: src/lib/var.c:2668 -msgid "invalid expansion configuration" +#: src/lib/lex.c:590 +#, c-format +msgid "expected a name, got %s: %s" msgstr "" -#: src/lib/var.c:2669 -msgid "out of memory" +#: src/lib/lex.c:594 +#, c-format +msgid "name %s length %d too long, max is %d\n" msgstr "" -#: src/lib/var.c:2670 -msgid "incomplete variable specification" +#: src/lib/lex.c:602 +#, c-format +msgid "expected a string, got %s: %s" msgstr "" -#: src/lib/var.c:2671 -msgid "undefined variable" +#: src/lib/mem_pool.c:95 +#, c-format +msgid "MemPool index %d larger than max %d\n" msgstr "" -#: src/lib/var.c:2672 -msgid "input is neither text nor variable" +#: src/lib/mem_pool.c:113 src/lib/mem_pool.c:133 src/lib/mem_pool.c:168 +#: src/lib/mem_pool.c:239 src/lib/mem_pool.c:259 src/lib/mem_pool.c:297 +#: src/lib/mem_pool.c:550 +#, c-format +msgid "Out of memory requesting %d bytes\n" msgstr "" -#: src/lib/var.c:2673 -msgid "unknown command character in variable" +#: src/lib/message.c:253 src/lib/message.c:263 +#, c-format +msgid "Could not open console message file %s: ERR=%s\n" msgstr "" -#: src/lib/var.c:2674 -msgid "malformatted search and replace operation" +#: src/lib/message.c:268 +#, c-format +msgid "Could not get con mutex: ERR=%s\n" msgstr "" -#: src/lib/var.c:2675 -msgid "unknown flag in search and replace operation" +#: src/lib/message.c:372 +#, c-format +msgid "open mail pipe %s failed: ERR=%s\n" msgstr "" -#: src/lib/var.c:2676 -msgid "invalid regex in search and replace operation" +#: src/lib/message.c:378 +msgid "Bacula Message" msgstr "" -#: src/lib/var.c:2677 -msgid "missing parameter in command" +#: src/lib/message.c:431 +msgid "open mail pipe failed.\n" msgstr "" -#: src/lib/var.c:2678 -msgid "empty search string in search and replace operation" +#: src/lib/message.c:443 +#, c-format +msgid "close error: ERR=%s\n" msgstr "" -#: src/lib/var.c:2679 -msgid "start offset missing in cut operation" +#: src/lib/message.c:454 +#, c-format +msgid "Mail prog: %s" msgstr "" -#: src/lib/var.c:2680 -msgid "offsets in cut operation delimited by unknown character" +#: src/lib/message.c:463 +#, c-format +msgid "" +"Mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" -#: src/lib/var.c:2681 -msgid "range out of bounds in cut operation" +#: src/lib/message.c:650 +#, c-format +msgid "" +"Operator mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" -#: src/lib/var.c:2682 -msgid "offset out of bounds in cut operation" +#: src/lib/message.c:667 src/lib/message.c:689 src/lib/message.c:705 +#, c-format +msgid "fopen %s failed: ERR=%s\n" msgstr "" -#: src/lib/var.c:2683 -msgid "logic error in cut operation" +#: src/lib/message.c:933 +#, c-format +msgid "%s: ABORTING due to ERROR in %s:%d\n" msgstr "" -#: src/lib/var.c:2684 -msgid "malformatted transpose operation" +#: src/lib/message.c:937 +#, c-format +msgid "%s: ERROR TERMINATION at %s:%d\n" msgstr "" -#: src/lib/var.c:2685 -msgid "source and target class mismatch in transpose operation" +#: src/lib/message.c:942 +#, c-format +msgid "%s: Fatal Error because: " msgstr "" -#: src/lib/var.c:2686 -msgid "empty character class in transpose operation" +#: src/lib/message.c:944 +#, c-format +msgid "%s: Fatal Error at %s:%d because:\n" msgstr "" -#: src/lib/var.c:2687 -msgid "incorrect character class in transpose operation" +#: src/lib/message.c:948 +#, c-format +msgid "%s: ERROR: " msgstr "" -#: src/lib/var.c:2688 -msgid "malformatted padding operation" +#: src/lib/message.c:950 +#, c-format +msgid "%s: ERROR in %s:%d " msgstr "" -#: src/lib/var.c:2689 -msgid "width parameter missing in padding operation" +#: src/lib/message.c:953 +#, c-format +msgid "%s: Warning: " msgstr "" -#: src/lib/var.c:2690 -msgid "fill string missing in padding operation" +#: src/lib/message.c:956 +#, c-format +msgid "%s: Security violation: " msgstr "" -#: src/lib/var.c:2691 -msgid "unknown quoted pair in search and replace operation" +#: src/lib/message.c:1032 +#, c-format +msgid "%s ABORTING due to ERROR\n" msgstr "" -#: src/lib/var.c:2692 -msgid "sub-matching reference out of range" +#: src/lib/message.c:1035 +#, c-format +msgid "%s ERROR TERMINATION\n" msgstr "" -#: src/lib/var.c:2693 -msgid "invalid argument" +#: src/lib/message.c:1038 +#, c-format +msgid "%s: %s Fatal error: " msgstr "" -#: src/lib/var.c:2694 -msgid "incomplete quoted pair" +#: src/lib/message.c:1044 +#, c-format +msgid "%s: %s Error: " msgstr "" -#: src/lib/var.c:2695 -msgid "lookup function does not support variable arrays" +#: src/lib/message.c:1050 +#, c-format +msgid "%s: %s Warning: " msgstr "" -#: src/lib/var.c:2696 -msgid "index of array variable contains an invalid character" +#: src/lib/message.c:1053 +#, c-format +msgid "%s: %s Security violation: " msgstr "" -#: src/lib/var.c:2697 -msgid "index of array variable is incomplete" +#: src/lib/parse_conf.c:160 +msgid "***UNKNOWN***" msgstr "" -#: src/lib/var.c:2698 -msgid "bracket expression in array variable's index not closed" +#: src/lib/parse_conf.c:179 +#, c-format +msgid "Unable to initialize resource lock. ERR=%s\n" msgstr "" -#: src/lib/var.c:2699 -msgid "division by zero error in index specification" +#: src/lib/parse_conf.c:262 src/lib/parse_conf.c:281 +#, c-format +msgid "expected an =, got: %s" msgstr "" -#: src/lib/var.c:2700 -msgid "unterminated loop construct" +#: src/lib/parse_conf.c:289 +#, c-format +msgid "Unknown item code: %d\n" msgstr "" -#: src/lib/var.c:2701 -msgid "invalid character in loop limits" +#: src/lib/parse_conf.c:328 +#, c-format +msgid "message type: %s not found" msgstr "" -#: src/lib/var.c:2702 -msgid "malformed operation argument list" +#: src/lib/parse_conf.c:367 +#, c-format +msgid "Attempt to redefine name \"%s\" to \"%s\"." msgstr "" -#: src/lib/var.c:2703 -msgid "undefined operation" +#: src/lib/parse_conf.c:458 +#, c-format +msgid "Could not find config Resource %s referenced on line %d : %s\n" msgstr "" -#: src/lib/var.c:2704 -msgid "formatting failure" +#: src/lib/parse_conf.c:462 +#, c-format +msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/lib/var.c:2713 -msgid "unknown error" +#: src/lib/parse_conf.c:497 +#, c-format +msgid "Too many %s directives. Max. is %d. line %d: %s\n" msgstr "" -#: src/lib/semlock.c:185 -msgid "sem_unlock by non-owner.\n" +#: src/lib/parse_conf.c:507 +#, c-format +msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/lib/crypto.c:423 -msgid "Unable to open certificate file" +#: src/lib/parse_conf.c:569 +#, c-format +msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/lib/crypto.c:430 -msgid "Unable to read certificate from file" +#: src/lib/parse_conf.c:633 +#, c-format +msgid "expected a size number, got: %s" msgstr "" -#: src/lib/crypto.c:436 -msgid "Unable to extract public key from certificate" +#: src/lib/parse_conf.c:638 +#, c-format +msgid "expected a size, got: %s" msgstr "" -#: src/lib/crypto.c:442 -msgid "" -"Provided certificate does not include the required subjectKeyIdentifier " -"extension." +#: src/lib/parse_conf.c:675 src/lib/parse_conf.c:680 +#, c-format +msgid "expected a time period, got: %s" msgstr "" -#: src/lib/crypto.c:448 +#: src/lib/parse_conf.c:699 #, c-format -msgid "Unsupported key type provided: %d\n" +msgid "Expect a %s or %s, got: %s" msgstr "" -#: src/lib/crypto.c:485 src/lib/crypto.c:533 -msgid "Unable to open private key file" +#: src/lib/parse_conf.c:723 +#, c-format +msgid "Expected a Tape Label keyword, got: %s" msgstr "" -#: src/lib/crypto.c:515 src/lib/crypto.c:549 -msgid "Unable to read private key from file" +#: src/lib/parse_conf.c:772 +#, c-format +msgid "Cannot open config file \"%s\": %s\n" msgstr "" -#: src/lib/crypto.c:606 +#: src/lib/parse_conf.c:785 #, c-format -msgid "Unsupported digest type: %d\n" +msgid "Expected a Resource name identifier, got: %s" msgstr "" -#: src/lib/crypto.c:619 -msgid "OpenSSL digest initialization failed" +#: src/lib/parse_conf.c:797 +#, c-format +msgid "expected resource name, got: %s" msgstr "" -#: src/lib/crypto.c:773 -msgid "OpenSSL error occured" +#: src/lib/parse_conf.c:808 +#, c-format +msgid "not in resource definition: %s" msgstr "" -#: src/lib/crypto.c:839 -msgid "Signature creation failed" +#: src/lib/parse_conf.c:833 +#, c-format +msgid "" +"Keyword \"%s\" not permitted in this resource.\n" +"Perhaps you left the trailing brace off of the previous resource." msgstr "" -#: src/lib/crypto.c:916 -msgid "Signature decoding failed" +#: src/lib/parse_conf.c:850 +#, c-format +msgid "unexpected token %d %s in resource definition" msgstr "" -#: src/lib/crypto.c:992 -msgid "Unsupported cipher type specified\n" +#: src/lib/parse_conf.c:856 +#, c-format +msgid "Unknown parser state %d\n" msgstr "" -#: src/lib/crypto.c:1149 -msgid "CryptoData decoding failed" +#: src/lib/parse_conf.c:861 +msgid "End of conf file reached with unclosed resource." msgstr "" -#: src/lib/crypto.c:1193 -msgid "Failure decrypting the session key" +#: src/lib/pythonlib.c:108 +msgid "Could not initialize Python\n" msgstr "" -#: src/lib/crypto.c:1246 +#: src/lib/pythonlib.c:113 #, c-format -msgid "Unsupported contentEncryptionAlgorithm: %d\n" +msgid "Could not Run Python string %s\n" msgstr "" -#: src/lib/crypto.c:1256 src/lib/crypto.c:1262 -msgid "OpenSSL cipher context initialization failed" +#: src/lib/pythonlib.c:125 +msgid "Could not initialize Python Job type.\n" msgstr "" -#: src/lib/crypto.c:1269 -msgid "Encryption session provided an invalid symmetric key" -msgstr "" +#: src/lib/pythonlib.c:130 +#, c-format +msgid "Could not import Python script %s/%s. Python disabled.\n" +msgstr "" -#: src/lib/crypto.c:1275 -msgid "Encryption session provided an invalid IV" +#: src/lib/pythonlib.c:230 +msgid "Could not create Python Job Object.\n" msgstr "" -#: src/lib/crypto.c:1281 -msgid "OpenSSL cipher context key/IV initialization failed" +#: src/lib/pythonlib.c:243 src/lib/pythonlib.c:267 +#, c-format +msgid "Python function \"%s\" not found.\n" msgstr "" -#: src/lib/crypto.c:1347 +#: src/lib/pythonlib.c:282 #, c-format -msgid "Unable to init OpenSSL threading: ERR=%s\n" +msgid "Unknown Python daemon event %s\n" msgstr "" -#: src/lib/crypto.c:1360 -msgid "Failed to seed OpenSSL PRNG\n" +#: src/lib/regex.c:1040 +msgid "Success" msgstr "" -#: src/lib/crypto.c:1386 -msgid "Failed to save OpenSSL PRNG\n" +#: src/lib/regex.c:1043 +msgid "No match" msgstr "" -#: src/lib/crypto.c:1444 -msgid "Unsupported digest type specified\n" +#: src/lib/regex.c:1046 +msgid "Invalid regular expression" msgstr "" -#: src/lib/crypto.c:1463 -#, c-format -msgid "SHA1Update() returned an error: %d\n" +#: src/lib/regex.c:1049 +msgid "Invalid collation character" msgstr "" -#: src/lib/openssl.c:109 src/lib/openssl.c:178 -#, c-format -msgid "Unable to destroy mutex: ERR=%s\n" +#: src/lib/regex.c:1052 +msgid "Invalid character class name" msgstr "" -#: src/gnome2-console/restore.c:121 -msgid "Mark" +#: src/lib/regex.c:1055 +msgid "Trailing backslash" msgstr "" -#: src/gnome2-console/restore.c:121 -msgid "File" +#: src/lib/regex.c:1058 +msgid "Invalid back reference" msgstr "" -#: src/gnome2-console/restore.c:121 -msgid "Mode" +#: src/lib/regex.c:1061 +msgid "Unmatched [ or [^" msgstr "" -#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:288 -msgid "User" +#: src/lib/regex.c:1064 +msgid "Unmatched ( or \\(" msgstr "" -#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:292 -msgid "Group" +#: src/lib/regex.c:1067 +msgid "Unmatched \\{" msgstr "" -#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:276 -msgid "Size" +#: src/lib/regex.c:1070 +msgid "Invalid content of \\{\\}" msgstr "" -#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:280 -msgid "Date" +#: src/lib/regex.c:1073 +msgid "Invalid range end" msgstr "" -#: src/gnome2-console/interface.c:32 -msgid "_Connect" +#: src/lib/regex.c:1076 +msgid "Memory exhausted" msgstr "" -#: src/gnome2-console/interface.c:33 src/gnome2-console/interface.c:232 -msgid "Connect to Director" +#: src/lib/regex.c:1079 +msgid "Invalid preceding regular expression" msgstr "" -#: src/gnome2-console/interface.c:39 -msgid "_Disconnect" +#: src/lib/regex.c:1082 +msgid "Premature end of regular expression" msgstr "" -#: src/gnome2-console/interface.c:40 -msgid "Disconnect from Director" +#: src/lib/regex.c:1085 +msgid "Regular expression too big" msgstr "" -#: src/gnome2-console/interface.c:93 -msgid "_Display Messages" +#: src/lib/regex.c:1088 +msgid "Unmatched ) or \\)" msgstr "" -#: src/gnome2-console/interface.c:129 -msgid "_File" +#: src/lib/regex.c:5874 +msgid "No previous regular expression" msgstr "" -#: src/gnome2-console/interface.c:136 -msgid "_Edit" +#: src/lib/res.c:66 +#, c-format +msgid "rwl_writelock failure at %s:%d: ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:143 -msgid "_View" +#: src/lib/res.c:76 +#, c-format +msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:144 src/gnome2-console/interface.c:252 -msgid "Display Messages" +#: src/lib/rwlock.c:289 +msgid "rwl_writeunlock called too many times.\n" msgstr "" -#: src/gnome2-console/interface.c:150 -msgid "_Settings" +#: src/lib/rwlock.c:293 +msgid "rwl_writeunlock by non-owner.\n" msgstr "" -#: src/gnome2-console/interface.c:157 -msgid "_Help" +#: src/lib/rwlock.c:358 src/lib/semlock.c:248 +#, c-format +msgid "Write lock failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:197 -msgid "Bacula Console" +#: src/lib/rwlock.c:365 src/lib/semlock.c:255 +#, c-format +msgid "Write unlock failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:231 src/wx-console/wxbmainframe.cpp:229 -#: src/wx-console/wxbmainframe.cpp:597 -msgid "Connect" +#: src/lib/rwlock.c:375 src/lib/semlock.c:265 +#, c-format +msgid "Read lock failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:241 -msgid "Run" +#: src/lib/rwlock.c:382 src/lib/semlock.c:272 +#, c-format +msgid "Read unlock failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:242 src/gnome2-console/interface.c:677 -#: src/gnome2-console/interface.c:690 -msgid "Run a Job" +#: src/lib/rwlock.c:391 src/lib/semlock.c:281 +#, c-format +msgid "Thread %d found unchanged elements %d times\n" msgstr "" -#: src/gnome2-console/interface.c:251 -msgid "Msgs" +#: src/lib/rwlock.c:423 src/lib/semlock.c:313 +#, c-format +msgid "Init rwlock failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:271 -msgid "Label" +#: src/lib/rwlock.c:438 src/lib/semlock.c:328 +#, c-format +msgid "Create thread failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:299 -msgid " Command: " +#: src/lib/rwlock.c:449 src/lib/semlock.c:339 +#, c-format +msgid "Join thread failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:307 -msgid "Enter Commands Here" +#: src/lib/rwlock.c:452 src/lib/semlock.c:342 +#, c-format +msgid "%02d: interval %d, writes %d, reads %d\n" msgstr "" -#: src/gnome2-console/interface.c:318 -msgid " Status: " +#: src/lib/rwlock.c:462 src/lib/semlock.c:352 +#, c-format +msgid "data %02d: value %d, %d writes\n" msgstr "" -#: src/gnome2-console/interface.c:326 -msgid " " +#: src/lib/rwlock.c:467 src/lib/semlock.c:357 +#, c-format +msgid "Total: %d thread writes, %d data writes\n" msgstr "" -#: src/gnome2-console/interface.c:422 -msgid "About Bacula Console" +#: src/lib/rwlock.c:539 src/lib/semlock.c:429 +msgid "Try write lock" msgstr "" -#: src/gnome2-console/interface.c:436 -msgid "Bacula Console\n" +#: src/lib/rwlock.c:545 src/lib/semlock.c:435 +msgid "Try read lock" msgstr "" -#: src/gnome2-console/interface.c:444 -msgid "Copyright (c) 2000 - 2004, Kern Sibbald and John Walker" +#: src/lib/rwlock.c:600 src/lib/semlock.c:490 +msgid "Create thread" msgstr "" -#: src/gnome2-console/interface.c:450 -msgid "Authors: Kern Sibbald and John Walker" +#: src/lib/rwlock.c:610 src/lib/semlock.c:500 +msgid "Join thread" msgstr "" -#: src/gnome2-console/interface.c:456 -msgid "It comes by night and sucks the essence from your computers" +#: src/lib/rwlock.c:612 src/lib/semlock.c:502 +#, c-format +msgid "%02d: interval %d, updates %d, r_collisions %d, w_collisions %d\n" msgstr "" -#: src/gnome2-console/interface.c:521 src/gnome2-console/interface.c:536 -msgid "Select Director" +#: src/lib/rwlock.c:624 src/lib/semlock.c:514 +#, c-format +msgid "data %02d: value %d, %d updates\n" msgstr "" -#: src/gnome2-console/interface.c:708 src/gnome2-console/interface.c:1616 -msgid "Job:" +#: src/lib/semlock.c:185 +msgid "sem_unlock by non-owner.\n" msgstr "" -#: src/gnome2-console/interface.c:728 -msgid " Type:" +#: src/lib/signal.c:61 +msgid "Invalid signal number" msgstr "" -#: src/gnome2-console/interface.c:757 src/gnome2-console/interface.c:1644 -#: src/wx-console/wxbrestorepanel.cpp:1862 -msgid "Client:" +#: src/lib/signal.c:87 +#, c-format +msgid "Bacula interrupted by signal %d: %s\n" msgstr "" -#: src/gnome2-console/interface.c:787 src/gnome2-console/interface.c:1672 -msgid "FileSet: " +#: src/lib/signal.c:100 +#, c-format +msgid "Kaboom! %s, %s got signal %d. Attempting traceback.\n" msgstr "" -#: src/gnome2-console/interface.c:813 src/wx-console/wxbrestorepanel.cpp:1868 -msgid "Priority:" +#: src/lib/signal.c:102 +#, c-format +msgid "Kaboom! exepath=%s\n" msgstr "" -#: src/gnome2-console/interface.c:836 -msgid "Level:" +#: src/lib/signal.c:136 +#, c-format +msgid "Fork error: ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:866 src/gnome2-console/interface.c:1418 -#: src/gnome2-console/interface.c:1700 -msgid "Pool:" +#: src/lib/signal.c:143 +#, c-format +msgid "Calling: %s %s %s\n" msgstr "" -#: src/gnome2-console/interface.c:895 src/gnome2-console/interface.c:1393 -#: src/gnome2-console/interface.c:1728 src/wx-console/wxbrestorepanel.cpp:1864 -msgid "Storage:" +#: src/lib/signal.c:145 +#, c-format +msgid "execv: %s failed: ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:924 -msgid "Messages:" +#: src/lib/signal.c:160 +#, c-format +msgid "Traceback complete, attempting cleanup ...\n" msgstr "" -#: src/gnome2-console/interface.c:952 -msgid "Where: " +#: src/lib/signal.c:168 +#, c-format +msgid "It looks like the traceback worked ...\n" msgstr "" -#: src/gnome2-console/interface.c:970 src/wx-console/wxbrestorepanel.cpp:1866 -msgid "When:" +#: src/lib/signal.c:197 +#, c-format +msgid "BA_NSIG too small (%d) should be (%d)\n" msgstr "" -#: src/gnome2-console/interface.c:988 src/wx-console/wxbrestorepanel.cpp:1847 -msgid "Bootstrap:" +#: src/lib/signal.c:203 +msgid "UNKNOWN SIGNAL" msgstr "" -#: src/gnome2-console/interface.c:1108 -msgid "_New" +#: src/lib/signal.c:204 +msgid "Hangup" msgstr "" -#: src/gnome2-console/interface.c:1177 -msgid "Restore File Selection" +#: src/lib/signal.c:205 +msgid "Interrupt" msgstr "" -#: src/gnome2-console/interface.c:1226 -msgid "Current dir:" +#: src/lib/signal.c:206 +msgid "Quit" msgstr "" -#: src/gnome2-console/interface.c:1252 -msgid "Files Selected: " +#: src/lib/signal.c:207 +msgid "Illegal instruction" msgstr "" -#: src/gnome2-console/interface.c:1373 src/gnome2-console/interface.c:1383 -msgid "Label a Volume" +#: src/lib/signal.c:208 +msgid "Trace/Breakpoint trap" msgstr "" -#: src/gnome2-console/interface.c:1444 -msgid "Volume Name:" +#: src/lib/signal.c:209 +msgid "Abort" msgstr "" -#: src/gnome2-console/interface.c:1459 -msgid "Slot:" +#: src/lib/signal.c:211 +msgid "EMT instruction (Emulation Trap)" msgstr "" -#: src/gnome2-console/interface.c:1585 -msgid "Restore Files Dialog" +#: src/lib/signal.c:214 +msgid "IOT trap" msgstr "" -#: src/gnome2-console/interface.c:1599 -msgid "Restore Files" +#: src/lib/signal.c:216 +msgid "BUS error" msgstr "" -#: src/gnome2-console/interface.c:1756 -msgid "Before:" +#: src/lib/signal.c:217 +msgid "Floating-point exception" msgstr "" -#: src/gnome2-console/interface.c:1799 -msgid "Select Files" +#: src/lib/signal.c:218 +msgid "Kill, unblockable" msgstr "" -#: src/gnome2-console/interface.c:1883 -msgid "Progress" +#: src/lib/signal.c:219 +msgid "User-defined signal 1" msgstr "" -#: src/gnome2-console/support.c:41 -#, c-format -msgid "Widget not found: %s" +#: src/lib/signal.c:220 +msgid "Segmentation violation" msgstr "" -#: src/gnome2-console/support.c:60 src/gnome2-console/support.c:85 -#, c-format -msgid "Couldn't find pixmap file: %s" +#: src/lib/signal.c:221 +msgid "User-defined signal 2" msgstr "" -#: src/gnome2-console/support.c:92 -#, c-format -msgid "Failed to load pixbuf file: %s: %s\n" +#: src/lib/signal.c:222 +msgid "Broken pipe" msgstr "" -#: src/gnome2-console/authenticate.c:74 -#, c-format -msgid "%s: Director authorization problem.\n" +#: src/lib/signal.c:223 +msgid "Alarm clock" msgstr "" -#: src/gnome2-console/authenticate.c:75 -msgid "Director authorization problem.\n" +#: src/lib/signal.c:224 +msgid "Termination" msgstr "" -#: src/gnome2-console/authenticate.c:77 -msgid "" -"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +#: src/lib/signal.c:226 +msgid "Stack fault" msgstr "" -#: src/gnome2-console/authenticate.c:87 -#, c-format -msgid "%s: Bad response to Hello command: ERR=%s\n" +#: src/lib/signal.c:228 +msgid "Child status has changed" msgstr "" -#: src/gnome2-console/authenticate.c:89 -msgid "The Director is probably not running.\n" +#: src/lib/signal.c:229 +msgid "Continue" msgstr "" -#: src/gnome2-console/console_conf.c:135 -#, c-format -msgid "Console: name=%s\n" +#: src/lib/signal.c:230 +msgid "Stop, unblockable" msgstr "" -#: src/gnome2-console/console_conf.c:138 -#, c-format -msgid "ConsoleFont: name=%s font face=%s\n" +#: src/lib/signal.c:231 +msgid "Keyboard stop" msgstr "" -#: src/gnome2-console/console.c:88 -#, c-format -msgid "" -"Copyright (C) 2002-2005 Kern Sibbald\n" -"\n" -"Version: %s (%s) %s %s %s\n" -"\n" -"Usage: gnome-console [-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" +#: src/lib/signal.c:232 +msgid "Background read from tty" msgstr "" -#: src/gnome2-console/console.c:219 -#, c-format -msgid "Pthread cond init error = %s\n" +#: src/lib/signal.c:233 +msgid "Background write to tty" msgstr "" -#: src/gnome2-console/console.c:357 -msgid " Not Connected" +#: src/lib/signal.c:234 +msgid "Urgent condition on socket" msgstr "" -#: src/gnome2-console/console.c:478 -#, c-format -msgid " Connecting to Director %s:%d" +#: src/lib/signal.c:235 +msgid "CPU limit exceeded" msgstr "" -#: src/gnome2-console/console.c:479 -#, c-format -msgid "" -"Connecting to Director %s:%d\n" -"\n" +#: src/lib/signal.c:236 +msgid "File size limit exceeded" msgstr "" -#: src/gnome2-console/console.c:494 src/wx-console/console_thread.cpp:360 -#, c-format -msgid "Passphrase for Console \"%s\" TLS private key: " +#: src/lib/signal.c:237 +msgid "Virtual alarm clock" msgstr "" -#: src/gnome2-console/console.c:516 src/wx-console/console_thread.cpp:381 -#, c-format -msgid "Passphrase for Director \"%s\" TLS private key: " +#: src/lib/signal.c:238 +msgid "Profiling alarm clock" msgstr "" -#: src/gnome2-console/console.c:535 src/tray-monitor/tray-monitor.c:860 -#: src/wx-console/console_thread.cpp:399 -msgid "Director daemon" +#: src/lib/signal.c:239 +msgid "Window size change" msgstr "" -#: src/gnome2-console/console.c:547 -msgid " Initializing ..." +#: src/lib/signal.c:240 +msgid "I/O now possible" msgstr "" -#: src/gnome2-console/console.c:583 -msgid " Connected" +#: src/lib/signal.c:242 +msgid "Power failure restart" msgstr "" -#: src/gnome2-console/console.c:591 -msgid " Processing command ..." +#: src/lib/signal.c:245 +msgid "No runnable lwp" msgstr "" -#: src/gnome2-console/console.c:626 -msgid " At prompt waiting for input ..." +#: src/lib/signal.c:248 +msgid "SIGLWP special signal used by thread library" msgstr "" -#: src/gnome2-console/console.c:746 -msgid " Ready" +#: src/lib/signal.c:251 +msgid "Checkpoint Freeze" msgstr "" -#: src/tools/bsmtp.c:85 -#, c-format -msgid "Fatal malformed reply from %s: %s\n" +#: src/lib/signal.c:254 +msgid "Checkpoint Thaw" msgstr "" -#: src/tools/bsmtp.c:121 -#, c-format -msgid "" -"\n" -"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" -" -c set the Cc: field\n" -" -dnn set debug level to nn\n" -" -f set the From: field\n" -" -h use mailhost:port as the SMTP server\n" -" -s set the Subject: field\n" -" -? print this message.\n" -"\n" +#: src/lib/signal.c:257 +msgid "Thread Cancellation" msgstr "" -#: src/tools/bsmtp.c:204 -msgid "Fatal error: no recipient given.\n" +#: src/lib/signal.c:260 +msgid "Resource Lost (e.g. record-lock lost)" msgstr "" -#: src/tools/bsmtp.c:225 +#: src/lib/smartall.c:132 src/lib/smartall.c:223 src/lib/smartall.c:238 +msgid "Out of memory\n" +msgstr "" + +#: src/lib/smartall.c:160 #, c-format -msgid "Fatal gethostname error: ERR=%s\n" +msgid "Attempt to free NULL called from %s:%d\n" msgstr "" -#: src/tools/bsmtp.c:229 +#: src/lib/smartall.c:176 #, c-format -msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" +msgid "qp->qnext->qprev != qp called from %s:%d\n" msgstr "" -#: src/tools/bsmtp.c:254 +#: src/lib/smartall.c:180 #, c-format -msgid "Error unknown mail host \"%s\": ERR=%s\n" +msgid "qp->qprev->qnext != qp called from %s:%d\n" msgstr "" -#: src/tools/bsmtp.c:257 -msgid "Retrying connection using \"localhost\".\n" +#: src/lib/smartall.c:189 +#, c-format +msgid "Buffer overrun called from %s:%d\n" msgstr "" -#: src/tools/bsmtp.c:265 +#: src/lib/smartall.c:260 #, c-format -msgid "Fatal error: Unknown address family for smtp host: %d\n" +msgid "sm_realloc size: %d\n" msgstr "" -#: src/tools/bsmtp.c:273 +#: src/lib/smartall.c:301 #, c-format -msgid "Fatal socket error: ERR=%s\n" +msgid "sm_realloc %d at %x from %s:%d\n" msgstr "" -#: src/tools/bsmtp.c:277 +#: src/lib/smartall.c:363 #, c-format -msgid "Fatal connect error to %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: %lx\n" msgstr "" -#: src/tools/bsmtp.c:282 +#: src/lib/smartall.c:374 #, c-format -msgid "Fatal dup error: ERR=%s\n" +msgid "Orphaned buffer: %6u bytes allocated at line %d of %s %s\n" msgstr "" -#: src/tools/bsmtp.c:286 src/tools/bsmtp.c:290 +#: src/lib/smartall.c:410 #, c-format -msgid "Fatal fdopen error: ERR=%s\n" +msgid "Damaged buffer found. Called from %s:%d\n" msgstr "" -#: src/tools/testls.c:45 +#: src/lib/smartall.c:440 #, c-format msgid "" "\n" -"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -dnn set debug level to nn\n" -" -e specify file of exclude patterns\n" -" -i specify file of include patterns\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" +"Damaged buffers found at %s:%d\n" msgstr "" -#: src/tools/testls.c:130 src/tools/testfind.c:134 +#: src/lib/smartall.c:443 #, c-format -msgid "Could not open include file: %s\n" +msgid " discovery of bad prev link.\n" msgstr "" -#: src/tools/testls.c:143 src/tools/testfind.c:147 +#: src/lib/smartall.c:446 #, c-format -msgid "Could not open exclude file: %s\n" +msgid " discovery of bad next link.\n" msgstr "" -#: src/tools/testfind.c:49 +#: src/lib/smartall.c:449 #, c-format -msgid "" -"\n" -"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -dnn set debug level to nn\n" -" -e specify file of exclude patterns\n" -" -i specify file of include patterns\n" -" - read pattern(s) from stdin\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 " discovery of data overrun.\n" msgstr "" -#: src/tools/testfind.c:199 +#: src/lib/smartall.c:452 #, c-format -msgid "Reg: %s\n" +msgid " Buffer address: %lx\n" msgstr "" -#: src/tools/testfind.c:220 -msgid "\t[will not descend: recursion turned off]" +#: src/lib/smartall.c:459 +#, c-format +msgid "Damaged buffer: %6u bytes allocated at line %d of %s %s\n" msgstr "" -#: src/tools/testfind.c:222 -msgid "\t[will not descend: file system change not allowed]" +#: src/lib/util.c:181 +msgid "Running" msgstr "" -#: src/tools/testfind.c:224 -msgid "\t[will not descend: disallowed file system]" +#: src/lib/util.c:184 +msgid "Blocked" msgstr "" -#: src/tools/testfind.c:337 -#, c-format -msgid "Path: %s\n" +#: src/lib/util.c:194 +msgid "Non-fatal error" msgstr "" -#: src/tools/testfind.c:338 src/dird/verify.c:756 -#, c-format -msgid "File: %s\n" +#: src/lib/util.c:197 src/lib/util.c:264 +msgid "Canceled" msgstr "" -#: src/tools/fstype.c:34 -#, c-format -msgid "" -"\n" -"Usage: fstype [-d debug_level] 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" +#: src/lib/util.c:200 +msgid "Verify differences" msgstr "" -#: src/tools/fstype.c:86 -#, c-format -msgid "%s: unknown\n" +#: src/lib/util.c:203 +msgid "Waiting on FD" msgstr "" -#: src/tools/dbcheck.c:158 -msgid "" -"Warning skipping the additional parameters for working directory/dbname/user/" -"password/host.\n" +#: src/lib/util.c:206 +msgid "Wait on SD" msgstr "" -#: src/tools/dbcheck.c:174 -#, c-format -msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" +#: src/lib/util.c:209 +msgid "Wait for new Volume" msgstr "" -#: src/tools/dbcheck.c:176 -#, c-format -msgid "Error there is no Catalog section in the given config file [%s]\n" +#: src/lib/util.c:212 +msgid "Waiting for mount" msgstr "" -#: src/tools/dbcheck.c:185 -msgid "Error no Director resource defined.\n" +#: src/lib/util.c:215 +msgid "Waiting for Storage resource" msgstr "" -#: src/tools/dbcheck.c:199 -msgid "Wrong number of arguments.\n" +#: src/lib/util.c:218 +msgid "Waiting for Job resource" msgstr "" -#: src/tools/dbcheck.c:204 -msgid "Working directory not supplied.\n" +#: src/lib/util.c:221 +msgid "Waiting for Client resource" msgstr "" -#: src/tools/dbcheck.c:269 -#, c-format -msgid "Hello, this is the database check/correct program.\n" +#: src/lib/util.c:224 +msgid "Waiting on Max Jobs" msgstr "" -#: src/tools/dbcheck.c:271 -#, c-format -msgid "Modify database is on." +#: src/lib/util.c:227 +msgid "Waiting for Start Time" msgstr "" -#: src/tools/dbcheck.c:273 -#, c-format -msgid "Modify database is off." +#: src/lib/util.c:230 +msgid "Waiting on Priority" msgstr "" -#: src/tools/dbcheck.c:275 src/tools/dbcheck.c:336 +#: src/lib/util.c:237 #, c-format -msgid " Verbose is on.\n" +msgid "Unknown Job termination status=%d" msgstr "" -#: src/tools/dbcheck.c:277 src/tools/dbcheck.c:338 -#, c-format -msgid " Verbose is off.\n" +#: src/lib/util.c:261 +msgid "Fatal Error" msgstr "" -#: src/tools/dbcheck.c:279 -#, c-format -msgid "Please select the fuction you want to perform.\n" +#: src/lib/util.c:267 +msgid "Differences" msgstr "" -#: src/tools/dbcheck.c:283 -#, 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/lib/util.c:270 +msgid "Unknown term code" msgstr "" -#: src/tools/dbcheck.c:302 -#, 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/lib/util.c:298 +msgid "Migrate" msgstr "" -#: src/tools/dbcheck.c:322 -msgid "Select function number: " +#: src/lib/util.c:301 +msgid "Copy" msgstr "" -#: src/tools/dbcheck.c:329 -#, c-format -msgid "Database will be modified.\n" +#: src/lib/util.c:304 +msgid "Unknown Type" msgstr "" -#: src/tools/dbcheck.c:331 -#, c-format -msgid "Database will NOT be modified.\n" +#: src/lib/util.c:336 +msgid "Verify Init Catalog" msgstr "" -#: src/tools/dbcheck.c:421 -#, c-format -msgid "JobId=%s Name=\"%s\" StartTime=%s\n" +#: src/lib/util.c:345 +msgid "Verify Data" msgstr "" -#: src/tools/dbcheck.c:429 -#, c-format -msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" +#: src/lib/util.c:647 +msgid "Working directory not defined. Cannot continue.\n" msgstr "" -#: src/tools/dbcheck.c:436 +#: src/lib/util.c:650 #, c-format -msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" +msgid "Working Directory: \"%s\" not found. Cannot continue.\n" msgstr "" -#: src/tools/dbcheck.c:443 +#: src/lib/util.c:654 #, c-format -msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" +msgid "Working Directory: \"%s\" is not a directory. Cannot continue.\n" msgstr "" -#: src/tools/dbcheck.c:450 -#, c-format -msgid "Orphaned ClientId=%s Name=\"%s\"\n" +#: src/lib/var.c:2659 +msgid "everything ok" msgstr "" -#: src/tools/dbcheck.c:503 -#, c-format -msgid "Deleting: %s\n" +#: src/lib/var.c:2660 +msgid "incomplete named character" msgstr "" -#: src/tools/dbcheck.c:577 -#, c-format -msgid "Checking for duplicate Filename entries.\n" +#: src/lib/var.c:2661 +msgid "incomplete hexadecimal value" msgstr "" -#: src/tools/dbcheck.c:586 -#, c-format -msgid "Found %d duplicate Filename records.\n" +#: src/lib/var.c:2662 +msgid "invalid hexadecimal value" msgstr "" -#: src/tools/dbcheck.c:587 -msgid "Print the list? (yes/no): " +#: src/lib/var.c:2663 +msgid "octal value too large" msgstr "" -#: src/tools/dbcheck.c:603 src/tools/dbcheck.c:657 -#, c-format -msgid "Found %d for: %s\n" +#: src/lib/var.c:2664 +msgid "invalid octal value" msgstr "" -#: src/tools/dbcheck.c:630 -#, c-format -msgid "Checking for duplicate Path entries.\n" +#: src/lib/var.c:2665 +msgid "incomplete octal value" msgstr "" -#: src/tools/dbcheck.c:640 -#, c-format -msgid "Found %d duplicate Path records.\n" +#: src/lib/var.c:2666 +msgid "incomplete grouped hexadecimal value" msgstr "" -#: src/tools/dbcheck.c:641 src/tools/dbcheck.c:691 src/tools/dbcheck.c:723 -#: src/tools/dbcheck.c:755 src/tools/dbcheck.c:783 src/tools/dbcheck.c:811 -#: src/tools/dbcheck.c:849 src/tools/dbcheck.c:887 src/tools/dbcheck.c:918 -#: src/tools/dbcheck.c:948 src/tools/dbcheck.c:982 src/tools/dbcheck.c:1040 -msgid "Print them? (yes/no): " +#: src/lib/var.c:2667 +msgid "incorrect character class specification" msgstr "" -#: src/tools/dbcheck.c:683 -#, c-format -msgid "Checking for orphaned JobMedia entries.\n" +#: src/lib/var.c:2668 +msgid "invalid expansion configuration" msgstr "" -#: src/tools/dbcheck.c:690 -#, c-format -msgid "Found %d orphaned JobMedia records.\n" +#: src/lib/var.c:2669 +msgid "out of memory" msgstr "" -#: src/tools/dbcheck.c:703 -#, c-format -msgid "Deleting %d orphaned JobMedia records.\n" +#: src/lib/var.c:2670 +msgid "incomplete variable specification" msgstr "" -#: src/tools/dbcheck.c:712 -#, c-format -msgid "Checking for orphaned File entries. This may take some time!\n" +#: src/lib/var.c:2671 +msgid "undefined variable" msgstr "" -#: src/tools/dbcheck.c:722 -#, c-format -msgid "Found %d orphaned File records.\n" +#: src/lib/var.c:2672 +msgid "input is neither text nor variable" msgstr "" -#: src/tools/dbcheck.c:735 -#, c-format -msgid "Deleting %d orphaned File records.\n" +#: src/lib/var.c:2673 +msgid "unknown command character in variable" msgstr "" -#: src/tools/dbcheck.c:744 -#, c-format -msgid "Checking for orphaned Path entries. This may take some time!\n" +#: src/lib/var.c:2674 +msgid "malformatted search and replace operation" msgstr "" -#: src/tools/dbcheck.c:754 -#, c-format -msgid "Found %d orphaned Path records.\n" +#: src/lib/var.c:2675 +msgid "unknown flag in search and replace operation" msgstr "" -#: src/tools/dbcheck.c:763 -#, c-format -msgid "Deleting %d orphaned Path records.\n" +#: src/lib/var.c:2676 +msgid "invalid regex in search and replace operation" msgstr "" -#: src/tools/dbcheck.c:772 -#, c-format -msgid "Checking for orphaned Filename entries. This may take some time!\n" +#: src/lib/var.c:2677 +msgid "missing parameter in command" msgstr "" -#: src/tools/dbcheck.c:782 -#, c-format -msgid "Found %d orphaned Filename records.\n" +#: src/lib/var.c:2678 +msgid "empty search string in search and replace operation" msgstr "" -#: src/tools/dbcheck.c:791 -#, c-format -msgid "Deleting %d orphaned Filename records.\n" +#: src/lib/var.c:2679 +msgid "start offset missing in cut operation" msgstr "" -#: src/tools/dbcheck.c:800 -#, c-format -msgid "Checking for orphaned FileSet entries. This takes some time!\n" +#: src/lib/var.c:2680 +msgid "offsets in cut operation delimited by unknown character" msgstr "" -#: src/tools/dbcheck.c:810 -#, c-format -msgid "Found %d orphaned FileSet records.\n" +#: src/lib/var.c:2681 +msgid "range out of bounds in cut operation" msgstr "" -#: src/tools/dbcheck.c:822 -#, c-format -msgid "Deleting %d orphaned FileSet records.\n" +#: src/lib/var.c:2682 +msgid "offset out of bounds in cut operation" msgstr "" -#: src/tools/dbcheck.c:831 -#, c-format -msgid "Checking for orphaned Client entries.\n" +#: src/lib/var.c:2683 +msgid "logic error in cut operation" msgstr "" -#: src/tools/dbcheck.c:848 -#, c-format -msgid "Found %d orphaned Client records.\n" +#: src/lib/var.c:2684 +msgid "malformatted transpose operation" msgstr "" -#: src/tools/dbcheck.c:860 -#, c-format -msgid "Deleting %d orphaned Client records.\n" +#: src/lib/var.c:2685 +msgid "source and target class mismatch in transpose operation" msgstr "" -#: src/tools/dbcheck.c:869 -#, c-format -msgid "Checking for orphaned Job entries.\n" +#: src/lib/var.c:2686 +msgid "empty character class in transpose operation" msgstr "" -#: src/tools/dbcheck.c:886 -#, c-format -msgid "Found %d orphaned Job records.\n" +#: src/lib/var.c:2687 +msgid "incorrect character class in transpose operation" msgstr "" -#: src/tools/dbcheck.c:898 -#, c-format -msgid "Deleting %d orphaned Job records.\n" +#: src/lib/var.c:2688 +msgid "malformatted padding operation" msgstr "" -#: src/tools/dbcheck.c:908 -#, c-format -msgid "Checking for Admin Job entries.\n" +#: src/lib/var.c:2689 +msgid "width parameter missing in padding operation" msgstr "" -#: src/tools/dbcheck.c:917 -#, c-format -msgid "Found %d Admin Job records.\n" +#: src/lib/var.c:2690 +msgid "fill string missing in padding operation" msgstr "" -#: src/tools/dbcheck.c:929 -#, c-format -msgid "Deleting %d Admin Job records.\n" +#: src/lib/var.c:2691 +msgid "unknown quoted pair in search and replace operation" msgstr "" -#: src/tools/dbcheck.c:938 -#, c-format -msgid "Checking for Restore Job entries.\n" +#: src/lib/var.c:2692 +msgid "sub-matching reference out of range" msgstr "" -#: src/tools/dbcheck.c:947 -#, c-format -msgid "Found %d Restore Job records.\n" +#: src/lib/var.c:2693 +msgid "invalid argument" msgstr "" -#: src/tools/dbcheck.c:959 -#, c-format -msgid "Deleting %d Restore Job records.\n" +#: src/lib/var.c:2694 +msgid "incomplete quoted pair" msgstr "" -#: src/tools/dbcheck.c:972 -#, c-format -msgid "Checking for Filenames with a trailing slash\n" +#: src/lib/var.c:2695 +msgid "lookup function does not support variable arrays" msgstr "" -#: src/tools/dbcheck.c:981 -#, c-format -msgid "Found %d bad Filename records.\n" +#: src/lib/var.c:2696 +msgid "index of array variable contains an invalid character" msgstr "" -#: src/tools/dbcheck.c:995 src/tools/dbcheck.c:1053 -#, c-format -msgid "Reparing %d bad Filename records.\n" +#: src/lib/var.c:2697 +msgid "index of array variable is incomplete" msgstr "" -#: src/tools/dbcheck.c:1030 -#, c-format -msgid "Checking for Paths without a trailing slash\n" +#: src/lib/var.c:2698 +msgid "bracket expression in array variable's index not closed" msgstr "" -#: src/tools/dbcheck.c:1039 -#, c-format -msgid "Found %d bad Path records.\n" +#: src/lib/var.c:2699 +msgid "division by zero error in index specification" msgstr "" -#: src/findlib/enable_priv.c:85 -msgid "AdjustTokenPrivileges set " +#: src/lib/var.c:2700 +msgid "unterminated loop construct" msgstr "" -#: src/findlib/find_one.c:168 -#, c-format -msgid "Top level directory \"%s\" has an unlisted fstype\n" +#: src/lib/var.c:2701 +msgid "invalid character in loop limits" msgstr "" -#: src/findlib/save-cwd.c:48 -#, c-format -msgid "Cannot open current directory: %s\n" +#: src/lib/var.c:2702 +msgid "malformed operation argument list" msgstr "" -#: src/findlib/save-cwd.c:62 -#, c-format -msgid "Current directory: %s\n" +#: src/lib/var.c:2703 +msgid "undefined operation" msgstr "" -#: src/findlib/save-cwd.c:84 -#, c-format -msgid "Cannot get current directory: %s\n" +#: src/lib/var.c:2704 +msgid "formatting failure" msgstr "" -#: src/findlib/save-cwd.c:105 -#, c-format -msgid "Cannot return to %s from %s: %s\n" +#: src/lib/var.c:2713 +msgid "unknown error" msgstr "" -#: src/findlib/save-cwd.c:109 +#: src/lib/watchdog.c:74 #, c-format -msgid "Cannot return to saved working directory from %s: %s\n" +msgid "Unable to initialize watchdog lock. ERR=%s\n" msgstr "" -#: src/findlib/save-cwd.c:115 -#, c-format -msgid "Cannot return to %s: %s\n" +#: src/lib/watchdog.c:170 +msgid "BUG! register_watchdog called before start_watchdog\n" msgstr "" -#: src/findlib/save-cwd.c:119 +#: src/lib/watchdog.c:173 #, c-format -msgid "Cannot return to saved working directory: %s\n" +msgid "BUG! Watchdog %p has NULL callback\n" msgstr "" -#: src/findlib/bfile.c:64 -msgid "GZIP data" +#: src/lib/watchdog.c:176 +#, c-format +msgid "BUG! Watchdog %p has zero interval\n" msgstr "" -#: src/findlib/bfile.c:66 -msgid "GZIP sparse data" +#: src/lib/watchdog.c:196 +msgid "BUG! unregister_watchdog_unlocked called before start_watchdog\n" msgstr "" -#: src/findlib/bfile.c:68 -msgid "Win32 data" +#: src/lib/watchdog.c:313 +#, c-format +msgid "rwl_writelock failure. ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:70 -msgid "Win32 GZIP data" +#: src/lib/watchdog.c:327 +#, c-format +msgid "rwl_writeunlock failure. ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:72 -msgid "File attributes" +#: src/stored/acquire.c:96 +#, c-format +msgid "Hey! num_writers=%d!!!!\n" msgstr "" -#: src/findlib/bfile.c:74 -msgid "File data" +#: src/stored/acquire.c:146 +#, c-format +msgid "Num_writers=%d not zero. Job %d canceled.\n" msgstr "" -#: src/findlib/bfile.c:76 -msgid "MD5 digest" +#: src/stored/acquire.c:154 +#, c-format +msgid "No volumes specified. Job %d canceled.\n" msgstr "" -#: src/findlib/bfile.c:78 -msgid "Extended attributes" +#: src/stored/acquire.c:182 src/stored/mount.c:73 +#, c-format +msgid "Job %d canceled.\n" msgstr "" -#: src/findlib/bfile.c:80 -msgid "Sparse data" +#: src/stored/acquire.c:193 +#, c-format +msgid "Open device %s Volume \"%s\" failed (EIO): ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:82 -msgid "Program names" +#: src/stored/acquire.c:198 +#, c-format +msgid "Open device %s Volume \"%s\" failed: ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:84 -msgid "Program data" +#: src/stored/acquire.c:263 src/stored/mount.c:67 +#, c-format +msgid "Too many errors trying to mount device %s.\n" msgstr "" -#: src/findlib/bfile.c:86 -msgid "SHA1 digest" +#: src/stored/acquire.c:272 +#, c-format +msgid "Ready to read from volume \"%s\" on device %s.\n" msgstr "" -#: src/findlib/bfile.c:88 -msgid "HFS+ resource fork" +#: src/stored/acquire.c:311 +#, c-format +msgid "Device %s is busy reading.\n" msgstr "" -#: src/findlib/bfile.c:90 -msgid "HFS+ Finder Info" +#: src/stored/acquire.c:341 +#, c-format +msgid "Wanted Volume \"%s\", but device %s is busy writing on \"%s\" .\n" msgstr "" -#: src/findlib/bfile.c:92 -msgid "SHA256 digest" +#: src/stored/acquire.c:360 +#, c-format +msgid "" +"Cannot recycle volume \"%s\" on device %s because it is in use by another " +"job.\n" msgstr "" -#: src/findlib/bfile.c:94 -msgid "SHA512 digest" +#: src/stored/acquire.c:382 +#, c-format +msgid "Could not ready device %s for append.\n" msgstr "" -#: src/findlib/bfile.c:96 -msgid "Signed digest" +#: src/stored/acquire.c:459 src/stored/block.c:354 src/stored/block.c:677 +#: src/stored/block.c:746 +#, c-format +msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" msgstr "" -#: src/findlib/bfile.c:98 -msgid "Encrypted File data" +#: src/stored/acquire.c:501 +#, c-format +msgid "Alert: %s" msgstr "" -#: src/findlib/bfile.c:100 -msgid "Encrypted GZIP data" +#: src/stored/acquire.c:509 +#, c-format +msgid "3997 Bad alert command: %s: ERR=%s.\n" msgstr "" -#: src/findlib/bfile.c:102 -msgid "Encrypted Win32 data" +#: src/stored/ansi_label.c:83 +#, c-format +msgid "Read error on device %s in ANSI label. ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:104 -msgid "Encrypted Win32 GZIP data" +#: src/stored/ansi_label.c:93 +msgid "Insane! End of tape while reading ANSI label.\n" msgstr "" -#: src/findlib/bfile.c:106 -msgid "Encrypted HFS+ resource fork" +#: src/stored/ansi_label.c:117 +msgid "No VOL1 label while reading ANSI/IBM label.\n" msgstr "" -#: src/findlib/create_file.c:86 +#: src/stored/ansi_label.c:137 #, c-format -msgid "File skipped. Not newer: %s\n" +msgid "Wanted ANSI Volume \"%s\" got \"%s\"\n" msgstr "" -#: src/findlib/create_file.c:93 -#, c-format -msgid "File skipped. Not older: %s\n" +#: src/stored/ansi_label.c:148 +msgid "No HDR1 label while reading ANSI label.\n" msgstr "" -#: src/findlib/create_file.c:99 +#: src/stored/ansi_label.c:154 #, c-format -msgid "File skipped. Already exists: %s\n" +msgid "ANSI/IBM Volume \"%s\" does not belong to Bacula.\n" msgstr "" -#: src/findlib/create_file.c:124 -#, c-format -msgid "File %s already exists and could not be replaced. ERR=%s.\n" +#: src/stored/ansi_label.c:165 +msgid "No HDR2 label while reading ANSI/IBM label.\n" msgstr "" -#: src/findlib/create_file.c:176 src/findlib/create_file.c:279 -#: src/findlib/create_file.c:330 -#, c-format -msgid "bpkt already open fid=%d\n" -msgstr "" - -#: src/findlib/create_file.c:198 -msgid "Could not save_dirn" +#: src/stored/ansi_label.c:179 +msgid "Unknown or bad ANSI/IBM label record.\n" msgstr "" -#: src/findlib/create_file.c:207 src/findlib/create_file.c:220 -#, c-format -msgid "Could not chdir to %s: ERR=%s\n" +#: src/stored/ansi_label.c:186 +msgid "Too many records in while reading ANSI/IBM label.\n" msgstr "" -#: src/findlib/create_file.c:240 +#: src/stored/ansi_label.c:285 #, c-format -msgid "Could not create %s: ERR=%s\n" +msgid "ANSI Volume label name \"%s\" longer than 6 chars.\n" msgstr "" -#: src/findlib/create_file.c:253 +#: src/stored/ansi_label.c:302 #, c-format -msgid "Cannot make fifo %s: ERR=%s\n" +msgid "Could not write ANSI VOL1 label. ERR=%s\n" msgstr "" -#: src/findlib/create_file.c:263 +#: src/stored/ansi_label.c:340 src/stored/ansi_label.c:369 #, c-format -msgid "Cannot make node %s: ERR=%s\n" +msgid "Could not write ANSI HDR1 label. ERR=%s\n" msgstr "" -#: src/findlib/create_file.c:284 src/findlib/create_file.c:341 -#: src/dird/ua_query.c:59 -#, c-format -msgid "Could not open %s: ERR=%s\n" +#: src/stored/ansi_label.c:345 src/stored/ansi_label.c:376 +msgid "Could not write ANSI HDR1 label.\n" msgstr "" -#: src/findlib/create_file.c:299 +#: src/stored/ansi_label.c:381 #, c-format -msgid "Could not symlink %s -> %s: ERR=%s\n" +msgid "Error writing EOF to tape. ERR=%s" msgstr "" -#: src/findlib/create_file.c:309 -#, c-format -msgid "Could not hard link %s -> %s: ERR=%s\n" +#: src/stored/ansi_label.c:386 +msgid "write_ansi_ibm_label called for non-ANSI/IBM type\n" msgstr "" -#: src/findlib/create_file.c:360 -#, c-format -msgid "Original file %s not saved: type=%d\n" +#: src/stored/append.c:49 +msgid "DCR is NULL!!!\n" msgstr "" -#: src/findlib/create_file.c:363 -#, c-format -msgid "Unknown file type %d; not restored: %s\n" +#: src/stored/append.c:54 +msgid "DEVICE is NULL!!!\n" msgstr "" -#: src/findlib/create_file.c:394 -#, c-format -msgid "Zero length filename: %s\n" +#: src/stored/append.c:66 +msgid "Unable to set network buffer size.\n" msgstr "" -#: src/findlib/makepath.c:117 -#, c-format -msgid "Cannot create directory %s: ERR=%s\n" +#: src/stored/append.c:79 src/stored/append.c:88 src/stored/append.c:100 +#: src/stored/append.c:256 src/stored/append.c:271 src/stored/append.c:283 +#: src/stored/askdir.c:294 src/stored/askdir.c:295 +msgid "NULL Volume name. This shouldn't happen!!!\n" msgstr "" -#: src/findlib/makepath.c:121 src/findlib/makepath.c:378 +#: src/stored/append.c:94 src/stored/btape.c:1854 #, c-format -msgid "%s exists but is not a directory\n" +msgid "Write session label failed. ERR=%s\n" msgstr "" -#: src/findlib/makepath.c:276 src/findlib/makepath.c:337 -#: src/findlib/makepath.c:397 +#: src/stored/append.c:106 #, c-format -msgid "Cannot change owner and/or group of %s: ERR=%s\n" +msgid "Network send error to FD. ERR=%s\n" msgstr "" -#: src/findlib/makepath.c:297 +#: src/stored/append.c:143 #, c-format -msgid "Cannot chdir to directory, %s: ERR=%s\n" +msgid "Error reading data header from FD. ERR=%s\n" msgstr "" -#: src/findlib/makepath.c:352 src/findlib/makepath.c:368 -#: src/findlib/makepath.c:402 +#: src/stored/append.c:165 #, c-format -msgid "Cannot change permissions of %s: ERR=%s\n" +msgid "Malformed data header from FD: %s\n" msgstr "" -#: src/findlib/match.c:184 src/filed/job.c:931 -#, c-format -msgid "Unknown include/exclude option: %c\n" +#: src/stored/append.c:175 +msgid "File index from FD not positive or sequential\n" msgstr "" -#: src/findlib/attribs.c:392 +#: src/stored/append.c:206 src/stored/append.c:276 src/stored/spool.c:248 #, c-format -msgid "File size of restored file %s not correct. Original %s, restored %s.\n" +msgid "Fatal append error on device %s: ERR=%s\n" msgstr "" -#: src/findlib/attribs.c:410 src/findlib/attribs.c:417 +#: src/stored/append.c:231 #, c-format -msgid "Unable to set file owner %s: ERR=%s\n" +msgid "Error updating file attributes. ERR=%s\n" msgstr "" -#: src/findlib/attribs.c:423 +#: src/stored/append.c:244 #, c-format -msgid "Unable to set file modes %s: ERR=%s\n" +msgid "Network error on data channel. ERR=%s\n" msgstr "" -#: src/findlib/attribs.c:433 +#: src/stored/append.c:265 src/stored/btape.c:1976 #, c-format -msgid "Unable to set file times %s: ERR=%s\n" +msgid "Error writting end session label. ERR=%s\n" msgstr "" -#: src/findlib/attribs.c:447 -#, c-format -msgid "Unable to set file flags %s: ERR=%s\n" +#: src/stored/append.c:278 +msgid "Set ok=FALSE after write_block_to_device.\n" msgstr "" -#: src/findlib/attribs.c:692 -#, c-format -msgid "Error in %s file %s: ERR=%s\n" +#: src/stored/askdir.c:161 +msgid "Network error on bnet_recv in req_vol_info.\n" msgstr "" -#: src/findlib/attribs.c:709 +#: src/stored/askdir.c:178 #, c-format -msgid "Error in %s: ERR=%s\n" +msgid "Error getting Volume info: %s" msgstr "" -#: src/tray-monitor/tray_conf.c:152 src/dird/dird_conf.c:455 -#, c-format -msgid "No %s resource defined\n" +#: src/stored/askdir.c:299 src/stored/askdir.c:300 +msgid "Attempt to update_volume_info in read mode!!!\n" msgstr "" -#: src/tray-monitor/tray_conf.c:161 +#: src/stored/askdir.c:328 #, c-format -msgid "Monitor: name=%s FDtimeout=%s SDtimeout=%s\n" +msgid "Didn't get vol info vol=%s: ERR=%s" msgstr "" -#: src/tray-monitor/tray_conf.c:167 +#: src/stored/askdir.c:359 #, c-format -msgid "Director: name=%s address=%s FDport=%d\n" +msgid "Error creating JobMedia record: ERR=%s\n" msgstr "" -#: src/tray-monitor/tray_conf.c:171 +#: src/stored/askdir.c:366 #, c-format -msgid "Client: name=%s address=%s FDport=%d\n" +msgid "Error creating JobMedia record: %s\n" msgstr "" -#: src/tray-monitor/tray_conf.c:175 +#: src/stored/askdir.c:432 #, c-format -msgid "Storage: name=%s address=%s SDport=%d\n" +msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" msgstr "" -#: src/tray-monitor/tray_conf.c:179 src/dird/dird_conf.c:808 +#: src/stored/askdir.c:445 #, c-format -msgid "Unknown resource type %d in dump_resource.\n" +msgid "" +"Job %s waiting. Cannot find any appendable volumes.\n" +"Please use the \"label\" command to create a new Volume for:\n" +" Storage: %s\n" +" Media type: %s\n" +" Pool: %s\n" msgstr "" -#: src/tray-monitor/tray_conf.c:232 src/dird/dird_conf.c:1105 +#: src/stored/askdir.c:469 src/stored/askdir.c:551 #, c-format -msgid "Unknown resource type %d in free_resource.\n" +msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" msgstr "" -#: src/tray-monitor/tray_conf.c:287 src/dird/dird_conf.c:1256 -#, c-format -msgid "Unknown resource type %d in save_resource.\n" +#: src/stored/askdir.c:479 +msgid "pthread error in mount_next_volume.\n" msgstr "" -#: src/tray-monitor/tray_conf.c:322 src/dird/dird_conf.c:1316 -#, c-format -msgid "Unknown resource type %d in save_resrouce.\n" +#: src/stored/askdir.c:511 +msgid "Cannot request another volume: no volume name given.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:102 +#: src/stored/askdir.c:517 #, c-format -msgid "" -"Copyright (C) 2000-2004 Kern Sibbald and John Walker\n" -"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" -" -dnn set debug level to nn\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" +msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:251 +#: src/stored/askdir.c:532 #, c-format -msgid "" -"Error: %d Monitor resource defined in %s. You must define one and only one " -"Monitor resource.\n" +msgid "Please mount Volume \"%s\" on Storage Device %s for Job %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:282 -#, c-format -msgid "" -"No Client, Storage nor 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/askdir.c:561 +msgid "pthread error in mount_volume\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:304 +#: src/stored/authenticate.c:53 #, 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:319 -msgid "Open status window..." +msgid "I only authenticate Directors, not %d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:325 -msgid "Exit" +#: src/stored/authenticate.c:120 +msgid "" +"Incorrect password given by Director.\n" +"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " +"help.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:337 -msgid "Bacula tray monitor" +#: src/stored/authenticate.c:178 +#, c-format +msgid "Unable to authenticate Director at %s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:362 -msgid " (DIR)" +#: src/stored/authenticate.c:223 src/stored/authenticate.c:259 +#, c-format +msgid "" +"Incorrect authorization key from File daemon at %s rejected.\n" +"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " +"help.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:366 -msgid " (FD)" +#: src/stored/autochanger.c:53 +#, c-format +msgid "No Changer Name given for device %s. Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:370 -msgid " (SD)" +#: src/stored/autochanger.c:59 +#, c-format +msgid "No Changer Command given for device %s. Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:383 -msgid "Unknown status." +#: src/stored/autochanger.c:72 +#, c-format +msgid "" +"Media Type not the same for all devices in changer %s. Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:424 -msgid "Refresh interval in seconds: " +#: src/stored/autochanger.c:152 +#, c-format +msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:432 -msgid "Refresh now" +#: src/stored/autochanger.c:161 +#, c-format +msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:436 -msgid "About" +#: src/stored/autochanger.c:167 +#, c-format +msgid "3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:440 -msgid "Close" +#: src/stored/autochanger.c:208 +msgid "3992 Missing Changer command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:460 +#: src/stored/autochanger.c:218 #, c-format -msgid "Disconnecting from Director %s:%d\n" +msgid "3301 Issuing autochanger \"loaded drive %d\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:463 +#: src/stored/autochanger.c:227 #, c-format -msgid "Disconnecting from Client %s:%d\n" +msgid "3302 Autochanger \"loaded drive %d\", result is Slot %d.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:466 +#: src/stored/autochanger.c:231 #, c-format -msgid "Disconnecting from Storage %s:%d\n" -msgstr "" - -#: src/tray-monitor/tray-monitor.c:502 src/tray-monitor/tray-monitor.c:512 -msgid "Bacula Tray Monitor" +msgid "3302 Autochanger \"loaded drive %d\", result: nothing loaded.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:503 src/tray-monitor/tray-monitor.c:513 -msgid "" -"Copyright (C) 2004-2005 Kern Sibbald\n" -"Written by Nicolas Boichat\n" +#: src/stored/autochanger.c:238 +#, c-format +msgid "3991 Bad autochanger \"loaded drive %d\" command: ERR=%s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:505 src/tray-monitor/tray-monitor.c:515 -msgid "Version:" +#: src/stored/autochanger.c:297 src/stored/autochanger.c:380 +#, c-format +msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:583 +#: src/stored/autochanger.c:310 src/stored/autochanger.c:401 #, c-format -msgid "Error, currentitem is not a Client or a Storage..\n" +msgid "3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:656 +#: src/stored/autochanger.c:369 #, c-format -msgid "" -"Current job: %s\n" -"Last job: %s" +msgid "Volume %s is in use by device %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:668 +#: src/stored/autochanger.c:439 #, c-format -msgid " (%d errors)" +msgid "3993 Device %s not an autochanger device.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:671 +#: src/stored/autochanger.c:464 #, c-format -msgid " (%d error)" +msgid "3306 Issuing autochanger \"%s\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:708 -msgid "No current job." +#: src/stored/autochanger.c:467 +msgid "3996 Open bpipe failed.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:711 -msgid "No last job." +#: src/stored/autochanger.c:494 +#, c-format +msgid "Autochanger error: ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:719 -msgid "Job status: Created" -msgstr "" - -#: src/tray-monitor/tray-monitor.c:724 -msgid "Job status: Running" +#: src/stored/bcopy.c:58 +#, c-format +msgid "" +"Copyright (C) 2002-2005 Kern Sibbald.\n" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bcopy [-d debug_level] \n" +" -b bootstrap specify a bootstrap file\n" +" -c specify configuration file\n" +" -d set debug level to nn\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/tray-monitor/tray-monitor.c:728 -msgid "Job status: Blocked" +#: src/stored/bcopy.c:137 src/stored/bextract.c:177 src/stored/bscan.c:221 +msgid "Wrong number of arguments: \n" msgstr "" -#: src/tray-monitor/tray-monitor.c:733 -msgid "Job status: Terminated" +#: src/stored/bcopy.c:172 src/stored/btape.c:333 src/stored/device.c:266 +#, c-format +msgid "dev open failed: %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:738 -msgid "Job status: Terminated in error" +#: src/stored/bcopy.c:185 +msgid "Write of last block failed.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:744 -msgid "Job status: Error" +#: src/stored/bcopy.c:188 +#, c-format +msgid "%u Jobs copied. %u records copied.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:748 -msgid "Job status: Fatal error" +#: src/stored/bcopy.c:205 src/stored/bscan.c:390 +#, c-format +msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:753 -msgid "Job status: Verify differences" +#: src/stored/bcopy.c:220 +msgid "Volume is prelabeled. This volume cannot be copied.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:758 -msgid "Job status: Canceled" +#: src/stored/bcopy.c:223 +msgid "Volume label not copied.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:763 -msgid "Job status: Waiting on File daemon" +#: src/stored/bcopy.c:235 src/stored/bcopy.c:242 src/stored/bcopy.c:265 +#: src/stored/btape.c:2342 +#, c-format +msgid "Cannot fixup device error. %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:768 -msgid "Job status: Waiting on the Storage daemon" +#: src/stored/bcopy.c:247 +msgid "EOM label not copied.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:773 -msgid "Job status: Waiting for new media" +#: src/stored/bcopy.c:250 +msgid "EOT label not copied.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:778 -msgid "Job status: Waiting for Mount" +#: src/stored/bcopy.c:290 src/stored/bextract.c:479 src/stored/bls.c:443 +#: src/stored/bscan.c:1234 src/stored/btape.c:2690 +#, c-format +msgid "Mount Volume \"%s\" on device %s and press return when ready: " msgstr "" -#: src/tray-monitor/tray-monitor.c:783 -msgid "Job status: Waiting for storage resource" +#: src/stored/bextract.c:70 +#, c-format +msgid "" +"Copyright (C) 2000-2005 Kern Sibbald.\n" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bextract \n" +" -b specify a bootstrap file\n" +" -c specify a configuration file\n" +" -d set debug level to nn\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/tray-monitor/tray-monitor.c:788 -msgid "Job status: Waiting for job resource" +#: src/stored/bextract.c:127 src/stored/bls.c:128 +#, c-format +msgid "Could not open exclude file: %s, ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:793 -msgid "Job status: Waiting for Client resource" +#: src/stored/bextract.c:142 src/stored/bls.c:142 +#, c-format +msgid "Could not open include file: %s, ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:798 -msgid "Job status: Waiting for maximum jobs" +#: src/stored/bextract.c:198 +#, c-format +msgid "%d Program Name and/or Program Data Stream records ignored.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:803 -msgid "Job status: Waiting for start time" +#: src/stored/bextract.c:202 +#, c-format +msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:808 -msgid "Job status: Waiting for higher priority jobs to finish" +#: src/stored/bextract.c:226 +#, c-format +msgid "Cannot stat %s. It must exist. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:813 +#: src/stored/bextract.c:230 #, c-format -msgid "Unknown job status %c." +msgid "%s must be a directory.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:814 +#: src/stored/bextract.c:251 #, c-format -msgid "Job status: Unknown(%c)" +msgid "%u files restored.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:821 -#, c-format -msgid "Bad scan : '%s' %d\n" +#: src/stored/bextract.c:278 src/stored/bextract.c:450 +msgid "Logic error output file should be open but is not.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:859 -#, c-format -msgid "Connecting to Director %s:%d" +#: src/stored/bextract.c:285 src/stored/bls.c:364 src/stored/bscan.c:647 +msgid "Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:865 +#: src/stored/bextract.c:347 #, c-format -msgid "Connecting to Client %s:%d\n" +msgid "Seek error on %s: %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:866 +#: src/stored/bextract.c:400 #, c-format -msgid "Connecting to Client %s:%d" +msgid "Uncompression error. ERR=%d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:867 src/dird/fd_cmds.c:73 -msgid "File daemon" +#: src/stored/bextract.c:408 +msgid "===Write error===\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:872 -#, c-format -msgid "Connecting to Storage %s:%d\n" +#: src/stored/bextract.c:441 +msgid "Got Program Name or Data Stream. Ignored.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:873 +#: src/stored/block.c:79 #, c-format -msgid "Connecting to Storage %s:%d" +msgid "" +"Dump block %s %x: size=%d BlkNum=%d\n" +" Hdrcksum=%x cksum=%x\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:874 src/filed/job.c:1158 -#: src/dird/msgchan.c:78 -msgid "Storage daemon" +#: src/stored/block.c:92 +#, c-format +msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d p=%x\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:878 src/tray-monitor/tray-monitor.c:916 +#: src/stored/block.c:148 #, c-format -msgid "Error, currentitem is not a Client, a Storage or a Director..\n" +msgid "%d block read errors not printed.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:884 -msgid "Cannot connect to daemon.\n" +#: src/stored/block.c:236 src/stored/block.c:252 src/stored/block.c:262 +#, c-format +msgid "" +"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " +"discarded.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:885 -msgid "Cannot connect to daemon." +#: src/stored/block.c:276 +#, 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/tray-monitor/tray-monitor.c:897 +#: src/stored/block.c:302 #, c-format -msgid "Authentication error : %s" +msgid "" +"Volume data error at %u:%u!\n" +"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:904 -msgid "Opened connection with Director daemon.\n" +#: src/stored/block.c:410 +msgid "Cannot write block. Device at EOM.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:905 -msgid "Opened connection with Director daemon." +#: src/stored/block.c:415 +msgid "Attempt to write on read-only Volume.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:908 -msgid "Opened connection with File daemon.\n" +#: src/stored/block.c:467 +#, c-format +msgid "User defined maximum volume capacity %s exceeded on device %s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:909 -msgid "Opened connection with File daemon." +#: src/stored/block.c:482 +#, c-format +msgid "Unable to write EOF. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:912 -msgid "Opened connection with Storage daemon.\n" +#: src/stored/block.c:508 src/stored/block.c:519 +msgid "Write block header zeroed.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:913 -msgid "Opened connection with Storage daemon." +#: src/stored/block.c:537 +#, c-format +msgid "Write error at %u:%u on device %s. ERR=%s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:948 -msgid "<< Error: BNET_PROMPT signal received. >>\n" +#: src/stored/block.c:544 +#, c-format +msgid "End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:953 src/wx-console/console_thread.cpp:465 -msgid "<< Heartbeat signal received, answered. >>\n" +#: src/stored/block.c:619 src/stored/block.c:625 +#, c-format +msgid "Backspace file at EOT failed. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:957 +#: src/stored/block.c:632 #, c-format -msgid "<< Unexpected signal received : %s >>\n" +msgid "Backspace record at EOT failed. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:962 -msgid "\n" +#: src/stored/block.c:649 +#, c-format +msgid "Re-read last block at EOT failed. ERR=%s" msgstr "" -#: src/tray-monitor/tray-monitor.c:966 -msgid "Error : BNET_HARDEOF or BNET_ERROR" +#: src/stored/block.c:653 +msgid "Re-read of last block succeeded.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:972 -msgid "\n" +#: src/stored/block.c:656 +#, c-format +msgid "Re-read of last block failed. Last block=%u Current block=%u.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:976 -msgid "Error : Connection closed." +#: src/stored/block.c:685 +#, c-format +msgid "" +"Error writing final EOF to tape. This Volume may not be readable.\n" +"%s" msgstr "" -#: src/tray-monitor/authenticate.c:78 +#: src/stored/block.c:795 src/stored/dvd.c:689 +#, c-format msgid "" -"Director authorization problem.\n" -"Most likely the passwords do not agree.\n" -"Please see http://www.bacula.org/html-manual/faq.html#AuthorizationErrors " -"for help.\n" +"Error while writing, current part number is less than the total number of " +"parts (%d/%d, device=%s)\n" msgstr "" -#: src/tray-monitor/authenticate.c:121 src/dird/authenticate.c:67 -#: src/dird/authenticate.c:68 +#: src/stored/block.c:803 src/stored/block.c:913 #, c-format -msgid "Error sending Hello to Storage daemon. ERR=%s\n" +msgid "Unable to open device next part %s: ERR=%s\n" msgstr "" -#: src/tray-monitor/authenticate.c:127 +#: src/stored/block.c:821 +#, c-format msgid "" -"Director and Storage daemon passwords or names not the same.\n" -"Please see http://www.bacula.org/html-manual/faq.html#AuthorizationErrors " -"for help.\n" +"End of Volume \"%s\" at %u:%u on device %s (part_size=%s, free_space=%s, " +"free_space_errno=%d, errmsg=%s).\n" msgstr "" -#: src/tray-monitor/authenticate.c:134 src/dird/authenticate.c:132 +#: src/stored/block.c:834 #, c-format -msgid "bdird\n" +" -b specify a bootstrap file\n" +" -c specify a config file\n" +" -d specify debug level\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/filed/restore.c:214 src/filed/restore.c:493 -msgid "Logic error: output file should be open\n" +#: src/stored/bls.c:189 +msgid "No archive name specified\n" msgstr "" -#: src/filed/restore.c:231 src/filed/restore.c:509 src/filed/restore.c:546 +#: src/stored/bls.c:224 #, c-format -msgid "Missing cryptographic signature for %s\n" +msgid "" +"\n" +"Warning, this Volume is a continuation of Volume %s\n" msgstr "" -#: src/filed/restore.c:245 src/filed/restore.c:515 -msgid "Logic error: output file should not be open\n" +#: src/stored/bls.c:267 +#, c-format +msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/filed/restore.c:326 -msgid "Missing private key required to decrypt encrypted backup data." +#: src/stored/bls.c:278 +#, c-format +msgid "Mounted Volume \"%s\".\n" msgstr "" -#: src/filed/restore.c:329 -msgid "Decrypt of the session key failed." +#: src/stored/bls.c:280 +#, c-format +msgid "Got EOF at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/filed/restore.c:333 +#: src/stored/bls.c:304 #, c-format -msgid "An error occured while decoding encrypted session data stream: %s" +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/filed/restore.c:345 +#: src/stored/bls.c:313 #, c-format -msgid "Failed to initialize decryption context for %s\n" +msgid "Block: %d size=%d\n" msgstr "" -#: src/filed/restore.c:409 +#: src/stored/bls.c:380 #, c-format -msgid " Cannot open resource fork for %s.\n" +msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" msgstr "" -#: src/filed/restore.c:432 -#, c-format -msgid " Invalid length of Finder Info (got %d, not 32)\n" +#: src/stored/bls.c:397 src/stored/read_record.c:322 +msgid "Fresh Volume Label" msgstr "" -#: src/filed/restore.c:436 -#, c-format -msgid " Could not set Finder Info on %s\n" +#: src/stored/bls.c:400 src/stored/read_record.c:325 +msgid "Volume Label" msgstr "" -#: src/filed/restore.c:448 -#, c-format -msgid "Can't restore ACL of %s\n" +#: src/stored/bls.c:404 src/stored/label.c:969 +msgid "Begin Job Session" msgstr "" -#: src/filed/restore.c:460 -#, c-format -msgid "Can't restore default ACL of %s\n" +#: src/stored/bls.c:408 src/stored/label.c:972 +msgid "End Job Session" +msgstr "" + +#: src/stored/bls.c:411 +msgid "End of Medium" +msgstr "" + +#: src/stored/bls.c:414 src/stored/label.c:981 +msgid "Unknown" msgstr "" -#: src/filed/restore.c:470 +#: src/stored/bls.c:420 src/stored/read_record.c:343 #, c-format -msgid "Failed to decode message signature for %s\n" +msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" msgstr "" -#: src/filed/restore.c:591 +#: src/stored/bscan.c:109 #, c-format msgid "" -"%d non-supported data streams and %d non-supported attrib streams ignored.\n" +"Copyright (C) 2001-2005 Kern Sibbald.\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 nn\n" +" -m update media info in database\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\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/filed/restore.c:595 +#: src/stored/bscan.c:234 src/stored/stored.c:265 #, c-format -msgid "%d non-supported resource fork streams ignored.\n" +msgid "No Storage resource defined in %s. Cannot continue.\n" msgstr "" -#: src/filed/restore.c:598 +#: src/stored/bscan.c:242 src/stored/stored.c:296 #, c-format -msgid "%d non-supported Finder Info streams ignored.\n" +msgid "No Working Directory defined in %s. Cannot continue.\n" msgstr "" -#: src/filed/restore.c:601 +#: src/stored/bscan.c:250 #, c-format -msgid "%d non-supported acl streams ignored.\n" +msgid "Working Directory: %s not found. Cannot continue.\n" msgstr "" -#: src/filed/restore.c:613 -msgid "None" +#: src/stored/bscan.c:254 +#, c-format +msgid "Working Directory: %s is not a directory. Cannot continue.\n" msgstr "" -#: src/filed/restore.c:617 -msgid "Zlib errno" +#: src/stored/bscan.c:268 src/stored/bscan.c:341 +#, c-format +msgid "First Volume Size = %sn" msgstr "" -#: src/filed/restore.c:619 -msgid "Zlib stream error" +#: src/stored/bscan.c:274 +msgid "Could not init Bacula database\n" msgstr "" -#: src/filed/restore.c:621 -msgid "Zlib data error" +#: src/stored/bscan.c:281 +#, c-format +msgid "Using Database: %s, User: %s\n" msgstr "" -#: src/filed/restore.c:623 -msgid "Zlib memory error" +#: src/stored/bscan.c:315 +#, c-format +msgid "Create JobMedia for Job %s\n" msgstr "" -#: src/filed/restore.c:625 -msgid "Zlib buffer error" +#: src/stored/bscan.c:326 +#, c-format +msgid "Could not create JobMedia record for Volume=%s Job=%s\n" msgstr "" -#: src/filed/restore.c:627 -msgid "Zlib version error" +#: src/stored/bscan.c:382 +#, c-format +msgid "done: %d%%\n" msgstr "" -#: src/filed/restore.c:662 -#, c-format -msgid "Signature validation failed for %s: \n" +#: src/stored/bscan.c:406 +msgid "Volume is prelabeled. This tape cannot be scanned.\n" msgstr "" -#: src/filed/restore.c:669 src/filed/restore.c:684 +#: src/stored/bscan.c:418 #, c-format -msgid "Signature validation failed for %s: %s\n" +msgid "Pool record for %s found in DB.\n" msgstr "" -#: src/filed/restore.c:754 +#: src/stored/bscan.c:422 #, c-format -msgid "Uncompression error on file %s. ERR=%s\n" +msgid "VOL_LABEL: Pool record not found for Pool: %s\n" msgstr "" -#: src/filed/restore.c:785 -msgid "Decryption error\n" +#: src/stored/bscan.c:428 +#, c-format +msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" msgstr "" -#: src/filed/restore.c:804 src/filed/restore.c:849 +#: src/stored/bscan.c:432 #, c-format -msgid "Write error in Win32 Block Decomposition on %s: %s\n" +msgid "Pool type \"%s\" is OK.\n" msgstr "" -#: src/filed/restore.c:843 +#: src/stored/bscan.c:442 #, c-format -msgid "Decryption error for %s\n" +msgid "Media record for %s found in DB.\n" msgstr "" -#: src/filed/verify.c:45 +#: src/stored/bscan.c:449 #, c-format -msgid "Cannot malloc %d network read buffer\n" +msgid "VOL_LABEL: Media record not found for Volume: %s\n" msgstr "" -#: src/filed/verify.c:113 src/filed/backup.c:242 +#: src/stored/bscan.c:456 #, c-format -msgid " Could not access %s: ERR=%s\n" +msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" msgstr "" -#: src/filed/verify.c:120 src/filed/backup.c:249 +#: src/stored/bscan.c:460 #, c-format -msgid " Could not follow link %s: ERR=%s\n" +msgid "Media type \"%s\" is OK.\n" msgstr "" -#: src/filed/verify.c:127 src/filed/backup.c:256 +#: src/stored/bscan.c:469 #, c-format -msgid " Could not stat %s: ERR=%s\n" +msgid "VOL_LABEL: OK for Volume: %s\n" msgstr "" -#: src/filed/verify.c:133 src/filed/backup.c:263 +#: src/stored/bscan.c:476 #, c-format -msgid " Unchanged file skipped: %s\n" +msgid "%d \"errors\" ignored before first Start of Session record.\n" msgstr "" -#: src/filed/verify.c:136 +#: src/stored/bscan.c:487 #, c-format -msgid " Archive file skipped: %s\n" +msgid "SOS_LABEL: Found Job record for JobId: %d\n" msgstr "" -#: src/filed/verify.c:139 +#: src/stored/bscan.c:492 #, c-format -msgid " Recursion turned off. Directory skipped: %s\n" +msgid "SOS_LABEL: Job record not found for JobId: %d\n" msgstr "" -#: src/filed/verify.c:142 +#: src/stored/bscan.c:532 #, c-format -msgid " File system change prohibited. Directory skipped: %s\n" +msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/filed/verify.c:147 src/filed/backup.c:270 +#: src/stored/bscan.c:538 #, c-format -msgid " Could not open directory %s: ERR=%s\n" +msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/filed/verify.c:152 +#: src/stored/bscan.c:544 #, c-format -msgid " Unknown file type %d: %s\n" +msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/filed/verify.c:195 src/filed/verify_vol.c:201 +#: src/stored/bscan.c:562 src/stored/bscan.c:1013 #, c-format -msgid "Network error in send to Director: ERR=%s\n" +msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" msgstr "" -#: src/filed/verify.c:228 src/filed/backup.c:306 +#: src/stored/bscan.c:606 #, c-format -msgid "%s digest initialization failed\n" +msgid "Could not update job record. ERR=%s\n" msgstr "" -#: src/filed/verify.c:284 src/filed/backup.c:368 +#: src/stored/bscan.c:617 #, c-format -msgid " Cannot open %s: ERR=%s.\n" +msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" msgstr "" -#: src/filed/verify.c:298 src/filed/backup.c:417 +#: src/stored/bscan.c:629 #, c-format -msgid " Cannot open resource fork for %s: ERR=%s.\n" +msgid "Could not find Job for SessId=%d SessTime=%d record.\n" msgstr "" -#: src/filed/verify.c:334 +#: src/stored/bscan.c:665 #, c-format -msgid "Error reading file %s: ERR=%s\n" +msgid "%s file records. At file:blk=%s:%s bytes=%s\n" msgstr "" -#: src/filed/backup.c:70 -msgid "Cannot set buffer size FD->SD.\n" +#: src/stored/bscan.c:708 +#, c-format +msgid "Got MD5 record: %s\n" msgstr "" -#: src/filed/backup.c:95 src/filed/backup.c:107 -msgid "An error occured while encrypting the stream.\n" +#: src/stored/bscan.c:717 +#, c-format +msgid "Got SHA1 record: %s\n" msgstr "" -#: src/filed/backup.c:211 +#: src/stored/bscan.c:725 #, c-format -msgid " Recursion turned off. Will not descend into %s\n" +msgid "Got Prog Names Stream: %s\n" msgstr "" -#: src/filed/backup.c:218 -#, c-format -msgid " Filesystem change prohibited. Will not descend into %s\n" +#: src/stored/bscan.c:731 +msgid "Got Prog Data Stream record.\n" msgstr "" -#: src/filed/backup.c:224 +#: src/stored/bscan.c:735 #, c-format -msgid " Disallowed filesystem. Will not descend into %s\n" +msgid "Unknown stream type!!! stream=%d data=%s\n" msgstr "" -#: src/filed/backup.c:266 +#: src/stored/bscan.c:799 #, c-format -msgid " Archive file not saved: %s\n" +msgid "Could not create File Attributes record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:276 +#: src/stored/bscan.c:805 #, c-format -msgid " Unknown file type %d; not saved: %s\n" +msgid "Created File record: %s\n" msgstr "" -#: src/filed/backup.c:320 +#: src/stored/bscan.c:842 #, c-format -msgid "%s signature digest initialization failed\n" +msgid "Could not create media record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:338 +#: src/stored/bscan.c:846 src/stored/bscan.c:867 #, c-format -msgid "Python reader program \"%s\" not found.\n" +msgid "Could not update media record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:471 -msgid "Failed to allocate memory for stream signature.\n" +#: src/stored/bscan.c:850 +#, c-format +msgid "Created Media record for Volume: %s\n" msgstr "" -#: src/filed/backup.c:476 src/filed/backup.c:482 src/filed/backup.c:495 -msgid "An error occured while signing the stream.\n" +#: src/stored/bscan.c:871 +#, c-format +msgid "Updated Media record at end of Volume: %s\n" msgstr "" -#: src/filed/backup.c:596 -msgid "Failed to initialize encryption context\n" +#: src/stored/bscan.c:888 +#, c-format +msgid "Could not create pool record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:617 src/filed/backup.c:728 src/filed/backup.c:757 -#: src/filed/backup.c:778 src/filed/backup.c:823 src/filed/backup.c:836 -#: src/filed/backup.c:844 src/filed/backup.c:889 src/filed/backup.c:923 +#: src/stored/bscan.c:892 #, c-format -msgid "Network send error to SD. ERR=%s\n" +msgid "Created Pool record for Pool: %s\n" msgstr "" -#: src/filed/backup.c:692 +#: src/stored/bscan.c:912 #, c-format -msgid "Compression error: %d\n" +msgid "Created Client record for Client: %s\n" msgstr "" -#: src/filed/backup.c:716 -msgid "Encryption error\n" +#: src/stored/bscan.c:929 +#, c-format +msgid "Fileset \"%s\" already exists.\n" msgstr "" -#: src/filed/backup.c:744 -msgid "Encryption padding error\n" +#: src/stored/bscan.c:933 +#, c-format +msgid "Could not create FileSet record \"%s\". ERR=%s\n" msgstr "" -#: src/filed/backup.c:769 +#: src/stored/bscan.c:938 #, c-format -msgid "Read error on file %s. ERR=%s\n" +msgid "Created FileSet record \"%s\"\n" msgstr "" -#: src/filed/backup.c:772 -msgid "Too many errors.\n" +#: src/stored/bscan.c:985 +#, c-format +msgid "Could not create JobId record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:814 +#: src/stored/bscan.c:991 #, c-format -msgid "Error reading ACL of %s\n" +msgid "Could not update job start record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:868 -msgid "Invalid file flags, no supported data stream type.\n" +#: src/stored/bscan.c:994 +#, c-format +msgid "Created new JobId=%u record for original JobId=%u\n" msgstr "" -#: src/filed/job.c:328 +#: src/stored/bscan.c:1044 #, c-format -msgid "2901 Job %s not found.\n" +msgid "Could not update JobId=%u record. ERR=%s\n" msgstr "" -#: src/filed/job.c:344 +#: src/stored/bscan.c:1049 #, c-format -msgid "2001 Job %s marked to be canceled.\n" +msgid "Updated Job termination record for JobId=%u TermStat=%c\n" msgstr "" -#: src/filed/job.c:347 -msgid "2902 Error scanning cancel command.\n" +#: src/stored/bscan.c:1071 +#, c-format +msgid "Job Termination code: %d" msgstr "" -#: src/filed/job.c:366 +#: src/stored/bscan.c:1076 #, c-format -msgid "2991 Bad setdebug command: %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/filed/job.c:382 +#: src/stored/bscan.c:1140 #, c-format -msgid "Bad estimate command: %s" +msgid "Could not create JobMedia record. ERR=%s\n" msgstr "" -#: src/filed/job.c:383 -msgid "2992 Bad estimate command.\n" +#: src/stored/bscan.c:1144 +#, c-format +msgid "Created JobMedia record JobId %d, MediaId %d\n" msgstr "" -#: src/filed/job.c:406 +#: src/stored/bscan.c:1160 #, c-format -msgid "Bad Job Command: %s" +msgid "Could not find SessId=%d SessTime=%d for MD5/SHA1 record.\n" msgstr "" -#: src/filed/job.c:426 +#: src/stored/bscan.c:1174 #, c-format -msgid "Bad RunBeforeJob command: %s\n" +msgid "Could not add MD5/SHA1 to File record. ERR=%s\n" msgstr "" -#: src/filed/job.c:427 src/filed/job.c:440 -msgid "2905 Bad RunBeforeJob command.\n" +#: src/stored/bscan.c:1179 +msgid "Updated MD5/SHA1 record\n" msgstr "" -#: src/filed/job.c:453 +#: src/stored/btape.c:157 src/stored/stored.c:107 #, c-format -msgid "Bad RunAfter command: %s\n" +msgid "Tape block size (%d) not multiple of system size (%d)\n" msgstr "" -#: src/filed/job.c:454 -msgid "2905 Bad RunAfterJob command.\n" +#: src/stored/btape.c:161 src/stored/stored.c:111 +#, c-format +msgid "Tape block size (%d) is not a power of 2\n" msgstr "" -#: src/filed/job.c:480 +#: src/stored/btape.c:164 #, c-format -msgid "%s could not execute. ERR=%s\n" +msgid "" +"\n" +"\n" +"!!!! Warning large disk addressing disabled. off_t=%d should be 8 or " +"more !!!!!\n" +"\n" +"\n" msgstr "" -#: src/filed/job.c:489 +#: src/stored/btape.c:171 #, c-format -msgid "%s: %s\n" +msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" msgstr "" -#: src/filed/job.c:494 -#, c-format -msgid "%s returned non-zero status=%d. ERR=%s\n" +#: src/stored/btape.c:180 +msgid "64 bit printf/scanf problem. i=%d x64=%" msgstr "" -#: src/filed/job.c:570 src/dird/fd_cmds.c:320 -#, c-format -msgid "Cannot run program: %s. ERR=%s\n" +#: src/stored/btape.c:180 +msgid " y64=%" msgstr "" -#: src/filed/job.c:579 +#: src/stored/btape.c:184 #, c-format -msgid "Error running program: %s. RtnStat=%d ERR=%s\n" +msgid "Tape block granularity is %d bytes.\n" msgstr "" -#: src/filed/job.c:589 -#, c-format -msgid "Cannot open FileSet input file: %s. ERR=%s\n" +#: src/stored/btape.c:251 +msgid "No archive name specified.\n" msgstr "" -#: src/filed/job.c:683 -#, c-format -msgid "REGEX %s compile error. ERR=%s\n" +#: src/stored/btape.c:255 +msgid "Improper number of arguments specified.\n" msgstr "" -#: src/filed/job.c:737 +#: src/stored/btape.c:338 #, c-format -msgid "Invalid FileSet command: %s\n" +msgid "open device %s: OK\n" msgstr "" -#: src/filed/job.c:1090 -#, c-format -msgid "DIR and FD clocks differ by %d seconds, FD automatically adjusting.\n" +#: src/stored/btape.c:359 +msgid "Enter Volume Name: " msgstr "" -#: src/filed/job.c:1098 +#: src/stored/btape.c:366 #, c-format -msgid "Unknown backup level: %s\n" +msgid "Device open failed. ERR=%s\n" msgstr "" -#: src/filed/job.c:1110 +#: src/stored/btape.c:371 #, c-format -msgid "Bad level command: %s\n" +msgid "Wrote Volume label for volume \"%s\".\n" msgstr "" -#: src/filed/job.c:1131 -#, c-format -msgid "Bad session command: %s" +#: src/stored/btape.c:385 +msgid "Volume has no label.\n" msgstr "" -#: src/filed/job.c:1152 -#, c-format -msgid "Bad storage command: %s" +#: src/stored/btape.c:388 +msgid "Volume label read correctly.\n" msgstr "" -#: src/filed/job.c:1161 +#: src/stored/btape.c:391 #, c-format -msgid "Failed to connect to Storage daemon: %s:%d\n" +msgid "I/O error on device: ERR=%s" msgstr "" -#: src/filed/job.c:1173 -msgid "Failed to authenticate Storage daemon.\n" +#: src/stored/btape.c:394 +msgid "Volume name error\n" msgstr "" -#: src/filed/job.c:1199 -msgid "Cannot contact Storage daemon\n" +#: src/stored/btape.c:397 +#, c-format +msgid "Error creating label. ERR=%s" msgstr "" -#: src/filed/job.c:1217 -#, c-format -msgid "Bad response to append open: %s\n" +#: src/stored/btape.c:400 +msgid "Volume version error.\n" msgstr "" -#: src/filed/job.c:1222 -msgid "Bad response from stored to open command\n" +#: src/stored/btape.c:403 +msgid "Bad Volume label type.\n" msgstr "" -#: src/filed/job.c:1249 -#, c-format -msgid "Generate VSS snapshots. Driver=\"%s\", Drive(s)=\"%s\"\n" +#: src/stored/btape.c:406 +msgid "Unknown error.\n" msgstr "" -#: src/filed/job.c:1252 +#: src/stored/btape.c:424 #, c-format -msgid "Generate VSS snapshots failed. ERR=%s\n" +msgid "Bad status from load. ERR=%s\n" msgstr "" -#: src/filed/job.c:1259 +#: src/stored/btape.c:426 #, c-format -msgid "Generate VSS snapshot of drive \"%c:\\\" failed\n" +msgid "Loaded %s\n" msgstr "" -#: src/filed/job.c:1268 +#: src/stored/btape.c:435 src/stored/btape.c:775 src/stored/btape.c:817 +#: src/stored/btape.c:887 src/stored/btape.c:929 src/stored/btape.c:1198 #, c-format -msgid "VSS Writer: %s\n" +msgid "Bad status from rewind. ERR=%s\n" msgstr "" -#: src/filed/job.c:1272 -msgid "No drive letters found for generating VSS snapshots.\n" +#: src/stored/btape.c:438 src/stored/btape.c:1206 +#, c-format +msgid "Rewound %s\n" msgstr "" -#: src/filed/job.c:1275 -msgid "VSS was not initialized properly. VSS support is disabled.\n" +#: src/stored/btape.c:465 src/stored/btape.c:1210 +#, c-format +msgid "Bad status from weof %d. ERR=%s\n" msgstr "" -#: src/filed/job.c:1324 -msgid "Append Close with SD failed.\n" +#: src/stored/btape.c:469 +#, c-format +msgid "Wrote 1 EOF to %s\n" msgstr "" -#: src/filed/job.c:1328 +#: src/stored/btape.c:472 #, c-format -msgid "Bad status %d returned from Storage Daemon.\n" +msgid "Wrote %d EOFs to %s\n" msgstr "" -#: src/filed/job.c:1361 -#, c-format -msgid "2994 Bad verify command: %s\n" +#: src/stored/btape.c:490 +msgid "Moved to end of medium.\n" msgstr "" -#: src/filed/job.c:1376 src/filed/job.c:1415 +#: src/stored/btape.c:517 #, c-format -msgid "2994 Bad verify level: %s\n" +msgid "Bad status from bsf. ERR=%s\n" msgstr "" -#: src/filed/job.c:1455 +#: src/stored/btape.c:519 #, c-format -msgid "Bad replace command. CMD=%s\n" +msgid "Backspaced %d file%s.\n" msgstr "" -#: src/filed/job.c:1532 -msgid "Improper calling sequence.\n" +#: src/stored/btape.c:536 +#, c-format +msgid "Bad status from bsr. ERR=%s\n" msgstr "" -#: src/filed/job.c:1552 +#: src/stored/btape.c:538 #, c-format -msgid "Bad response to SD read open: %s\n" +msgid "Backspaced %d record%s.\n" msgstr "" -#: src/filed/job.c:1557 -msgid "Bad response from stored to read open command\n" +#: src/stored/btape.c:548 src/stored/status.c:227 +#, c-format +msgid "Configured device capabilities:\n" msgstr "" -#: src/filed/job.c:1623 +#: src/stored/btape.c:566 #, c-format -msgid "Comm error with SD. bad response to %s. ERR=%s\n" +msgid "Device status:\n" msgstr "" -#: src/filed/job.c:1626 +#: src/stored/btape.c:580 src/stored/status.c:259 #, c-format -msgid "Bad response to %s command. Wanted %s, got %s\n" +msgid "Device parameters:\n" msgstr "" -#: src/filed/job.c:1647 src/dird/fd_cmds.c:441 +#: src/stored/btape.c:585 #, c-format -msgid "Could not open bootstrap file %s: ERR=%s\n" +msgid "Status:\n" msgstr "" -#: src/filed/status.c:67 -#, c-format -msgid "%s Version: %s (%s) %s %s %s %s\n" +#: src/stored/btape.c:600 +msgid "" +"Test writting 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/filed/status.c:71 -#, c-format -msgid "Daemon started %s, %d Job%s run since started.\n" +#: src/stored/btape.c:608 src/stored/btape.c:1815 +msgid "Command aborted.\n" msgstr "" -#: src/filed/status.c:127 +#: src/stored/btape.c:624 #, c-format -msgid " Sizeof: off_t=%d size_t=%d debug=%d trace=%d\n" +msgid "Block %d i=%d\n" msgstr "" -#: src/filed/status.c:138 -msgid "Running Jobs:\n" +#: src/stored/btape.c:650 +msgid "Skipping read backwards test because BSR turned off.\n" msgstr "" -#: src/filed/status.c:149 -#, c-format -msgid "Director connected at: %s\n" +#: src/stored/btape.c:654 +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/filed/status.c:151 -#, c-format -msgid "JobId %d Job %s is running.\n" +#: src/stored/btape.c:667 src/stored/btape.c:678 src/stored/btape.c:689 +#: src/stored/btape.c:787 src/stored/btape.c:803 src/stored/btape.c:899 +#: src/stored/btape.c:915 src/stored/btape.c:1524 src/stored/btape.c:2407 +msgid "Error writing record to block.\n" msgstr "" -#: src/filed/status.c:154 +#: src/stored/btape.c:671 src/stored/btape.c:682 src/stored/btape.c:693 +#: src/stored/btape.c:791 src/stored/btape.c:807 src/stored/btape.c:903 +#: src/stored/btape.c:919 src/stored/btape.c:1528 src/stored/btape.c:2411 +msgid "Error writing block to device.\n" +msgstr "" + +#: src/stored/btape.c:674 #, c-format -msgid " %s%s Job started: %s\n" +msgid "Wrote first record of %d bytes.\n" msgstr "" -#: src/filed/status.c:171 +#: src/stored/btape.c:685 #, c-format -msgid " Files Examined=%s\n" +msgid "Wrote second record of %d bytes.\n" msgstr "" -#: src/filed/status.c:176 +#: src/stored/btape.c:696 #, c-format -msgid " Processing file: %s\n" +msgid "Wrote third record of %d bytes.\n" msgstr "" -#: src/filed/status.c:187 -msgid " SDSocket closed.\n" +#: src/stored/btape.c:703 src/stored/btape.c:708 +#, c-format +msgid "Backspace file failed! ERR=%s\n" msgstr "" -#: src/filed/status.c:217 -msgid "Terminated Jobs:\n" +#: src/stored/btape.c:712 +msgid "Backspaced over EOF OK.\n" msgstr "" -#: src/filed/status.c:219 -msgid " JobId Level Files Bytes Status Finished Name \n" +#: src/stored/btape.c:714 +#, c-format +msgid "Backspace record failed! ERR=%s\n" msgstr "" -#: src/filed/status.c:324 -msgid "2900 Bad .status command, missing argument.\n" +#: src/stored/btape.c:717 +msgid "Backspace record OK.\n" msgstr "" -#: src/filed/status.c:348 -msgid "2900 Bad .status command, wrong argument.\n" +#: src/stored/btape.c:720 src/stored/btape.c:726 +#, c-format +msgid "Read block failed! ERR=%s\n" msgstr "" -#: src/filed/status.c:451 -msgid "Bacula Idle" +#: src/stored/btape.c:731 +msgid "Bad data in record. Test failed!\n" msgstr "" -#: src/filed/status.c:462 -msgid "Bacula Running" +#: src/stored/btape.c:735 +msgid "" +"\n" +"Block re-read correct. Test succeeded!\n" msgstr "" -#: src/filed/status.c:476 -msgid "Last Job Canceled" -msgstr "" - -#: src/filed/status.c:480 -msgid "Last Job Failed" +#: src/stored/btape.c:736 +msgid "" +"=== End Write, backup, and re-read test ===\n" +"\n" msgstr "" -#: src/filed/status.c:484 -msgid "Last Job had Warnings" +#: src/stored/btape.c:743 +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/filed/filed.c:62 -#, c-format +#: src/stored/btape.c:767 msgid "" -"Copyright (C) 2000-2005 Kern Sibbald\n" "\n" -"Version: %s (%s)\n" +"=== Write, rewind, and re-read test ===\n" "\n" -"Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" -" -c use as configuration file\n" -" -dnn set debug level to nn\n" -" -f run in foreground (for debugging)\n" -" -g groupid\n" -" -i inetd request\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" +"I'm going to write 1000 records and an EOF\n" +"then write 1000 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/filed/filed.c:282 +#: src/stored/btape.c:795 src/stored/btape.c:811 src/stored/btape.c:907 +#: src/stored/btape.c:923 #, c-format -msgid "" -"No File daemon resource defined in %s\n" -"Without that I don't know who I am :-(\n" +msgid "Wrote 1000 blocks of %d bytes.\n" msgstr "" -#: src/filed/filed.c:287 +#: src/stored/btape.c:820 src/stored/btape.c:932 +msgid "Rewind OK.\n" +msgstr "" + +#: src/stored/btape.c:827 src/stored/btape.c:981 +msgid "Got EOF on tape.\n" +msgstr "" + +#: src/stored/btape.c:832 #, c-format -msgid "Only one Client resource permitted in %s\n" +msgid "Read block %d failed! ERR=%s\n" msgstr "" -#: src/filed/filed.c:310 +#: src/stored/btape.c:838 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon in %s.\n" +msgid "Read record failed. Block %d! ERR=%s\n" msgstr "" -#: src/filed/filed.c:326 src/dird/dird.c:824 src/dird/dird.c:864 +#: src/stored/btape.c:844 src/stored/btape.c:1011 #, c-format -msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" +msgid "Bad data in record. Expected %d, got %d at byte %d. Test failed!\n" msgstr "" -#: src/filed/filed.c:334 -msgid "PKI encryption/signing enabled but not compiled into Bacula.\n" +#: src/stored/btape.c:851 +msgid "1000 blocks re-read correctly.\n" msgstr "" -#: src/filed/filed.c:345 -#, c-format +#: src/stored/btape.c:854 src/stored/btape.c:1018 msgid "" -"\"PKI Key Pair\" must be defined for File daemon \"%s\" in %s if either " -"\"PKI Sign\" or \"PKI Encrypt\" are enabled.\n" +"=== Test Succeeded. End Write, rewind, and re-read test ===\n" +"\n" msgstr "" -#: src/filed/filed.c:357 src/filed/filed.c:388 src/filed/filed.c:429 -#, fuzzy -msgid "Failed to allocate a new keypair object.\n" -msgstr "Impossible de se connecter au Director\n" - -#: src/filed/filed.c:361 -#, c-format -msgid "Failed to load public certificate for File daemon \"%s\" in %s.\n" +#: src/stored/btape.c:879 +msgid "" +"\n" +"=== Write, rewind, and position test ===\n" +"\n" +"I'm going to write 1000 records and an EOF\n" +"then write 1000 records and an EOF, then rewind,\n" +"and position to a few blocks and verify that it is correct.\n" +"\n" +"This is an *essential* feature ...\n" +"\n" msgstr "" -#: src/filed/filed.c:367 +#: src/stored/btape.c:972 #, c-format -msgid "Failed to load private key for File daemon \"%s\" in %s.\n" +msgid "Reposition to file:block %d:%d\n" msgstr "" -#: src/filed/filed.c:397 src/filed/filed.c:438 -#, c-format -msgid "Failed to load private key from file %s for File daemon \"%s\" in %s.\n" +#: src/stored/btape.c:974 +msgid "Reposition error.\n" msgstr "" -#: src/filed/filed.c:404 +#: src/stored/btape.c:987 #, c-format msgid "" -"Failed to load trusted signer certificate from file %s for File daemon \"%s" -"\" in %s.\n" +"Read block %d failed! file=%d blk=%d. ERR=%s\n" +"\n" msgstr "" -#: src/filed/filed.c:445 -#, c-format +#: src/stored/btape.c:989 msgid "" -"Failed to load master key certificate from file %s for File daemon \"%s\" in " -"%s.\n" +"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/filed/filed.c:461 +#: src/stored/btape.c:1005 #, c-format -msgid "No Director resource defined in %s\n" +msgid "Read record failed! ERR=%s\n" msgstr "" -#: src/filed/authenticate.c:45 +#: src/stored/btape.c:1016 #, c-format -msgid "I only authenticate directors, not %d\n" +msgid "Block %d re-read correctly.\n" msgstr "" -#: src/filed/authenticate.c:110 -#, c-format +#: src/stored/btape.c:1037 msgid "" -"Incorrect password given by Director at %s.\n" -"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +"\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/filed/authenticate.c:208 -msgid "" -"Authorization key rejected by Storage daemon.\n" -"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +#: src/stored/btape.c:1061 +msgid "Now moving to end of medium.\n" msgstr "" -#: src/filed/filed_conf.c:358 src/dird/dird_conf.c:1239 +#: src/stored/btape.c:1063 src/stored/btape.c:1293 #, c-format -msgid "Cannot find Client resource %s\n" +msgid "We should be in file 3. I am at file %d. %s\n" msgstr "" -#: src/filed/verify_vol.c:57 -msgid "Storage command not issued before Verify.\n" +#: src/stored/btape.c:1064 src/stored/btape.c:1082 src/stored/btape.c:1282 +#: src/stored/btape.c:1294 src/stored/btape.c:1307 src/stored/btape.c:1324 +msgid "This is correct!" msgstr "" -#: src/filed/verify_vol.c:137 -#, c-format -msgid "Error scanning record header: %s\n" +#: src/stored/btape.c:1064 src/stored/btape.c:1082 src/stored/btape.c:1282 +#: src/stored/btape.c:1294 src/stored/btape.c:1307 src/stored/btape.c:1324 +msgid "This is NOT correct!!!!" msgstr "" -#: src/dird/ua_tree.c:58 -msgid "change current directory" +#: src/stored/btape.c:1070 +msgid "" +"\n" +"Now the important part, I am going to attempt to append to the tape.\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:59 -msgid "count marked files in and below the cd" +#: src/stored/btape.c:1077 +msgid "" +"Done appending, there should be no I/O errors\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:60 src/dird/ua_tree.c:61 -msgid "long list current directory, wildcards allowed" +#: src/stored/btape.c:1078 +msgid "Doing Bacula scan of blocks:\n" msgstr "" -#: src/dird/ua_tree.c:62 -msgid "leave file selection mode" +#: src/stored/btape.c:1080 +msgid "End scanning the tape.\n" msgstr "" -#: src/dird/ua_tree.c:63 -msgid "estimate restore size" +#: src/stored/btape.c:1081 src/stored/btape.c:1306 +#, c-format +msgid "We should be in file 4. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_tree.c:64 -msgid "same as done command" +#: src/stored/btape.c:1106 +msgid "" +"\n" +"Autochanger enabled, but no name or no command device specified.\n" msgstr "" -#: src/dird/ua_tree.c:65 -msgid "find files, wildcards allowed" +#: src/stored/btape.c:1110 +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_tree.c:66 src/dird/ua_tree.c:75 -msgid "print help" +#: src/stored/btape.c:1113 +msgid "" +"\n" +"Do you wish to continue with the Autochanger test? (y/n): " msgstr "" -#: src/dird/ua_tree.c:67 -msgid "list current directory, wildcards allowed" +#: src/stored/btape.c:1120 +msgid "" +"\n" +"\n" +"=== Autochanger test ===\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:68 -msgid "list the marked files in and below the cd" +#: src/stored/btape.c:1129 +msgid "3301 Issuing autochanger \"loaded\" command.\n" msgstr "" -#: src/dird/ua_tree.c:69 -msgid "mark dir/file to be restored recursively, wildcards allowed" +#: src/stored/btape.c:1138 +#, c-format +msgid "3991 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_tree.c:70 -msgid "mark directory name to be restored (no files)" +#: src/stored/btape.c:1139 +#, c-format +msgid "3991 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:71 -msgid "print current working directory" +#: src/stored/btape.c:1143 +#, c-format +msgid "Slot %d loaded. I am going to unload it.\n" msgstr "" -#: src/dird/ua_tree.c:72 -msgid "unmark dir/file to be restored recursively in dir" +#: src/stored/btape.c:1145 +msgid "Nothing loaded in the drive. OK.\n" msgstr "" -#: src/dird/ua_tree.c:73 -msgid "unmark directory name only no recursion" +#: src/stored/btape.c:1153 +#, c-format +msgid "3302 Issuing autochanger \"unload %d %d\" command.\n" msgstr "" -#: src/dird/ua_tree.c:74 -msgid "quit and do not do restore" +#: src/stored/btape.c:1158 +#, c-format +msgid "unload status=%s %d\n" msgstr "" -#: src/dird/ua_tree.c:94 -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:1158 +msgid "Bad" msgstr "" -#: src/dird/ua_tree.c:104 src/dird/ua_tree.c:664 src/dird/ua_tree.c:672 +#: src/stored/btape.c:1161 #, c-format -msgid "cwd is: %s\n" +msgid "3992 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_tree.c:125 -msgid "Illegal command. Enter \"done\" to exit.\n" +#: src/stored/btape.c:1162 +#, c-format +msgid "3992 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:298 src/dird/ua_tree.c:309 src/dird/ua_tree.c:326 -msgid "No files marked.\n" +#: src/stored/btape.c:1172 +#, c-format +msgid "3303 Issuing autochanger \"load %d %d\" command.\n" msgstr "" -#: src/dird/ua_tree.c:311 -msgid "1 file marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:313 +#: src/stored/btape.c:1180 #, c-format -msgid "%s files marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:340 -msgid "No directories marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:342 -msgid "1 directory marked.\n" +msgid "3303 Autochanger \"load %d %d\" status is OK.\n" msgstr "" -#: src/dird/ua_tree.c:344 +#: src/stored/btape.c:1184 #, c-format -msgid "%s directories marked.\n" +msgid "3993 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_tree.c:365 +#: src/stored/btape.c:1185 #, c-format -msgid "%s total files/dirs. %s marked to be restored.\n" +msgid "3993 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:376 -msgid "No file specification given.\n" +#: src/stored/btape.c:1200 +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_tree.c:520 +#: src/stored/btape.c:1213 #, c-format -msgid "Node %s has no children.\n" +msgid "Wrote EOF to %s\n" msgstr "" -#: src/dird/ua_tree.c:611 +#: src/stored/btape.c:1217 #, c-format -msgid "%d total files; %d marked to be restored; %s bytes.\n" -msgstr "" - -#: src/dird/ua_tree.c:656 -msgid "Invalid path given.\n" -msgstr "" - -#: src/dird/ua_tree.c:683 src/dird/ua_tree.c:694 -msgid "No files unmarked.\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_tree.c:696 -msgid "1 file unmarked.\n" +#: src/stored/btape.c:1222 +msgid "" +"\n" +"The test autochanger worked!!\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:698 -#, c-format -msgid "%d files unmarked.\n" +#: src/stored/btape.c:1233 +msgid "You must correct this error or the Autochanger will not work.\n" msgstr "" -#: src/dird/ua_tree.c:709 src/dird/ua_tree.c:725 -msgid "No directories unmarked.\n" +#: src/stored/btape.c:1251 +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_tree.c:727 -msgid "1 directory unmarked.\n" +#: src/stored/btape.c:1276 +msgid "Now forward spacing 1 file.\n" msgstr "" -#: src/dird/ua_tree.c:729 +#: src/stored/btape.c:1278 src/stored/btape.c:1290 src/stored/btape.c:1303 +#: src/stored/btape.c:1321 src/stored/btape.c:1490 #, c-format -msgid "%d directories unmarked.\n" -msgstr "" - -#: src/dird/restore.c:71 -msgid "Cannot restore without bootstrap file.\n" +msgid "Bad status from fsr. ERR=%s\n" msgstr "" -#: src/dird/restore.c:78 +#: src/stored/btape.c:1281 #, c-format -msgid "Start Restore Job %s\n" +msgid "We should be in file 1. I am at file %d. %s\n" msgstr "" -#: src/dird/restore.c:225 -msgid "Restore OK -- warning file count mismatch" +#: src/stored/btape.c:1288 +msgid "Now forward spacing 2 files.\n" msgstr "" -#: src/dird/restore.c:227 -msgid "Restore OK" +#: src/stored/btape.c:1301 +msgid "Now forward spacing 4 files.\n" msgstr "" -#: src/dird/restore.c:232 -msgid "*** Restore Error ***" +#: src/stored/btape.c:1313 +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/restore.c:242 -msgid "Restore Canceled" +#: src/stored/btape.c:1319 +msgid "Now forward spacing 1 more file.\n" msgstr "" -#: src/dird/restore.c:252 src/dird/backup.c:382 src/dird/admin.c:102 +#: src/stored/btape.c:1323 #, c-format -msgid "Inappropriate term code: %c\n" +msgid "We should be in file 5. I am at file %d. %s\n" msgstr "" -#: src/dird/restore.c:269 -#, c-format +#: src/stored/btape.c:1328 msgid "" -"Bacula %s (%s): %s\n" -" JobId: %d\n" -" Job: %s\n" -" 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" +"=== End Forward space files test ===\n" "\n" msgstr "" -#: src/dird/scheduler.c:80 -#, c-format -msgid "Job %s not found\n" -msgstr "" - -#: src/dird/scheduler.c:103 -msgid "Walk queue" +#: src/stored/btape.c:1332 +msgid "" +"\n" +"The forward space file test failed.\n" msgstr "" -#: src/dird/scheduler.c:113 -msgid "Dequeued job" +#: src/stored/btape.c:1334 +msgid "" +"You have Fast Forward Space File enabled.\n" +"I am turning it off then retrying the test.\n" msgstr "" -#: src/dird/scheduler.c:116 -msgid "Scheduler logic error\n" +#: src/stored/btape.c:1340 +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/scheduler.c:132 -msgid "Run job" +#: src/stored/btape.c:1372 +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/scheduler.c:349 -msgid "Inserted job" +#: src/stored/btape.c:1380 +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/scheduler.c:357 -msgid "Appended job" +#: src/stored/btape.c:1387 +msgid "" +"\n" +"\n" +"That appears *NOT* to have corrected the problem.\n" msgstr "" -#: src/dird/scheduler.c:361 -msgid "Run queue" +#: src/stored/btape.c:1392 +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/dird_conf.c:464 -#, c-format -msgid "Director: name=%s MaxJobs=%d FDtimeout=%s SDtimeout=%s\n" +#: src/stored/btape.c:1397 +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/dird_conf.c:469 -#, c-format -msgid " query_file=%s\n" +#: src/stored/btape.c:1408 +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/dird_conf.c:472 src/dird/dird_conf.c:492 src/dird/dird_conf.c:506 -#: src/dird/dird_conf.c:551 src/dird/dird_conf.c:555 src/dird/dird_conf.c:559 -#: src/dird/dird_conf.c:583 src/dird/dird_conf.c:588 src/dird/dird_conf.c:592 -#: src/dird/dird_conf.c:596 src/dird/dird_conf.c:600 src/dird/dird_conf.c:604 -#: src/dird/dird_conf.c:614 src/dird/dird_conf.c:789 src/dird/dird_conf.c:795 -msgid " --> " +#: src/stored/btape.c:1429 +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/dird_conf.c:477 +#: src/stored/btape.c:1468 #, c-format -msgid "Console: name=%s SSL=%d\n" +msgid "Bad status from fsf. ERR=%s\n" msgstr "" -#: src/dird/dird_conf.c:482 -#, c-format -msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" +#: src/stored/btape.c:1472 +msgid "Forward spaced 1 file.\n" msgstr "" -#: src/dird/dird_conf.c:487 +#: src/stored/btape.c:1475 #, c-format -msgid "Counter: name=%s min=%d max=%d\n" +msgid "Forward spaced %d files.\n" msgstr "" -#: src/dird/dird_conf.c:498 -#, c-format -msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" +#: src/stored/btape.c:1494 +msgid "Forward spaced 1 record.\n" msgstr "" -#: src/dird/dird_conf.c:501 +#: src/stored/btape.c:1497 #, c-format -msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" +msgid "Forward spaced %d records.\n" msgstr "" -#: src/dird/dird_conf.c:513 +#: src/stored/btape.c:1531 #, 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 "Wrote one record of %d bytes.\n" msgstr "" -#: src/dird/dird_conf.c:523 -#, c-format -msgid "" -"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" -" DeviceName=%s MediaType=%s StorageId=%s\n" +#: src/stored/btape.c:1533 +msgid "Wrote block to device.\n" msgstr "" -#: src/dird/dird_conf.c:532 -#, c-format -msgid "" -"Catalog: name=%s address=%s DBport=%d db_name=%s\n" -" db_user=%s MutliDBConn=%d\n" +#: src/stored/btape.c:1548 +msgid "Enter length to read: " msgstr "" -#: src/dird/dird_conf.c:540 -#, c-format -msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:541 src/dird/ua_cmds.c:430 src/dird/ua_run.c:709 -#: src/dird/ua_prune.c:454 src/dird/ua_select.c:234 src/dird/ua_select.c:257 -msgid "Job" -msgstr "" - -#: src/dird/dird_conf.c:541 -msgid "JobDefs" -msgstr "" - -#: src/dird/dird_conf.c:545 -#, c-format -msgid "" -" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=%" -"d\n" -msgstr "" - -#: src/dird/dird_conf.c:563 -#, c-format -msgid " --> Where=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:566 -#, c-format -msgid " --> Bootstrap=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:569 -#, c-format -msgid " --> RunBefore=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:572 -#, c-format -msgid " --> RunAfter=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:575 -#, c-format -msgid " --> RunAfterFailed=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:578 -#, c-format -msgid " --> WriteBootstrap=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:610 -#, c-format -msgid " --> Run=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:621 -#, c-format -msgid "FileSet: name=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:683 src/dird/dird_conf.c:762 -#, c-format -msgid "Schedule: name=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:688 -#, c-format -msgid " --> Run Level=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:689 -msgid " hour=" -msgstr "" - -#: src/dird/dird_conf.c:698 -msgid " mday=" -msgstr "" - -#: src/dird/dird_conf.c:707 -msgid " month=" -msgstr "" - -#: src/dird/dird_conf.c:716 -msgid " wday=" -msgstr "" - -#: src/dird/dird_conf.c:725 -msgid " wom=" -msgstr "" - -#: src/dird/dird_conf.c:734 -msgid " woy=" -msgstr "" - -#: src/dird/dird_conf.c:743 -#, c-format -msgid " mins=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:745 src/dird/dird_conf.c:749 src/dird/dird_conf.c:753 -msgid " --> " -msgstr "" - -#: src/dird/dird_conf.c:766 -#, c-format -msgid "Pool: name=%s PoolType=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:768 -#, c-format -msgid " use_cat=%d use_once=%d acpt_any=%d cat_files=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:771 -#, c-format -msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:774 -#, c-format -msgid " VolUse=%s recycle=%d LabelFormat=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:778 -#, c-format -msgid " CleaningPrefix=%s LabelType=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:780 -#, c-format -msgid " RecyleOldest=%d PurgeOldest=%d MaxVolJobs=%d MaxVolFiles=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:784 -#, c-format -msgid " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:801 -#, c-format -msgid "Messages: name=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:803 -#, c-format -msgid " mailcmd=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:805 -#, c-format -msgid " opcmd=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1183 -#, c-format -msgid "Cannot find Pool resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1191 -#, c-format -msgid "Cannot find Console resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1213 -#, c-format -msgid "Cannot find Job resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1231 -#, c-format -msgid "Cannot find Counter resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1251 -#, c-format -msgid "Cannot find Schedule resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1331 -#, c-format -msgid "Name item is required in %s resource, but not found.\n" -msgstr "" - -#: src/dird/dird_conf.c:1343 -#, c-format -msgid "Inserting %s res: %s index=%d pass=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:1416 -#, c-format -msgid "Expected a Job Type keyword, got: %s" -msgstr "" - -#: src/dird/dird_conf.c:1440 -#, c-format -msgid "Expected a Job Level keyword, got: %s" -msgstr "" - -#: src/dird/dird_conf.c:1460 -#, c-format -msgid "Expected a Restore replacement option, got: %s" -msgstr "" - -#: src/dird/msgchan.c:156 -#, c-format -msgid "Storage daemon rejected Job command: %s\n" -msgstr "" - -#: src/dird/msgchan.c:163 -#, c-format -msgid " | ] -- cancel a job" -msgstr "" - -#: src/dird/ua_cmds.c:94 -msgid "create DB Pool from resource" -msgstr "" - -#: src/dird/ua_cmds.c:95 -msgid "delete [pool= | media volume=]" -msgstr "" - -#: src/dird/ua_cmds.c:96 -msgid "disable -- disable a job" -msgstr "" - -#: src/dird/ua_cmds.c:97 -msgid "enable -- enable a job" -msgstr "" - -#: src/dird/ua_cmds.c:98 -msgid "performs FileSet estimate, listing gives full listing" -msgstr "" - -#: src/dird/ua_cmds.c:100 -msgid "gui [on|off] -- non-interactive gui mode" -msgstr "" - -#: src/dird/ua_cmds.c:102 -msgid "" -"list [pools | jobs | jobtotals | media | files ]; " -"from catalog" -msgstr "" - -#: src/dird/ua_cmds.c:103 -msgid "label a tape" -msgstr "" - -#: src/dird/ua_cmds.c:104 -msgid "full or long list like list command" -msgstr "" - -#: src/dird/ua_cmds.c:105 -msgid "messages" -msgstr "" - -#: src/dird/ua_cmds.c:106 -msgid "mount " -msgstr "" - -#: src/dird/ua_cmds.c:107 -msgid "prune expired records from catalog" -msgstr "" - -#: src/dird/ua_cmds.c:108 -msgid "purge records from catalog" -msgstr "" - -#: src/dird/ua_cmds.c:109 -msgid "python control commands" -msgstr "" - -#: src/dird/ua_cmds.c:111 -msgid "query catalog" -msgstr "" - -#: src/dird/ua_cmds.c:112 -msgid "restore files" -msgstr "" - -#: src/dird/ua_cmds.c:113 -msgid "relabel a tape" -msgstr "" - -#: src/dird/ua_cmds.c:114 -msgid "release " -msgstr "" - -#: src/dird/ua_cmds.c:115 -msgid "reload conf file" -msgstr "" - -#: src/dird/ua_cmds.c:116 -msgid "run " -msgstr "" - -#: src/dird/ua_cmds.c:117 -msgid "status [storage | client]=" -msgstr "" - -#: src/dird/ua_cmds.c:118 -msgid "sets debug level" -msgstr "" - -#: src/dird/ua_cmds.c:119 -msgid "sets new client address -- if authorized" -msgstr "" - -#: src/dird/ua_cmds.c:120 -msgid "show (resource records) [jobs | pools | ... | all]" -msgstr "" - -#: src/dird/ua_cmds.c:121 -msgid "use SQL to query catalog" -msgstr "" - -#: src/dird/ua_cmds.c:123 -msgid "turn on/off trace to file" -msgstr "" - -#: src/dird/ua_cmds.c:124 -msgid "unmount " -msgstr "" - -#: src/dird/ua_cmds.c:125 -msgid "umount for old-time Unix guys" -msgstr "" - -#: src/dird/ua_cmds.c:126 -msgid "update Volume, Pool or slots" -msgstr "" - -#: src/dird/ua_cmds.c:127 -msgid "use catalog xxx" -msgstr "" - -#: src/dird/ua_cmds.c:128 -msgid "does variable expansion" -msgstr "" - -#: src/dird/ua_cmds.c:129 -msgid "print Director version" -msgstr "" - -#: src/dird/ua_cmds.c:130 -msgid "wait until no jobs are running" -msgstr "" - -#: src/dird/ua_cmds.c:168 -#, c-format -msgid "%s: is an illegal command.\n" -msgstr "" - -#: src/dird/ua_cmds.c:206 -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/dird/ua_cmds.c:225 -#, c-format -msgid "Pool already has maximum volumes=%d\n" -msgstr "" - -#: src/dird/ua_cmds.c:227 -msgid "Enter new maximum (zero for unlimited): " -msgstr "" - -#: src/dird/ua_cmds.c:248 -#, c-format -msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " -msgstr "" - -#: src/dird/ua_cmds.c:254 -#, c-format -msgid "The number must be between 0 and %d\n" -msgstr "" - -#: src/dird/ua_cmds.c:261 -msgid "Enter Volume name: " -msgstr "" - -#: src/dird/ua_cmds.c:265 -msgid "Enter base volume name: " -msgstr "" - -#: src/dird/ua_cmds.c:274 src/dird/ua_label.c:605 -msgid "Volume name too long.\n" -msgstr "" - -#: src/dird/ua_cmds.c:287 -msgid "Enter the starting number: " -msgstr "" - -#: src/dird/ua_cmds.c:292 -msgid "Start number must be greater than zero.\n" -msgstr "" - -#: src/dird/ua_cmds.c:303 -msgid "Enter slot (0 for none): " -msgstr "" - -#: src/dird/ua_cmds.c:307 -msgid "InChanger? yes/no: " -msgstr "" - -#: src/dird/ua_cmds.c:334 -#, c-format -msgid "%d Volumes created in pool %s\n" +#: src/stored/btape.c:1553 +msgid "Bad length entered, using default of 1024 bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:350 src/dird/ua_cmds.c:917 -msgid "Turn on or off? " +#: src/stored/btape.c:1562 +#, c-format +msgid "Read of %d bytes gives stat=%d. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:358 src/dird/ua_cmds.c:925 -msgid "off" +#: src/stored/btape.c:1585 src/stored/btape.c:1634 +#, c-format +msgid "End of tape\n" msgstr "" -#: src/dird/ua_cmds.c:378 -msgid "jobid" +#: src/stored/btape.c:1590 +#, c-format +msgid "Starting scan at file %u\n" msgstr "" -#: src/dird/ua_cmds.c:385 +#: src/stored/btape.c:1595 src/stored/dev.c:1229 #, c-format -msgid "JobId %s is not running. Use Job name to cancel inactive jobs.\n" +msgid "read error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_cmds.c:389 -msgid "job" +#: src/stored/btape.c:1597 +#, c-format +msgid "Bad status from read %d. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:394 +#: src/stored/btape.c:1600 src/stored/btape.c:1614 src/stored/btape.c:1678 +#: src/stored/btape.c:1690 src/stored/btape.c:1703 src/stored/btape.c:1719 #, c-format -msgid "Warning Job %s is not running. Continuing anyway ...\n" +msgid "1 block of %d bytes in file %d\n" msgstr "" -#: src/dird/ua_cmds.c:419 -msgid "Select Job:\n" +#: src/stored/btape.c:1603 src/stored/btape.c:1617 src/stored/btape.c:1681 +#: src/stored/btape.c:1693 src/stored/btape.c:1706 src/stored/btape.c:1722 +#, c-format +msgid "%d blocks of %d bytes in file %d\n" msgstr "" -#: src/dird/ua_cmds.c:425 +#: src/stored/btape.c:1625 src/stored/btape.c:1697 #, c-format -msgid "JobId=%s Job=%s" +msgid "End of File mark.\n" msgstr "" -#: src/dird/ua_cmds.c:430 -msgid "Choose Job to cancel" +#: src/stored/btape.c:1646 src/stored/btape.c:1750 +#, c-format +msgid "Total files=%d, blocks=%d, bytes = %s\n" msgstr "" -#: src/dird/ua_cmds.c:434 -msgid "Confirm cancel (yes/no): " +#: src/stored/btape.c:1710 +#, c-format +msgid "Short block read.\n" msgstr "" -#: src/dird/ua_cmds.c:442 +#: src/stored/btape.c:1713 #, c-format -msgid "Job %s not found.\n" +msgid "Error reading block. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:547 +#: src/stored/btape.c:1737 #, c-format msgid "" -"Error: Pool %s already exists.\n" -"Use update to change it.\n" +"Blk_block: %u dev_blk=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=%" +"s rlen=%d\n" msgstr "" -#: src/dird/ua_cmds.c:558 +#: src/stored/btape.c:1759 #, c-format -msgid "Pool %s created.\n" +msgid "Device status: %u. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:571 -msgid "restart" +#: src/stored/btape.c:1789 +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 3.2 GB. 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_cmds.c:575 -msgid "Python interpreter restarted.\n" +#: src/stored/btape.c:1806 +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_cmds.c:577 src/dird/ua_cmds.c:1145 -msgid "Nothing done.\n" +#: src/stored/btape.c:1809 +msgid "Simple test (single tape) selected.\n" msgstr "" -#: src/dird/ua_cmds.c:593 src/dird/ua_cmds.c:639 -msgid "Illegal command from this console.\n" +#: src/stored/btape.c:1812 +msgid "Multiple tape test selected.\n" msgstr "" -#: src/dird/ua_cmds.c:600 src/dird/ua_run.c:374 -#, c-format -msgid "Client \"%s\" not found.\n" +#: src/stored/btape.c:1828 +msgid "Rewind failed.\n" msgstr "" -#: src/dird/ua_cmds.c:609 -#, c-format -msgid "Client \"%s\" address set to %s\n" +#: src/stored/btape.c:1831 +msgid "Write EOF failed.\n" msgstr "" -#: src/dird/ua_cmds.c:634 -#, c-format -msgid "Job \"%s\" not found.\n" +#: src/stored/btape.c:1858 +msgid "Wrote Start of Session label.\n" msgstr "" -#: src/dird/ua_cmds.c:643 +#: src/stored/btape.c:1889 #, c-format -msgid "Job \"%s\" %sabled\n" +msgid "%s Begin writing Bacula records to tape ...\n" msgstr "" -#: src/dird/ua_cmds.c:667 src/dird/ua_status.c:286 +#: src/stored/btape.c:1891 #, c-format -msgid "Connecting to Storage daemon %s at %s:%d\n" -msgstr "" - -#: src/dird/ua_cmds.c:670 src/dird/ua_cmds.c:1319 src/dird/job.c:414 -#: src/dird/ua_label.c:708 -msgid "Failed to connect to Storage daemon.\n" +msgid "%s Begin writing Bacula records to first tape ...\n" msgstr "" -#: src/dird/ua_cmds.c:673 src/dird/ua_status.c:297 -msgid "Connected to storage daemon\n" +#: src/stored/btape.c:1932 +#, c-format +msgid "Wrote blk_block=%u, dev_blk_num=%u VolBytes=%s rate=%.1f KB/s\n" msgstr "" -#: src/dird/ua_cmds.c:693 src/dird/ua_cmds.c:1032 src/dird/ua_status.c:324 +#: src/stored/btape.c:1942 #, c-format -msgid "Connecting to Client %s at %s:%d\n" +msgid "%s Flush block, write EOF\n" msgstr "" -#: src/dird/ua_cmds.c:696 src/dird/ua_cmds.c:1035 -msgid "Failed to connect to Client.\n" +#: src/stored/btape.c:1953 +msgid "Not OK\n" msgstr "" -#: src/dird/ua_cmds.c:812 -msgid "Enter new debug level: " +#: src/stored/btape.c:1981 +msgid "Set ok=false after write_block_to_device.\n" msgstr "" -#: src/dird/ua_cmds.c:878 -msgid "Available daemons are: \n" +#: src/stored/btape.c:1984 +msgid "Wrote End of Session label.\n" msgstr "" -#: src/dird/ua_cmds.c:883 -msgid "Select daemon type to set debug level" +#: src/stored/btape.c:2008 +#, c-format +msgid "Wrote state file last_block_num1=%d last_block_num2=%d\n" msgstr "" -#: src/dird/ua_cmds.c:987 src/dird/ua_run.c:511 +#: src/stored/btape.c:2012 #, c-format -msgid "Level %s not valid.\n" +msgid "Could not create state file: %s ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1000 -msgid "No job specified.\n" +#: src/stored/btape.c:2020 +#, c-format +msgid "" +"\n" +"\n" +"%s Done filling tape at %d:%d. Now beginning re-read of tape ...\n" msgstr "" -#: src/dird/ua_cmds.c:1040 -msgid "Error sending include list.\n" +#: src/stored/btape.c:2024 +#, c-format +msgid "" +"\n" +"\n" +"%s Done filling tapes at %d:%d. Now beginning re-read of first tape ...\n" msgstr "" -#: src/dird/ua_cmds.c:1045 -msgid "Error sending exclude list.\n" +#: src/stored/btape.c:2063 +msgid "" +"\n" +"The state file level has changed. You must redo\n" +"the fill command.\n" msgstr "" -#: src/dird/ua_cmds.c:1131 +#: src/stored/btape.c:2069 +#, c-format 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" +"Could not find the state file: %s ERR=%s\n" +"You must redo the fill command.\n" msgstr "" -#: src/dird/ua_cmds.c:1134 -msgid "Choose catalog item to delete" +#: src/stored/btape.c:2111 +msgid "Mount first tape. Press enter when ready: " msgstr "" -#: src/dird/ua_cmds.c:1202 -msgid "Enter JobId to delete: " +#: src/stored/btape.c:2131 +msgid "Rewinding.\n" msgstr "" -#: src/dird/ua_cmds.c:1247 +#: src/stored/btape.c:2136 #, c-format -msgid "Job %s and associated records deleted from the catalog.\n" +msgid "Reading the first 10000 records from %u:%u.\n" msgstr "" -#: src/dird/ua_cmds.c:1260 +#: src/stored/btape.c:2140 src/stored/btape.c:2207 #, 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:1264 -msgid "Are you sure you want to delete this Volume? (yes/no): " +msgid "Reposition from %u:%u to %u:%u\n" msgstr "" -#: src/dird/ua_cmds.c:1285 -msgid "Are you sure you want to delete this Pool? (yes/no): " +#: src/stored/btape.c:2143 src/stored/btape.c:2194 src/stored/btape.c:2210 +#, c-format +msgid "Reposition error. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1382 +#: src/stored/btape.c:2146 #, c-format -msgid "Using Catalog name=%s DB=%s\n" +msgid "Reading block %u.\n" msgstr "" -#: src/dird/ua_cmds.c:1425 +#: src/stored/btape.c:2148 src/stored/btape.c:2199 src/stored/btape.c:2215 #, c-format -msgid " %-10s %s\n" +msgid "Error reading block: ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1427 +#: src/stored/btape.c:2153 msgid "" "\n" -"When at a prompt, entering a period cancels the command.\n" +"The last block on the tape matches. Test succeeded.\n" "\n" msgstr "" -#: src/dird/ua_cmds.c:1443 -#, c-format -msgid "%s Version: %s (%s)\n" -msgstr "" - -#: src/dird/ua_cmds.c:1462 -msgid "Could not find a Catalog resource\n" -msgstr "" - -#: src/dird/ua_cmds.c:1465 -msgid "You must specify a \"use \" command before continuing.\n" +#: src/stored/btape.c:2155 +msgid "" +"\n" +"The last block of the first tape matches.\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:1469 -#, c-format -msgid "Using default Catalog name=%s DB=%s\n" +#: src/stored/btape.c:2180 +msgid "Mount second tape. Press enter when ready: " msgstr "" -#: src/dird/ua_cmds.c:1482 src/dird/job.c:115 src/dird/dird.c:683 -#: src/dird/ua_output.c:607 +#: src/stored/btape.c:2192 #, c-format -msgid "Could not open database \"%s\".\n" +msgid "Reposition from %u:%u to 0:1\n" msgstr "" -#: src/dird/ua_run.c:119 +#: src/stored/btape.c:2197 src/stored/btape.c:2213 #, c-format -msgid "Value missing for keyword %s\n" +msgid "Reading block %d.\n" msgstr "" -#: src/dird/ua_run.c:126 -msgid "Job name specified twice.\n" +#: src/stored/btape.c:2203 +msgid "" +"\n" +"The first block on the second tape matches.\n" +"\n" msgstr "" -#: src/dird/ua_run.c:134 -msgid "JobId specified twice.\n" +#: src/stored/btape.c:2219 +msgid "" +"\n" +"The last block on the second tape matches. Test succeeded.\n" +"\n" msgstr "" -#: src/dird/ua_run.c:143 -msgid "Client specified twice.\n" +#: src/stored/btape.c:2234 +#, c-format +msgid "10000 records read now at %d:%d\n" msgstr "" -#: src/dird/ua_run.c:151 -msgid "FileSet specified twice.\n" +#: src/stored/btape.c:2257 src/stored/btape.c:2268 src/stored/btape.c:2316 +msgid "Last block written" msgstr "" -#: src/dird/ua_run.c:159 -msgid "Level specified twice.\n" +#: src/stored/btape.c:2259 src/stored/btape.c:2269 +msgid "Block read back" msgstr "" -#: src/dird/ua_run.c:168 -msgid "Storage specified twice.\n" +#: src/stored/btape.c:2260 +#, c-format +msgid "" +"\n" +"\n" +"The blocks differ at byte %u\n" msgstr "" -#: src/dird/ua_run.c:176 -msgid "Pool specified twice.\n" +#: src/stored/btape.c:2261 +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/ua_run.c:184 -msgid "Where specified twice.\n" +#: src/stored/btape.c:2300 +#, c-format +msgid "Last block at: %u:%u this_dev_block_num=%d\n" msgstr "" -#: src/dird/ua_run.c:192 -msgid "Bootstrap specified twice.\n" +#: src/stored/btape.c:2314 +#, c-format +msgid "Block not written: FileIndex=%u blk_block=%u Size=%u\n" msgstr "" -#: src/dird/ua_run.c:200 -msgid "Replace specified twice.\n" +#: src/stored/btape.c:2318 +msgid "Block not written" msgstr "" -#: src/dird/ua_run.c:208 -msgid "When specified twice.\n" +#: src/stored/btape.c:2333 +#, c-format +msgid "End of tape %d:%d. VolumeCapacity=%s. Write rate = %.1f KB/s\n" msgstr "" -#: src/dird/ua_run.c:216 -msgid "Priority specified twice.\n" +#: src/stored/btape.c:2383 +msgid "Test writing blocks of 64512 bytes to tape.\n" msgstr "" -#: src/dird/ua_run.c:221 -msgid "Priority must be positive nonzero setting it to 10.\n" +#: src/stored/btape.c:2385 +msgid "How many blocks do you want to write? (1000): " msgstr "" -#: src/dird/ua_run.c:231 -msgid "Verify Job specified twice.\n" +#: src/stored/btape.c:2400 +#, c-format +msgid "Begin writing %d Bacula blocks to tape ...\n" msgstr "" -#: src/dird/ua_run.c:263 -msgid "Migration Job specified twice.\n" +#: src/stored/btape.c:2452 +#, c-format +msgid "Begin writing raw blocks of %u bytes.\n" msgstr "" -#: src/dird/ua_run.c:289 +#: src/stored/btape.c:2472 #, c-format -msgid "Invalid keyword: %s\n" +msgid "Write failed at block %u. stat=%d ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:301 +#: src/stored/btape.c:2502 #, c-format -msgid "Catalog \"%s\" not found\n" +msgid "Begin writing Bacula blocks of %u bytes.\n" msgstr "" -#: src/dird/ua_run.c:312 +#: src/stored/btape.c:2521 #, c-format -msgid "Job \"%s\" not found\n" +msgid "Write failed at block %u.\n" msgstr "" -#: src/dird/ua_run.c:319 -msgid "A job name must be specified.\n" +#: src/stored/btape.c:2528 +msgid "test autochanger" msgstr "" -#: src/dird/ua_run.c:325 -#, c-format -msgid "No authorization. Job \"%s\".\n" +#: src/stored/btape.c:2529 +msgid "backspace file" msgstr "" -#: src/dird/ua_run.c:334 -#, c-format -msgid "Storage \"%s\" not found.\n" +#: src/stored/btape.c:2530 +msgid "backspace record" msgstr "" -#: src/dird/ua_run.c:344 -#, c-format -msgid "No authorization. Storage \"%s\".\n" +#: src/stored/btape.c:2531 +msgid "fill tape using Bacula writes" msgstr "" -#: src/dird/ua_run.c:354 -#, c-format -msgid "Pool \"%s\" not found.\n" +#: src/stored/btape.c:2532 +msgid "list device capabilities" msgstr "" -#: src/dird/ua_run.c:364 -#, c-format -msgid "No authorization. Pool \"%s\".\n" +#: src/stored/btape.c:2533 +msgid "clear tape errors" msgstr "" -#: src/dird/ua_run.c:384 -#, c-format -msgid "No authorization. Client \"%s\".\n" +#: src/stored/btape.c:2534 +msgid "go to end of Bacula data for append" msgstr "" -#: src/dird/ua_run.c:393 -#, c-format -msgid "FileSet \"%s\" not found.\n" +#: src/stored/btape.c:2535 +msgid "go to the physical end of medium" msgstr "" -#: src/dird/ua_run.c:402 -#, c-format -msgid "No authorization. FileSet \"%s\".\n" +#: src/stored/btape.c:2536 +msgid "fill tape, write onto second volume" msgstr "" -#: src/dird/ua_run.c:410 -#, c-format -msgid "Verify Job \"%s\" not found.\n" +#: src/stored/btape.c:2537 +msgid "read filled tape" msgstr "" -#: src/dird/ua_run.c:420 -#, c-format -msgid "Migration Job \"%s\" not found.\n" +#: src/stored/btape.c:2538 +msgid "forward space a file" msgstr "" -#: src/dird/ua_run.c:455 src/dird/ua_run.c:830 -msgid "Invalid time, using current time.\n" +#: src/stored/btape.c:2539 +msgid "forward space a record" msgstr "" -#: src/dird/ua_run.c:475 -#, c-format -msgid "Invalid replace option: %s\n" +#: src/stored/btape.c:2541 +msgid "write a Bacula label to the tape" msgstr "" -#: src/dird/ua_run.c:533 -#, c-format -msgid "" -"Run %s job\n" -"JobName: %s\n" -"FileSet: %s\n" -"Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Priority: %d\n" +#: src/stored/btape.c:2542 +msgid "load a tape" msgstr "" -#: src/dird/ua_run.c:552 -#, c-format -msgid "" -"Run %s job\n" -"JobName: %s\n" -"FileSet: %s\n" -"Level: %s\n" -"Client: %s\n" -"Storage: %s\n" -"Pool: %s\n" -"When: %s\n" -"Priority: %d\n" +#: src/stored/btape.c:2543 +msgid "quit btape" msgstr "" -#: src/dird/ua_run.c:583 -#, c-format -msgid "" -"Run %s job\n" -"JobName: %s\n" -"FileSet: %s\n" -"Level: %s\n" -"Client: %s\n" -"Storage: %s\n" -"Pool: %s\n" -"Verify Job: %s\n" -"Verify List: %s\n" -"When: %s\n" -"Priority: %d\n" +#: src/stored/btape.c:2544 +msgid "use write() to fill tape" msgstr "" -#: src/dird/ua_run.c:612 -msgid "Please enter a JobId for restore: " +#: src/stored/btape.c:2545 +msgid "read and print the Bacula tape label" msgstr "" -#: src/dird/ua_run.c:621 -#, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"Where: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" +#: src/stored/btape.c:2546 +msgid "test record handling functions" msgstr "" -#: src/dird/ua_run.c:643 -#, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"Where: %s\n" -"Replace: %s\n" -"Client: %s\n" -"Storage: %s\n" -"JobId: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" +#: src/stored/btape.c:2547 +msgid "rewind the tape" msgstr "" -#: src/dird/ua_run.c:668 -#, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"Where: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Client: %s\n" -"Storage: %s\n" -"Migration Job: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" +#: src/stored/btape.c:2548 +msgid "read() tape block by block to EOT and report" msgstr "" -#: src/dird/ua_run.c:693 -#, c-format -msgid "Unknown Job Type=%d\n" +#: src/stored/btape.c:2549 +msgid "Bacula read block by block to EOT and report" msgstr "" -#: src/dird/ua_run.c:697 -msgid "OK to run? (yes/mod/no): " +#: src/stored/btape.c:2550 +msgid "print tape status" msgstr "" -#: src/dird/ua_run.c:703 src/dird/ua_select.c:44 -msgid "mod" +#: src/stored/btape.c:2551 +msgid "General test Bacula tape functions" msgstr "" -#: src/dird/ua_run.c:706 src/dird/ua_update.c:464 -msgid "Parameters to modify:\n" +#: src/stored/btape.c:2552 +msgid "write an EOF on the tape" msgstr "" -#: src/dird/ua_run.c:707 -msgid "Level" +#: src/stored/btape.c:2553 +msgid "write a single Bacula block" msgstr "" -#: src/dird/ua_run.c:708 src/dird/ua_select.c:152 -#: src/wx-console/wxbrestorepanel.cpp:321 -#: src/wx-console/wxbrestorepanel.cpp:337 -#: src/wx-console/wxbrestorepanel.cpp:458 -#: src/wx-console/wxbrestorepanel.cpp:459 -#: src/wx-console/wxbrestorepanel.cpp:469 -#: src/wx-console/wxbrestorepanel.cpp:470 -#: src/wx-console/wxbrestorepanel.cpp:1133 -#: src/wx-console/wxbrestorepanel.cpp:1794 -#: src/wx-console/wxbrestorepanel.cpp:1865 -msgid "Storage" +#: src/stored/btape.c:2554 +msgid "read a single record" msgstr "" -#: src/dird/ua_run.c:710 src/dird/ua_restore.c:1058 src/dird/ua_select.c:175 -msgid "FileSet" +#: src/stored/btape.c:2555 +msgid "quick fill command" msgstr "" -#: src/dird/ua_run.c:711 src/dird/ua_select.c:282 src/dird/ua_select.c:391 -#: src/wx-console/wxbrestorepanel.cpp:318 -#: src/wx-console/wxbrestorepanel.cpp:336 -#: src/wx-console/wxbrestorepanel.cpp:410 -#: src/wx-console/wxbrestorepanel.cpp:411 -#: src/wx-console/wxbrestorepanel.cpp:421 -#: src/wx-console/wxbrestorepanel.cpp:422 -#: src/wx-console/wxbrestorepanel.cpp:669 -#: src/wx-console/wxbrestorepanel.cpp:1103 -#: src/wx-console/wxbrestorepanel.cpp:1190 -#: src/wx-console/wxbrestorepanel.cpp:1787 -#: src/wx-console/wxbrestorepanel.cpp:1789 -#: src/wx-console/wxbrestorepanel.cpp:1863 -#: src/wx-console/wxbrestorepanel.cpp:1918 -msgid "Client" +#: src/stored/btape.c:2576 +#, c-format +msgid "%s is an illegal command\n" msgstr "" -#: src/dird/ua_run.c:712 src/wx-console/wxbrestorepanel.cpp:338 -#: src/wx-console/wxbrestorepanel.cpp:823 -#: src/wx-console/wxbrestorepanel.cpp:1867 -msgid "When" +#: src/stored/btape.c:2586 +#, c-format +msgid "Interactive commands:\n" msgstr "" -#: src/dird/ua_run.c:713 src/wx-console/wxbrestorepanel.cpp:339 -#: src/wx-console/wxbrestorepanel.cpp:1096 -#: src/wx-console/wxbrestorepanel.cpp:1869 -msgid "Priority" +#: src/stored/btape.c:2596 +#, c-format +msgid "" +"Copyright (C) 2000-2005 Kern Sibbald.\n" +"\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 nn\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_run.c:716 src/dird/ua_select.c:476 src/dird/ua_select.c:566 -#: src/dird/ua_update.c:400 src/dird/ua_update.c:475 -#: src/wx-console/wxbrestorepanel.cpp:320 -#: src/wx-console/wxbrestorepanel.cpp:506 -#: src/wx-console/wxbrestorepanel.cpp:516 -#: src/wx-console/wxbrestorepanel.cpp:1783 -msgid "Pool" +#: src/stored/btape.c:2687 +#, c-format +msgid "Mount second Volume on device %s and press return when ready: " msgstr "" -#: src/dird/ua_run.c:718 -msgid "Verify Job" +#: src/stored/btape.c:2714 +#, c-format +msgid "Mount blank Volume on device %s and press return when ready: " msgstr "" -#: src/dird/ua_run.c:721 src/wx-console/wxbrestorepanel.cpp:331 -#: src/wx-console/wxbrestorepanel.cpp:1848 -msgid "Bootstrap" +#: src/stored/btape.c:2732 +#, c-format +msgid "End of Volume \"%s\"\n" msgstr "" -#: src/dird/ua_run.c:722 src/wx-console/wxbrestorepanel.cpp:332 -#: src/wx-console/wxbrestorepanel.cpp:1072 -#: src/wx-console/wxbrestorepanel.cpp:1850 -msgid "Where" +#: src/stored/btape.c:2744 +#, c-format +msgid "Read block=%u, VolBytes=%s rate=%.1f KB/s\n" msgstr "" -#: src/dird/ua_run.c:723 src/wx-console/wxbrestorepanel.cpp:334 -#: src/wx-console/wxbrestorepanel.cpp:1080 -#: src/wx-console/wxbrestorepanel.cpp:1854 -#: src/wx-console/wxbrestorepanel.cpp:1855 -#: src/wx-console/wxbrestorepanel.cpp:1856 -#: src/wx-console/wxbrestorepanel.cpp:1857 -#: src/wx-console/wxbrestorepanel.cpp:1858 -msgid "Replace" +#: src/stored/btape.c:2759 src/stored/mount.c:500 +#, c-format +msgid "Cannot open Dev=%s, Vol=%s\n" msgstr "" -#: src/dird/ua_run.c:724 -msgid "JobId" +#: src/stored/butil.c:46 +msgid "Nohdr," msgstr "" -#: src/dird/ua_run.c:726 src/dird/ua_update.c:479 -msgid "Select parameter to modify" +#: src/stored/butil.c:49 +msgid "partial," msgstr "" -#: src/dird/ua_run.c:730 src/dird/ua_run.c:757 -msgid "Levels:\n" +#: src/stored/butil.c:52 +msgid "empty," msgstr "" -#: src/dird/ua_run.c:736 src/dird/ua_run.c:763 -msgid "Select level" +#: src/stored/butil.c:55 +msgid "Nomatch," msgstr "" -#: src/dird/ua_run.c:758 -msgid "Initialize Catalog" +#: src/stored/butil.c:58 +msgid "cont," msgstr "" -#: src/dird/ua_run.c:762 -msgid "Verify Volume Data (not yet implemented)" +#: src/stored/butil.c:130 +msgid "Volume name or names is too long. Please use a .bsr file.\n" msgstr "" -#: src/dird/ua_run.c:784 -msgid "Level not appropriate for this Job. Cannot be changed.\n" +#: src/stored/butil.c:150 +#, c-format +msgid "Cannot find device \"%s\" in config file %s.\n" msgstr "" -#: src/dird/ua_run.c:822 -msgid "" -"Please enter desired start time as YYYY-MM-DD HH:MM:SS (return for now): " +#: src/stored/butil.c:157 +#, c-format +msgid "Cannot init device %s\n" msgstr "" -#: src/dird/ua_run.c:837 -msgid "Enter new Priority: " +#: src/stored/butil.c:178 +#, c-format +msgid "Cannot open %s\n" msgstr "" -#: src/dird/ua_run.c:841 -msgid "Priority must be a positive integer.\n" +#: src/stored/butil.c:261 +#, c-format +msgid "Could not find device \"%s\" in config file %s.\n" msgstr "" -#: src/dird/ua_run.c:859 -msgid "Please enter the Bootstrap file name: " +#: src/stored/butil.c:266 +#, c-format +msgid "Using device: \"%s\" for reading.\n" msgstr "" -#: src/dird/ua_run.c:870 +#: src/stored/butil.c:269 #, c-format -msgid "Warning cannot open %s: ERR=%s\n" +msgid "Using device: \"%s\" for writing.\n" msgstr "" -#: src/dird/ua_run.c:889 -msgid "Please enter path prefix for restore (/ for none): " +#: src/stored/butil.c:285 +msgid "Unexpected End of Data\n" msgstr "" -#: src/dird/ua_run.c:903 -msgid "Replace:\n" +#: src/stored/butil.c:287 +msgid "Unexpected End of Tape\n" msgstr "" -#: src/dird/ua_run.c:907 -msgid "Select replace option" +#: src/stored/butil.c:289 +msgid "Unexpected End of File\n" msgstr "" -#: src/dird/ua_run.c:917 -msgid "" -"You must set the bootstrap file to NULL to be able to specify a JobId.\n" +#: src/stored/butil.c:291 +msgid "Tape Door is Open\n" msgstr "" -#: src/dird/ua_run.c:935 -msgid "Job failed.\n" +#: src/stored/butil.c:293 +msgid "Unexpected Tape is Off-line\n" msgstr "" -#: src/dird/ua_run.c:938 +#: src/stored/dev.c:112 #, c-format -msgid "Job started. JobId=%s\n" +msgid "Unable to stat device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:944 -msgid "Job not run.\n" +#: src/stored/dev.c:123 +#, 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/backup.c:88 src/dird/backup.c:94 src/dird/mac.c:121 -#: src/dird/ua_output.c:618 +#: src/stored/dev.c:179 #, c-format -msgid "Pool %s not in database. %s" +msgid "Unable to stat mount point %s: ERR=%s\n" msgstr "" -#: src/dird/backup.c:92 src/dird/mac.c:125 src/dird/ua_output.c:626 -#, c-format -msgid "Pool %s created in database.\n" +#: src/stored/dev.c:186 +msgid "" +"Mount and unmount commands must defined for a device which requires mount.\n" msgstr "" -#: src/dird/backup.c:106 src/dird/mac.c:134 -msgid "No Storage specification found in Job or Pool.\n" +#: src/stored/dev.c:189 +msgid "Write part command must be defined for a device which requires mount.\n" msgstr "" -#: src/dird/backup.c:131 +#: src/stored/dev.c:194 #, c-format -msgid "Start Backup JobId %s, Job=%s\n" +msgid "Block size %u on device %s is too large, using default %u\n" msgstr "" -#: src/dird/backup.c:262 +#: src/stored/dev.c:199 #, c-format -msgid "Unexpected Client Job message: %s\n" +msgid "Max block size %u not multiple of device %s block size.\n" msgstr "" -#: src/dird/backup.c:270 +#: src/stored/dev.c:215 src/stored/dev.c:221 #, c-format -msgid "Network error with FD during %s: ERR=%s\n" +msgid "Unable to init cond variable: ERR=%s\n" msgstr "" -#: src/dird/backup.c:286 -msgid "No Job status returned from FD.\n" +#: src/stored/dev.c:312 +msgid "Illegal mode given to open dev.\n" msgstr "" -#: src/dird/backup.c:330 src/dird/admin.c:82 src/dird/mac.c:401 +#: src/stored/dev.c:355 src/stored/device.c:295 #, c-format -msgid "Error getting job record for stats: %s" +msgid "Unable to open device %s: ERR=%s\n" msgstr "" -#: src/dird/backup.c:337 +#: src/stored/dev.c:423 src/stored/dev.c:481 #, c-format -msgid "Error getting client record for stats: %s" +msgid "Could not open file device %s. No Volume name given.\n" msgstr "" -#: src/dird/backup.c:343 src/dird/mac.c:408 +#: src/stored/dev.c:449 src/stored/dev.c:562 #, c-format -msgid "Error getting Media record for Volume \"%s\": ERR=%s" -msgstr "" - -#: src/dird/backup.c:355 -msgid "Backup OK -- with warnings" +msgid "Could not open: %s, ERR=%s\n" msgstr "" -#: src/dird/backup.c:422 +#: src/stored/dev.c:506 #, c-format msgid "" -"Bacula %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\"\n" -" Storage: \"%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" -" 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" +"The media in the device %s is not empty, please blank it before writing " +"anything to it.\n" msgstr "" -#: src/dird/backup.c:512 +#: src/stored/dev.c:523 #, c-format -msgid "Could not get Job Volume Parameters to update Bootstrap file. ERR=%s\n" +msgid "There is no valid media in the device %s.\n" msgstr "" -#: src/dird/backup.c:546 +#: src/stored/dev.c:530 #, c-format -msgid "" -"Could not open WriteBootstrap file:\n" -"%s: ERR=%s\n" +msgid "Could not mount device %s.\n" msgstr "" -#: src/dird/job.c:50 +#: src/stored/dev.c:588 #, c-format -msgid "Could not init job queue: ERR=%s\n" +msgid "Could not fstat: %s, ERR=%s\n" msgstr "" -#: src/dird/job.c:81 +#: src/stored/dev.c:631 #, c-format -msgid "Could not add job queue: ERR=%s\n" +msgid "Bad call to rewind. Device %s not open\n" msgstr "" -#: src/dird/job.c:184 -msgid "Job canceled because max start delay time exceeded.\n" +#: src/stored/dev.c:677 +#, c-format +msgid "Rewind error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:235 src/dird/job.c:313 +#: src/stored/dev.c:687 src/stored/dev.c:802 src/stored/dev.c:938 +#: src/stored/dev.c:1457 #, c-format -msgid "Unimplemented job type: %d\n" +msgid "lseek_dev error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:260 -#, c-format -msgid "RunBefore: %s" +#: src/stored/dev.c:727 +msgid "unknown blocked code" msgstr "" -#: src/dird/job.c:265 +#: src/stored/dev.c:772 #, c-format -msgid "RunBeforeJob error: ERR=%s\n" +msgid "Bad call to eod_dev. Device %s not open\n" msgstr "" -#: src/dird/job.c:331 +#: src/stored/dev.c:838 #, c-format -msgid "RunAfter: %s" +msgid "ioctl MTEOM error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:341 +#: src/stored/dev.c:846 src/stored/dev.c:978 #, c-format -msgid "RunAfterJob error: ERR=%s\n" +msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:343 -#, c-format -msgid "RunAfterFailedJob error: ERR=%s\n" +#: src/stored/dev.c:924 +msgid "Bad device call. Device not open\n" msgstr "" -#: src/dird/job.c:382 +#: src/stored/dev.c:937 #, c-format -msgid "JobId %d, Job %s marked to be canceled.\n" +msgid "Seek error: ERR=%s\n" msgstr "" -#: src/dird/job.c:392 -msgid "Failed to connect to File daemon.\n" +#: src/stored/dev.c:973 +msgid " Bacula status:" msgstr "" -#: src/dird/job.c:548 src/dird/job.c:596 +#: src/stored/dev.c:974 src/stored/dev.c:1023 src/stored/dev.c:1025 #, c-format -msgid "Unhandled job status code %d\n" +msgid " file=%d block=%d\n" msgstr "" -#: src/dird/job.c:656 -msgid "FileSet MD5 digest not found.\n" +#: src/stored/dev.c:982 +msgid " Device status:" msgstr "" -#: src/dird/job.c:661 -#, c-format -msgid "Could not create FileSet \"%s\" record. ERR=%s\n" +#: src/stored/dev.c:1047 +msgid "Bad call to load_dev. Device not open\n" msgstr "" -#: src/dird/job.c:700 +#: src/stored/dev.c:1058 src/stored/dev.c:1071 #, c-format -msgid "Error updating job record. %s" -msgstr "" - -#: src/dird/job.c:944 -msgid "Could not start clone job.\n" +msgid "ioctl MTLOAD error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:946 +#: src/stored/dev.c:1107 #, c-format -msgid "Clone JobId %d started.\n" +msgid "ioctl MTOFFL error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_input.c:82 -msgid "Enter slot" +#: src/stored/dev.c:1148 +msgid "Bad call to fsf_dev. Device not open\n" msgstr "" -#: src/dird/ua_input.c:86 src/dird/ua_input.c:92 +#: src/stored/dev.c:1158 src/stored/dev.c:1279 #, c-format -msgid "Expected a positive integer, got: %s\n" +msgid "Device %s at End of Tape.\n" msgstr "" -#: src/dird/ua_input.c:127 -msgid "Invalid response. You must answer yes or no.\n" +#: src/stored/dev.c:1183 src/stored/dev.c:1259 +#, c-format +msgid "ioctl MTFSF error on %s. ERR=%s.\n" msgstr "" -#: src/dird/bsr.c:176 -#, c-format -msgid "Unable to get Job record. ERR=%s\n" +#: src/stored/dev.c:1308 +msgid "Bad call to bsf_dev. Device not open\n" msgstr "" -#: src/dird/bsr.c:183 +#: src/stored/dev.c:1314 #, c-format -msgid "Unable to get Job Volume Parameters. ERR=%s\n" +msgid "Device %s cannot BSF because it is not a tape.\n" msgstr "" -#: src/dird/bsr.c:224 +#: src/stored/dev.c:1329 #, c-format -msgid "Unable to create bootstrap file %s. ERR=%s\n" +msgid "ioctl MTBSF error on %s. ERR=%s.\n" msgstr "" -#: src/dird/bsr.c:233 -msgid "Error writing bsr file.\n" +#: src/stored/dev.c:1349 +msgid "Bad call to fsr. Device not open\n" msgstr "" -#: src/dird/bsr.c:239 +#: src/stored/dev.c:1358 #, c-format -msgid "Bootstrap records written to %s\n" +msgid "ioctl MTFSR not permitted on %s.\n" msgstr "" -#: src/dird/bsr.c:243 -msgid "The job will require the following Volumes:\n" +#: src/stored/dev.c:1386 +#, c-format +msgid "ioctl MTFSR %d error on %s. ERR=%s.\n" msgstr "" -#: src/dird/bsr.c:275 -msgid "No Volumes found to restore.\n" +#: src/stored/dev.c:1406 +msgid "Bad call to bsr_dev. Device not open\n" msgstr "" -#: src/dird/run_conf.c:188 +#: src/stored/dev.c:1416 #, c-format -msgid "Expected an equals, got: %s" +msgid "ioctl MTBSR not permitted on %s.\n" msgstr "" -#: src/dird/run_conf.c:201 src/dird/run_conf.c:213 +#: src/stored/dev.c:1429 #, c-format -msgid "Expect a YES or NO, got: %s" +msgid "ioctl MTBSR error on %s. ERR=%s.\n" msgstr "" -#: src/dird/run_conf.c:227 -#, c-format -msgid "Job level field: %s not found in run record" +#: src/stored/dev.c:1446 +msgid "Bad call to reposition_dev. Device not open\n" msgstr "" -#: src/dird/run_conf.c:245 -#, c-format -msgid "Could not find specified Pool Resource: %s" +#: src/stored/dev.c:1514 +msgid "Bad call to weof_dev. Device not open\n" msgstr "" -#: src/dird/run_conf.c:270 -#, c-format -msgid "Could not find specified Storage Resource: %s" +#: src/stored/dev.c:1524 +msgid "Attempt to WEOF on non-appendable Volume\n" msgstr "" -#: src/dird/run_conf.c:282 +#: src/stored/dev.c:1541 #, c-format -msgid "Could not find specified Messages Resource: %s" +msgid "ioctl MTWEOF error on %s. ERR=%s.\n" msgstr "" -#: src/dird/run_conf.c:290 -#, c-format -msgid "Expected a keyword name, got: %s" +#: src/stored/dev.c:1583 +msgid "Got ENOTTY on read/write!\n" msgstr "" -#: src/dird/run_conf.c:327 -msgid "Day number out of range (1-31)" +#: src/stored/dev.c:1630 +#, c-format +msgid "unknown func code %d" msgstr "" -#: src/dird/run_conf.c:344 src/dird/run_conf.c:490 -msgid "Week number out of range (0-53)" +#: src/stored/dev.c:1636 +#, c-format +msgid "I/O function \"%s\" not supported on this device.\n" msgstr "" -#: src/dird/run_conf.c:359 +#: src/stored/dev.c:1761 src/stored/dvd.c:734 #, c-format -msgid "Job type field: %s in run record not found" +msgid "Unable to truncate device %s. ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:366 -#, c-format -msgid "Unexpected token: %d:%s" +#: src/stored/dev.c:1800 +msgid "Bad call to term_dev. Device not open\n" msgstr "" -#: src/dird/run_conf.c:410 -msgid "Time must be preceded by keyword AT." +#: src/stored/device.c:100 +#, c-format +msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" msgstr "" -#: src/dird/run_conf.c:418 -msgid "Time logic error.\n" +#: src/stored/device.c:114 +#, c-format +msgid "New volume \"%s\" mounted on device %s at %s.\n" msgstr "" -#: src/dird/run_conf.c:430 src/dird/run_conf.c:446 -msgid "Bad time specification." +#: src/stored/device.c:126 +#, c-format +msgid "write_block_to_device Volume label failed. ERR=%s" msgstr "" -#: src/dird/run_conf.c:459 -msgid "Range logic error.\n" +#: src/stored/device.c:162 +#, c-format +msgid "write_block_to_device overflow block failed. ERR=%s" msgstr "" -#: src/dird/run_conf.c:468 -msgid "Bad day range specification." +#: src/stored/device.c:297 +#, c-format +msgid "Unable to open archive %s: ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:515 -msgid "Invalid month, week or position day range" +#: src/stored/device.c:332 +#, c-format +msgid "Device write lock failure. ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:530 -msgid "Invalid month, weekday or position range" +#: src/stored/device.c:340 +#, c-format +msgid "Device write unlock failure. ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:589 -msgid "Unexpected run state\n" +#: src/stored/device.c:359 +#, c-format +msgid "pthread_cond_wait failure. ERR=%s\n" msgstr "" -#: src/dird/pythondir.c:137 -msgid "Pool record not found." +#: src/stored/dircmd.c:140 +msgid "Connection request failed.\n" msgstr "" -#: src/dird/ua_restore.c:115 -msgid "" -"No Restore Job Resource found in bacula-dir.conf.\n" -"You must create at least one before running this command.\n" +#: src/stored/dircmd.c:149 +#, c-format +msgid "Invalid connection. Len=%d\n" msgstr "" -#: src/dird/ua_restore.c:131 -msgid "Restore not done.\n" +#: src/stored/dircmd.c:241 +#, c-format +msgid "3991 Bad setdebug command: %s\n" msgstr "" -#: src/dird/ua_restore.c:142 -msgid "Unable to construct a valid BSR. Cannot continue.\n" +#: src/stored/dircmd.c:262 +#, c-format +msgid "3904 Job %s not found.\n" msgstr "" -#: src/dird/ua_restore.c:146 src/dird/ua_restore.c:160 -msgid "No files selected to be restored.\n" +#: src/stored/dircmd.c:283 +#, c-format +msgid "3000 Job %s marked to be canceled.\n" msgstr "" -#: src/dird/ua_restore.c:154 -msgid "" -"\n" -"1 file selected to be restored.\n" -"\n" +#: src/stored/dircmd.c:287 +msgid "3903 Error scanning cancel command.\n" msgstr "" -#: src/dird/ua_restore.c:157 +#: src/stored/dircmd.c:364 src/stored/dircmd.c:680 src/stored/dircmd.c:756 +#: src/stored/dircmd.c:819 src/stored/dircmd.c:874 src/stored/dircmd.c:918 #, c-format -msgid "" -"\n" -"%u files selected to be restored.\n" -"\n" +msgid "3999 Device \"%s\" not found or could not be opened.\n" msgstr "" -#: src/dird/ua_restore.c:175 -msgid "No Restore Job resource found!\n" +#: src/stored/dircmd.c:369 +#, c-format +msgid "3903 Error scanning label command: %s\n" msgstr "" -#: src/dird/ua_restore.c:237 +#: src/stored/dircmd.c:412 #, c-format -msgid "Missing value for keyword: %s\n" +msgid "3920 Cannot label Volume because it is already labeled: \"%s\"\n" msgstr "" -#: src/dird/ua_restore.c:286 -msgid "List last 20 Jobs run" +#: src/stored/dircmd.c:419 +msgid "3921 Wrong volume mounted.\n" msgstr "" -#: src/dird/ua_restore.c:287 -msgid "List Jobs where a given File is saved" +#: src/stored/dircmd.c:423 +msgid "3922 Cannot relabel an ANSI/IBM labeled Volume.\n" msgstr "" -#: src/dird/ua_restore.c:288 -msgid "Enter list of comma separated JobIds to select" +#: src/stored/dircmd.c:431 src/stored/dircmd.c:440 +#, c-format +msgid "3912 Failed to label Volume: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:289 -msgid "Enter SQL list command" +#: src/stored/dircmd.c:443 +#, c-format +msgid "3913 Cannot label Volume. Unknown status %d from read_volume_label()\n" msgstr "" -#: src/dird/ua_restore.c:290 -msgid "Select the most recent backup for a client" +#: src/stored/dircmd.c:476 +#, c-format +msgid "3001 Mounted Volume: %s\n" msgstr "" -#: src/dird/ua_restore.c:291 -msgid "Select backup for a client before a specified time" +#: src/stored/dircmd.c:480 src/stored/dircmd.c:954 +#, c-format +msgid "" +"3902 Cannot mount Volume on Storage Device %s because:\n" +"%s" msgstr "" -#: src/dird/ua_restore.c:292 -msgid "Enter a list of files to restore" +#: src/stored/dircmd.c:508 src/stored/reserve.c:634 +#, c-format +msgid "" +"\n" +" Device \"%s\" requested by DIR could not be opened or does not exist.\n" msgstr "" -#: src/dird/ua_restore.c:293 -msgid "Enter a list of files to restore before a specified time" +#: src/stored/dircmd.c:529 src/stored/reserve.c:630 +#, 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_restore.c:294 -msgid "Find the JobIds of the most recent backup for a client" +#: src/stored/dircmd.c:593 src/stored/dircmd.c:646 +#, c-format +msgid "3901 open device failed: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:295 -msgid "Find the JobIds for a backup for a client before a specified time" +#: src/stored/dircmd.c:613 src/stored/dircmd.c:637 +#, c-format +msgid "3001 Device %s is mounted with Volume \"%s\"\n" msgstr "" -#: src/dird/ua_restore.c:296 -msgid "Enter a list of directories to restore for found JobIds" +#: src/stored/dircmd.c:616 src/stored/dircmd.c:640 src/stored/dircmd.c:655 +#, 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_restore.c:333 +#: src/stored/dircmd.c:625 #, c-format -msgid "Unknown keyword: %s\n" +msgid "3001 Device %s is doing acquire.\n" msgstr "" -#: src/dird/ua_restore.c:357 +#: src/stored/dircmd.c:630 src/stored/dircmd.c:730 #, c-format -msgid "Improper date format: %s\n" +msgid "3903 Device %s is being labeled.\n" msgstr "" -#: src/dird/ua_restore.c:397 src/dird/ua_select.c:590 +#: src/stored/dircmd.c:652 #, c-format -msgid "Error: Pool resource \"%s\" does not exist.\n" +msgid "3001 Device %s is already mounted with Volume \"%s\"\n" msgstr "" -#: src/dird/ua_restore.c:402 +#: src/stored/dircmd.c:661 #, c-format -msgid "Error: Pool resource \"%s\" access not allowed.\n" +msgid "3002 Device %s is mounted.\n" msgstr "" -#: src/dird/ua_restore.c:421 -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/dircmd.c:664 +#, c-format +msgid "3907 %s" msgstr "" -#: src/dird/ua_restore.c:433 -msgid "To select the JobIds, you have the following choices:\n" +#: src/stored/dircmd.c:667 +#, c-format +msgid "3906 File device %s is always mounted.\n" msgstr "" -#: src/dird/ua_restore.c:438 -msgid "Select item: " +#: src/stored/dircmd.c:673 +#, c-format +msgid "3905 Bizarre wait state %d\n" msgstr "" -#: src/dird/ua_restore.c:452 -msgid "Enter Filename (no path):" +#: src/stored/dircmd.c:684 +#, c-format +msgid "3909 Error scanning mount command: %s\n" msgstr "" -#: src/dird/ua_restore.c:467 src/dird/ua_restore.c:567 -msgid "Enter JobId(s), comma separated, to restore: " +#: src/stored/dircmd.c:711 +#, c-format +msgid "3901 Device %s is already unmounted.\n" msgstr "" -#: src/dird/ua_restore.c:473 -msgid "Enter SQL list command: " +#: src/stored/dircmd.c:722 +#, c-format +msgid "3001 Device %s unmounted.\n" msgstr "" -#: src/dird/ua_restore.c:501 src/dird/ua_restore.c:526 -msgid "" -"Enter file names with paths, or < to enter a filename\n" -"containg a list of file names with paths, and terminate\n" -"them with a blank line.\n" +#: src/stored/dircmd.c:726 +#, c-format +msgid "3902 Device %s is busy in acquire.\n" msgstr "" -#: src/dird/ua_restore.c:505 src/dird/ua_restore.c:530 -msgid "Enter full filename: " +#: src/stored/dircmd.c:749 +#, c-format +msgid "3002 Device %s unmounted.\n" msgstr "" -#: src/dird/ua_restore.c:565 +#: src/stored/dircmd.c:761 #, c-format -msgid "You have already seleted the following JobIds: %s\n" +msgid "3907 Error scanning unmount command: %s\n" msgstr "" -#: src/dird/ua_restore.c:580 -msgid "" -"Enter full directory names or start the name\n" -"with a < to indicate it is a filename containg a list\n" -"of directories and terminate them with a blank line.\n" +#: src/stored/dircmd.c:789 +#, c-format +msgid "3921 Device %s already released.\n" msgstr "" -#: src/dird/ua_restore.c:584 -msgid "Enter directory name: " +#: src/stored/dircmd.c:796 +#, c-format +msgid "3922 Device %s waiting for mount.\n" msgstr "" -#: src/dird/ua_restore.c:609 -msgid "No Jobs selected.\n" +#: src/stored/dircmd.c:800 +#, c-format +msgid "3923 Device %s is busy in acquire.\n" msgstr "" -#: src/dird/ua_restore.c:613 +#: src/stored/dircmd.c:804 #, c-format -msgid "You have selected the following JobIds: %s\n" +msgid "3914 Device %s is being labeled.\n" msgstr "" -#: src/dird/ua_restore.c:616 +#: src/stored/dircmd.c:812 #, c-format -msgid "You have selected the following JobId: %s\n" +msgid "3022 Device %s released.\n" msgstr "" -#: src/dird/ua_restore.c:624 -msgid "Invalid JobId in list.\n" +#: src/stored/dircmd.c:824 +#, c-format +msgid "3927 Error scanning release command: %s\n" msgstr "" -#: src/dird/ua_restore.c:637 +#: src/stored/dircmd.c:860 #, c-format -msgid "Unable to get Job record for JobId=%s: ERR=%s\n" +msgid "3995 Device %s is not an autochanger.\n" msgstr "" -#: src/dird/ua_restore.c:642 +#: src/stored/dircmd.c:878 #, c-format -msgid "No authorization. Job \"%s\" not selected.\n" +msgid "3908 Error scanning autocharger drives/list/slots command: %s\n" msgstr "" -#: src/dird/ua_restore.c:656 -msgid "" -"The restored files will the most current backup\n" -"BEFORE the date you specify below.\n" -"\n" +#: src/stored/dircmd.c:922 +#, c-format +msgid "3909 Error scanning readlabel command: %s\n" msgstr "" -#: src/dird/ua_restore.c:659 -msgid "Enter date as YYYY-MM-DD HH:MM:SS :" +#: src/stored/dircmd.c:950 +#, c-format +msgid "3001 Volume=%s Slot=%d\n" msgstr "" -#: src/dird/ua_restore.c:665 -msgid "Improper date format.\n" +#: src/stored/dircmd.c:979 +#, c-format +msgid "3910 Unable to open device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:686 +#: src/stored/dircmd.c:991 #, c-format -msgid "Cannot open file %s: ERR=%s\n" +msgid "3931 Device %s is BLOCKED. user unmounted.\n" msgstr "" -#: src/dird/ua_restore.c:694 src/dird/ua_restore.c:698 +#: src/stored/dircmd.c:995 #, c-format -msgid "Error occurred on line %d of %s\n" +msgid "" +"3932 Device %s is BLOCKED. user unmounted during wait for media/mount.\n" msgstr "" -#: src/dird/ua_restore.c:740 src/dird/ua_restore.c:778 -#: src/dird/ua_restore.c:809 src/dird/ua_dotcmds.c:231 +#: src/stored/dircmd.c:999 #, c-format -msgid "Query failed: %s. ERR=%s\n" +msgid "3933 Device %s is BLOCKED waiting for media.\n" msgstr "" -#: src/dird/ua_restore.c:744 src/dird/ua_restore.c:782 +#: src/stored/dircmd.c:1003 #, c-format -msgid "No database record found for: %s\n" +msgid "3934 Device %s is being initialized.\n" msgstr "" -#: src/dird/ua_restore.c:769 -msgid "No JobId specified cannot continue.\n" +#: src/stored/dircmd.c:1007 +#, c-format +msgid "3935 Device %s is blocked labeling a Volume.\n" msgstr "" -#: src/dird/ua_restore.c:813 +#: src/stored/dircmd.c:1011 #, c-format -msgid "No table found: %s\n" +msgid "3935 Device %s is blocked for unknown reason.\n" msgstr "" -#: src/dird/ua_restore.c:918 +#: src/stored/dircmd.c:1016 #, c-format -msgid "" -"\n" -"Building directory tree for JobId %s ... " +msgid "3936 Device %s is busy reading.\n" msgstr "" -#: src/dird/ua_restore.c:937 -msgid "" -"\n" -"There were no files inserted into the tree, so file selection\n" -"is not possible.Most likely your retention policy pruned the files\n" +#: src/stored/dircmd.c:1019 +#, c-format +msgid "3937 Device %s is busy with %d writer(s).\n" msgstr "" -#: src/dird/ua_restore.c:939 -msgid "" -"\n" -"Do you want to restore all the files? (yes|no): " +#: src/stored/dvd.c:153 +#, c-format +msgid "Device %s cannot be mounted. ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:955 +#: src/stored/dvd.c:271 #, c-format -msgid "" -"\n" -"1 Job, %s files inserted into the tree and marked for extraction.\n" +msgid "Cannot run free space command (%s)\n" msgstr "" -#: src/dird/ua_restore.c:959 +#: src/stored/dvd.c:374 #, c-format -msgid "" -"\n" -"1 Job, %s files inserted into the tree.\n" +msgid "Error while writing current part to the DVD: %s" msgstr "" -#: src/dird/ua_restore.c:965 +#: src/stored/dvd.c:394 #, c-format -msgid "" -"\n" -"%d Jobs, %s files inserted into the tree and marked for extraction.\n" +msgid "Remaining free space %s on %s\n" msgstr "" -#: src/dird/ua_restore.c:969 +#: src/stored/dvd.c:464 #, c-format -msgid "" -"\n" -"%d Jobs, %s files inserted into the tree.\n" +msgid "Next Volume part already exists on DVD. Cannot continue: %s\n" msgstr "" -#: src/dird/ua_restore.c:1046 +#: src/stored/dvd.c:481 #, c-format -msgid "Error getting FileSet \"%s\": ERR=%s\n" +msgid "open_next_part can't unlink existing part %s, ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1054 src/dird/ua_select.c:167 -msgid "The defined FileSet resources are:\n" +#: src/stored/dvd.c:700 +#, c-format +msgid "Unable to write part %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1058 src/dird/ua_select.c:175 -msgid "Select FileSet resource" +#: src/stored/fd_cmds.c:340 +msgid "Error parsing bootstrap file.\n" msgstr "" -#: src/dird/ua_restore.c:1065 +#: src/stored/job.c:79 #, c-format -msgid "Error getting FileSet record: %s\n" +msgid "Bad Job Command from Director: %s\n" msgstr "" -#: src/dird/ua_restore.c:1066 -msgid "" -"This probably means you modified the FileSet.\n" -"Continuing anyway.\n" +#: src/stored/job.c:189 +#, c-format +msgid "Job name not found: %s\n" msgstr "" -#: src/dird/ua_restore.c:1081 +#: src/stored/job.c:200 #, c-format -msgid "Pool \"%s\" not found, using any pool.\n" +msgid "Hey!!!! JobId %u Job %s already authenticated.\n" msgstr "" -#: src/dird/ua_restore.c:1107 src/dird/ua_restore.c:1123 -#, c-format -msgid "No Full backup before %s found.\n" +#: src/stored/job.c:211 +msgid "Unable to authenticate File daemon\n" msgstr "" -#: src/dird/ua_restore.c:1146 -msgid "No jobs found.\n" +#: src/stored/job.c:338 +msgid "In free_jcr(), but still attached to device!!!!\n" msgstr "" -#: src/dird/ua_restore.c:1312 -msgid "" -"Warning, the JobIds that you selected refer to more than one MediaType.\n" -"Restore is not possible. The MediaTypes used are:\n" +#: src/stored/label.c:74 +msgid "BAD call to read_dev_volume_label\n" +msgstr "" + +#: src/stored/label.c:79 src/stored/label.c:120 src/stored/label.c:208 +#, c-format +msgid "Wrong Volume mounted on device %s: Wanted %s have %s\n" msgstr "" -#: src/dird/ua_restore.c:1320 -msgid "No MediaType found for your JobIds.\n" +#: src/stored/label.c:86 src/stored/label.c:123 src/stored/label.c:195 +#, c-format +msgid "Too many tries: %s" msgstr "" -#: src/dird/ua_restore.c:1352 +#: src/stored/label.c:102 #, c-format -msgid "Warning default storage overridden by %s on command line.\n" +msgid "Couldn't rewind device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1363 +#: src/stored/label.c:140 #, c-format msgid "" -"\n" -"Warning. Unable to find Storage resource for\n" -"MediaType \"%s\", needed by the Jobs you selected.\n" -"You will be allowed to select a Storage device later.\n" +"Requested Volume \"%s\" on %s is not a Bacula labeled Volume, because: ERR=%s" msgstr "" -#: src/dird/jobq.c:67 -#, c-format -msgid "pthread_attr_init: ERR=%s\n" +#: src/stored/label.c:145 +msgid "Could not read Volume label from block.\n" msgstr "" -#: src/dird/jobq.c:76 +#: src/stored/label.c:148 #, c-format -msgid "pthread_mutex_init: ERR=%s\n" +msgid "Could not unserialize Volume label: ERR=%s\n" msgstr "" -#: src/dird/jobq.c:82 +#: src/stored/label.c:153 #, c-format -msgid "pthread_cond_init: ERR=%s\n" +msgid "Volume Header Id bad: %s\n" msgstr "" -#: src/dird/jobq.c:115 src/dird/jobq.c:242 src/dird/jobq.c:307 -#: src/dird/jobq.c:388 +#: src/stored/label.c:180 #, c-format -msgid "pthread_mutex_lock: ERR=%s\n" +msgid "Volume on %s has wrong Bacula version. Wanted %d got %d\n" msgstr "" -#: src/dird/jobq.c:128 +#: src/stored/label.c:191 #, c-format -msgid "pthread_cond_broadcast: ERR=%s\n" +msgid "Volume on %s has bad Bacula label type: %x\n" msgstr "" -#: src/dird/jobq.c:136 +#: src/stored/label.c:272 #, c-format -msgid "pthread_cond_wait: ERR=%s\n" +msgid "Cannot write Volume label to block for device %s\n" msgstr "" -#: src/dird/jobq.c:144 +#: src/stored/label.c:400 #, c-format -msgid "pthread_mutex_unlock: ERR=%s\n" +msgid "Rewind error on device %s: ERR=%s\n" msgstr "" -#: src/dird/jobq.c:180 +#: src/stored/label.c:405 #, c-format -msgid "Job %s waiting %d seconds for scheduled start time.\n" +msgid "Truncate error on device %s: ERR=%s\n" msgstr "" -#: src/dird/jobq.c:235 +#: src/stored/label.c:427 #, c-format -msgid "pthread_thread_create: ERR=%s\n" +msgid "Unable to write device %s: ERR=%s\n" msgstr "" -#: src/dird/jobq.c:353 +#: src/stored/label.c:455 #, c-format -msgid "pthread_cond_signal: ERR=%s\n" +msgid "Recycled volume \"%s\" on device %s, all previous data lost.\n" msgstr "" -#: src/dird/jobq.c:362 +#: src/stored/label.c:458 #, c-format -msgid "pthread_create: ERR=%s\n" +msgid "Wrote label to prelabeled Volume \"%s\" on device %s\n" msgstr "" -#: src/dird/jobq.c:487 +#: src/stored/label.c:657 #, c-format -msgid "Rescheduled Job %s at %s to re-run in %d seconds.\n" +msgid "Bad session label = %d\n" msgstr "" -#: src/dird/ua_prune.c:173 -msgid "Choose item to prune" +#: src/stored/label.c:675 src/stored/label.c:682 +#, c-format +msgid "Error writing Session label to %s: %s\n" msgstr "" -#: src/dird/ua_prune.c:254 -msgid "No Files found to prune.\n" +#: src/stored/label.c:717 +#, c-format +msgid "Expecting Volume Label, got FI=%s Stream=%s len=%d\n" msgstr "" -#: src/dird/ua_prune.c:286 +#: src/stored/label.c:844 #, c-format -msgid "Pruned Files from %s Jobs for client %s from catalog.\n" +msgid "Unknown %d" msgstr "" -#: src/dird/ua_prune.c:392 -msgid "No Jobs found to prune.\n" +#: src/stored/label.c:848 +#, 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 "" -#: src/dird/ua_prune.c:453 +#: src/stored/label.c:870 #, c-format -msgid "Pruned %d %s for client %s from catalog.\n" +msgid "Date label written: %s\n" msgstr "" -#: src/dird/ua_prune.c:454 -msgid "Jobs" +#: src/stored/label.c:876 +#, c-format +msgid "Date label written: %04d-%02d-%02d at %02d:%02d\n" msgstr "" -#: src/dird/ua_prune.c:501 +#: src/stored/label.c:896 #, c-format -msgid "There are no Jobs associated with Volume \"%s\". Prune not needed.\n" +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_prune.c:508 src/dird/ua_purge.c:485 +#: src/stored/label.c:909 #, c-format -msgid "There are no Jobs associated with Volume \"%s\". Marking it purged.\n" +msgid "" +"Job (unique name) : %s\n" +"FileSet : %s\n" +"JobType : %c\n" +"JobLevel : %c\n" msgstr "" -#: src/dird/ua_prune.c:566 +#: src/stored/label.c:918 #, c-format -msgid "Pruned %d %s on Volume \"%s\" from catalog.\n" +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/next_vol.c:130 +#: src/stored/label.c:939 #, c-format -msgid "Purging oldest volume \"%s\"\n" +msgid "Date written : %s\n" msgstr "" -#: src/dird/next_vol.c:136 +#: src/stored/label.c:944 #, c-format -msgid "Pruning oldest volume \"%s\"\n" +msgid "Date written : %04d-%02d-%02d at %02d:%02d\n" msgstr "" -#: src/dird/next_vol.c:155 -msgid "We seem to be looping trying to find the next volume. I give up.\n" +#: src/stored/label.c:963 +msgid "Fresh Volume" msgstr "" -#: src/dird/next_vol.c:180 +#: src/stored/label.c:966 +msgid "Volume" +msgstr "" + +#: src/stored/label.c:975 src/stored/read_record.c:336 +msgid "End of Media" +msgstr "" + +#: src/stored/label.c:978 +msgid "End of Tape" +msgstr "" + +#: src/stored/label.c:998 src/stored/label.c:1006 src/stored/label.c:1039 #, c-format -msgid "Max Volume bytes exceeded. Marking Volume \"%s\" as Full.\n" +msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n" msgstr "" -#: src/dird/next_vol.c:187 +#: src/stored/label.c:1003 +msgid "End of physical tape.\n" +msgstr "" + +#: src/stored/label.c:1018 src/stored/label.c:1027 #, c-format -msgid "Volume used once. Marking Volume \"%s\" as Used.\n" +msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d\n" msgstr "" -#: src/dird/next_vol.c:194 +#: src/stored/label.c:1020 #, c-format -msgid "Max Volume jobs exceeded. Marking Volume \"%s\" as Used.\n" +msgid " Job=%s Date=%s Level=%c Type=%c\n" msgstr "" -#: src/dird/next_vol.c:201 +#: src/stored/label.c:1029 #, c-format -msgid "Max Volume files exceeded. Marking Volume \"%s\" as Used.\n" +msgid " Date=%s Level=%c Type=%c Files=%s Bytes=%s Errors=%d Status=%c\n" msgstr "" -#: src/dird/next_vol.c:211 +#: src/stored/mount.c:198 src/stored/mount.c:295 #, c-format -msgid "Max configured use duration exceeded. Marking Volume \"%s\" as Used.\n" +msgid "Volume \"%s\" not on device %s.\n" msgstr "" -#: src/dird/next_vol.c:221 +#: src/stored/mount.c:231 #, c-format -msgid "Catalog error updating volume \"%s\". ERR=%s" +msgid "" +"Director wanted Volume \"%s\".\n" +" Current Volume \"%s\" not acceptable because:\n" +" %s" msgstr "" -#: src/dird/next_vol.c:242 -msgid "volume has expired" +#: src/stored/mount.c:285 +#, c-format +msgid "Labeled new Volume \"%s\" on device %s.\n" msgstr "" -#: src/dird/next_vol.c:260 src/dird/next_vol.c:296 +#: src/stored/mount.c:290 #, c-format -msgid "Recycled current volume \"%s\"\n" +msgid "Warning device %s not configured to autolabel Volumes.\n" msgstr "" -#: src/dird/next_vol.c:265 -msgid "and recycling of current volume failed" +#: src/stored/mount.c:342 +#, c-format +msgid "Volume \"%s\" previously written, moving to end of data.\n" msgstr "" -#: src/dird/next_vol.c:271 -msgid "but should be Append, Purged or Recycle" +#: src/stored/mount.c:345 +#, c-format +msgid "Unable to position to end of data on device %s: ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:299 -msgid "" -"but should be Append, Purged or Recycle (recycling of the current volume " -"failed)" +#: src/stored/mount.c:357 +#, c-format +msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" msgstr "" -#: src/dird/next_vol.c:303 +#: src/stored/mount.c:360 +#, c-format msgid "" -"but should be Append, Purged or Recycle (cannot automatically recycle " -"current volume, as it still contains unpruned data)" +"I cannot write on Volume \"%s\" because:\n" +"The number of files mismatch! Volume=%u Catalog=%u\n" msgstr "" -#: src/dird/next_vol.c:343 +#: src/stored/mount.c:388 #, c-format -msgid "Unable to get Pool record: ERR=%s" +msgid "Ready to append to end of Volume \"%s\" at file address=%u.\n" msgstr "" -#: src/dird/next_vol.c:348 +#: src/stored/mount.c:392 #, c-format -msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" +msgid "" +"I cannot write on Volume \"%s\" because:\n" +"The EOD file address is wrong: Volume file address=%u != Catalog Endblock=%u" +"(+1)\n" +"You probably removed DVD last part in spool directory.\n" msgstr "" -#: src/dird/next_vol.c:361 +#: src/stored/mount.c:418 #, c-format -msgid "Failed to move Scratch Volume. ERR=%s\n" +msgid "Marking Volume \"%s\" in Error in Catalog.\n" msgstr "" -#: src/dird/next_vol.c:365 +#: src/stored/mount.c:434 #, c-format -msgid "Using Volume \"%s\" from 'Scratch' pool.\n" +msgid "" +"Autochanger Volume \"%s\" not found in slot %d.\n" +" Setting InChanger to zero in catalog.\n" msgstr "" -#: src/dird/next_vol.c:373 -#, c-format -msgid "Unable to update Volume record: ERR=%s" +#: src/stored/mount.c:453 +msgid "Hey!!!!! WroteVol non-zero !!!!!\n" msgstr "" -#: src/dird/recycle.c:99 +#: src/stored/parse_bsr.c:104 src/stored/parse_bsr.c:108 #, c-format -msgid "Recycled volume \"%s\"\n" +msgid "" +"Bootstrap file error: %s\n" +" : Line %d, col %d of file %s\n" +"%s\n" msgstr "" -#: src/dird/expand.c:240 +#: src/stored/parse_bsr.c:130 #, c-format -msgid "Count not update counter %s: ERR=%s\n" +msgid "Cannot open bootstrap file %s: %s\n" msgstr "" -#: src/dird/expand.c:412 +#: src/stored/parse_bsr.c:260 #, c-format -msgid "Cannot create var context: ERR=%s\n" +msgid "MediaType %s in bsr at inappropriate place.\n" msgstr "" -#: src/dird/expand.c:417 -#, c-format -msgid "Cannot set var callback: ERR=%s\n" +#: src/stored/parse_bsr.c:416 +msgid "JobType not yet implemented\n" msgstr "" -#: src/dird/expand.c:423 +#: src/stored/parse_bsr.c:424 +msgid "JobLevel not yet implemented\n" +msgstr "" + +#: src/stored/parse_bsr.c:626 #, c-format -msgid "Cannot set var operate: ERR=%s\n" +msgid "VolFile : %u-%u\n" msgstr "" -#: src/dird/expand.c:429 src/dird/expand.c:444 +#: src/stored/parse_bsr.c:634 #, c-format -msgid "Cannot unescape string: ERR=%s\n" +msgid "VolBlock : %u-%u\n" msgstr "" -#: src/dird/expand.c:437 +#: src/stored/parse_bsr.c:644 #, c-format -msgid "Cannot expand expression \"%s\": ERR=%s\n" +msgid "FileIndex : %u\n" msgstr "" -#: src/dird/expand.c:455 +#: src/stored/parse_bsr.c:646 #, c-format -msgid "Cannot destroy var context: ERR=%s\n" +msgid "FileIndex : %u-%u\n" msgstr "" -#: src/dird/dird.c:71 +#: src/stored/parse_bsr.c:656 #, c-format -msgid "" -"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 set configuration file to file\n" -" -dnn set debug level to nn\n" -" -f run in foreground (for debugging)\n" -" -g groupid\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 "JobId : %u\n" msgstr "" -#: src/dird/dird.c:396 -msgid "Too many open reload requests. Request ignored.\n" +#: src/stored/parse_bsr.c:658 +#, c-format +msgid "JobId : %u-%u\n" msgstr "" -#: src/dird/dird.c:411 -msgid "Out of reload table entries. Giving up.\n" +#: src/stored/parse_bsr.c:668 +#, c-format +msgid "SessId : %u\n" msgstr "" -#: src/dird/dird.c:414 -msgid "Resetting previous configuration.\n" +#: src/stored/parse_bsr.c:670 +#, c-format +msgid "SessId : %u-%u\n" msgstr "" -#: src/dird/dird.c:586 src/dird/dird.c:599 +#: src/stored/parse_bsr.c:679 #, c-format -msgid "Hey something is wrong. p=0x%lu\n" +msgid "VolumeName : %s\n" msgstr "" -#: src/dird/dird.c:658 +#: src/stored/parse_bsr.c:688 #, c-format -msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" +msgid "Client : %s\n" msgstr "" -#: src/dird/dird.c:665 -msgid "Too many items in Job resource\n" +#: src/stored/parse_bsr.c:696 +#, c-format +msgid "Job : %s\n" msgstr "" -#: src/dird/dird.c:686 +#: src/stored/parse_bsr.c:704 #, c-format -msgid "%s" +msgid "SessTime : %u\n" msgstr "" -#: src/dird/dird.c:728 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Storage \"%s\" in %s.\n" +#: src/stored/parse_bsr.c:718 +msgid "BSR is NULL\n" msgstr "" -#: src/dird/dird.c:795 +#: src/stored/parse_bsr.c:722 #, c-format -msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" +msgid "Next : 0x%x\n" msgstr "" -#: src/dird/dird.c:801 +#: src/stored/parse_bsr.c:723 #, c-format -msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" +msgid "Root bsr : 0x%x\n" msgstr "" -#: src/dird/dird.c:807 +#: src/stored/parse_bsr.c:734 #, 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 "Slot : %u\n" msgstr "" -#: src/dird/dird.c:847 +#: src/stored/parse_bsr.c:737 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon \"%s\" in %s.\n" +msgid "count : %u\n" msgstr "" -#: src/dird/ua_label.c:89 -msgid "Negative numbers not permitted\n" +#: src/stored/parse_bsr.c:738 +#, c-format +msgid "found : %u\n" msgstr "" -#: src/dird/ua_label.c:95 -msgid "Range end is not integer.\n" +#: src/stored/parse_bsr.c:741 +#, c-format +msgid "done : %s\n" msgstr "" -#: src/dird/ua_label.c:100 -msgid "Range start is not an integer.\n" +#: src/stored/parse_bsr.c:742 +#, c-format +msgid "positioning : %d\n" msgstr "" -#: src/dird/ua_label.c:106 -msgid "Range end not bigger than start.\n" +#: src/stored/parse_bsr.c:743 +#, c-format +msgid "fast_reject : %d\n" msgstr "" -#: src/dird/ua_label.c:112 -msgid "Input value is not an integer.\n" +#: src/stored/pythonsd.c:202 +msgid "Error in ParseTuple\n" msgstr "" -#: src/dird/ua_label.c:118 -msgid "Values must be be greater than zero.\n" +#: src/stored/pythonsd.c:218 +msgid "Parse tuple error in job_write\n" msgstr "" -#: src/dird/ua_label.c:122 -msgid "Slot too large.\n" +#: src/stored/pythonsd.c:254 +#, c-format +msgid "Error in Python method %s\n" msgstr "" -#: src/dird/ua_label.c:176 src/dird/ua_label.c:473 -msgid "No slots in changer to scan.\n" +#: src/stored/read.c:55 +msgid "No Volume names found for restore.\n" msgstr "" -#: src/dird/ua_label.c:188 src/dird/ua_label.c:484 -msgid "No Volumes found to label, or no barcodes.\n" +#: src/stored/read.c:109 +#, c-format +msgid ">filed: Error Hdr=%s\n" msgstr "" -#: src/dird/ua_label.c:198 +#: src/stored/read.c:110 src/stored/read.c:125 #, c-format -msgid "Slot %d greater than max %d ignored.\n" +msgid "Error sending to File daemon. ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:227 +#: src/stored/read.c:124 #, c-format -msgid "No VolName for Slot=%d InChanger set to zero.\n" +msgid "Error sending to FD. ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:242 +#: src/stored/read_record.c:68 #, c-format -msgid "Catalog record for Volume \"%s\" updated to reference slot %d.\n" +msgid "End of Volume at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/dird/ua_label.c:246 +#: src/stored/read_record.c:71 +msgid "End of all volumes.\n" +msgstr "" + +#: src/stored/read_record.c:105 #, c-format -msgid "Catalog record for Volume \"%s\" is up to date.\n" +msgid "Got EOF at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/dird/ua_label.c:252 +#: src/stored/read_record.c:119 +msgid "Did fsr\n" +msgstr "" + +#: src/stored/read_record.c:276 #, c-format -msgid "Volume \"%s\" not found in catalog. Slot=%d InChanger set to zero.\n" +msgid "Reposition from (file:block) %u:%u to %u:%u\n" msgstr "" -#: src/dird/ua_label.c:344 +#: src/stored/read_record.c:303 #, c-format -msgid "" -"Volume \"%s\" has VolStatus %s. It must be Purged or Recycled before " -"relabeling.\n" +msgid "Forward spacing to file:block %u:%u.\n" msgstr "" -#: src/dird/ua_label.c:360 -msgid "Enter new Volume name: " +#: src/stored/read_record.c:329 +msgid "Begin Session" msgstr "" -#: src/dird/ua_label.c:373 +#: src/stored/read_record.c:333 +msgid "End Session" +msgstr "" + +#: src/stored/read_record.c:339 #, c-format -msgid "Media record for new Volume \"%s\" already exists.\n" +msgid "Unknown code %d\n" msgstr "" -#: src/dird/ua_label.c:388 -msgid "Enter slot (0 or Enter for none): " +#: src/stored/record.c:60 +#, c-format +msgid "unknown: %d" msgstr "" -#: src/dird/ua_label.c:413 +#: src/stored/record.c:343 +msgid "Damaged buffer\n" +msgstr "" + +#: src/stored/reserve.c:467 src/stored/reserve.c:479 #, c-format -msgid "Delete of Volume \"%s\" failed. ERR=%s" +msgid "Failed command: %s\n" msgstr "" -#: src/dird/ua_label.c:416 +#: src/stored/reserve.c:469 #, c-format -msgid "Old volume \"%s\" deleted from catalog.\n" +msgid "" +"\n" +" Device \"%s\" with MediaType \"%s\" requested by DIR not found in SD " +"Device resources.\n" msgstr "" -#: src/dird/ua_label.c:427 +#: src/stored/reserve.c:647 #, c-format -msgid "Requesting to mount %s ...\n" +msgid "3926 Could not get dcr for device: %s\n" msgstr "" -#: src/dird/ua_label.c:449 -msgid "Do not forget to mount the drive!!!\n" +#: src/stored/reserve.c:709 +#, c-format +msgid "3601 JobId=%u device %s is BLOCKED due to user unmount.\n" msgstr "" -#: src/dird/ua_label.c:489 -msgid "" -"The following Volumes will be labeled:\n" -"Slot Volume\n" -"==============\n" +#: src/stored/reserve.c:718 +#, c-format +msgid "3602 JobId=%u device %s is busy (already reading/writing).\n" msgstr "" -#: src/dird/ua_label.c:519 +#: src/stored/reserve.c:761 #, c-format -msgid "Media record for Slot %d Volume \"%s\" already exists.\n" +msgid "3603 JobId=%u device %s is busy reading.\n" msgstr "" -#: src/dird/ua_label.c:525 +#: src/stored/reserve.c:770 #, c-format -msgid "Error setting InChanger: ERR=%s" +msgid "3604 JobId=%u device %s is BLOCKED due to user unmount.\n" msgstr "" -#: src/dird/ua_label.c:548 +#: src/stored/reserve.c:836 #, c-format -msgid "Maximum pool Volumes=%d reached.\n" +msgid "3605 JobId=%u wants free drive but device %s is busy.\n" msgstr "" -#: src/dird/ua_label.c:555 +#: src/stored/reserve.c:844 #, c-format -msgid "Catalog record for cleaning tape \"%s\" successfully created.\n" +msgid "3606 JobId=%u wants mounted, but drive %s has no Volume.\n" msgstr "" -#: src/dird/ua_label.c:562 +#: src/stored/reserve.c:854 #, c-format -msgid "Catalog error on cleaning tape: %s" +msgid "3607 JobId=%u wants Vol=\"%s\" drive has Vol=\"%s\" on drive %s.\n" msgstr "" -#: src/dird/ua_label.c:598 +#: src/stored/reserve.c:890 #, c-format -msgid "Illegal character \"%c\" in a volume name.\n" +msgid "3608 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" on drive %s.\n" msgstr "" -#: src/dird/ua_label.c:643 +#: src/stored/reserve.c:933 #, c-format -msgid "Sending relabel command from \"%s\" to \"%s\" ...\n" +msgid "3609 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" on drive %s.\n" msgstr "" -#: src/dird/ua_label.c:650 +#: src/stored/reserve.c:941 src/stored/reserve.c:945 +msgid "Logic error!!!! Should not get here.\n" +msgstr "" + +#: src/stored/reserve.c:942 #, c-format -msgid "Sending label command for Volume \"%s\" Slot %d ...\n" +msgid "3910 JobId=%u Logic error!!!! drive %s Should not get here.\n" msgstr "" -#: src/dird/ua_label.c:682 +#: src/stored/reserve.c:948 #, c-format -msgid "Catalog record for Volume \"%s\", Slot %d successfully created.\n" +msgid "3911 JobId=%u failed reserve drive %s.\n" msgstr "" -#: src/dird/ua_label.c:695 +#: src/stored/spool.c:69 #, c-format -msgid "Label command failed for Volume %s.\n" +msgid "" +"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" msgstr "" -#: src/dird/ua_label.c:705 +#: src/stored/spool.c:75 #, c-format -msgid "Connecting to Storage daemon %s at %s:%d ...\n" +msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" msgstr "" -#: src/dird/ua_label.c:733 -msgid "Could not open SD socket.\n" +#: src/stored/spool.c:91 +msgid "Spooling data ...\n" msgstr "" -#: src/dird/ua_label.c:739 +#: src/stored/spool.c:117 #, c-format -msgid "readlabel %s Slot=%d drive=%d\n" +msgid "Bad return from despool WroteVol=%d\n" msgstr "" -#: src/dird/ua_label.c:781 +#: src/stored/spool.c:150 #, c-format -msgid "autochanger list %s \n" +msgid "Open data spool file %s failed: ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:805 src/dird/ua_label.c:815 +#: src/stored/spool.c:199 #, c-format -msgid "Invalid Slot number: %s\n" +msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" msgstr "" -#: src/dird/ua_label.c:824 +#: src/stored/spool.c:204 #, c-format -msgid "Invalid Volume name: %s\n" +msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" msgstr "" -#: src/dird/ua_label.c:893 +#: src/stored/spool.c:258 src/stored/spool.c:432 src/stored/spool.c:470 #, c-format -msgid "autochanger slots %s\n" +msgid "Ftruncate spool file failed: ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:903 +#: src/stored/spool.c:260 #, c-format -msgid "Device \"%s\" has %d slots.\n" +msgid "Bad return from ftruncate. ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:925 +#: src/stored/spool.c:309 #, c-format -msgid "autochanger drives %s\n" +msgid "Spool header read error. ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:952 +#: src/stored/spool.c:312 #, c-format -msgid "Pool \"%s\" resource not found!\n" +msgid "Spool read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/authenticate.c:93 -msgid "Director and Storage daemon passwords or names not the same.\n" +#: src/stored/spool.c:313 +#, c-format +msgid "Spool header read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/authenticate.c:95 -msgid "" -"Director unable to authenticate with Storage daemon. 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 http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +#: src/stored/spool.c:319 src/stored/spool.c:320 +#, c-format +msgid "Spool block too big. Max %u bytes, got %u\n" msgstr "" -#: src/dird/authenticate.c:193 -msgid "Director and File daemon passwords or names not the same.\n" +#: src/stored/spool.c:325 src/stored/spool.c:326 +#, c-format +msgid "Spool data read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/authenticate.c:195 -msgid "" -"Unable to authenticate with File daemon. Possible causes:\n" -"Passwords or names not the same or\n" -"Maximum Concurrent Jobs exceeded on the FD or\n" -"FD networking messed up (restart daemon).\n" -"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +#: src/stored/spool.c:383 +msgid "User specified spool size reached.\n" +msgstr "" + +#: src/stored/spool.c:385 +msgid "Bad return from despool in write_block.\n" msgstr "" -#: src/dird/authenticate.c:268 -#, c-format -msgid "UA Hello from %s:%s:%d is invalid. Len=%d\n" +#: src/stored/spool.c:393 +msgid "Spooling data again ...\n" msgstr "" -#: src/dird/authenticate.c:275 +#: src/stored/spool.c:424 #, c-format -msgid "UA Hello from %s:%s:%d is invalid. Got: %s\n" +msgid "Error writing header to spool file. ERR=%s\n" msgstr "" -#: src/dird/authenticate.c:332 -msgid "" -"Authorization problem: Remote client did not advertise required TLS " -"support.\n" +#: src/stored/spool.c:438 src/stored/spool.c:476 +msgid "Fatal despooling error." msgstr "" -#: src/dird/authenticate.c:340 -msgid "Authorization problem: Remote client requires TLS.\n" +#: src/stored/spool.c:445 +msgid "Retrying after header spooling error failed.\n" msgstr "" -#: src/dird/authenticate.c:368 +#: src/stored/spool.c:459 #, c-format -msgid "Unable to authenticate console \"%s\" at %s:%s:%d.\n" +msgid "Error writing data to spool file. ERR=%s\n" msgstr "" -#: src/dird/authenticate.c:373 +#: src/stored/spool.c:486 +msgid "Retrying after data spooling error failed.\n" +msgstr "" + +#: src/stored/spool.c:541 src/stored/spool.c:548 #, c-format -msgid "1000 OK: %s Version: %s (%s)\n" +msgid "Fseek on attributes file failed: ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:39 +#: src/stored/spool.c:558 #, c-format -msgid "The current %s retention period is: %s\n" +msgid "Sending spooled attrs to the Director. Despooling %s bytes ...\n" msgstr "" -#: src/dird/ua_select.c:41 -msgid "Continue? (yes/mod/no): " +#: src/stored/spool.c:585 +#, c-format +msgid "fopen attr spool file %s failed: ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:45 -msgid "Enter new retention period: " +#: src/stored/status.c:67 +#, c-format +msgid "" +"\n" +"%s Version: %s (%s) %s %s %s\n" msgstr "" -#: src/dird/ua_select.c:49 -msgid "Invalid period.\n" +#: src/stored/status.c:103 +msgid "" +"\n" +"Device status:\n" msgstr "" -#: src/dird/ua_select.c:128 -msgid "You have the following choices:\n" +#: src/stored/status.c:105 +#, c-format +msgid "Autochanger \"%s\" with devices:\n" msgstr "" -#: src/dird/ua_select.c:144 -msgid "The defined Storage resources are:\n" +#: src/stored/status.c:119 +#, c-format +msgid "Device %s is mounted with Volume=\"%s\" Pool=\"%s\"\n" msgstr "" -#: src/dird/ua_select.c:152 -msgid "Select Storage resource" +#: src/stored/status.c:123 +#, c-format +msgid "Device %s open but no Bacula volume is mounted.\n" msgstr "" -#: src/dird/ua_select.c:193 -msgid "catalog" +#: src/stored/status.c:133 +#, c-format +msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" msgstr "" -#: src/dird/ua_select.c:201 -msgid "The defined Catalog resources are:\n" +#: src/stored/status.c:147 +#, c-format +msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" msgstr "" -#: src/dird/ua_select.c:209 -msgid "Catalog" +#: src/stored/status.c:152 +#, c-format +msgid " Positioned at File=%s Block=%s\n" msgstr "" -#: src/dird/ua_select.c:209 -msgid "Select Catalog resource" +#: src/stored/status.c:158 +#, c-format +msgid "Device %s is not open or does not exist.\n" msgstr "" -#: src/dird/ua_select.c:226 -msgid "The defined Job resources are:\n" +#: src/stored/status.c:160 +#, c-format +msgid "Device \"%s\" is not open or does not exist.\n" msgstr "" -#: src/dird/ua_select.c:234 -msgid "Select Job resource" +#: src/stored/status.c:165 src/stored/status.c:168 src/stored/status.c:172 +#: src/stored/status.c:174 +msgid "" +"====\n" +"\n" msgstr "" -#: src/dird/ua_select.c:249 -msgid "The defined Restore Job resources are:\n" +#: src/stored/status.c:166 +msgid "In Use Volume status:\n" msgstr "" -#: src/dird/ua_select.c:257 -msgid "Select Restore Job" +#: src/stored/status.c:190 +msgid "" +"No DEVICE structure.\n" +"\n" msgstr "" -#: src/dird/ua_select.c:274 -msgid "The defined Client resources are:\n" +#: src/stored/status.c:195 +msgid " Device is BLOCKED. User unmounted.\n" msgstr "" -#: src/dird/ua_select.c:282 -msgid "Select Client (File daemon) resource" +#: src/stored/status.c:198 +msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" msgstr "" -#: src/dird/ua_select.c:309 +#: src/stored/status.c:202 #, c-format -msgid "Error: Client resource %s does not exist.\n" +msgid " Device is BLOCKED waiting for mount of volume \"%s\".\n" msgstr "" -#: src/dird/ua_select.c:334 -#, c-format -msgid "Could not find Client %s: ERR=%s" +#: src/stored/status.c:205 +msgid " Device is BLOCKED waiting for media.\n" msgstr "" -#: src/dird/ua_select.c:338 -msgid "fd" +#: src/stored/status.c:209 +msgid " Device is being initialized.\n" msgstr "" -#: src/dird/ua_select.c:344 src/dird/ua_select.c:398 -#, c-format -msgid "Could not find Client \"%s\": ERR=%s" +#: src/stored/status.c:212 +msgid " Device is blocked labeling a Volume.\n" msgstr "" -#: src/dird/ua_select.c:373 +#: src/stored/status.c:220 #, c-format -msgid "Error obtaining client ids. ERR=%s\n" +msgid " Slot %d is loaded in drive %d.\n" msgstr "" -#: src/dird/ua_select.c:377 -msgid "No clients defined. You must run a job before using this command.\n" +#: src/stored/status.c:223 +#, c-format +msgid " Drive %d is not loaded.\n" msgstr "" -#: src/dird/ua_select.c:381 -msgid "Defined Clients:\n" +#: src/stored/status.c:242 +msgid "Device state:\n" msgstr "" -#: src/dird/ua_select.c:391 -msgid "Select the Client" +#: src/stored/status.c:256 +#, c-format +msgid "" +"num_writers=%d JobStatus=%c block=%d\n" +"\n" msgstr "" -#: src/dird/ua_select.c:424 src/dird/ua_select.c:447 src/dird/ua_select.c:483 +#: src/stored/status.c:260 #, c-format -msgid "Could not find Pool \"%s\": ERR=%s" +msgid "Archive name: %s Device name: %s\n" msgstr "" -#: src/dird/ua_select.c:458 src/dird/ua_output.c:394 +#: src/stored/status.c:262 #, c-format -msgid "Error obtaining pool ids. ERR=%s\n" +msgid "File=%u block=%u\n" msgstr "" -#: src/dird/ua_select.c:462 -msgid "No pools defined. Use the \"create\" command to create one.\n" +#: src/stored/status.c:263 +#, c-format +msgid "Min block=%u Max block=%u\n" msgstr "" -#: src/dird/ua_select.c:466 -msgid "Defined Pools:\n" +#: src/stored/status.c:280 +#, c-format +msgid "%s Job %s waiting for Client connection.\n" msgstr "" -#: src/dird/ua_select.c:476 -msgid "Select the Pool" +#: src/stored/status.c:295 +#, c-format +msgid "" +"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=\"%s\"\n" msgstr "" -#: src/dird/ua_select.c:506 +#: src/stored/status.c:307 #, c-format -msgid "No access to Pool \"%s\"\n" +msgid "" +"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=\"%s\"\n" msgstr "" -#: src/dird/ua_select.c:532 -msgid "Enter MediaId or Volume name: " +#: src/stored/status.c:330 +#, c-format +msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" msgstr "" -#: src/dird/ua_select.c:558 -msgid "The defined Pool resources are:\n" +#: src/stored/status.c:335 +msgid " FDSocket closed\n" msgstr "" -#: src/dird/ua_select.c:566 -msgid "Select Pool resource" +#: src/stored/status.c:352 +msgid "" +"\n" +"Jobs waiting to reserve a drive:\n" msgstr "" -#: src/dird/ua_select.c:601 -msgid "Enter the JobId to select: " +#: src/stored/status.c:380 +msgid " JobId Level Files Bytes Status Finished Name \n" msgstr "" -#: src/dird/ua_select.c:639 -#, c-format -msgid "Could not find Job \"%s\": ERR=%s" +#: src/stored/status.c:514 +msgid "3900 Bad .status command, missing argument.\n" msgstr "" -#: src/dird/ua_select.c:716 -#, c-format -msgid "Automatically selected %s: %s\n" +#: src/stored/status.c:537 +msgid "3900 Bad .status command, wrong argument.\n" msgstr "" -#: src/dird/ua_select.c:721 +#: src/stored/stored.c:65 #, c-format -msgid "Cannot select %s in batch mode.\n" +msgid "" +"Copyright (C) 2000-2005 Kern Sibbald.\n" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: stored [options] [-c config_file] [config_file]\n" +" -c use as configuration file\n" +" -dnn set debug level to nn\n" +" -f run in foreground (for debugging)\n" +" -g set groupid to group\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_select.c:735 -msgid "Selection is empty!\n" +#: src/stored/stored.c:220 +msgid "Volume Session Time is ZERO!\n" msgstr "" -#: src/dird/ua_select.c:741 -msgid "Item 1 selected automatically.\n" +#: src/stored/stored.c:233 +#, c-format +msgid "Unable to create thread. ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:752 -msgid "Selection aborted, nothing done.\n" +#: src/stored/stored.c:271 +#, c-format +msgid "Only one Storage resource permitted in %s\n" msgstr "" -#: src/dird/ua_select.c:757 +#: src/stored/stored.c:276 #, c-format -msgid "Please enter a number between 1 and %d\n" +msgid "No Director resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_select.c:806 -msgid "Storage name given twice.\n" +#: src/stored/stored.c:281 +#, c-format +msgid "No Device resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_select.c:823 +#: src/stored/stored.c:289 #, c-format -msgid "Expecting jobid=nn command, got: %s\n" +msgid "No Messages resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_select.c:827 +#: src/stored/stored.c:316 #, c-format -msgid "JobId %s is not running.\n" +msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_select.c:836 +#: src/stored/stored.c:322 #, c-format -msgid "Expecting job=xxx, got: %s.\n" +msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_select.c:840 +#: src/stored/stored.c:328 #, c-format -msgid "Job \"%s\" is not running.\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_select.c:856 +#: src/stored/stored.c:455 #, c-format -msgid "Storage resource \"%s\": not found\n" +msgid "Could not initialize %s\n" msgstr "" -#: src/dird/ua_select.c:888 -msgid "Enter autochanger drive[0]: " +#: src/stored/stored.c:468 +#, c-format +msgid "Could not open device %s\n" msgstr "" -#: src/dird/ua_select.c:918 -msgid "Media Types defined in conf file:\n" +#: src/stored/stored.c:481 +#, c-format +msgid "Could not mount device %s\n" msgstr "" -#: src/dird/ua_select.c:924 -msgid "Media Type" +#: src/stored/stored_conf.c:216 +#, c-format +msgid "Expected a Device Type keyword, got: %s" msgstr "" -#: src/dird/ua_select.c:924 -msgid "Select the Media Type" +#: src/stored/stored_conf.c:231 +#, c-format +msgid "Warning: no \"%s\" resource (%d) defined.\n" msgstr "" -#: src/dird/catreq.c:110 src/dird/catreq.c:303 +#: src/stored/stored_conf.c:234 #, c-format -msgid "1990 Invalid Catalog Request: %s" +msgid "dump_resource type=%d\n" msgstr "" -#: src/dird/catreq.c:111 +#: src/stored/stored_conf.c:350 #, c-format -msgid "Invalid Catalog request; DB not open: %s" +msgid "Warning: unknown resource type %d\n" msgstr "" -#: src/dird/catreq.c:136 -msgid "1901 No Media.\n" +#: src/stored/stored_conf.c:539 +#, c-format +msgid "\"%s\" item is required in \"%s\" resource, but not found.\n" msgstr "" -#: src/dird/catreq.c:164 -msgid "not in Pool" +#: src/stored/stored_conf.c:545 +#, c-format +msgid "Too many items in \"%s\" resource\n" msgstr "" -#: src/dird/catreq.c:166 -msgid "not correct MediaType" +#: src/stored/stored_conf.c:579 +#, c-format +msgid "Cannot find AutoChanger resource %s\n" msgstr "" -#: src/dird/catreq.c:182 +#: src/stored/stored_conf.c:650 #, c-format -msgid "1998 Volume \"%s\" status is %s, %s.\n" +msgid "" +"Attempt to define second \"%s\" resource named \"%s\" is not permitted.\n" msgstr "" -#: src/dird/catreq.c:187 +#: src/stored/wait.c:114 #, c-format -msgid "1997 Volume \"%s\" not in catalog.\n" +msgid "pthread timedwait error. ERR=%s\n" msgstr "" -#: src/dird/catreq.c:208 +#: src/stored/wait.c:199 #, c-format -msgid "Unable to get Media record for Volume %s: ERR=%s\n" +msgid "Job %s waiting to reserve a device.\n" msgstr "" -#: src/dird/catreq.c:210 +#: src/tools/bsmtp.c:85 #, c-format -msgid "1991 Catalog Request for vol=%s failed: %s" +msgid "Fatal malformed reply from %s: %s\n" msgstr "" -#: src/dird/catreq.c:230 +#: src/tools/bsmtp.c:121 #, c-format msgid "" -"Volume Files at %u being set to %u for Volume \"%s\". This is incorrect.\n" +"\n" +"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" +" -c set the Cc: field\n" +" -dnn set debug level to nn\n" +" -f set the From: field\n" +" -h use mailhost:port as the SMTP server\n" +" -s set the Subject: field\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/dird/catreq.c:233 -#, c-format -msgid "1992 Update Media error. VolFiles=%u, CatFiles=%u\n" +#: src/tools/bsmtp.c:204 +msgid "Fatal error: no recipient given.\n" msgstr "" -#: src/dird/catreq.c:265 +#: src/tools/bsmtp.c:225 #, c-format -msgid "Catalog error updating Media record. %s" +msgid "Fatal gethostname error: ERR=%s\n" msgstr "" -#: src/dird/catreq.c:267 -msgid "1993 Update Media error\n" +#: src/tools/bsmtp.c:229 +#, c-format +msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" msgstr "" -#: src/dird/catreq.c:292 +#: src/tools/bsmtp.c:254 #, c-format -msgid "Catalog error creating JobMedia record. %s" +msgid "Error unknown mail host \"%s\": ERR=%s\n" msgstr "" -#: src/dird/catreq.c:294 -msgid "1991 Update JobMedia error\n" +#: src/tools/bsmtp.c:257 +msgid "Retrying connection using \"localhost\".\n" msgstr "" -#: src/dird/catreq.c:304 +#: src/tools/bsmtp.c:265 #, c-format -msgid "Invalid Catalog request: %s" +msgid "Fatal error: Unknown address family for smtp host: %d\n" msgstr "" -#: src/dird/catreq.c:338 +#: src/tools/bsmtp.c:273 #, c-format -msgid "1991 Invalid Catalog Update: %s" +msgid "Fatal socket error: ERR=%s\n" msgstr "" -#: src/dird/catreq.c:339 +#: src/tools/bsmtp.c:277 #, c-format -msgid "Invalid Catalog Update; DB not open: %s" +msgid "Fatal connect error to %s: ERR=%s\n" msgstr "" -#: src/dird/catreq.c:412 +#: src/tools/bsmtp.c:282 #, c-format -msgid "Got %s but not same File as attributes\n" +msgid "Fatal dup error: ERR=%s\n" msgstr "" -#: src/dird/catreq.c:438 +#: src/tools/bsmtp.c:286 src/tools/bsmtp.c:290 #, c-format -msgid "Catalog error updating file digest. Unsupported digest stream type: %d" +msgid "Fatal fdopen error: ERR=%s\n" msgstr "" -#: src/dird/catreq.c:454 -#, c-format -msgid "Catalog error updating file digest. %s" +#: src/tools/dbcheck.c:158 +msgid "" +"Warning skipping the additional parameters for working directory/dbname/user/" +"password/host.\n" msgstr "" -#: src/dird/getmsg.c:130 +#: src/tools/dbcheck.c:174 #, c-format -msgid "bget_dirmsg: unknown bnet signal %d\n" +msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" msgstr "" -#: src/dird/getmsg.c:148 src/dird/getmsg.c:161 src/dird/getmsg.c:173 -#: src/dird/getmsg.c:220 src/dird/getmsg.c:244 +#: src/tools/dbcheck.c:176 #, c-format -msgid "Malformed message: %s\n" +msgid "Error there is no Catalog section in the given config file [%s]\n" msgstr "" -#: src/dird/getmsg.c:154 -#, c-format -msgid "Job not found: %s\n" +#: src/tools/dbcheck.c:185 +msgid "Error no Director resource defined.\n" msgstr "" -#: src/dird/getmsg.c:311 -#, c-format -msgid "Bad response to %s command: wanted %s, got %s\n" +#: src/tools/dbcheck.c:199 +msgid "Wrong number of arguments.\n" msgstr "" -#: src/dird/getmsg.c:316 -#, c-format -msgid "Socket error on %s command: ERR=%s\n" +#: src/tools/dbcheck.c:204 +msgid "Working directory not supplied.\n" msgstr "" -#: src/dird/newvol.c:77 +#: src/tools/dbcheck.c:269 #, c-format -msgid "Illegal character in Volume name \"%s\"\n" +msgid "Hello, this is the database check/correct program.\n" msgstr "" -#: src/dird/newvol.c:89 +#: src/tools/dbcheck.c:271 #, c-format -msgid "Created new Volume \"%s\" in catalog.\n" +msgid "Modify database is on." msgstr "" -#: src/dird/newvol.c:117 +#: src/tools/dbcheck.c:273 #, c-format -msgid "Wanted to create Volume \"%s\", but it already exists. Trying again.\n" +msgid "Modify database is off." msgstr "" -#: src/dird/newvol.c:126 -msgid "Too many failures. Giving up creating Volume name.\n" +#: src/tools/dbcheck.c:275 src/tools/dbcheck.c:336 +#, c-format +msgid " Verbose is on.\n" msgstr "" -#: src/dird/autoprune.c:57 -msgid "Begin pruning Jobs.\n" +#: src/tools/dbcheck.c:277 src/tools/dbcheck.c:338 +#, c-format +msgid " Verbose is off.\n" msgstr "" -#: src/dird/autoprune.c:65 -msgid "Begin pruning Files.\n" +#: src/tools/dbcheck.c:279 +#, c-format +msgid "Please select the fuction you want to perform.\n" msgstr "" -#: src/dird/autoprune.c:70 +#: src/tools/dbcheck.c:283 +#, c-format msgid "" -"End auto prune.\n" "\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/dird/ua_server.c:61 +#: src/tools/dbcheck.c:302 #, c-format -msgid "Cannot create UA thread: %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 "" -#: src/dird/ua_server.c:142 -msgid "You have messages.\n" +#: src/tools/dbcheck.c:322 +msgid "Select function number: " msgstr "" -#: src/dird/inc_conf.c:251 +#: src/tools/dbcheck.c:329 #, c-format -msgid "Expected a FileSet option keyword, got:%s:" +msgid "Database will be modified.\n" msgstr "" -#: src/dird/inc_conf.c:284 -msgid "Old style Include/Exclude not supported\n" +#: src/tools/dbcheck.c:331 +#, c-format +msgid "Database will NOT be modified.\n" msgstr "" -#: src/dird/inc_conf.c:312 src/dird/inc_conf.c:579 +#: src/tools/dbcheck.c:421 #, c-format -msgid "Expecting keyword, got: %s\n" +msgid "JobId=%s Name=\"%s\" StartTime=%s\n" msgstr "" -#: src/dird/inc_conf.c:330 src/dird/inc_conf.c:594 +#: src/tools/dbcheck.c:429 #, c-format -msgid "Keyword %s not permitted in this resource" +msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" msgstr "" -#: src/dird/inc_conf.c:383 +#: src/tools/dbcheck.c:436 #, c-format -msgid "Regex compile error. ERR=%s\n" +msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" msgstr "" -#: src/dird/inc_conf.c:404 +#: src/tools/dbcheck.c:443 #, c-format -msgid "Expected a regex string, got: %s\n" +msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" msgstr "" -#: src/dird/inc_conf.c:490 +#: src/tools/dbcheck.c:450 #, c-format -msgid "Expected a wild-card string, got: %s\n" +msgid "Orphaned ClientId=%s Name=\"%s\"\n" msgstr "" -#: src/dird/inc_conf.c:513 +#: src/tools/dbcheck.c:503 #, c-format -msgid "Expected an fstype string, got: %s\n" +msgid "Deleting: %s\n" msgstr "" -#: src/dird/inc_conf.c:548 +#: src/tools/dbcheck.c:577 #, c-format -msgid "Expected a filename, got: %s" +msgid "Checking for duplicate Filename entries.\n" msgstr "" -#: src/dird/inc_conf.c:564 +#: src/tools/dbcheck.c:586 #, c-format -msgid "Expecting open brace. Got %s" +msgid "Found %d duplicate Filename records.\n" +msgstr "" + +#: src/tools/dbcheck.c:587 +msgid "Print the list? (yes/no): " msgstr "" -#: src/dird/inc_conf.c:619 +#: src/tools/dbcheck.c:603 src/tools/dbcheck.c:657 #, c-format -msgid "Expected a FileSet keyword, got: %s" +msgid "Found %d for: %s\n" msgstr "" -#: src/dird/fd_cmds.c:104 +#: src/tools/dbcheck.c:630 #, c-format -msgid "File daemon \"%s\" rejected Job command: %s\n" +msgid "Checking for duplicate Path entries.\n" msgstr "" -#: src/dird/fd_cmds.c:117 +#: src/tools/dbcheck.c:640 #, c-format -msgid "Error updating Client record. ERR=%s\n" +msgid "Found %d duplicate Path records.\n" msgstr "" -#: src/dird/fd_cmds.c:122 +#: src/tools/dbcheck.c:641 src/tools/dbcheck.c:691 src/tools/dbcheck.c:723 +#: src/tools/dbcheck.c:755 src/tools/dbcheck.c:783 src/tools/dbcheck.c:811 +#: src/tools/dbcheck.c:849 src/tools/dbcheck.c:887 src/tools/dbcheck.c:918 +#: src/tools/dbcheck.c:948 src/tools/dbcheck.c:982 src/tools/dbcheck.c:1040 +msgid "Print them? (yes/no): " +msgstr "" + +#: src/tools/dbcheck.c:683 #, c-format -msgid "FD gave bad response to JobId command: %s\n" +msgid "Checking for orphaned JobMedia entries.\n" +msgstr "" + +#: src/tools/dbcheck.c:690 +#, c-format +msgid "Found %d orphaned JobMedia records.\n" msgstr "" -#: src/dird/fd_cmds.c:144 src/dird/fd_cmds.c:180 -msgid ", since=" +#: src/tools/dbcheck.c:703 +#, c-format +msgid "Deleting %d orphaned JobMedia records.\n" msgstr "" -#: src/dird/fd_cmds.c:164 -msgid "No prior or suitable Full backup found. Doing FULL backup.\n" +#: src/tools/dbcheck.c:712 +#, c-format +msgid "Checking for orphaned File entries. This may take some time!\n" msgstr "" -#: src/dird/fd_cmds.c:165 src/dird/fd_cmds.c:173 +#: src/tools/dbcheck.c:722 #, c-format -msgid " (upgraded from %s)" +msgid "Found %d orphaned File records.\n" msgstr "" -#: src/dird/fd_cmds.c:171 +#: src/tools/dbcheck.c:735 #, c-format -msgid "Prior failed job found. Upgrading to %s.\n" +msgid "Deleting %d orphaned File records.\n" msgstr "" -#: src/dird/fd_cmds.c:196 -msgid "since_utime " +#: src/tools/dbcheck.c:744 +#, c-format +msgid "Checking for orphaned Path entries. This may take some time!\n" msgstr "" -#: src/dird/fd_cmds.c:232 +#: src/tools/dbcheck.c:754 #, c-format -msgid "Unimplemented backup level %d %c\n" +msgid "Found %d orphaned Path records.\n" msgstr "" -#: src/dird/fd_cmds.c:331 src/dird/fd_cmds.c:356 src/dird/fd_cmds.c:370 -msgid ">filed: write error on socket\n" +#: src/tools/dbcheck.c:763 +#, c-format +msgid "Deleting %d orphaned Path records.\n" msgstr "" -#: src/dird/fd_cmds.c:337 +#: src/tools/dbcheck.c:772 #, c-format -msgid "Error running program: %s. ERR=%s\n" +msgid "Checking for orphaned Filename entries. This may take some time!\n" msgstr "" -#: src/dird/fd_cmds.c:346 +#: src/tools/dbcheck.c:782 #, c-format -msgid "Cannot open included file: %s. ERR=%s\n" +msgid "Found %d orphaned Filename records.\n" msgstr "" -#: src/dird/fd_cmds.c:522 +#: src/tools/dbcheck.c:791 #, c-format -msgid "" -"= 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/dird/ua_query.c:85 -msgid "Could not find query.\n" +#: src/tools/testfind.c:134 src/tools/testls.c:130 +#, c-format +msgid "Could not open include file: %s\n" msgstr "" -#: src/dird/ua_query.c:103 -msgid "Too many prompts in query, max is 9.\n" +#: src/tools/testfind.c:147 src/tools/testls.c:143 +#, c-format +msgid "Could not open exclude file: %s\n" msgstr "" -#: src/dird/ua_query.c:206 +#: src/tools/testfind.c:160 #, c-format -msgid "Warning prompt %d missing.\n" +msgid "" +"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/dird/ua_query.c:252 -msgid "" -"Entering SQL query mode.\n" -"Terminate each query with a semicolon.\n" -"Terminate query mode with a blank line.\n" +#: src/tools/testfind.c:199 +#, c-format +msgid "Reg: %s\n" msgstr "" -#: src/dird/ua_query.c:255 src/dird/ua_query.c:272 -msgid "Enter SQL query: " +#: src/tools/testfind.c:220 +msgid "\t[will not descend: recursion turned off]" msgstr "" -#: src/dird/ua_query.c:274 -msgid "Add to SQL query: " +#: src/tools/testfind.c:222 +msgid "\t[will not descend: file system change not allowed]" msgstr "" -#: src/dird/ua_query.c:278 -msgid "End query mode.\n" +#: src/tools/testfind.c:224 +msgid "\t[will not descend: disallowed file system]" msgstr "" -#: src/dird/ua_update.c:79 -msgid "Update choice:\n" +#: src/tools/testfind.c:240 src/tools/testls.c:178 +#, c-format +msgid "Err: Could not access %s: %s\n" msgstr "" -#: src/dird/ua_update.c:80 -msgid "Volume parameters" +#: src/tools/testfind.c:243 src/tools/testls.c:181 +#, c-format +msgid "Err: Could not follow ff->link %s: %s\n" msgstr "" -#: src/dird/ua_update.c:81 -msgid "Pool from resource" +#: src/tools/testfind.c:246 src/tools/testls.c:184 +#, c-format +msgid "Err: Could not stat %s: %s\n" msgstr "" -#: src/dird/ua_update.c:82 -msgid "Slots from autochanger" +#: src/tools/testfind.c:249 src/tools/testls.c:187 +#, c-format +msgid "Skip: File not saved. No change. %s\n" msgstr "" -#: src/dird/ua_update.c:83 -msgid "item" +#: src/tools/testfind.c:252 src/tools/testls.c:190 +#, c-format +msgid "Err: Attempt to backup archive. Not saved. %s\n" msgstr "" -#: src/dird/ua_update.c:83 -msgid "Choose catalog item to update" +#: src/tools/testfind.c:255 src/tools/testls.c:199 +#, c-format +msgid "Err: Could not open directory %s: %s\n" msgstr "" -#: src/dird/ua_update.c:122 +#: src/tools/testfind.c:258 src/tools/testls.c:202 #, c-format -msgid "Invalid VolStatus specified: %s\n" +msgid "Err: Unknown file ff->type %d: %s\n" msgstr "" -#: src/dird/ua_update.c:131 +#: src/tools/testfind.c:308 #, c-format -msgid "New Volume status is: %s\n" +msgid "===== Filename truncated to 255 chars: %s\n" msgstr "" -#: src/dird/ua_update.c:141 +#: src/tools/testfind.c:325 #, c-format -msgid "Invalid retention period specified: %s\n" +msgid "========== Path name truncated to 255 chars: %s\n" msgstr "" -#: src/dird/ua_update.c:149 +#: src/tools/testfind.c:334 #, c-format -msgid "New retention period is: %s\n" +msgid "========== Path length is zero. File=%s\n" msgstr "" -#: src/dird/ua_update.c:160 +#: src/tools/testfind.c:337 #, c-format -msgid "Invalid use duration specified: %s\n" +msgid "Path: %s\n" msgstr "" -#: src/dird/ua_update.c:168 +#: src/tools/testls.c:45 #, c-format -msgid "New use duration is: %s\n" +msgid "" +"\n" +"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" +" -a print extended attributes (Win32 debug)\n" +" -dnn set debug level to nn\n" +" -e specify file of exclude patterns\n" +" -i specify file of include patterns\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/dird/ua_update.c:182 +#: src/tools/testls.c:193 #, c-format -msgid "New max jobs is: %s\n" +msgid "Recursion turned off. Directory not entered. %s\n" msgstr "" -#: src/dird/ua_update.c:195 +#: src/tools/testls.c:196 #, c-format -msgid "New max files is: %s\n" +msgid "Skip: File system change prohibited. Directory not entered. %s\n" msgstr "" -#: src/dird/ua_update.c:206 -#, c-format -msgid "Invalid max. bytes specification: %s\n" +#: src/tray-monitor/authenticate.c:78 +msgid "" +"Director authorization problem.\n" +"Most likely the passwords do not agree.\n" +"Please see http://www.bacula.org/html-manual/faq.html#AuthorizationErrors " +"for help.\n" msgstr "" -#: src/dird/ua_update.c:214 -#, c-format -msgid "New Max bytes is: %s\n" +#: src/tray-monitor/authenticate.c:127 +msgid "" +"Director and Storage daemon passwords or names not the same.\n" +"Please see http://www.bacula.org/html-manual/faq.html#AuthorizationErrors " +"for help.\n" msgstr "" -#: src/dird/ua_update.c:228 src/dird/ua_update.c:252 -msgid "Invalid value. It must be yes or no.\n" +#: src/tray-monitor/authenticate.c:172 +msgid "" +"Director and File daemon passwords or names not the same.\n" +"Please see http://www.bacula.org/html-manual/faq.html#AuthorizationErrors " +"for help.\n" msgstr "" -#: src/dird/ua_update.c:236 +#: src/tray-monitor/tray-monitor.c:102 #, c-format -msgid "New Recycle flag is: %s\n" +msgid "" +"Copyright (C) 2000-2004 Kern Sibbald and John Walker\n" +"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" +" -dnn set debug level to nn\n" +" -t test - read configuration and exit\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/dird/ua_update.c:260 +#: src/tray-monitor/tray-monitor.c:251 #, c-format -msgid "New InChanger flag is: %s\n" +msgid "" +"Error: %d Monitor resource defined in %s. You must define one and only one " +"Monitor resource.\n" msgstr "" -#: src/dird/ua_update.c:278 +#: src/tray-monitor/tray-monitor.c:282 #, c-format -msgid "Invalid slot, it must be between 0 and MaxVols=%d\n" +msgid "" +"No Client, Storage nor 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/dird/ua_update.c:287 src/dird/ua_update.c:577 +#: src/tray-monitor/tray-monitor.c:304 #, c-format -msgid "Error updating media record Slot: ERR=%s" +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/dird/ua_update.c:289 -#, c-format -msgid "New Slot is: %d\n" +#: src/tray-monitor/tray-monitor.c:319 +msgid "Open status window..." msgstr "" -#: src/dird/ua_update.c:316 -#, c-format -msgid "New Pool is: %s\n" +#: src/tray-monitor/tray-monitor.c:325 +msgid "Exit" msgstr "" -#: src/dird/ua_update.c:345 -#, c-format -msgid "Error updating Volume record: ERR=%s" +#: src/tray-monitor/tray-monitor.c:337 +msgid "Bacula tray monitor" msgstr "" -#: src/dird/ua_update.c:347 -#, c-format -msgid "Volume defaults updated from \"%s\" Pool record.\n" +#: src/tray-monitor/tray-monitor.c:362 +msgid " (DIR)" msgstr "" -#: src/dird/ua_update.c:369 -#, c-format -msgid "Error updating Volume records: ERR=%s" +#: src/tray-monitor/tray-monitor.c:366 +msgid " (FD)" msgstr "" -#: src/dird/ua_update.c:371 -msgid "All Volume defaults updated from Pool record.\n" +#: src/tray-monitor/tray-monitor.c:370 +msgid " (SD)" msgstr "" -#: src/dird/ua_update.c:391 -msgid "VolStatus" +#: src/tray-monitor/tray-monitor.c:383 +msgid "Unknown status." msgstr "" -#: src/dird/ua_update.c:392 -msgid "VolRetention" +#: src/tray-monitor/tray-monitor.c:424 +msgid "Refresh interval in seconds: " msgstr "" -#: src/dird/ua_update.c:393 -msgid "VolUse" +#: src/tray-monitor/tray-monitor.c:432 +msgid "Refresh now" msgstr "" -#: src/dird/ua_update.c:394 -msgid "MaxVolJobs" +#: src/tray-monitor/tray-monitor.c:436 +msgid "About" msgstr "" -#: src/dird/ua_update.c:395 -msgid "MaxVolFiles" +#: src/tray-monitor/tray-monitor.c:440 +msgid "Close" msgstr "" -#: src/dird/ua_update.c:396 -msgid "MaxVolBytes" +#: src/tray-monitor/tray-monitor.c:460 +#, c-format +msgid "Disconnecting from Director %s:%d\n" msgstr "" -#: src/dird/ua_update.c:397 -msgid "Recycle" +#: src/tray-monitor/tray-monitor.c:463 +#, c-format +msgid "Disconnecting from Client %s:%d\n" msgstr "" -#: src/dird/ua_update.c:398 -msgid "InChanger" +#: src/tray-monitor/tray-monitor.c:466 +#, c-format +msgid "Disconnecting from Storage %s:%d\n" msgstr "" -#: src/dird/ua_update.c:399 src/dird/ua_update.c:472 -msgid "Slot" +#: src/tray-monitor/tray-monitor.c:502 src/tray-monitor/tray-monitor.c:512 +msgid "Bacula Tray Monitor" msgstr "" -#: src/dird/ua_update.c:401 -msgid "FromPool" +#: src/tray-monitor/tray-monitor.c:503 src/tray-monitor/tray-monitor.c:513 +msgid "" +"Copyright (C) 2004-2005 Kern Sibbald\n" +"Written by Nicolas Boichat\n" msgstr "" -#: src/dird/ua_update.c:402 -msgid "AllFromPool" +#: src/tray-monitor/tray-monitor.c:505 src/tray-monitor/tray-monitor.c:515 +msgid "Version:" msgstr "" -#: src/dird/ua_update.c:463 +#: src/tray-monitor/tray-monitor.c:583 #, c-format -msgid "Updating Volume \"%s\"\n" -msgstr "" - -#: src/dird/ua_update.c:465 -msgid "Volume Status" -msgstr "" - -#: src/dird/ua_update.c:466 -msgid "Volume Retention Period" +msgid "Error, currentitem is not a Client or a Storage..\n" msgstr "" -#: src/dird/ua_update.c:467 -msgid "Volume Use Duration" +#: src/tray-monitor/tray-monitor.c:656 +#, c-format +msgid "" +"Current job: %s\n" +"Last job: %s" msgstr "" -#: src/dird/ua_update.c:468 -msgid "Maximum Volume Jobs" +#: src/tray-monitor/tray-monitor.c:668 +#, c-format +msgid " (%d errors)" msgstr "" -#: src/dird/ua_update.c:469 -msgid "Maximum Volume Files" +#: src/tray-monitor/tray-monitor.c:671 +#, c-format +msgid " (%d error)" msgstr "" -#: src/dird/ua_update.c:470 -msgid "Maximum Volume Bytes" +#: src/tray-monitor/tray-monitor.c:708 +msgid "No current job." msgstr "" -#: src/dird/ua_update.c:471 -msgid "Recycle Flag" +#: src/tray-monitor/tray-monitor.c:711 +msgid "No last job." msgstr "" -#: src/dird/ua_update.c:473 -msgid "InChanger Flag" +#: src/tray-monitor/tray-monitor.c:719 +msgid "Job status: Created" msgstr "" -#: src/dird/ua_update.c:474 -msgid "Volume Files" +#: src/tray-monitor/tray-monitor.c:724 +msgid "Job status: Running" msgstr "" -#: src/dird/ua_update.c:476 -msgid "Volume from Pool" +#: src/tray-monitor/tray-monitor.c:728 +msgid "Job status: Blocked" msgstr "" -#: src/dird/ua_update.c:477 -msgid "All Volumes from Pool" +#: src/tray-monitor/tray-monitor.c:733 +msgid "Job status: Terminated" msgstr "" -#: src/dird/ua_update.c:478 -msgid "Done" +#: src/tray-monitor/tray-monitor.c:738 +msgid "Job status: Terminated in error" msgstr "" -#: src/dird/ua_update.c:489 -#, c-format -msgid "Current Volume status is: %s\n" +#: src/tray-monitor/tray-monitor.c:744 +msgid "Job status: Error" msgstr "" -#: src/dird/ua_update.c:490 -msgid "Possible Values are:\n" +#: src/tray-monitor/tray-monitor.c:748 +msgid "Job status: Fatal error" msgstr "" -#: src/dird/ua_update.c:501 -msgid "Choose new Volume Status" +#: src/tray-monitor/tray-monitor.c:753 +msgid "Job status: Verify differences" msgstr "" -#: src/dird/ua_update.c:507 -#, c-format -msgid "Current retention period is: %s\n" +#: src/tray-monitor/tray-monitor.c:758 +msgid "Job status: Canceled" msgstr "" -#: src/dird/ua_update.c:509 -msgid "Enter Volume Retention period: " +#: src/tray-monitor/tray-monitor.c:763 +msgid "Job status: Waiting on File daemon" msgstr "" -#: src/dird/ua_update.c:516 -#, c-format -msgid "Current use duration is: %s\n" +#: src/tray-monitor/tray-monitor.c:768 +msgid "Job status: Waiting on the Storage daemon" msgstr "" -#: src/dird/ua_update.c:518 -msgid "Enter Volume Use Duration: " +#: src/tray-monitor/tray-monitor.c:773 +msgid "Job status: Waiting for new media" msgstr "" -#: src/dird/ua_update.c:525 -#, c-format -msgid "Current max jobs is: %u\n" +#: src/tray-monitor/tray-monitor.c:778 +msgid "Job status: Waiting for Mount" msgstr "" -#: src/dird/ua_update.c:526 -msgid "Enter new Maximum Jobs: " +#: src/tray-monitor/tray-monitor.c:783 +msgid "Job status: Waiting for storage resource" msgstr "" -#: src/dird/ua_update.c:533 -#, c-format -msgid "Current max files is: %u\n" +#: src/tray-monitor/tray-monitor.c:788 +msgid "Job status: Waiting for job resource" msgstr "" -#: src/dird/ua_update.c:534 -msgid "Enter new Maximum Files: " +#: src/tray-monitor/tray-monitor.c:793 +msgid "Job status: Waiting for Client resource" msgstr "" -#: src/dird/ua_update.c:541 -#, c-format -msgid "Current value is: %s\n" +#: src/tray-monitor/tray-monitor.c:798 +msgid "Job status: Waiting for maximum jobs" msgstr "" -#: src/dird/ua_update.c:542 -msgid "Enter new Maximum Bytes: " +#: src/tray-monitor/tray-monitor.c:803 +msgid "Job status: Waiting for start time" msgstr "" -#: src/dird/ua_update.c:550 -#, c-format -msgid "Current recycle flag is: %s\n" +#: src/tray-monitor/tray-monitor.c:808 +msgid "Job status: Waiting for higher priority jobs to finish" msgstr "" -#: src/dird/ua_update.c:552 -msgid "Enter new Recycle status: " +#: src/tray-monitor/tray-monitor.c:813 +#, c-format +msgid "Unknown job status %c." msgstr "" -#: src/dird/ua_update.c:559 +#: src/tray-monitor/tray-monitor.c:814 #, c-format -msgid "Current Slot is: %d\n" +msgid "Job status: Unknown(%c)" msgstr "" -#: src/dird/ua_update.c:560 -msgid "Enter new Slot: " +#: src/tray-monitor/tray-monitor.c:821 +#, c-format +msgid "Bad scan : '%s' %d\n" msgstr "" -#: src/dird/ua_update.c:567 +#: src/tray-monitor/tray-monitor.c:859 #, c-format -msgid "Current InChanger flag is: %d\n" +msgid "Connecting to Director %s:%d" msgstr "" -#: src/dird/ua_update.c:568 -msgid "Set InChanger flag? yes/no: " +#: src/tray-monitor/tray-monitor.c:865 +#, c-format +msgid "Connecting to Client %s:%d\n" msgstr "" -#: src/dird/ua_update.c:579 +#: src/tray-monitor/tray-monitor.c:866 #, c-format -msgid "New InChanger flag is: %d\n" +msgid "Connecting to Client %s:%d" msgstr "" -#: src/dird/ua_update.c:586 -msgid "" -"Warning changing Volume Files can result\n" -"in loss of data on your Volume\n" -"\n" +#: src/tray-monitor/tray-monitor.c:872 +#, c-format +msgid "Connecting to Storage %s:%d\n" msgstr "" -#: src/dird/ua_update.c:588 +#: src/tray-monitor/tray-monitor.c:873 #, c-format -msgid "Current Volume Files is: %u\n" +msgid "Connecting to Storage %s:%d" msgstr "" -#: src/dird/ua_update.c:589 -msgid "Enter new number of Files for Volume: " +#: src/tray-monitor/tray-monitor.c:878 src/tray-monitor/tray-monitor.c:916 +#, c-format +msgid "Error, currentitem is not a Client, a Storage or a Director..\n" msgstr "" -#: src/dird/ua_update.c:594 -msgid "Normally, you should only increase Volume Files by one!\n" +#: src/tray-monitor/tray-monitor.c:884 +msgid "Cannot connect to daemon.\n" msgstr "" -#: src/dird/ua_update.c:595 -msgid "Continue? (yes/no): " +#: src/tray-monitor/tray-monitor.c:885 +msgid "Cannot connect to daemon." msgstr "" -#: src/dird/ua_update.c:605 +#: src/tray-monitor/tray-monitor.c:897 #, c-format -msgid "New Volume Files is: %u\n" +msgid "Authentication error : %s" msgstr "" -#: src/dird/ua_update.c:617 -#, c-format -msgid "Current Pool is: %s\n" +#: src/tray-monitor/tray-monitor.c:904 +msgid "Opened connection with Director daemon.\n" msgstr "" -#: src/dird/ua_update.c:618 -msgid "Enter new Pool name: " +#: src/tray-monitor/tray-monitor.c:905 +msgid "Opened connection with Director daemon." msgstr "" -#: src/dird/ua_update.c:631 -msgid "Selection terminated.\n" +#: src/tray-monitor/tray-monitor.c:908 +msgid "Opened connection with File daemon.\n" msgstr "" -#: src/dird/ua_update.c:664 -#, c-format -msgid "db_update_pool_record returned %d. ERR=%s\n" +#: src/tray-monitor/tray-monitor.c:909 +msgid "Opened connection with File daemon." msgstr "" -#: src/dird/ua_update.c:671 -msgid "Pool DB record updated from resource.\n" +#: src/tray-monitor/tray-monitor.c:912 +msgid "Opened connection with Storage daemon.\n" msgstr "" -#: src/dird/ua_dotcmds.c:131 -msgid "The Director will segment fault.\n" +#: src/tray-monitor/tray-monitor.c:913 +msgid "Opened connection with Storage daemon." msgstr "" -#: src/dird/ua_purge.c:177 -msgid "" -"\n" -"This command is 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" -"for retention periods. Normally you should use the\n" -"PRUNE command, which respects retention periods.\n" +#: src/tray-monitor/tray-monitor.c:948 +msgid "<< Error: BNET_PROMPT signal received. >>\n" msgstr "" -#: src/dird/ua_purge.c:237 -msgid "Choose item to purge" +#: src/tray-monitor/tray-monitor.c:953 src/wx-console/console_thread.cpp:465 +msgid "<< Heartbeat signal received, answered. >>\n" msgstr "" -#: src/dird/ua_purge.c:282 +#: src/tray-monitor/tray-monitor.c:957 #, c-format -msgid "Begin purging files for Client \"%s\"\n" +msgid "<< Unexpected signal received : %s >>\n" msgstr "" -#: src/dird/ua_purge.c:294 -#, c-format -msgid "No Files found for client %s to purge from %s catalog.\n" +#: src/tray-monitor/tray-monitor.c:962 +msgid "\n" msgstr "" -#: src/dird/ua_purge.c:325 -#, c-format -msgid "%d Files for client \"%s\" purged from %s catalog.\n" +#: src/tray-monitor/tray-monitor.c:966 +msgid "Error : BNET_HARDEOF or BNET_ERROR" msgstr "" -#: src/dird/ua_purge.c:361 -#, c-format -msgid "Begin purging jobs from Client \"%s\"\n" +#: src/tray-monitor/tray-monitor.c:972 +msgid "\n" msgstr "" -#: src/dird/ua_purge.c:372 -#, c-format -msgid "No Jobs found for client %s to purge from %s catalog.\n" +#: src/tray-monitor/tray-monitor.c:976 +msgid "Error : Connection closed." msgstr "" -#: src/dird/ua_purge.c:416 +#: src/tray-monitor/tray_conf.c:161 #, c-format -msgid "%d Jobs for client %s purged from %s catalog.\n" +msgid "Monitor: name=%s FDtimeout=%s SDtimeout=%s\n" msgstr "" -#: src/dird/ua_purge.c:467 +#: src/tray-monitor/tray_conf.c:167 #, c-format -msgid "" -"Volume \"%s\" has VolStatus \"%s\" and cannot be purged.\n" -"The VolStatus must be: Append, Full, Used, or Error to be purged.\n" +msgid "Director: name=%s address=%s FDport=%d\n" msgstr "" -#: src/dird/ua_purge.c:540 +#: src/tray-monitor/tray_conf.c:171 #, c-format -msgid "%d File%s on Volume \"%s\" purged from catalog.\n" +msgid "Client: name=%s address=%s FDport=%d\n" msgstr "" -#: src/dird/ua_purge.c:554 +#: src/tray-monitor/tray_conf.c:175 #, c-format -msgid "" -"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" +msgid "Storage: name=%s address=%s SDport=%d\n" msgstr "" -#: src/dird/ua_purge.c:586 -#, c-format -msgid "Cannot purge Volume with VolStatus=%s\n" +#: src/wx-console/authenticate.c:129 +msgid "Bad response to Hello command: ERR=" msgstr "" -#: src/dird/ua_output.c:64 src/dird/ua_output.c:88 -msgid "ON or OFF keyword missing.\n" +#: src/baconfig.h:55 +#, c-format +msgid "Failed ASSERT: %s\n" msgstr "" -#: src/dird/ua_output.c:176 -msgid "Keywords for the show command are:\n" +#: src/baconfig.h:62 +msgid "*None*" msgstr "" -#: src/dird/ua_output.c:182 -#, c-format -msgid "%s resource %s not found.\n" +#: src/filed/win32/winmain.cpp:228 src/filed/win32/winmain.cpp:236 +msgid "Bacula Usage" msgstr "" -#: src/dird/ua_output.c:185 -#, c-format -msgid "Resource %s not found\n" +#: src/filed/win32/winmain.cpp:233 +msgid "Bad Command Line Options" msgstr "" -#: src/dird/ua_output.c:251 -msgid "Hey! DB is NULL\n" +#: src/filed/win32/winmain.cpp:326 +msgid "Another instance of Bacula is already running" msgstr "" -#: src/dird/ua_output.c:365 -#, c-format -msgid "Jobid %d used %d Volume(s): %s\n" +#: src/filed/win32/winservice.cpp:131 src/filed/win32/winservice.cpp:145 +msgid "No existing instance of Bacula could be contacted" msgstr "" -#: src/dird/ua_output.c:383 -msgid "No Pool specified.\n" +#: src/filed/win32/winservice.cpp:218 +msgid "KERNEL32.DLL not found: Bacula service not started" msgstr "" -#: src/dird/ua_output.c:404 -#, c-format -msgid "Pool: %s\n" +#: src/filed/win32/winservice.cpp:228 +msgid "Registry service not found: Bacula service not started" msgstr "" -#: src/dird/ua_output.c:420 src/dird/ua_status.c:452 -msgid "Ignoring illegal value for days.\n" +#: src/filed/win32/winservice.cpp:230 +msgid "Registry service not found" msgstr "" -#: src/dird/ua_output.c:429 -#, c-format -msgid "Unknown list keyword: %s\n" +#: src/filed/win32/winservice.cpp:260 +msgid "StartServiceCtrlDispatcher failed." msgstr "" -#: src/dird/ua_output.c:455 -#, c-format -msgid "%s is not a job name.\n" +#: src/filed/win32/winservice.cpp:278 +msgid "RegisterServiceCtlHandler failed" msgstr "" -#: src/dird/ua_output.c:476 -#, c-format -msgid "Could not find next Volume for Job %s (%s, %s).\n" +#: src/filed/win32/winservice.cpp:279 +msgid "Contact Register Service Handler failure" msgstr "" -#: src/dird/ua_output.c:480 -#, c-format -msgid "The next Volume to be used by Job \"%s\" (%s, %s) will be %s\n" +#: src/filed/win32/winservice.cpp:295 +msgid "ReportStatus STOPPED failed 1" msgstr "" -#: src/dird/ua_output.c:490 -#, c-format -msgid "Could not find next Volume for Job %s.\n" +#: src/filed/win32/winservice.cpp:318 +msgid "Report Service failure" msgstr "" -#: src/dird/ua_output.c:679 -msgid "You have no messages.\n" +#: src/filed/win32/winservice.cpp:355 +msgid "Unable to install Bacula service" msgstr "" -#: src/dird/ua_status.c:126 -msgid "Status available for:\n" +#: src/filed/win32/winservice.cpp:373 +msgid "Service command length too long" msgstr "" -#: src/dird/ua_status.c:132 -msgid "Select daemon type for status" +#: src/filed/win32/winservice.cpp:374 +msgid "Service command length too long. Service not registered." msgstr "" -#: src/dird/ua_status.c:245 -#, c-format -msgid "%s Version: %s (%s) %s %s %s\n" +#: src/filed/win32/winservice.cpp:389 +msgid "Cannot write System Registry" msgstr "" -#: src/dird/ua_status.c:289 -#, c-format +#: src/filed/win32/winservice.cpp:390 msgid "" -"\n" -"Failed to connect to Storage daemon %s.\n" -"====\n" +"The System Registry could not be updated - the Bacula service was not " +"installed" msgstr "" -#: src/dird/ua_status.c:327 -#, c-format +#: src/filed/win32/winservice.cpp:397 +msgid "Cannot add Bacula key to System Registry" +msgstr "" + +#: src/filed/win32/winservice.cpp:398 src/filed/win32/winservice.cpp:449 +msgid "The Bacula service could not be installed" +msgstr "" + +#: src/filed/win32/winservice.cpp:406 msgid "" -"Failed to connect to Client %s.\n" -"====\n" +"The Bacula File service was successfully installed.\n" +"The service may be started by double clicking on the\n" +"Bacula \"Start\" icon and will be automatically\n" +"be run the next time this machine is rebooted. " msgstr "" -#: src/dird/ua_status.c:335 -msgid "Connected to file daemon\n" +#: src/filed/win32/winservice.cpp:424 +msgid "" +"The Service Control Manager could not be contacted - the Bacula service was " +"not installed" msgstr "" -#: src/dird/ua_status.c:350 +#: src/filed/win32/winservice.cpp:455 msgid "" -"\n" -"Scheduled Jobs:\n" +"Provides file backup and restore services. Bacula -- the network backup " +"solution." msgstr "" -#: src/dird/ua_status.c:351 +#: src/filed/win32/winservice.cpp:462 msgid "" -"Level Type Pri Scheduled Name Volume\n" +"The Bacula File service was successfully installed.\n" +"The service may be started from the Control Panel and will\n" +"automatically be run the next time this machine is rebooted." msgstr "" -#: src/dird/ua_status.c:352 -msgid "===================================================================================\n" +#: src/filed/win32/winservice.cpp:471 +msgid "" +"Unknown Windows operating system.\n" +"Cannot install Bacula service.\n" msgstr "" -#: src/dird/ua_status.c:399 -#, c-format -msgid "%-14s %-8s %3d %-18s %-18s %s\n" +#: src/filed/win32/winservice.cpp:496 +msgid "" +"Could not find registry entry.\n" +"Service probably not registerd - the Bacula service was not removed" msgstr "" -#: src/dird/ua_status.c:491 -msgid "No Scheduled Jobs.\n" +#: src/filed/win32/winservice.cpp:501 +msgid "" +"Could not delete Registry key.\n" +"The Bacula service could not be removed" msgstr "" -#: src/dird/ua_status.c:516 -#, c-format -msgid "Console connected at %s\n" +#: src/filed/win32/winservice.cpp:511 +msgid "Bacula could not be contacted, probably not running" msgstr "" -#: src/dird/ua_status.c:526 -msgid "" -"No Jobs running.\n" -"====\n" +#: src/filed/win32/winservice.cpp:517 src/filed/win32/winservice.cpp:553 +msgid "The Bacula service has been removed" msgstr "" -#: src/dird/ua_status.c:531 -msgid " JobId Level Name Status\n" +#: src/filed/win32/winservice.cpp:547 +msgid "The Bacula service could not be stopped" msgstr "" -#: src/dird/ua_status.c:540 -msgid "is waiting execution" +#: src/filed/win32/winservice.cpp:555 +msgid "The Bacula service could not be removed" msgstr "" -#: src/dird/ua_status.c:543 -msgid "is running" +#: src/filed/win32/winservice.cpp:560 +msgid "The Bacula service could not be found" msgstr "" -#: src/dird/ua_status.c:546 -msgid "is blocked" +#: src/filed/win32/winservice.cpp:565 +msgid "The SCM could not be contacted - the Bacula service was not removed" msgstr "" -#: src/dird/ua_status.c:549 -msgid "has terminated" +#: src/filed/win32/winservice.cpp:629 +msgid "SetServiceStatus failed" msgstr "" -#: src/dird/ua_status.c:552 -msgid "has erred" +#: src/filed/win32/winservice.cpp:657 +#, c-format +msgid "" +"\n" +"\n" +"%s error: %ld at %s:%d" msgstr "" -#: src/dird/ua_status.c:555 -msgid "has errors" +#: src/filed/win32/winservice.cpp:732 +#, c-format +msgid "Locked by: %s, duration: %ld seconds\n" msgstr "" -#: src/dird/ua_status.c:558 -msgid "has a fatal error" +#: src/filed/win32/winservice.cpp:736 +#, c-format +msgid "No longer locked\n" msgstr "" -#: src/dird/ua_status.c:561 -msgid "has verify differences" +#: src/filed/win32/winservice.cpp:740 +msgid "Could not lock database" msgstr "" -#: src/dird/ua_status.c:564 -msgid "has been canceled" +#: src/wx-console/console_thread.cpp:101 +#, 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 "" -#: src/dird/ua_status.c:568 -#, c-format -msgid "is waiting on Client %s" +#: src/wx-console/console_thread.cpp:108 +msgid "" +"No Director resource defined in config file.\n" +"Without that I don't how to speak to the Director :-(\n" msgstr "" -#: src/dird/ua_status.c:574 +#: src/wx-console/console_thread.cpp:127 #, c-format -msgid "is waiting on Storage %s" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in config file.\n" msgstr "" -#: src/dird/ua_status.c:579 -msgid "is waiting on max Storage jobs" +#: src/wx-console/console_thread.cpp:148 +msgid "Error while initializing windows sockets...\n" msgstr "" -#: src/dird/ua_status.c:582 -msgid "is waiting on max Client jobs" +#: src/wx-console/console_thread.cpp:163 +msgid "Error while cleaning up windows sockets...\n" msgstr "" -#: src/dird/ua_status.c:585 -msgid "is waiting on max Job jobs" +#: src/wx-console/console_thread.cpp:201 +msgid "Error while initializing library." msgstr "" -#: src/dird/ua_status.c:588 -msgid "is waiting on max total jobs" +#: src/wx-console/console_thread.cpp:227 +msgid "Cryptographic library initialization failed.\n" msgstr "" -#: src/dird/ua_status.c:591 -msgid "is waiting for its start time" +#: src/wx-console/console_thread.cpp:231 +msgid "Please correct configuration file.\n" msgstr "" -#: src/dird/ua_status.c:594 -msgid "is waiting for higher priority jobs to finish" +#: src/wx-console/console_thread.cpp:273 +msgid "Error : Library not initialized\n" msgstr "" -#: src/dird/ua_status.c:599 -#, c-format -msgid "is in unknown state %c" +#: src/wx-console/console_thread.cpp:284 +msgid "Error : No configuration file loaded\n" msgstr "" -#: src/dird/ua_status.c:613 -msgid "is waiting for a mount request" -msgstr "" +#: src/wx-console/console_thread.cpp:294 +msgid "Connecting...\n" +msgstr "Connection...\n" -#: src/dird/ua_status.c:620 -msgid "is waiting for an appendable Volume" +#: src/wx-console/console_thread.cpp:310 +msgid "Error : No director defined in config file.\n" msgstr "" -#: src/dird/ua_status.c:627 -#, c-format -msgid "is waiting for Client %s to connect to Storage %s" +#: src/wx-console/console_thread.cpp:322 +msgid "Multiple directors found in your config file.\n" msgstr "" -#: src/dird/ua_status.c:643 +#: src/wx-console/console_thread.cpp:331 #, c-format -msgid "%6d %-6s %-20s %s\n" +msgid "Please choose a director (1-%d): " msgstr "" -#: src/dird/ua_status.c:671 -msgid " JobId Level Files Bytes Status Finished Name \n" -msgstr "" +#: src/wx-console/console_thread.cpp:403 +msgid "Failed to connect to the director\n" +msgstr "Impossible de se connecter au Director\n" -#: src/dird/ua_status.c:672 -msgid "========================================================================\n" +#: src/wx-console/console_thread.cpp:413 +msgid "Connected\n" msgstr "" -#: src/baconfig.h:59 -#, c-format -msgid "Failed ASSERT: %s\n" +#: src/wx-console/console_thread.cpp:470 +msgid "<< Unexpected signal received : " msgstr "" -#: src/baconfig.h:66 -msgid "*None*" +#: src/wx-console/console_thread.cpp:490 +msgid "Connection terminated\n" msgstr "" #: src/wx-console/main.cpp:101 @@ -14290,6 +13868,10 @@ msgstr "" msgid "Error while saving" msgstr "" +#: src/wx-console/wxbconfigpanel.cpp:184 +msgid "Apply" +msgstr "" + #: src/wx-console/wxbhistorytextctrl.cpp:61 #: src/wx-console/wxbhistorytextctrl.cpp:132 #: src/wx-console/wxbmainframe.cpp:272 @@ -14304,10 +13886,6 @@ msgstr "" msgid "Possible completions: " msgstr "" -#: src/wx-console/wxbconfigpanel.cpp:184 -msgid "Apply" -msgstr "" - #: src/wx-console/wxbmainframe.cpp:227 msgid "&About...\tF1" msgstr "" @@ -14433,153 +14011,71 @@ msgstr "" msgid "Connecting to the director..." msgstr "" -#: src/wx-console/wxbmainframe.cpp:474 -msgid "Failed to unregister a data parser !" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:482 -msgid "Quitting.\n" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:497 -msgid "" -"Welcome to Bacula wx-console.\n" -"Written by Nicolas Boichat \n" -"(C) 2005 Kern Sibbald\n" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:499 -msgid "About Bacula wx-console" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:505 -msgid "Please choose your default configuration file" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:509 -msgid "Use this configuration file as default?" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:510 -msgid "Configuration file" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:581 -msgid "Console thread terminated." -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:589 -msgid "Connection to the director lost. Quit program?" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:590 -msgid "Connection lost" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:606 -msgid "Connected to the director." -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:629 -msgid "Reconnect" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:630 -msgid "Reconnect to the director" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:644 -msgid "Disconnected of the director." -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:663 src/wx-console/wxbrestorepanel.cpp:689 -msgid "Unexpected question has been received.\n" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:686 src/wx-console/wxbmainframe.cpp:703 -msgid "wx-console: unexpected director's question." -msgstr "" - -#: src/wx-console/console_thread.cpp:101 -#, 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 "" - -#: src/wx-console/console_thread.cpp:108 -msgid "" -"No Director resource defined in config file.\n" -"Without that I don't how to speak to the Director :-(\n" +#: src/wx-console/wxbmainframe.cpp:474 +msgid "Failed to unregister a data parser !" msgstr "" -#: src/wx-console/console_thread.cpp:127 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in config file.\n" +#: src/wx-console/wxbmainframe.cpp:482 +msgid "Quitting.\n" msgstr "" -#: src/wx-console/console_thread.cpp:148 -msgid "Error while initializing windows sockets...\n" +#: src/wx-console/wxbmainframe.cpp:497 +msgid "" +"Welcome to Bacula wx-console.\n" +"Written by Nicolas Boichat \n" +"(C) 2005 Kern Sibbald\n" msgstr "" -#: src/wx-console/console_thread.cpp:163 -msgid "Error while cleaning up windows sockets...\n" +#: src/wx-console/wxbmainframe.cpp:499 +msgid "About Bacula wx-console" msgstr "" -#: src/wx-console/console_thread.cpp:201 -msgid "Error while initializing library." +#: src/wx-console/wxbmainframe.cpp:505 +msgid "Please choose your default configuration file" msgstr "" -#: src/wx-console/console_thread.cpp:227 -msgid "Cryptographic library initialization failed.\n" +#: src/wx-console/wxbmainframe.cpp:509 +msgid "Use this configuration file as default?" msgstr "" -#: src/wx-console/console_thread.cpp:231 -msgid "Please correct configuration file.\n" +#: src/wx-console/wxbmainframe.cpp:510 +msgid "Configuration file" msgstr "" -#: src/wx-console/console_thread.cpp:273 -msgid "Error : Library not initialized\n" +#: src/wx-console/wxbmainframe.cpp:581 +msgid "Console thread terminated." msgstr "" -#: src/wx-console/console_thread.cpp:284 -msgid "Error : No configuration file loaded\n" +#: src/wx-console/wxbmainframe.cpp:589 +msgid "Connection to the director lost. Quit program?" msgstr "" -#: src/wx-console/console_thread.cpp:294 -msgid "Connecting...\n" -msgstr "Connection...\n" - -#: src/wx-console/console_thread.cpp:310 -msgid "Error : No director defined in config file.\n" +#: src/wx-console/wxbmainframe.cpp:590 +msgid "Connection lost" msgstr "" -#: src/wx-console/console_thread.cpp:322 -msgid "Multiple directors found in your config file.\n" +#: src/wx-console/wxbmainframe.cpp:606 +msgid "Connected to the director." msgstr "" -#: src/wx-console/console_thread.cpp:331 -#, c-format -msgid "Please choose a director (1-%d): " +#: src/wx-console/wxbmainframe.cpp:629 +msgid "Reconnect" msgstr "" -#: src/wx-console/console_thread.cpp:403 -msgid "Failed to connect to the director\n" -msgstr "Impossible de se connecter au Director\n" +#: src/wx-console/wxbmainframe.cpp:630 +msgid "Reconnect to the director" +msgstr "" -#: src/wx-console/console_thread.cpp:413 -msgid "Connected\n" +#: src/wx-console/wxbmainframe.cpp:644 +msgid "Disconnected of the director." msgstr "" -#: src/wx-console/console_thread.cpp:470 -msgid "<< Unexpected signal received : " +#: src/wx-console/wxbmainframe.cpp:663 src/wx-console/wxbrestorepanel.cpp:689 +msgid "Unexpected question has been received.\n" msgstr "" -#: src/wx-console/console_thread.cpp:490 -msgid "Connection terminated\n" +#: src/wx-console/wxbmainframe.cpp:686 src/wx-console/wxbmainframe.cpp:703 +msgid "wx-console: unexpected director's question." msgstr "" #: src/wx-console/wxbrestorepanel.cpp:216 @@ -14592,6 +14088,11 @@ msgstr "" msgid "Cancel restore" msgstr "" +#: src/wx-console/wxbrestorepanel.cpp:245 +#: src/wx-console/wxbrestorepanel.cpp:299 +msgid "Add" +msgstr "" + #: src/wx-console/wxbrestorepanel.cpp:247 #: src/wx-console/wxbrestorepanel.cpp:301 msgid "Remove" @@ -14961,176 +14462,3 @@ msgstr "" #: src/wx-console/wxbrestorepanel.cpp:1976 msgid "Restoring..." msgstr "" - -#: src/filed/win32/winservice.cpp:131 src/filed/win32/winservice.cpp:145 -msgid "No existing instance of Bacula could be contacted" -msgstr "" - -#: src/filed/win32/winservice.cpp:218 -msgid "KERNEL32.DLL not found: Bacula service not started" -msgstr "" - -#: src/filed/win32/winservice.cpp:228 -msgid "Registry service not found: Bacula service not started" -msgstr "" - -#: src/filed/win32/winservice.cpp:230 -msgid "Registry service not found" -msgstr "" - -#: src/filed/win32/winservice.cpp:260 -msgid "StartServiceCtrlDispatcher failed." -msgstr "" - -#: src/filed/win32/winservice.cpp:278 -msgid "RegisterServiceCtlHandler failed" -msgstr "" - -#: src/filed/win32/winservice.cpp:279 -msgid "Contact Register Service Handler failure" -msgstr "" - -#: src/filed/win32/winservice.cpp:295 -msgid "ReportStatus STOPPED failed 1" -msgstr "" - -#: src/filed/win32/winservice.cpp:318 -msgid "Report Service failure" -msgstr "" - -#: src/filed/win32/winservice.cpp:355 -msgid "Unable to install Bacula service" -msgstr "" - -#: src/filed/win32/winservice.cpp:373 -msgid "Service command length too long" -msgstr "" - -#: src/filed/win32/winservice.cpp:374 -msgid "Service command length too long. Service not registered." -msgstr "" - -#: src/filed/win32/winservice.cpp:389 -msgid "Cannot write System Registry" -msgstr "" - -#: src/filed/win32/winservice.cpp:390 -msgid "" -"The System Registry could not be updated - the Bacula service was not " -"installed" -msgstr "" - -#: src/filed/win32/winservice.cpp:397 -msgid "Cannot add Bacula key to System Registry" -msgstr "" - -#: src/filed/win32/winservice.cpp:398 src/filed/win32/winservice.cpp:449 -msgid "The Bacula service could not be installed" -msgstr "" - -#: src/filed/win32/winservice.cpp:406 -msgid "" -"The Bacula File service was successfully installed.\n" -"The service may be started by double clicking on the\n" -"Bacula \"Start\" icon and will be automatically\n" -"be run the next time this machine is rebooted. " -msgstr "" - -#: src/filed/win32/winservice.cpp:424 -msgid "" -"The Service Control Manager could not be contacted - the Bacula service was " -"not installed" -msgstr "" - -#: src/filed/win32/winservice.cpp:455 -msgid "" -"Provides file backup and restore services. Bacula -- the network backup " -"solution." -msgstr "" - -#: src/filed/win32/winservice.cpp:462 -msgid "" -"The Bacula File service was successfully installed.\n" -"The service may be started from the Control Panel and will\n" -"automatically be run the next time this machine is rebooted." -msgstr "" - -#: src/filed/win32/winservice.cpp:471 -msgid "" -"Unknown Windows operating system.\n" -"Cannot install Bacula service.\n" -msgstr "" - -#: src/filed/win32/winservice.cpp:496 -msgid "" -"Could not find registry entry.\n" -"Service probably not registerd - the Bacula service was not removed" -msgstr "" - -#: src/filed/win32/winservice.cpp:501 -msgid "" -"Could not delete Registry key.\n" -"The Bacula service could not be removed" -msgstr "" - -#: src/filed/win32/winservice.cpp:511 -msgid "Bacula could not be contacted, probably not running" -msgstr "" - -#: src/filed/win32/winservice.cpp:517 src/filed/win32/winservice.cpp:553 -msgid "The Bacula service has been removed" -msgstr "" - -#: src/filed/win32/winservice.cpp:547 -msgid "The Bacula service could not be stopped" -msgstr "" - -#: src/filed/win32/winservice.cpp:555 -msgid "The Bacula service could not be removed" -msgstr "" - -#: src/filed/win32/winservice.cpp:560 -msgid "The Bacula service could not be found" -msgstr "" - -#: src/filed/win32/winservice.cpp:565 -msgid "The SCM could not be contacted - the Bacula service was not removed" -msgstr "" - -#: src/filed/win32/winservice.cpp:629 -msgid "SetServiceStatus failed" -msgstr "" - -#: src/filed/win32/winservice.cpp:657 -#, c-format -msgid "" -"\n" -"\n" -"%s error: %ld at %s:%d" -msgstr "" - -#: src/filed/win32/winservice.cpp:732 -#, c-format -msgid "Locked by: %s, duration: %ld seconds\n" -msgstr "" - -#: src/filed/win32/winservice.cpp:736 -#, c-format -msgid "No longer locked\n" -msgstr "" - -#: src/filed/win32/winservice.cpp:740 -msgid "Could not lock database" -msgstr "" - -#: src/filed/win32/winmain.cpp:228 src/filed/win32/winmain.cpp:236 -msgid "Bacula Usage" -msgstr "" - -#: src/filed/win32/winmain.cpp:233 -msgid "Bad Command Line Options" -msgstr "" - -#: src/filed/win32/winmain.cpp:326 -msgid "Another instance of Bacula is already running" -msgstr "" diff --git a/bacula/po/it.gmo b/bacula/po/it.gmo index b69e64cf9b190563f6a1b07d67cf859f5175af56..3de904db93df36bfaa63e44b03811e38bda9d812 100644 GIT binary patch delta 13 Ucmcb{e2sa+W+p>}jawBN0VYud;Q#;t delta 13 Ucmcb{e2sa+W+nskjawBN0VZw)=Kufz diff --git a/bacula/po/it.po b/bacula/po/it.po index dd93abde79..cc9c25649d 100644 --- a/bacula/po/it.po +++ b/bacula/po/it.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Bacula 1.38\n" "Report-Msgid-Bugs-To: bacula-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2006-02-26 13:07+0100\n" +"POT-Creation-Date: 2006-02-26 13:10+0100\n" "PO-Revision-Date: 2005-08-08 17:50+0200\n" "Last-Translator: \n" "Language-Team: Italian \n" @@ -16,6954 +16,6831 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/stored/block.c:79 -#, c-format -msgid "" -"Dump block %s %x: size=%d BlkNum=%d\n" -" Hdrcksum=%x cksum=%x\n" +#: src/cats/bdb.c:128 +msgid "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" msgstr "" -#: src/stored/block.c:92 -#, c-format -msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d p=%x\n" +#: src/cats/bdb.c:129 +msgid "WARNING!!!! The Internal Database is NOT OPERATIONAL!\n" msgstr "" -#: src/stored/block.c:148 +#: src/cats/bdb.c:130 +msgid "You should use SQLite, PostgreSQL, or MySQL\n" +msgstr "" + +#: src/cats/bdb.c:152 src/cats/mysql.c:124 src/cats/postgresql.c:128 +#: src/cats/sqlite.c:122 #, c-format -msgid "%d block read errors not printed.\n" +msgid "Unable to initialize DB lock. ERR=%s\n" msgstr "" -#: src/stored/block.c:236 src/stored/block.c:252 src/stored/block.c:262 +#: src/cats/bdb.c:162 #, c-format -msgid "" -"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " -"discarded.\n" +msgid "Unable to open Catalog DB control file %s: ERR=%s\n" msgstr "" -#: src/stored/block.c:276 +#: src/cats/bdb.c:217 #, c-format -msgid "" -"Volume data error at %u:%u! Block length %u is insane (too large), probably " -"due to a bad archive.\n" +msgid "Error reading catalog DB control file. ERR=%s\n" msgstr "" -#: src/stored/block.c:302 +#: src/cats/bdb.c:220 #, c-format msgid "" -"Volume data error at %u:%u!\n" -"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" +"Error, catalog DB control file wrong version. Wanted %d, got %d\n" +"Please reinitialize the working directory.\n" msgstr "" -#: src/stored/block.c:354 src/stored/block.c:677 src/stored/block.c:746 -#: src/stored/acquire.c:437 +#: src/cats/bdb_update.c:83 src/cats/bdb_update.c:114 #, c-format -msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" +msgid "Error updating DB Job file. ERR=%s\n" msgstr "" -#: src/stored/block.c:410 -msgid "Cannot write block. Device at EOM.\n" +#: src/cats/bdb_update.c:153 src/cats/bdb_update.c:189 +#, c-format +msgid "Error updating DB Media file. ERR=%s\n" msgstr "" -#: src/stored/block.c:415 -msgid "Attempt to write on read-only Volume.\n" +#: src/cats/mysql.c:60 +msgid "A user name for MySQL must be supplied.\n" msgstr "" -#: src/stored/block.c:467 +#: src/cats/mysql.c:161 #, c-format -msgid "User defined maximum volume capacity %s exceeded on device %s.\n" +msgid "" +"Unable to connect to MySQL server. \n" +"Database=%s User=%s\n" +"It is probably not running or your password is incorrect.\n" msgstr "" -#: src/stored/block.c:482 +#: src/cats/mysql.c:320 src/cats/postgresql.c:264 src/cats/sqlite.c:323 #, c-format -msgid "Unable to write EOF. ERR=%s\n" +msgid "Query failed: %s: ERR=%s\n" msgstr "" -#: src/stored/block.c:508 src/stored/block.c:519 -msgid "Write block header zeroed.\n" +#: src/cats/postgresql.c:62 +msgid "A user name for PostgreSQL must be supplied.\n" msgstr "" -#: src/stored/block.c:537 +#: src/cats/postgresql.c:165 #, c-format -msgid "Write error at %u:%u on device %s. ERR=%s.\n" +msgid "" +"Unable to connect to PostgreSQL server.\n" +"Database=%s User=%s\n" +"It is probably not running or your password is incorrect.\n" msgstr "" -#: src/stored/block.c:544 +#: src/cats/postgresql.c:506 #, c-format -msgid "End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n" +msgid "error fetching currval: %s\n" msgstr "" -#: src/stored/block.c:619 src/stored/block.c:625 +#: src/cats/sql.c:96 #, c-format -msgid "Backspace file at EOT failed. ERR=%s\n" +msgid "" +"query %s failed:\n" +"%s\n" msgstr "" -#: src/stored/block.c:632 +#: src/cats/sql.c:118 #, c-format -msgid "Backspace record at EOT failed. ERR=%s\n" +msgid "" +"insert %s failed:\n" +"%s\n" msgstr "" -#: src/stored/block.c:649 +#: src/cats/sql.c:132 #, c-format -msgid "Re-read last block at EOT failed. ERR=%s" +msgid "Insertion problem: affected_rows=%s\n" msgstr "" -#: src/stored/block.c:653 -msgid "Re-read of last block succeeded.\n" +#: src/cats/sql.c:152 +#, c-format +msgid "" +"update %s failed:\n" +"%s\n" msgstr "" -#: src/stored/block.c:656 +#: src/cats/sql.c:162 #, c-format -msgid "Re-read of last block failed. Last block=%u Current block=%u.\n" +msgid "Update problem: affected_rows=%s\n" msgstr "" -#: src/stored/block.c:685 +#: src/cats/sql.c:183 #, c-format msgid "" -"Error writing final EOF to tape. This Volume may not be readable.\n" -"%s" +"delete %s failed:\n" +"%s\n" msgstr "" -#: src/stored/block.c:795 src/stored/dvd.c:694 +#: src/cats/sql.c:209 src/cats/sql.c:216 src/cats/sql_create.c:773 +#: src/cats/sql_get.c:180 src/cats/sql_get.c:231 src/cats/sql_get.c:564 +#: src/cats/sql_get.c:639 src/cats/sql_get.c:866 #, c-format -msgid "" -"Error while writing, current part number is less than the total number of " -"parts (%d/%d, device=%s)\n" +msgid "error fetching row: %s\n" msgstr "" -#: src/stored/block.c:803 src/stored/block.c:913 +#: src/cats/sql.c:326 src/dird/catreq.c:369 src/dird/catreq.c:401 +#: src/dird/catreq.c:426 #, c-format -msgid "Unable to open device next part %s: ERR=%s\n" +msgid "Attribute create error. %s" msgstr "" -#: src/stored/block.c:821 +#: src/cats/sql.c:407 #, 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 "Path length is zero. File=%s\n" msgstr "" -#: src/stored/block.c:834 -#, c-format -msgid "" -"End of Volume \"%s\" at %u:%u on device %s (part_size=%s, free_space=%s, " -"free_space_errno=%d).\n" +#: src/cats/sql.c:451 +msgid "No results to list.\n" msgstr "" -#: src/stored/block.c:888 +#: src/cats/sql_create.c:86 #, c-format -msgid "Block buffer size looping problem on device %s\n" +msgid "Create DB Job record %s failed. ERR=%s\n" msgstr "" -#: src/stored/block.c:939 +#: src/cats/sql_create.c:132 #, c-format -msgid "Read error at file:blk %u:%u on device %s. ERR=%s.\n" +msgid "Create JobMedia record %s failed: ERR=%s\n" msgstr "" -#: src/stored/block.c:952 +#: src/cats/sql_create.c:141 #, c-format -msgid "Read zero bytes at %u:%u on device %s.\n" +msgid "Update Media record %s failed: ERR=%s\n" msgstr "" -#: src/stored/block.c:965 +#: src/cats/sql_create.c:171 #, c-format -msgid "" -"Volume data error at %u:%u! Very short block of %d bytes on device %s " -"discarded.\n" +msgid "pool record %s already exists\n" msgstr "" -#: src/stored/block.c:990 +#: src/cats/sql_create.c:197 #, c-format -msgid "Block length %u is greater than buffer %u. Attempting recovery.\n" +msgid "Create db Pool record %s failed: ERR=%s\n" msgstr "" -#: src/stored/block.c:1009 +#: src/cats/sql_create.c:228 #, c-format -msgid "Setting block buffer size to %u bytes.\n" +msgid "Device record %s already exists\n" msgstr "" -#: src/stored/block.c:1024 +#: src/cats/sql_create.c:244 #, c-format -msgid "" -"Volume data error at %u:%u! Short block of %d bytes on device %s discarded.\n" +msgid "Create db Device record %s failed: ERR=%s\n" msgstr "" -#: src/stored/spool.c:69 +#: src/cats/sql_create.c:277 #, c-format -msgid "" -"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" +msgid "More than one Storage record!: %d\n" msgstr "" -#: src/stored/spool.c:75 +#: src/cats/sql_create.c:282 #, c-format -msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" +msgid "error fetching Storage row: %s\n" msgstr "" -#: src/stored/spool.c:91 -msgid "Spooling data ...\n" +#: src/cats/sql_create.c:302 +#, c-format +msgid "Create DB Storage record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:117 +#: src/cats/sql_create.c:334 #, c-format -msgid "Bad return from despool WroteVol=%d\n" +msgid "mediatype record %s already exists\n" msgstr "" -#: src/stored/spool.c:150 +#: src/cats/sql_create.c:350 #, c-format -msgid "Open data spool file %s failed: ERR=%s\n" +msgid "Create db mediatype record %s failed: ERR=%s\n" msgstr "" -#: src/stored/spool.c:199 +#: src/cats/sql_create.c:384 #, c-format -msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" +msgid "Volume \"%s\" already exists.\n" msgstr "" -#: src/stored/spool.c:204 +#: src/cats/sql_create.c:422 #, c-format -msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" +msgid "Create DB Media record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:248 src/stored/append.c:207 src/stored/append.c:274 -#: src/stored/mac.c:98 src/stored/mac.c:176 +#: src/cats/sql_create.c:470 #, c-format -msgid "Fatal append error on device %s: ERR=%s\n" +msgid "More than one Client!: %d\n" msgstr "" -#: src/stored/spool.c:258 src/stored/spool.c:432 src/stored/spool.c:470 +#: src/cats/sql_create.c:475 #, c-format -msgid "Ftruncate spool file failed: ERR=%s\n" +msgid "error fetching Client row: %s\n" msgstr "" -#: src/stored/spool.c:260 +#: src/cats/sql_create.c:502 #, c-format -msgid "Bad return from ftruncate. ERR=%s\n" +msgid "Create DB Client record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:309 +#: src/cats/sql_create.c:545 #, c-format -msgid "Spool header read error. ERR=%s\n" +msgid "Create DB Counters record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:312 +#: src/cats/sql_create.c:578 #, c-format -msgid "Spool read error. Wanted %u bytes, got %d\n" +msgid "More than one FileSet!: %d\n" msgstr "" -#: src/stored/spool.c:313 +#: src/cats/sql_create.c:583 #, c-format -msgid "Spool header read error. Wanted %u bytes, got %d\n" +msgid "error fetching FileSet row: ERR=%s\n" msgstr "" -#: src/stored/spool.c:319 src/stored/spool.c:320 +#: src/cats/sql_create.c:613 #, c-format -msgid "Spool block too big. Max %u bytes, got %u\n" +msgid "Create DB FileSet record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:325 src/stored/spool.c:326 +#: src/cats/sql_create.c:670 #, c-format -msgid "Spool data read error. Wanted %u bytes, got %d\n" +msgid "Attempt to put non-attributes into catalog. Stream=%d\n" msgstr "" -#: src/stored/spool.c:383 -msgid "User specified spool size reached.\n" +#: src/cats/sql_create.c:733 +#, c-format +msgid "Create db File record %s failed. ERR=%s" msgstr "" -#: src/stored/spool.c:385 -msgid "Bad return from despool in write_block.\n" +#: src/cats/sql_create.c:766 src/cats/sql_get.c:224 +#, c-format +msgid "More than one Path!: %s for path: %s\n" msgstr "" -#: src/stored/spool.c:393 -msgid "Spooling data again ...\n" +#: src/cats/sql_create.c:797 +#, c-format +msgid "Create db Path record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:424 +#: src/cats/sql_create.c:830 #, c-format -msgid "Error writing header to spool file. ERR=%s\n" +msgid "More than one Filename! %s for file: %s\n" msgstr "" -#: src/stored/spool.c:438 src/stored/spool.c:476 -msgid "Fatal despooling error." +#: src/cats/sql_create.c:836 +#, c-format +msgid "Error fetching row for file=%s: ERR=%s\n" msgstr "" -#: src/stored/spool.c:445 -msgid "Retrying after header spooling error failed.\n" +#: src/cats/sql_create.c:852 +#, c-format +msgid "Create db Filename record %s failed. ERR=%s\n" msgstr "" -#: src/stored/spool.c:459 +#: src/cats/sql_delete.c:79 #, c-format -msgid "Error writing data to spool file. ERR=%s\n" +msgid "No pool record %s exists\n" msgstr "" -#: src/stored/spool.c:486 -msgid "Retrying after data spooling error failed.\n" +#: src/cats/sql_delete.c:84 +#, c-format +msgid "Expecting one pool record, got %d\n" msgstr "" -#: src/stored/spool.c:541 src/stored/spool.c:548 +#: src/cats/sql_delete.c:90 #, c-format -msgid "Fseek on attributes file failed: ERR=%s\n" +msgid "Error fetching row %s\n" msgstr "" -#: src/stored/spool.c:558 +#: src/cats/sql_find.c:90 src/cats/sql_find.c:119 #, c-format -msgid "Sending spooled attrs to the Director. Despooling %s bytes ...\n" +msgid "" +"Query error for start time request: ERR=%s\n" +"CMD=%s\n" msgstr "" -#: src/stored/spool.c:585 -#, c-format -msgid "fopen attr spool file %s failed: ERR=%s\n" +#: src/cats/sql_find.c:96 +msgid "No prior Full backup Job record found.\n" msgstr "" -#: src/stored/reserve.c:430 src/stored/reserve.c:442 +#: src/cats/sql_find.c:108 #, c-format -msgid "Failed command: %s\n" +msgid "Unknown level=%d\n" msgstr "" -#: src/stored/reserve.c:432 +#: src/cats/sql_find.c:125 #, c-format msgid "" -"\n" -" Device \"%s\" with MediaType \"%s\" requested by DIR not found in SD " -"Device resources.\n" +"No Job record found: ERR=%s\n" +"CMD=%s\n" msgstr "" -#: src/stored/reserve.c:607 src/stored/dircmd.c:543 +#: src/cats/sql_find.c:224 #, c-format -msgid "" -"\n" -" Device \"%s\" in changer \"%s\" requested by DIR could not be opened or " -"does not exist.\n" +msgid "Unknown Job level=%d\n" msgstr "" -#: src/stored/reserve.c:611 src/stored/dircmd.c:521 +#: src/cats/sql_find.c:234 #, c-format -msgid "" -"\n" -" Device \"%s\" requested by DIR could not be opened or does not exist.\n" +msgid "No Job found for: %s.\n" msgstr "" -#: src/stored/reserve.c:624 +#: src/cats/sql_find.c:245 #, c-format -msgid "3926 Could not get dcr for device: %s\n" +msgid "No Job found for: %s\n" msgstr "" -#: src/stored/reserve.c:686 +#: src/cats/sql_find.c:317 #, c-format -msgid "3601 JobId=%u device %s is BLOCKED due to user unmount.\n" +msgid "Request for Volume item %d greater than max %d\n" msgstr "" -#: src/stored/reserve.c:695 +#: src/cats/sql_find.c:329 #, c-format -msgid "3602 JobId=%u device %s is busy (already reading/writing).\n" +msgid "No Volume record found for item %d.\n" msgstr "" -#: src/stored/reserve.c:742 +#: src/cats/sql_get.c:130 #, c-format -msgid "3603 JobId=%u device %s is busy reading.\n" +msgid "get_file_record want 1 got rows=%d\n" msgstr "" -#: src/stored/reserve.c:751 +#: src/cats/sql_get.c:135 #, c-format -msgid "3604 JobId=%u device %s is BLOCKED due to user unmount.\n" +msgid "Error fetching row: %s\n" msgstr "" -#: src/stored/reserve.c:817 +#: src/cats/sql_get.c:143 #, c-format -msgid "3605 JobId=%u wants free drive but device %s is busy.\n" +msgid "File record for PathId=%s FilenameId=%s not found.\n" msgstr "" -#: src/stored/reserve.c:825 -#, c-format -msgid "3606 JobId=%u wants mounted, but drive %s has no Volume.\n" +#: src/cats/sql_get.c:149 +msgid "File record not found in Catalog.\n" msgstr "" -#: src/stored/reserve.c:835 +#: src/cats/sql_get.c:174 #, c-format -msgid "3607 JobId=%u wants Vol=\"%s\" drive has Vol=\"%s\" on drive %s.\n" +msgid "More than one Filename!: %s for file: %s\n" msgstr "" -#: src/stored/reserve.c:871 +#: src/cats/sql_get.c:184 #, c-format -msgid "3608 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" on drive %s.\n" +msgid "Get DB Filename record %s found bad record: %d\n" msgstr "" -#: src/stored/reserve.c:914 +#: src/cats/sql_get.c:190 #, c-format -msgid "3609 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" on drive %s.\n" -msgstr "" - -#: src/stored/reserve.c:922 src/stored/reserve.c:926 -msgid "Logic error!!!! Should not get here.\n" +msgid "Filename record: %s not found.\n" msgstr "" -#: src/stored/reserve.c:923 +#: src/cats/sql_get.c:194 #, c-format -msgid "3910 JobId=%u Logic error!!!! drive %s Should not get here.\n" +msgid "Filename record: %s not found in Catalog.\n" msgstr "" -#: src/stored/reserve.c:929 +#: src/cats/sql_get.c:235 #, c-format -msgid "3911 JobId=%u failed reserve drive %s.\n" -msgstr "" - -#: src/stored/askdir.c:161 -msgid "Network error on bnet_recv in req_vol_info.\n" +msgid "Get DB path record %s found bad record: %s\n" msgstr "" -#: src/stored/askdir.c:178 +#: src/cats/sql_get.c:248 #, c-format -msgid "Error getting Volume info: %s" -msgstr "" - -#: src/stored/askdir.c:294 src/stored/askdir.c:295 src/stored/append.c:80 -#: src/stored/append.c:89 src/stored/append.c:101 src/stored/append.c:269 -#: src/stored/append.c:281 -msgid "NULL Volume name. This shouldn't happen!!!\n" -msgstr "" - -#: src/stored/askdir.c:299 src/stored/askdir.c:300 -msgid "Attempt to update_volume_info in read mode!!!\n" +msgid "Path record: %s not found.\n" msgstr "" -#: src/stored/askdir.c:328 +#: src/cats/sql_get.c:252 #, c-format -msgid "Didn't get vol info vol=%s: ERR=%s" +msgid "Path record: %s not found in Catalog.\n" msgstr "" -#: src/stored/askdir.c:359 +#: src/cats/sql_get.c:287 #, c-format -msgid "Error creating JobMedia record: ERR=%s\n" +msgid "No Job found for JobId %s\n" msgstr "" -#: src/stored/askdir.c:366 +#: src/cats/sql_get.c:344 src/cats/sql_get.c:399 #, c-format -msgid "Error creating JobMedia record: %s\n" +msgid "No volumes found for JobId=%d\n" msgstr "" -#: src/stored/askdir.c:432 +#: src/cats/sql_get.c:350 src/cats/sql_get.c:408 #, c-format -msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" +msgid "Error fetching row %d: ERR=%s\n" msgstr "" -#: src/stored/askdir.c:445 +#: src/cats/sql_get.c:364 #, c-format -msgid "" -"Job %s waiting. Cannot find any appendable volumes.\n" -"Please use the \"label\" command to create a new Volume for:\n" -" Storage: %s\n" -" Media type: %s\n" -" Pool: %s\n" +msgid "No Volume for JobId %d found in Catalog.\n" msgstr "" -#: src/stored/askdir.c:469 src/stored/askdir.c:551 +#: src/cats/sql_get.c:480 #, c-format -msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" -msgstr "" - -#: src/stored/askdir.c:479 -msgid "pthread error in mount_next_volume.\n" -msgstr "" - -#: src/stored/askdir.c:511 -msgid "Cannot request another volume: no volume name given.\n" +msgid "Pool id select failed: ERR=%s\n" msgstr "" -#: src/stored/askdir.c:517 +#: src/cats/sql_get.c:517 #, c-format -msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" +msgid "Client id select failed: ERR=%s\n" msgstr "" -#: src/stored/askdir.c:532 +#: src/cats/sql_get.c:559 #, c-format -msgid "Please mount Volume \"%s\" on Storage Device %s for Job %s\n" +msgid "More than one Pool!: %s\n" msgstr "" -#: src/stored/askdir.c:561 -msgid "pthread error in mount_volume\n" +#: src/cats/sql_get.c:600 +msgid "Pool record not found in Catalog.\n" msgstr "" -#: src/stored/job.c:80 +#: src/cats/sql_get.c:634 #, c-format -msgid "Bad Job Command from Director: %s\n" +msgid "More than one Client!: %s\n" msgstr "" -#: src/stored/job.c:190 -#, c-format -msgid "Job name not found: %s\n" +#: src/cats/sql_get.c:651 src/cats/sql_get.c:655 +msgid "Client record not found in Catalog.\n" msgstr "" -#: src/stored/job.c:201 +#: src/cats/sql_get.c:680 #, c-format -msgid "Hey!!!! JobId %u Job %s already authenticated.\n" -msgstr "" - -#: src/stored/job.c:212 -msgid "Unable to authenticate File daemon\n" +msgid "More than one Counter!: %d\n" msgstr "" -#: src/stored/job.c:335 -msgid "In free_jcr(), but still attached to device!!!!\n" +#: src/cats/sql_get.c:685 +#, c-format +msgid "error fetching Counter row: %s\n" msgstr "" -#: src/stored/bls.c:68 +#: src/cats/sql_get.c:705 #, c-format -msgid "" -"Copyright (C) 2000-2005 Kern Sibbald.\n" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bls [options] \n" -" -b specify a bootstrap file\n" -" -c specify a config file\n" -" -d specify debug level\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 "Counter record: %s not found in Catalog.\n" msgstr "" -#: src/stored/bls.c:128 src/stored/bextract.c:127 +#: src/cats/sql_get.c:741 #, c-format -msgid "Could not open exclude file: %s, ERR=%s\n" +msgid "Error got %s FileSets but expected only one!\n" msgstr "" -#: src/stored/bls.c:142 src/stored/bextract.c:142 +#: src/cats/sql_get.c:746 #, c-format -msgid "Could not open include file: %s, ERR=%s\n" +msgid "FileSet record \"%s\" not found.\n" msgstr "" -#: src/stored/bls.c:189 -msgid "No archive name specified\n" +#: src/cats/sql_get.c:756 +msgid "FileSet record not found in Catalog.\n" msgstr "" -#: src/stored/bls.c:224 +#: src/cats/sql_get.c:813 #, c-format -msgid "" -"\n" -"Warning, this Volume is a continuation of Volume %s\n" +msgid "Media id select failed: ERR=%s\n" msgstr "" -#: src/stored/bls.c:267 +#: src/cats/sql_get.c:861 #, c-format -msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" +msgid "More than one Volume!: %s\n" msgstr "" -#: src/stored/bls.c:278 +#: src/cats/sql_get.c:906 #, c-format -msgid "Mounted Volume \"%s\".\n" +msgid "Media record MediaId=%s not found.\n" msgstr "" -#: src/stored/bls.c:280 +#: src/cats/sql_get.c:909 #, c-format -msgid "Got EOF at file %u on device %s, Volume \"%s\"\n" +msgid "Media record for Volume \"%s\" not found.\n" msgstr "" -#: src/stored/bls.c:304 +#: src/cats/sql_get.c:916 #, 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" +msgid "Media record for MediaId=%u not found in Catalog.\n" msgstr "" -#: src/stored/bls.c:313 +#: src/cats/sql_get.c:919 #, c-format -msgid "Block: %d size=%d\n" +msgid "Media record for Vol=%s not found in Catalog.\n" msgstr "" -#: src/stored/bls.c:364 src/stored/bscan.c:648 src/stored/bextract.c:285 -msgid "Cannot continue.\n" +#: src/cats/sql_list.c:53 +#, c-format +msgid "Query failed: %s\n" msgstr "" -#: src/stored/bls.c:371 src/stored/bscan.c:652 src/stored/bextract.c:289 -#: src/filed/restore.c:256 src/filed/verify_vol.c:143 +#: src/cats/sqlite.c:136 #, c-format -msgid "Record header file index %ld not equal record index %ld\n" +msgid "Database %s does not exist, please create it.\n" msgstr "" -#: src/stored/bls.c:380 +#: src/cats/sqlite.c:161 #, c-format -msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" +msgid "Unable to open Database=%s. ERR=%s\n" msgstr "" -#: src/stored/bls.c:397 src/stored/read_record.c:327 -msgid "Fresh Volume Label" +#: src/cats/sqlite.c:162 src/lib/bnet_server.c:371 +msgid "unknown" msgstr "" -#: src/stored/bls.c:400 src/stored/read_record.c:330 -msgid "Volume Label" +#: src/cats/sqlite.c:221 +#, c-format +msgid "next_index query error: ERR=%s\n" msgstr "" -#: src/stored/bls.c:404 src/stored/label.c:972 -msgid "Begin Job Session" +#: src/cats/sqlite.c:226 +#, c-format +msgid "Error fetching index: ERR=%s\n" msgstr "" -#: src/stored/bls.c:408 src/stored/label.c:975 -msgid "End Job Session" +#: src/cats/sqlite.c:236 +#, c-format +msgid "next_index update error: ERR=%s\n" msgstr "" -#: src/stored/bls.c:412 -msgid "End of Medium" +#: src/console/authenticate.c:100 src/dird/authenticate.c:106 +#: src/dird/authenticate.c:206 src/filed/authenticate.c:119 +#: src/filed/authenticate.c:215 src/stored/authenticate.c:128 +#: src/stored/authenticate.c:232 src/wx-console/authenticate.c:106 +msgid "" +"Authorization problem: Remote server did not advertise required TLS " +"support.\n" msgstr "" -#: src/stored/bls.c:415 src/stored/label.c:984 -msgid "Unknown" +#: src/console/authenticate.c:107 src/dird/authenticate.c:113 +#: src/dird/authenticate.c:213 src/filed/authenticate.c:127 +#: src/filed/authenticate.c:223 src/stored/authenticate.c:136 +#: src/stored/authenticate.c:240 src/wx-console/authenticate.c:112 +msgid "Authorization problem: Remote server requires TLS.\n" msgstr "" -#: src/stored/bls.c:421 src/stored/read_record.c:348 -#, c-format -msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" +#: src/console/authenticate.c:117 src/wx-console/authenticate.c:121 +msgid "TLS negotiation failed\n" msgstr "" -#: src/stored/bls.c:441 src/stored/bscan.c:1256 src/stored/bextract.c:477 -#: src/stored/btape.c:2684 src/stored/bcopy.c:287 +#: src/console/authenticate.c:129 src/gnome2-console/authenticate.c:85 +#: src/tray-monitor/authenticate.c:87 #, c-format -msgid "Mount Volume \"%s\" on device %s and press return when ready: " +msgid "Bad response to Hello command: ERR=%s\n" msgstr "" -#: src/stored/read.c:55 -msgid "No Volume names found for restore.\n" +#: src/console/authenticate.c:136 src/gnome2-console/authenticate.c:95 +#: src/tray-monitor/authenticate.c:94 src/wx-console/authenticate.c:136 +msgid "Director rejected Hello command\n" msgstr "" -#: src/stored/read.c:109 -#, c-format -msgid ">filed: Error Hdr=%s\n" +#: src/console/authenticate.c:146 src/wx-console/authenticate.c:146 +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 http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " +"help.\n" msgstr "" -#: src/stored/read.c:110 src/stored/read.c:125 +#: src/console/console.c:102 #, c-format -msgid "Error sending to File daemon. ERR=%s\n" +msgid "" +"Copyright (C) 2000-2005 Kern Sibbald\n" +"\n" +"Version: " msgstr "" -#: src/stored/read.c:124 +#: src/console/console.c:103 src/dird/admin.c:108 #, c-format -msgid "Error sending to FD. ERR=%s\n" +msgid " (" msgstr "" -#: src/stored/status.c:67 +#: src/console/console.c:103 #, c-format msgid "" +") %s %s %s\n" +"\n" +"Usage: bconsole [-s] [-c config_file] [-d debug_level]\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" -"%s Version: %s (%s) %s %s %s\n" msgstr "" -#: src/stored/status.c:71 src/dird/ua_status.c:249 -#, c-format -msgid "Daemon started %s, 1 Job run since started.\n" +#: src/console/console.c:150 +msgid "input from file" msgstr "" -#: src/stored/status.c:74 src/dird/ua_status.c:252 -#, c-format -msgid "Daemon started %s, %d Jobs run since started.\n" +#: src/console/console.c:151 +msgid "output to file" msgstr "" -#: src/stored/status.c:78 src/filed/status.c:121 src/dird/ua_status.c:257 -#, c-format -msgid " Heap: bytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" +#: src/console/console.c:152 src/dird/ua_cmds.c:110 +msgid "quit" msgstr "" -#: src/stored/status.c:103 -msgid "" -"\n" -"Device status:\n" +#: src/console/console.c:153 +msgid "output to file and terminal" msgstr "" -#: src/stored/status.c:105 -#, c-format -msgid "Autochanger \"%s\" with devices:\n" +#: src/console/console.c:154 +msgid "sleep specified time" msgstr "" -#: src/stored/status.c:119 -#, c-format -msgid "Device %s is mounted with Volume=\"%s\" Pool=\"%s\"\n" +#: src/console/console.c:155 src/dird/ua_cmds.c:122 +msgid "print current time" msgstr "" -#: src/stored/status.c:123 -#, c-format -msgid "Device %s open but no Bacula volume is mounted.\n" +#: src/console/console.c:156 +msgid "print Console's version" msgstr "" -#: src/stored/status.c:133 -#, c-format -msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" +#: src/console/console.c:157 src/dird/ua_cmds.c:99 +msgid "exit = quit" msgstr "" -#: src/stored/status.c:147 -#, c-format -msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" +#: src/console/console.c:158 +msgid "zed_keys = use zed keys instead of bash keys" msgstr "" -#: src/stored/status.c:152 -#, c-format -msgid " Positioned at File=%s Block=%s\n" +#: src/console/console.c:191 src/dird/ua_dotcmds.c:108 +msgid ": is an illegal command\n" msgstr "" -#: src/stored/status.c:158 -#, c-format -msgid "Device %s is not open.\n" +#: src/console/console.c:400 src/filed/filed.c:183 +#: src/gnome2-console/console.c:271 +msgid "TLS library initialization failed.\n" msgstr "" -#: src/stored/status.c:160 +#: src/console/console.c:404 src/dird/dird.c:200 src/dird/dird.c:410 +#: src/dird/dird.c:413 src/filed/filed.c:188 src/gnome2-console/console.c:275 +#: src/stored/stored.c:193 #, c-format -msgid "Device \"%s\" is not open or does not exist.\n" +msgid "Please correct configuration file: %s\n" msgstr "" -#: src/stored/status.c:165 src/stored/status.c:168 src/stored/status.c:172 -#: src/stored/status.c:174 -msgid "" -"====\n" -"\n" +#: src/console/console.c:421 +msgid "Available Directors:\n" msgstr "" -#: src/stored/status.c:166 -msgid "In Use Volume status:\n" +#: src/console/console.c:425 +#, c-format +msgid "%d %s at %s:%d\n" msgstr "" -#: src/stored/status.c:190 -msgid "" -"No DEVICE structure.\n" -"\n" +#: src/console/console.c:429 +msgid "Select Director: " msgstr "" -#: src/stored/status.c:195 -msgid " Device is BLOCKED. User unmounted.\n" +#: src/console/console.c:435 +#, c-format +msgid "You must enter a number between 1 and %d\n" msgstr "" -#: src/stored/status.c:198 -msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" +#: src/console/console.c:455 src/tray-monitor/tray-monitor.c:858 +#, c-format +msgid "Connecting to Director %s:%d\n" msgstr "" -#: src/stored/status.c:202 +#: src/console/console.c:471 src/gnome2-console/console.c:504 +#: src/wx-console/console_thread.cpp:370 #, c-format -msgid " Device is BLOCKED waiting for mount of volume \"%s\".\n" +msgid "Failed to initialize TLS context for Console \"%s\".\n" msgstr "" -#: src/stored/status.c:205 -msgid " Device is BLOCKED waiting for media.\n" +#: src/console/console.c:492 src/gnome2-console/console.c:526 +#: src/wx-console/console_thread.cpp:391 +#, c-format +msgid "Failed to initialize TLS context for Director \"%s\".\n" msgstr "" -#: src/stored/status.c:209 -msgid " Device is being initialized.\n" +#: src/console/console.c:515 +msgid "Enter a period to cancel a command.\n" msgstr "" -#: src/stored/status.c:212 -msgid " Device is blocked labeling a Volume.\n" +#: src/console/console.c:582 src/console/console.c:611 src/dird/dird.c:496 +#: src/dird/dird.c:711 src/dird/dird.c:777 src/dird/dird.c:829 +#: src/filed/filed.c:302 src/filed/filed.c:348 +#: src/gnome2-console/console.c:140 src/gnome2-console/console.c:169 +#: src/stored/stored.c:309 src/wx-console/console_thread.cpp:94 +#: src/wx-console/console_thread.cpp:120 +msgid "TLS required but not configured in Bacula.\n" msgstr "" -#: src/stored/status.c:220 +#: src/console/console.c:589 src/gnome2-console/console.c:147 #, c-format -msgid " Slot %d is loaded in drive %d.\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.\n" msgstr "" -#: src/stored/status.c:223 +#: src/console/console.c:598 src/gnome2-console/console.c:156 #, c-format -msgid " Drive %d is not loaded.\n" +msgid "" +"No Director resource defined in %s\n" +"Without that I don't how to speak to the Director :-(\n" msgstr "" -#: src/stored/status.c:227 src/stored/btape.c:548 +#: src/console/console.c:618 src/gnome2-console/console.c:176 #, c-format -msgid "Configured device capabilities:\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in %s.\n" msgstr "" -#: src/stored/status.c:242 -msgid "Device state:\n" +#: src/console/console.c:763 +msgid "Too many arguments on input command.\n" msgstr "" -#: src/stored/status.c:256 -#, c-format -msgid "" -"num_writers=%d JobStatus=%c block=%d\n" -"\n" +#: src/console/console.c:767 +msgid "First argument to input command must be a filename.\n" msgstr "" -#: src/stored/status.c:259 src/stored/btape.c:580 +#: src/console/console.c:772 #, c-format -msgid "Device parameters:\n" +msgid "Cannot open file %s for input. ERR=%s\n" msgstr "" -#: src/stored/status.c:260 +#: src/console/console.c:802 +msgid "Too many arguments on output/tee command.\n" +msgstr "" + +#: src/console/console.c:818 #, c-format -msgid "Archive name: %s Device name: %s\n" +msgid "Cannot open file %s for output. ERR=%s\n" msgstr "" -#: src/stored/status.c:262 +#: src/console/console_conf.c:123 src/gnome2-console/console_conf.c:122 +#: src/wx-console/console_conf.c:128 #, c-format -msgid "File=%u block=%u\n" +msgid "No record for %d %s\n" msgstr "" -#: src/stored/status.c:263 +#: src/console/console_conf.c:132 src/wx-console/console_conf.c:137 #, c-format -msgid "Min block=%u Max block=%u\n" +msgid "Console: name=%s rcfile=%s histfile=%s\n" msgstr "" -#: src/stored/status.c:277 src/dird/ua_status.c:508 -msgid "" -"\n" -"Running Jobs:\n" +#: src/console/console_conf.c:136 src/gnome2-console/console_conf.c:131 +#: src/wx-console/console_conf.c:141 +#, c-format +msgid "Director: name=%s address=%s DIRport=%d\n" msgstr "" -#: src/stored/status.c:280 +#: src/console/console_conf.c:140 src/console/console_conf.c:216 +#: src/console/console_conf.c:261 src/console/console_conf.c:288 +#: src/filed/filed_conf.c:268 src/filed/filed_conf.c:327 +#: src/filed/filed_conf.c:357 src/gnome2-console/console_conf.c:142 +#: src/gnome2-console/console_conf.c:220 src/gnome2-console/console_conf.c:268 +#: src/gnome2-console/console_conf.c:298 src/stored/stored_conf.c:510 +#: src/stored/stored_conf.c:598 src/stored/stored_conf.c:633 +#: src/wx-console/console_conf.c:145 src/wx-console/console_conf.c:220 +#: src/wx-console/console_conf.c:265 src/wx-console/console_conf.c:292 #, c-format -msgid "%s Job %s waiting for Client connection.\n" +msgid "Unknown resource type %d\n" msgstr "" -#: src/stored/status.c:295 +#: src/console/console_conf.c:242 src/dird/dird_conf.c:1112 +#: src/dird/dird_conf.c:1127 src/filed/filed_conf.c:296 +#: src/gnome2-console/console_conf.c:246 src/tray-monitor/tray_conf.c:262 +#: src/wx-console/console_conf.c:246 #, c-format -msgid "" -"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=\"%s\"\n" +msgid "%s item is required in %s resource, but not found.\n" msgstr "" -#: src/stored/status.c:307 +#: src/console/console_conf.c:304 src/dird/dird_conf.c:1299 +#: src/filed/filed_conf.c:374 src/gnome2-console/console_conf.c:314 +#: src/tray-monitor/tray_conf.c:341 src/wx-console/console_conf.c:308 #, c-format -msgid "" -"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" -" pool=\"%s\" device=\"%s\"\n" +msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" msgstr "" -#: src/stored/status.c:323 src/filed/status.c:166 +#: src/dird/admin.c:55 #, c-format -msgid " Files=%s Bytes=%s Bytes/sec=%s\n" +msgid "Start Admin JobId %d, Job=%s\n" msgstr "" -#: src/stored/status.c:330 +#: src/dird/admin.c:82 src/dird/backup.c:343 src/dird/mac.c:287 #, c-format -msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" +msgid "Error getting job record for stats: %s" msgstr "" -#: src/stored/status.c:335 -msgid " FDSocket closed\n" +#: src/dird/admin.c:90 +msgid "Admin OK" msgstr "" -#: src/stored/status.c:343 src/filed/status.c:195 src/dird/ua_cmds.c:416 -msgid "No Jobs running.\n" +#: src/dird/admin.c:94 +msgid "*** Admin Error ***" msgstr "" -#: src/stored/status.c:345 src/stored/status.c:361 src/stored/status.c:438 -#: src/filed/status.c:198 src/filed/status.c:277 src/dird/ua_status.c:277 -#: src/dird/ua_status.c:493 src/dird/ua_status.c:655 -msgid "====\n" +#: src/dird/admin.c:98 +msgid "Admin Canceled" msgstr "" -#: src/stored/status.c:352 -msgid "" -"\n" -"Jobs waiting to reserve a drive:\n" +#: src/dird/admin.c:102 src/dird/backup.c:455 src/dird/mac.c:389 +#: src/dird/restore.c:246 +#, c-format +msgid "Inappropriate term code: %c\n" msgstr "" -#: src/stored/status.c:373 src/filed/status.c:211 src/dird/ua_status.c:665 -msgid "No Terminated Jobs.\n" +#: src/dird/admin.c:108 +msgid "Bacula " msgstr "" -#: src/stored/status.c:378 src/dird/ua_status.c:670 +#: src/dird/admin.c:108 +#, c-format msgid "" +"): %s\n" +" JobId: %d\n" +" Job: %s\n" +" Start time: %s\n" +" End time: %s\n" +" Termination: %s\n" "\n" -"Terminated Jobs:\n" msgstr "" -#: src/stored/status.c:380 -msgid " JobId Level Files Bytes Status Finished Name \n" +#: src/dird/authenticate.c:67 src/dird/authenticate.c:68 +#: src/tray-monitor/authenticate.c:121 +#, c-format +msgid "Error sending Hello to Storage daemon. ERR=%s\n" msgstr "" -#: src/stored/status.c:382 src/filed/status.c:221 src/dird/ua_status.c:532 -msgid "======================================================================\n" +#: src/dird/authenticate.c:93 +msgid "Director and Storage daemon passwords or names not the same.\n" msgstr "" -#: src/stored/status.c:402 src/lib/util.c:178 src/filed/status.c:241 -#: src/dird/ua_status.c:703 -msgid "Created" +#: src/dird/authenticate.c:95 +msgid "" +"Director unable to authenticate with Storage daemon. 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 http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " +"help.\n" msgstr "" -#: src/stored/status.c:406 src/lib/util.c:191 src/lib/util.c:258 -#: src/filed/status.c:245 src/dird/ua_status.c:707 -msgid "Error" +#: src/dird/authenticate.c:123 src/dird/authenticate.c:223 +#: src/dird/authenticate.c:356 src/filed/authenticate.c:136 +#: src/filed/authenticate.c:232 src/stored/authenticate.c:145 +#: src/stored/authenticate.c:249 +msgid "TLS negotiation failed.\n" msgstr "" -#: src/stored/status.c:409 src/filed/status.c:248 src/dird/ua_status.c:710 -msgid "Diffs" +#: src/dird/authenticate.c:132 src/tray-monitor/authenticate.c:134 +#, c-format +msgid "bdird set configuration file to file\n" +" -dnn set debug level to nn\n" +" -f run in foreground (for debugging)\n" +" -g groupid\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/stored/parse_bsr.c:262 -#, c-format -msgid "MediaType %s in bsr at inappropriate place.\n" +#: src/dird/dird.c:196 src/stored/stored.c:189 +msgid "Cryptography library initialization failed.\n" msgstr "" -#: src/stored/parse_bsr.c:283 -#, c-format -msgid "Device \"%s\" in bsr at inappropriate place.\n" +#: src/dird/dird.c:396 +msgid "Too many open reload requests. Request ignored.\n" msgstr "" -#: src/stored/parse_bsr.c:440 -msgid "JobType not yet implemented\n" +#: src/dird/dird.c:411 +msgid "Out of reload table entries. Giving up.\n" msgstr "" -#: src/stored/parse_bsr.c:448 -msgid "JobLevel not yet implemented\n" +#: src/dird/dird.c:414 +msgid "Resetting previous configuration.\n" msgstr "" -#: src/stored/parse_bsr.c:631 +#: src/dird/dird.c:474 #, c-format -msgid "Slot %d in bsr at inappropriate place.\n" +msgid "" +"No Director resource defined in %s\n" +"Without that I don't know who I am :-(\n" msgstr "" -#: src/stored/parse_bsr.c:655 +#: src/dird/dird.c:482 src/filed/filed.c:295 #, c-format -msgid "VolFile : %u-%u\n" +msgid "No Messages resource defined in %s\n" msgstr "" -#: src/stored/parse_bsr.c:663 +#: src/dird/dird.c:487 #, c-format -msgid "VolBlock : %u-%u\n" +msgid "Only one Director resource permitted in %s\n" msgstr "" -#: src/stored/parse_bsr.c:673 +#: src/dird/dird.c:502 src/filed/filed.c:357 src/stored/stored.c:361 #, c-format -msgid "FileIndex : %u\n" +msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:675 +#: src/dird/dird.c:508 src/filed/filed.c:363 src/stored/stored.c:367 #, c-format -msgid "FileIndex : %u-%u\n" +msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:685 +#: src/dird/dird.c:514 src/filed/filed.c:369 src/stored/stored.c:373 #, c-format -msgid "JobId : %u\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/stored/parse_bsr.c:687 +#: src/dird/dird.c:533 src/filed/filed.c:388 src/stored/stored.c:392 #, c-format -msgid "JobId : %u-%u\n" +msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:697 +#: src/dird/dird.c:541 #, c-format -msgid "SessId : %u\n" +msgid "No Job records defined in %s\n" msgstr "" -#: src/stored/parse_bsr.c:699 +#: src/dird/dird.c:585 src/dird/dird.c:598 #, c-format -msgid "SessId : %u-%u\n" +msgid "Hey something is wrong. p=0x%lu\n" msgstr "" -#: src/stored/parse_bsr.c:708 +#: src/dird/dird.c:647 #, c-format -msgid "VolumeName : %s\n" +msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" msgstr "" -#: src/stored/parse_bsr.c:709 -#, c-format -msgid " MediaType : %s\n" +#: src/dird/dird.c:654 +msgid "Too many items in Job resource\n" msgstr "" -#: src/stored/parse_bsr.c:710 +#: src/dird/dird.c:672 src/dird/job.c:101 src/dird/ua_cmds.c:1480 +#: src/dird/ua_output.c:600 #, c-format -msgid " Device : %s\n" +msgid "Could not open database \"%s\".\n" msgstr "" -#: src/stored/parse_bsr.c:711 +#: src/dird/dird.c:675 #, c-format -msgid " Slot : %d\n" +msgid "%s" msgstr "" -#: src/stored/parse_bsr.c:720 +#: src/dird/dird.c:717 #, c-format -msgid "Client : %s\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Storage \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:728 +#: src/dird/dird.c:733 src/stored/stored.c:347 #, c-format -msgid "Job : %s\n" +msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:736 +#: src/dird/dird.c:784 #, c-format -msgid "SessTime : %u\n" +msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:750 -msgid "BSR is NULL\n" +#: src/dird/dird.c:790 +#, c-format +msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:754 +#: src/dird/dird.c:796 #, c-format -msgid "Next : 0x%x\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/stored/parse_bsr.c:755 +#: src/dird/dird.c:813 src/dird/dird.c:853 src/filed/filed.c:326 #, c-format -msgid "Root bsr : 0x%x\n" +msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:766 +#: src/dird/dird.c:836 #, c-format -msgid "count : %u\n" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon \"%s\" in %s.\n" msgstr "" -#: src/stored/parse_bsr.c:767 +#: src/dird/dird_conf.c:443 src/tray-monitor/tray_conf.c:152 #, c-format -msgid "found : %u\n" +msgid "No %s resource defined\n" msgstr "" -#: src/stored/parse_bsr.c:770 +#: src/dird/dird_conf.c:452 #, c-format -msgid "done : %s\n" +msgid "Director: name=%s MaxJobs=%d FDtimeout=%s SDtimeout=%s\n" msgstr "" -#: src/stored/parse_bsr.c:770 src/tools/dbcheck.c:1098 src/dird/ua_run.c:928 -#: src/dird/ua_input.c:120 src/dird/ua_select.c:54 src/dird/ua_update.c:223 -#: src/dird/ua_update.c:237 src/dird/ua_update.c:247 src/dird/ua_update.c:261 -#: src/dird/ua_update.c:551 -msgid "yes" +#: src/dird/dird_conf.c:457 +#, c-format +msgid " query_file=%s\n" msgstr "" -#: src/stored/parse_bsr.c:770 src/dird/ua_input.c:124 src/dird/ua_select.c:57 -#: src/dird/ua_update.c:225 src/dird/ua_update.c:237 src/dird/ua_update.c:249 -#: src/dird/ua_update.c:261 src/dird/ua_update.c:551 -msgid "no" +#: src/dird/dird_conf.c:460 src/dird/dird_conf.c:485 src/dird/dird_conf.c:499 +#: src/dird/dird_conf.c:544 src/dird/dird_conf.c:548 src/dird/dird_conf.c:552 +#: src/dird/dird_conf.c:576 src/dird/dird_conf.c:581 src/dird/dird_conf.c:585 +#: src/dird/dird_conf.c:589 src/dird/dird_conf.c:593 src/dird/dird_conf.c:597 +#: src/dird/dird_conf.c:607 +msgid " --> " msgstr "" -#: src/stored/parse_bsr.c:771 +#: src/dird/dird_conf.c:466 src/dird/dird_conf.c:469 #, c-format -msgid "positioning : %d\n" +msgid "Console: name=%s SSL=%d\n" msgstr "" -#: src/stored/parse_bsr.c:772 +#: src/dird/dird_conf.c:475 #, c-format -msgid "fast_reject : %d\n" +msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" msgstr "" -#: src/stored/wait.c:114 +#: src/dird/dird_conf.c:480 #, c-format -msgid "pthread timedwait error. ERR=%s\n" +msgid "Counter: name=%s min=%d max=%d\n" msgstr "" -#: src/stored/wait.c:199 +#: src/dird/dird_conf.c:491 #, c-format -msgid "Job %s waiting to reserve a device.\n" +msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" msgstr "" -#: src/stored/acquire.c:54 +#: src/dird/dird_conf.c:494 #, c-format -msgid "Num_writers=%d not zero. Job %d canceled.\n" +msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" msgstr "" -#: src/stored/acquire.c:62 +#: src/dird/dird_conf.c:506 #, c-format -msgid "No volumes specified. Job %d canceled.\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/stored/acquire.c:122 +#: src/dird/dird_conf.c:516 #, c-format -msgid "Media Type change. New device %s chosen.\n" +msgid "" +"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" +" DeviceName=%s MediaType=%s StorageId=%s\n" msgstr "" -#: src/stored/acquire.c:133 +#: src/dird/dird_conf.c:525 #, c-format -msgid "No suitable device found to read Volume \"%s\"\n" +msgid "" +"Catalog: name=%s address=%s DBport=%d db_name=%s\n" +" db_user=%s MutliDBConn=%d\n" msgstr "" -#: src/stored/acquire.c:155 src/stored/mount.c:83 +#: src/dird/dird_conf.c:533 #, c-format -msgid "Job %d canceled.\n" +msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" msgstr "" -#: src/stored/acquire.c:166 -#, c-format -msgid "Read open device %s Volume \"%s\" failed (EIO): ERR=%s\n" +#: src/dird/dird_conf.c:534 src/dird/ua_cmds.c:430 src/dird/ua_prune.c:454 +#: src/dird/ua_run.c:643 src/dird/ua_select.c:234 src/dird/ua_select.c:257 +msgid "Job" msgstr "" -#: src/stored/acquire.c:171 -#, c-format -msgid "Read open device %s Volume \"%s\" failed: ERR=%s\n" +#: src/dird/dird_conf.c:534 +msgid "JobDefs" msgstr "" -#: src/stored/acquire.c:237 src/stored/mount.c:77 +#: src/dird/dird_conf.c:538 #, c-format -msgid "Too many errors trying to mount device %s.\n" +msgid "" +" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=%" +"d\n" msgstr "" -#: src/stored/acquire.c:246 +#: src/dird/dird_conf.c:556 #, c-format -msgid "Ready to read from volume \"%s\" on device %s.\n" +msgid " --> Where=%s\n" msgstr "" -#: src/stored/acquire.c:289 +#: src/dird/dird_conf.c:559 #, c-format -msgid "Device %s is busy reading.\n" +msgid " --> Bootstrap=%s\n" msgstr "" -#: src/stored/acquire.c:319 +#: src/dird/dird_conf.c:562 #, c-format -msgid "Wanted Volume \"%s\", but device %s is busy writing on \"%s\" .\n" +msgid " --> RunBefore=%s\n" msgstr "" -#: src/stored/acquire.c:338 +#: src/dird/dird_conf.c:565 #, c-format -msgid "" -"Cannot recycle volume \"%s\" on device %s because it is in use by another " -"job.\n" +msgid " --> RunAfter=%s\n" msgstr "" -#: src/stored/acquire.c:360 +#: src/dird/dird_conf.c:568 #, c-format -msgid "Could not ready device %s for append.\n" +msgid " --> RunAfterFailed=%s\n" msgstr "" -#: src/stored/acquire.c:478 +#: src/dird/dird_conf.c:571 #, c-format -msgid "Alert: %s" +msgid " --> WriteBootstrap=%s\n" msgstr "" -#: src/stored/acquire.c:486 +#: src/dird/dird_conf.c:603 #, c-format -msgid "3997 Bad alert command: %s: ERR=%s.\n" +msgid " --> Run=%s\n" msgstr "" -#: src/stored/acquire.c:570 +#: src/dird/dird_conf.c:614 #, c-format -msgid "Hey! num_writers=%d!!!!\n" +msgid "FileSet: name=%s\n" msgstr "" -#: src/stored/bscan.c:109 +#: src/dird/dird_conf.c:676 src/dird/dird_conf.c:755 #, c-format -msgid "" -"Copyright (C) 2001-2005 Kern Sibbald.\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 nn\n" -" -m update media info in database\n" -" -n specify the database name (default bacula)\n" -" -u specify database user name (default bacula)\n" -" -P specify database host (default NULL)\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 "Schedule: name=%s\n" msgstr "" -#: src/stored/bscan.c:221 src/stored/bextract.c:177 src/stored/bcopy.c:137 -msgid "Wrong number of arguments: \n" +#: src/dird/dird_conf.c:681 +#, c-format +msgid " --> Run Level=%s\n" msgstr "" -#: src/stored/bscan.c:234 src/stored/stored.c:265 -#, c-format -msgid "No Storage resource defined in %s. Cannot continue.\n" +#: src/dird/dird_conf.c:682 +msgid " hour=" msgstr "" -#: src/stored/bscan.c:242 src/stored/stored.c:296 -#, c-format -msgid "No Working Directory defined in %s. Cannot continue.\n" +#: src/dird/dird_conf.c:691 +msgid " mday=" msgstr "" -#: src/stored/bscan.c:250 -#, c-format -msgid "Working Directory: %s not found. Cannot continue.\n" +#: src/dird/dird_conf.c:700 +msgid " month=" msgstr "" -#: src/stored/bscan.c:254 -#, c-format -msgid "Working Directory: %s is not a directory. Cannot continue.\n" +#: src/dird/dird_conf.c:709 +msgid " wday=" msgstr "" -#: src/stored/bscan.c:268 src/stored/bscan.c:341 -#, c-format -msgid "First Volume Size = %sn" +#: src/dird/dird_conf.c:718 +msgid " wom=" msgstr "" -#: src/stored/bscan.c:274 -msgid "Could not init Bacula database\n" +#: src/dird/dird_conf.c:727 +msgid " woy=" msgstr "" -#: src/stored/bscan.c:281 +#: src/dird/dird_conf.c:736 #, c-format -msgid "Using Database: %s, User: %s\n" +msgid " mins=%d\n" msgstr "" -#: src/stored/bscan.c:315 -#, c-format -msgid "Create JobMedia for Job %s\n" +#: src/dird/dird_conf.c:738 src/dird/dird_conf.c:742 src/dird/dird_conf.c:746 +msgid " --> " msgstr "" -#: src/stored/bscan.c:326 +#: src/dird/dird_conf.c:759 #, c-format -msgid "Could not create JobMedia record for Volume=%s Job=%s\n" +msgid "Pool: name=%s PoolType=%s\n" msgstr "" -#: src/stored/bscan.c:383 +#: src/dird/dird_conf.c:761 #, c-format -msgid "done: %d%%\n" +msgid " use_cat=%d use_once=%d acpt_any=%d cat_files=%d\n" msgstr "" -#: src/stored/bscan.c:391 src/stored/bcopy.c:205 +#: src/dird/dird_conf.c:764 #, c-format -msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" +msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" msgstr "" -#: src/stored/bscan.c:407 -msgid "Volume is prelabeled. This tape cannot be scanned.\n" +#: src/dird/dird_conf.c:767 +#, c-format +msgid " VolUse=%s recycle=%d LabelFormat=%s\n" msgstr "" -#: src/stored/bscan.c:419 +#: src/dird/dird_conf.c:771 #, c-format -msgid "Pool record for %s found in DB.\n" +msgid " CleaningPrefix=%s LabelType=%d\n" msgstr "" -#: src/stored/bscan.c:423 +#: src/dird/dird_conf.c:773 #, c-format -msgid "VOL_LABEL: Pool record not found for Pool: %s\n" +msgid " RecyleOldest=%d PurgeOldest=%d MaxVolJobs=%d MaxVolFiles=%d\n" msgstr "" -#: src/stored/bscan.c:429 +#: src/dird/dird_conf.c:779 #, c-format -msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" +msgid "Messages: name=%s\n" msgstr "" -#: src/stored/bscan.c:433 +#: src/dird/dird_conf.c:781 #, c-format -msgid "Pool type \"%s\" is OK.\n" +msgid " mailcmd=%s\n" msgstr "" -#: src/stored/bscan.c:443 +#: src/dird/dird_conf.c:783 #, c-format -msgid "Media record for %s found in DB.\n" +msgid " opcmd=%s\n" msgstr "" -#: src/stored/bscan.c:450 +#: src/dird/dird_conf.c:786 src/tray-monitor/tray_conf.c:179 #, c-format -msgid "VOL_LABEL: Media record not found for Volume: %s\n" +msgid "Unknown resource type %d in dump_resource.\n" msgstr "" -#: src/stored/bscan.c:457 +#: src/dird/dird_conf.c:1080 src/tray-monitor/tray_conf.c:232 #, c-format -msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" +msgid "Unknown resource type %d in free_resource.\n" msgstr "" -#: src/stored/bscan.c:461 +#: src/dird/dird_conf.c:1118 src/lib/parse_conf.c:211 +#: src/tray-monitor/tray_conf.c:268 #, c-format -msgid "Media type \"%s\" is OK.\n" +msgid "Too many items in %s resource\n" msgstr "" -#: src/stored/bscan.c:470 +#: src/dird/dird_conf.c:1152 #, c-format -msgid "VOL_LABEL: OK for Volume: %s\n" +msgid "Cannot find Console resource %s\n" msgstr "" -#: src/stored/bscan.c:477 +#: src/dird/dird_conf.c:1158 src/filed/filed_conf.c:316 +#: src/stored/stored_conf.c:566 #, c-format -msgid "%d \"errors\" ignored before first Start of Session record.\n" +msgid "Cannot find Director resource %s\n" msgstr "" -#: src/stored/bscan.c:488 +#: src/dird/dird_conf.c:1165 src/stored/stored_conf.c:572 #, c-format -msgid "SOS_LABEL: Found Job record for JobId: %d\n" +msgid "Cannot find Storage resource %s\n" msgstr "" -#: src/stored/bscan.c:493 +#: src/dird/dird_conf.c:1174 #, c-format -msgid "SOS_LABEL: Job record not found for JobId: %d\n" +msgid "Cannot find Job resource %s\n" msgstr "" -#: src/stored/bscan.c:533 +#: src/dird/dird_conf.c:1192 #, c-format -msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" +msgid "Cannot find Counter resource %s\n" msgstr "" -#: src/stored/bscan.c:539 +#: src/dird/dird_conf.c:1200 src/filed/filed_conf.c:322 #, c-format -msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" +msgid "Cannot find Client resource %s\n" msgstr "" -#: src/stored/bscan.c:545 +#: src/dird/dird_conf.c:1212 #, c-format -msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" +msgid "Cannot find Schedule resource %s\n" msgstr "" -#: src/stored/bscan.c:563 src/stored/bscan.c:1041 +#: src/dird/dird_conf.c:1217 src/tray-monitor/tray_conf.c:287 #, c-format -msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" +msgid "Unknown resource type %d in save_resource.\n" msgstr "" -#: src/stored/bscan.c:607 +#: src/dird/dird_conf.c:1277 src/tray-monitor/tray_conf.c:322 #, c-format -msgid "Could not update job record. ERR=%s\n" +msgid "Unknown resource type %d in save_resrouce.\n" msgstr "" -#: src/stored/bscan.c:618 +#: src/dird/dird_conf.c:1292 #, c-format -msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" +msgid "Name item is required in %s resource, but not found.\n" msgstr "" -#: src/stored/bscan.c:630 +#: src/dird/dird_conf.c:1304 #, c-format -msgid "Could not find Job for SessId=%d SessTime=%d record.\n" +msgid "Inserting %s res: %s index=%d pass=%d\n" msgstr "" -#: src/stored/bscan.c:666 +#: src/dird/dird_conf.c:1377 #, c-format -msgid "%s file records. At file:blk=%s:%s bytes=%s\n" +msgid "Expected a Job Type keyword, got: %s" msgstr "" -#: src/stored/bscan.c:708 +#: src/dird/dird_conf.c:1401 #, c-format -msgid "Got MD5 record: %s\n" +msgid "Expected a Job Level keyword, got: %s" msgstr "" -#: src/stored/bscan.c:716 +#: src/dird/dird_conf.c:1421 #, c-format -msgid "Got SHA1 record: %s\n" +msgid "Expected a Restore replacement option, got: %s" msgstr "" -#: src/stored/bscan.c:724 +#: src/dird/expand.c:240 #, c-format -msgid "Got SHA256 record: %s\n" +msgid "Count not update counter %s: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:732 +#: src/dird/expand.c:412 #, c-format -msgid "Got SHA512 record: %s\n" +msgid "Cannot create var context: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:740 src/stored/bscan.c:747 -msgid "Got signed digest record\n" +#: src/dird/expand.c:417 +#, c-format +msgid "Cannot set var callback: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:753 +#: src/dird/expand.c:423 #, c-format -msgid "Got Prog Names Stream: %s\n" +msgid "Cannot set var operate: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:759 -msgid "Got Prog Data Stream record.\n" +#: src/dird/expand.c:429 src/dird/expand.c:444 +#, c-format +msgid "Cannot unescape string: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:763 +#: src/dird/expand.c:437 #, c-format -msgid "Unknown stream type!!! stream=%d data=%s\n" +msgid "Cannot expand expression \"%s\": ERR=%s\n" msgstr "" -#: src/stored/bscan.c:827 +#: src/dird/expand.c:455 #, c-format -msgid "Could not create File Attributes record. ERR=%s\n" +msgid "Cannot destroy var context: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:833 -#, c-format -msgid "Created File record: %s\n" +#: src/dird/fd_cmds.c:73 src/tray-monitor/tray-monitor.c:867 +msgid "File daemon" msgstr "" -#: src/stored/bscan.c:870 +#: src/dird/fd_cmds.c:104 #, c-format -msgid "Could not create media record. ERR=%s\n" +msgid "File daemon \"%s\" rejected Job command: %s\n" msgstr "" -#: src/stored/bscan.c:874 src/stored/bscan.c:895 +#: src/dird/fd_cmds.c:117 #, c-format -msgid "Could not update media record. ERR=%s\n" +msgid "Error updating Client record. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:878 +#: src/dird/fd_cmds.c:122 #, c-format -msgid "Created Media record for Volume: %s\n" +msgid "FD gave bad response to JobId command: %s\n" msgstr "" -#: src/stored/bscan.c:899 -#, c-format -msgid "Updated Media record at end of Volume: %s\n" +#: src/dird/fd_cmds.c:144 src/dird/fd_cmds.c:180 +msgid ", since=" msgstr "" -#: src/stored/bscan.c:916 -#, c-format -msgid "Could not create pool record. ERR=%s\n" +#: src/dird/fd_cmds.c:164 +msgid "No prior or suitable Full backup found. Doing FULL backup.\n" msgstr "" -#: src/stored/bscan.c:920 +#: src/dird/fd_cmds.c:165 src/dird/fd_cmds.c:173 #, c-format -msgid "Created Pool record for Pool: %s\n" +msgid " (upgraded from %s)" msgstr "" -#: src/stored/bscan.c:936 src/dird/job.c:624 +#: src/dird/fd_cmds.c:171 #, c-format -msgid "Could not create Client record. ERR=%s\n" +msgid "Prior failed job found. Upgrading to %s.\n" msgstr "" -#: src/stored/bscan.c:940 -#, c-format -msgid "Created Client record for Client: %s\n" +#: src/dird/fd_cmds.c:196 +msgid "since_utime " msgstr "" -#: src/stored/bscan.c:957 +#: src/dird/fd_cmds.c:232 #, c-format -msgid "Fileset \"%s\" already exists.\n" +msgid "Unimplemented backup level %d %c\n" msgstr "" -#: src/stored/bscan.c:961 +#: src/dird/fd_cmds.c:320 src/filed/job.c:566 #, c-format -msgid "Could not create FileSet record \"%s\". ERR=%s\n" +msgid "Cannot run program: %s. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:966 -#, c-format -msgid "Created FileSet record \"%s\"\n" +#: src/dird/fd_cmds.c:331 src/dird/fd_cmds.c:356 src/dird/fd_cmds.c:370 +msgid ">filed: write error on socket\n" msgstr "" -#: src/stored/bscan.c:1013 +#: src/dird/fd_cmds.c:337 #, c-format -msgid "Could not create JobId record. ERR=%s\n" +msgid "Error running program: %s. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1019 +#: src/dird/fd_cmds.c:346 #, c-format -msgid "Could not update job start record. ERR=%s\n" +msgid "Cannot open included file: %s. ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1022 +#: src/dird/fd_cmds.c:441 src/filed/job.c:1622 #, c-format -msgid "Created new JobId=%u record for original JobId=%u\n" +msgid "Could not open bootstrap file %s: ERR=%s\n" msgstr "" -#: src/stored/bscan.c:1072 +#: src/dird/fd_cmds.c:526 #, c-format -msgid "Could not update JobId=%u record. ERR=%s\n" +msgid "" +" \n" -" -b specify a bootstrap file\n" -" -c specify a configuration file\n" -" -d set debug level to nn\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/stored/bextract.c:198 -#, c-format -msgid "%d Program Name and/or Program Data Stream records ignored.\n" +#: src/dird/next_vol.c:242 +msgid "volume has expired" msgstr "" -#: src/stored/bextract.c:202 +#: src/dird/next_vol.c:260 src/dird/next_vol.c:296 #, c-format -msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" +msgid "Recycled current volume \"%s\"\n" msgstr "" -#: src/stored/bextract.c:226 -#, c-format -msgid "Cannot stat %s. It must exist. ERR=%s\n" +#: src/dird/next_vol.c:265 +msgid "and recycling of current volume failed" msgstr "" -#: src/stored/bextract.c:230 -#, c-format -msgid "%s must be a directory.\n" +#: src/dird/next_vol.c:271 +msgid "but should be Append, Purged or Recycle" msgstr "" -#: src/stored/bextract.c:251 -#, c-format -msgid "%u files restored.\n" +#: src/dird/next_vol.c:299 +msgid "" +"but should be Append, Purged or Recycle (recycling of the current volume " +"failed)" msgstr "" -#: src/stored/bextract.c:278 src/stored/bextract.c:451 -msgid "Logic error output file should be open but is not.\n" +#: src/dird/next_vol.c:303 +msgid "" +"but should be Append, Purged or Recycle (cannot automatically recycle " +"current volume, as it still contains unpruned data)" msgstr "" -#: src/stored/bextract.c:298 src/filed/restore.c:269 +#: src/dird/next_vol.c:343 #, c-format -msgid "%s stream not supported on this Client.\n" +msgid "Unable to get Pool record: ERR=%s" msgstr "" -#: src/stored/bextract.c:347 +#: src/dird/next_vol.c:348 #, c-format -msgid "Seek error on %s: %s\n" +msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" msgstr "" -#: src/stored/bextract.c:359 src/stored/bextract.c:409 src/filed/restore.c:810 -#: src/filed/restore.c:855 +#: src/dird/next_vol.c:361 #, c-format -msgid "Write error on %s: %s\n" +msgid "Failed to move Scratch Volume. ERR=%s\n" msgstr "" -#: src/stored/bextract.c:387 src/filed/restore.c:728 +#: src/dird/next_vol.c:365 #, c-format -msgid "Seek to %s error on %s: ERR=%s\n" +msgid "Using Volume \"%s\" from 'Scratch' pool.\n" msgstr "" -#: src/stored/bextract.c:400 +#: src/dird/next_vol.c:373 #, c-format -msgid "Uncompression error. ERR=%d\n" +msgid "Unable to update Volume record: ERR=%s" msgstr "" -#: src/stored/bextract.c:408 -msgid "===Write error===\n" +#: src/dird/pythondir.c:105 src/filed/pythonfd.c:102 src/filed/pythonfd.c:156 +#: src/filed/pythonfd.c:220 src/stored/pythonsd.c:95 src/stored/pythonsd.c:160 +msgid "Job pointer not found." msgstr "" -#: src/stored/bextract.c:421 src/filed/restore.c:764 -msgid "GZIP data stream found, but GZIP not configured!\n" +#: src/dird/pythondir.c:137 +msgid "Pool record not found." msgstr "" -#: src/stored/bextract.c:442 -msgid "Got Program Name or Data Stream. Ignored.\n" +#: src/dird/pythondir.c:166 src/filed/pythonfd.c:133 src/stored/pythonsd.c:137 +#, c-format +msgid "Attribute %s not found." msgstr "" -#: src/stored/bextract.c:456 src/filed/restore.c:518 -#, c-format -msgid "Unknown stream=%d ignored. This shouldn't happen!\n" +#: src/dird/pythondir.c:209 src/dird/pythondir.c:215 src/filed/pythonfd.c:175 +#: src/stored/pythonsd.c:177 +msgid "Read-only attribute" msgstr "" -#: src/stored/stored.c:65 +#: src/dird/recycle.c:99 #, c-format -msgid "" -"Copyright (C) 2000-2005 Kern Sibbald.\n" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: stored [options] [-c config_file] [config_file]\n" -" -c use as configuration file\n" -" -dnn set debug level to nn\n" -" -f run in foreground (for debugging)\n" -" -g set groupid to group\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 "Recycled volume \"%s\"\n" msgstr "" -#: src/stored/stored.c:107 src/stored/btape.c:157 -#, c-format -msgid "Tape block size (%d) not multiple of system size (%d)\n" +#: src/dird/restore.c:70 +msgid "Cannot restore without bootstrap file.\n" msgstr "" -#: src/stored/stored.c:111 src/stored/btape.c:161 +#: src/dird/restore.c:77 #, c-format -msgid "Tape block size (%d) is not a power of 2\n" +msgid "Start Restore Job %s\n" msgstr "" -#: src/stored/stored.c:189 src/console/console.c:400 -#: src/gnome2-console/console.c:271 src/filed/filed.c:183 src/dird/dird.c:196 -msgid "Cryptography library initialization failed.\n" +#: src/dird/restore.c:219 +msgid "Restore OK -- warning file count mismatch" msgstr "" -#: src/stored/stored.c:193 src/console/console.c:404 -#: src/gnome2-console/console.c:275 src/filed/filed.c:188 src/dird/dird.c:200 -#: src/dird/dird.c:410 src/dird/dird.c:413 -#, c-format -msgid "Please correct configuration file: %s\n" +#: src/dird/restore.c:221 +msgid "Restore OK" msgstr "" -#: src/stored/stored.c:220 -msgid "Volume Session Time is ZERO!\n" +#: src/dird/restore.c:226 +msgid "*** Restore Error ***" msgstr "" -#: src/stored/stored.c:233 -#, c-format -msgid "Unable to create thread. ERR=%s\n" +#: src/dird/restore.c:236 +msgid "Restore Canceled" msgstr "" -#: src/stored/stored.c:271 +#: src/dird/restore.c:263 #, c-format -msgid "Only one Storage resource permitted in %s\n" +msgid "" +"Bacula %s (%s): %s\n" +" JobId: %d\n" +" Job: %s\n" +" 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/stored.c:276 +#: src/dird/run_conf.c:188 #, c-format -msgid "No Director resource defined in %s. Cannot continue.\n" +msgid "Expected an equals, got: %s" msgstr "" -#: src/stored/stored.c:281 +#: src/dird/run_conf.c:201 src/dird/run_conf.c:213 #, c-format -msgid "No Device resource defined in %s. Cannot continue.\n" +msgid "Expect a YES or NO, got: %s" msgstr "" -#: src/stored/stored.c:289 +#: src/dird/run_conf.c:227 #, c-format -msgid "No Messages resource defined in %s. Cannot continue.\n" -msgstr "" - -#: src/stored/stored.c:309 src/console/console.c:582 src/console/console.c:611 -#: src/gnome2-console/console.c:140 src/gnome2-console/console.c:169 -#: src/filed/filed.c:302 src/filed/filed.c:470 src/dird/dird.c:496 -#: src/dird/dird.c:722 src/dird/dird.c:788 src/dird/dird.c:840 -#: src/wx-console/console_thread.cpp:94 src/wx-console/console_thread.cpp:120 -msgid "TLS required but not configured in Bacula.\n" +msgid "Job level field: %s not found in run record" msgstr "" -#: src/stored/stored.c:316 +#: src/dird/run_conf.c:245 #, c-format -msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" +msgid "Could not find specified Pool Resource: %s" msgstr "" -#: src/stored/stored.c:322 +#: src/dird/run_conf.c:270 #, c-format -msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" +msgid "Could not find specified Storage Resource: %s" msgstr "" -#: src/stored/stored.c:328 +#: src/dird/run_conf.c:282 #, 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 "Could not find specified Messages Resource: %s" msgstr "" -#: src/stored/stored.c:347 src/dird/dird.c:744 +#: src/dird/run_conf.c:290 #, c-format -msgid "Failed to initialize TLS context for Storage \"%s\" in %s.\n" +msgid "Expected a keyword name, got: %s" msgstr "" -#: src/stored/stored.c:361 src/filed/filed.c:479 src/dird/dird.c:502 -#, c-format -msgid "\"TLS Certificate\" file not defined for Director \"%s\" in %s.\n" +#: src/dird/run_conf.c:327 +msgid "Day number out of range (1-31)" msgstr "" -#: src/stored/stored.c:367 src/filed/filed.c:485 src/dird/dird.c:508 -#, c-format -msgid "\"TLS Key\" file not defined for Director \"%s\" in %s.\n" +#: src/dird/run_conf.c:344 src/dird/run_conf.c:490 +msgid "Week number out of range (0-53)" msgstr "" -#: src/stored/stored.c:373 src/filed/filed.c:491 src/dird/dird.c:514 +#: src/dird/run_conf.c:359 #, 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 "Job type field: %s in run record not found" msgstr "" -#: src/stored/stored.c:392 src/filed/filed.c:510 src/dird/dird.c:533 +#: src/dird/run_conf.c:366 #, c-format -msgid "Failed to initialize TLS context for Director \"%s\" in %s.\n" +msgid "Unexpected token: %d:%s" msgstr "" -#: src/stored/stored.c:455 -#, c-format -msgid "Could not initialize %s\n" +#: src/dird/run_conf.c:410 +msgid "Time must be preceded by keyword AT." msgstr "" -#: src/stored/stored.c:468 -#, c-format -msgid "Could not open device %s\n" +#: src/dird/run_conf.c:418 +msgid "Time logic error.\n" msgstr "" -#: src/stored/stored.c:481 -#, c-format -msgid "Could not mount device %s\n" +#: src/dird/run_conf.c:430 src/dird/run_conf.c:446 +msgid "Bad time specification." msgstr "" -#: src/stored/btape.c:164 -#, c-format -msgid "" -"\n" -"\n" -"!!!! Warning large disk addressing disabled. off_t=%d should be 8 or " -"more !!!!!\n" -"\n" -"\n" +#: src/dird/run_conf.c:459 +msgid "Range logic error.\n" msgstr "" -#: src/stored/btape.c:171 -#, c-format -msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" +#: src/dird/run_conf.c:468 +msgid "Bad day range specification." msgstr "" -#: src/stored/btape.c:180 -msgid "64 bit printf/scanf problem. i=%d x64=%" +#: src/dird/run_conf.c:515 +msgid "Invalid month, week or position day range" msgstr "" -#: src/stored/btape.c:180 -msgid " y64=%" +#: src/dird/run_conf.c:530 +msgid "Invalid month, weekday or position range" msgstr "" -#: src/stored/btape.c:180 src/dird/ua_status.c:730 -msgid "\n" +#: src/dird/run_conf.c:589 +msgid "Unexpected run state\n" msgstr "" -#: src/stored/btape.c:184 +#: src/dird/scheduler.c:80 #, c-format -msgid "Tape block granularity is %d bytes.\n" +msgid "Job %s not found\n" msgstr "" -#: src/stored/btape.c:251 -msgid "No archive name specified.\n" +#: src/dird/scheduler.c:103 +msgid "Walk queue" msgstr "" -#: src/stored/btape.c:255 -msgid "Improper number of arguments specified.\n" +#: src/dird/scheduler.c:113 +msgid "Dequeued job" msgstr "" -#: src/stored/btape.c:333 src/stored/bcopy.c:172 src/stored/device.c:266 -#, c-format -msgid "dev open failed: %s\n" +#: src/dird/scheduler.c:116 +msgid "Scheduler logic error\n" msgstr "" -#: src/stored/btape.c:338 -#, c-format -msgid "open device %s: OK\n" +#: src/dird/scheduler.c:132 +msgid "Run job" msgstr "" -#: src/stored/btape.c:359 -msgid "Enter Volume Name: " +#: src/dird/scheduler.c:349 +msgid "Inserted job" msgstr "" -#: src/stored/btape.c:366 -#, c-format -msgid "Device open failed. ERR=%s\n" +#: src/dird/scheduler.c:357 +msgid "Appended job" msgstr "" -#: src/stored/btape.c:371 -#, c-format -msgid "Wrote Volume label for volume \"%s\".\n" +#: src/dird/scheduler.c:361 +msgid "Run queue" msgstr "" -#: src/stored/btape.c:385 -msgid "Volume has no label.\n" +#: src/dird/ua_cmds.c:90 +msgid "add media to a pool" msgstr "" -#: src/stored/btape.c:388 -msgid "Volume label read correctly.\n" +#: src/dird/ua_cmds.c:91 +msgid "autodisplay [on|off] -- console messages" msgstr "" -#: src/stored/btape.c:391 -#, c-format -msgid "I/O error on device: ERR=%s" +#: src/dird/ua_cmds.c:92 +msgid "automount [on|off] -- after label" msgstr "" -#: src/stored/btape.c:394 -msgid "Volume name error\n" +#: src/dird/ua_cmds.c:93 +msgid "cancel [ | ] -- cancel a job" msgstr "" -#: src/stored/btape.c:397 -#, c-format -msgid "Error creating label. ERR=%s" +#: src/dird/ua_cmds.c:94 +msgid "create DB Pool from resource" msgstr "" -#: src/stored/btape.c:400 -msgid "Volume version error.\n" +#: src/dird/ua_cmds.c:95 +msgid "delete [pool= | media volume=]" msgstr "" -#: src/stored/btape.c:403 -msgid "Bad Volume label type.\n" +#: src/dird/ua_cmds.c:96 +msgid "disable -- disable a job" msgstr "" -#: src/stored/btape.c:406 -msgid "Unknown error.\n" +#: src/dird/ua_cmds.c:97 +msgid "enable -- enable a job" msgstr "" -#: src/stored/btape.c:424 -#, c-format -msgid "Bad status from load. ERR=%s\n" +#: src/dird/ua_cmds.c:98 +msgid "performs FileSet estimate, listing gives full listing" msgstr "" -#: src/stored/btape.c:426 -#, c-format -msgid "Loaded %s\n" +#: src/dird/ua_cmds.c:100 +msgid "gui [on|off] -- non-interactive gui mode" msgstr "" -#: src/stored/btape.c:435 src/stored/btape.c:775 src/stored/btape.c:817 -#: src/stored/btape.c:887 src/stored/btape.c:929 src/stored/btape.c:1197 -#, c-format -msgid "Bad status from rewind. ERR=%s\n" +#: src/dird/ua_cmds.c:101 src/stored/btape.c:2540 +msgid "print this command" msgstr "" -#: src/stored/btape.c:438 src/stored/btape.c:1205 -#, c-format -msgid "Rewound %s\n" +#: src/dird/ua_cmds.c:102 +msgid "" +"list [pools | jobs | jobtotals | media | files ]; " +"from catalog" msgstr "" -#: src/stored/btape.c:465 src/stored/btape.c:1209 -#, c-format -msgid "Bad status from weof %d. ERR=%s\n" +#: src/dird/ua_cmds.c:103 +msgid "label a tape" msgstr "" -#: src/stored/btape.c:469 -#, c-format -msgid "Wrote 1 EOF to %s\n" +#: src/dird/ua_cmds.c:104 +msgid "full or long list like list command" msgstr "" -#: src/stored/btape.c:472 -#, c-format -msgid "Wrote %d EOFs to %s\n" +#: src/dird/ua_cmds.c:105 +msgid "messages" msgstr "" -#: src/stored/btape.c:490 -msgid "Moved to end of medium.\n" +#: src/dird/ua_cmds.c:106 +msgid "mount " msgstr "" -#: src/stored/btape.c:517 -#, c-format -msgid "Bad status from bsf. ERR=%s\n" +#: src/dird/ua_cmds.c:107 +msgid "prune expired records from catalog" msgstr "" -#: src/stored/btape.c:519 -#, c-format -msgid "Backspaced %d file%s.\n" +#: src/dird/ua_cmds.c:108 +msgid "purge records from catalog" msgstr "" -#: src/stored/btape.c:536 -#, c-format -msgid "Bad status from bsr. ERR=%s\n" +#: src/dird/ua_cmds.c:109 +msgid "python control commands" msgstr "" -#: src/stored/btape.c:538 -#, c-format -msgid "Backspaced %d record%s.\n" +#: src/dird/ua_cmds.c:111 +msgid "query catalog" msgstr "" -#: src/stored/btape.c:566 -#, c-format -msgid "Device status:\n" +#: src/dird/ua_cmds.c:112 +msgid "restore files" msgstr "" -#: src/stored/btape.c:585 -#, c-format -msgid "Status:\n" +#: src/dird/ua_cmds.c:113 +msgid "relabel a tape" msgstr "" -#: src/stored/btape.c:600 -msgid "" -"Test writting 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/ua_cmds.c:114 +msgid "release " msgstr "" -#: src/stored/btape.c:606 src/dird/ua_label.c:498 -msgid "Do you want to continue? (y/n): " +#: src/dird/ua_cmds.c:115 +msgid "reload conf file" msgstr "" -#: src/stored/btape.c:608 src/stored/btape.c:1814 -msgid "Command aborted.\n" +#: src/dird/ua_cmds.c:116 +msgid "run " msgstr "" -#: src/stored/btape.c:624 -#, c-format -msgid "Block %d i=%d\n" +#: src/dird/ua_cmds.c:117 +msgid "status [storage | client]=" msgstr "" -#: src/stored/btape.c:650 -msgid "Skipping read backwards test because BSR turned off.\n" +#: src/dird/ua_cmds.c:118 +msgid "sets debug level" msgstr "" -#: src/stored/btape.c:654 -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_cmds.c:119 +msgid "sets new client address -- if authorized" msgstr "" -#: src/stored/btape.c:667 src/stored/btape.c:678 src/stored/btape.c:689 -#: src/stored/btape.c:787 src/stored/btape.c:803 src/stored/btape.c:899 -#: src/stored/btape.c:915 src/stored/btape.c:1523 src/stored/btape.c:2405 -msgid "Error writing record to block.\n" +#: src/dird/ua_cmds.c:120 +msgid "show (resource records) [jobs | pools | ... | all]" msgstr "" -#: src/stored/btape.c:671 src/stored/btape.c:682 src/stored/btape.c:693 -#: src/stored/btape.c:791 src/stored/btape.c:807 src/stored/btape.c:903 -#: src/stored/btape.c:919 src/stored/btape.c:1527 src/stored/btape.c:2409 -msgid "Error writing block to device.\n" +#: src/dird/ua_cmds.c:121 +msgid "use SQL to query catalog" msgstr "" -#: src/stored/btape.c:674 -#, c-format -msgid "Wrote first record of %d bytes.\n" +#: src/dird/ua_cmds.c:123 +msgid "turn on/off trace to file" msgstr "" -#: src/stored/btape.c:685 -#, c-format -msgid "Wrote second record of %d bytes.\n" +#: src/dird/ua_cmds.c:124 +msgid "unmount " msgstr "" -#: src/stored/btape.c:696 -#, c-format -msgid "Wrote third record of %d bytes.\n" +#: src/dird/ua_cmds.c:125 +msgid "umount for old-time Unix guys" msgstr "" -#: src/stored/btape.c:703 src/stored/btape.c:708 -#, c-format -msgid "Backspace file failed! ERR=%s\n" +#: src/dird/ua_cmds.c:126 +msgid "update Volume, Pool or slots" msgstr "" -#: src/stored/btape.c:712 -msgid "Backspaced over EOF OK.\n" +#: src/dird/ua_cmds.c:127 +msgid "use catalog xxx" msgstr "" -#: src/stored/btape.c:714 -#, c-format -msgid "Backspace record failed! ERR=%s\n" +#: src/dird/ua_cmds.c:128 +msgid "does variable expansion" msgstr "" -#: src/stored/btape.c:717 -msgid "Backspace record OK.\n" +#: src/dird/ua_cmds.c:129 +msgid "print Director version" msgstr "" -#: src/stored/btape.c:720 src/stored/btape.c:726 -#, c-format -msgid "Read block failed! ERR=%s\n" +#: src/dird/ua_cmds.c:130 +msgid "wait until no jobs are running" msgstr "" -#: src/stored/btape.c:731 -msgid "Bad data in record. Test failed!\n" +#: src/dird/ua_cmds.c:168 +#, c-format +msgid "%s: is an illegal command.\n" msgstr "" -#: src/stored/btape.c:735 +#: src/dird/ua_cmds.c:206 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" -"Block re-read correct. Test succeeded!\n" msgstr "" -#: src/stored/btape.c:736 -msgid "" -"=== End Write, backup, and re-read test ===\n" -"\n" +#: src/dird/ua_cmds.c:225 +#, c-format +msgid "Pool already has maximum volumes = %d\n" msgstr "" -#: src/stored/btape.c:743 -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_cmds.c:227 +msgid "Enter new maximum (zero for unlimited): " msgstr "" -#: src/stored/btape.c:767 -msgid "" -"\n" -"=== Write, rewind, and re-read test ===\n" -"\n" -"I'm going to write 1000 records and an EOF\n" -"then write 1000 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_cmds.c:248 +#, c-format +msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " msgstr "" -#: src/stored/btape.c:795 src/stored/btape.c:811 src/stored/btape.c:907 -#: src/stored/btape.c:923 +#: src/dird/ua_cmds.c:254 #, c-format -msgid "Wrote 1000 blocks of %d bytes.\n" +msgid "The number must be between 0 and %d\n" msgstr "" -#: src/stored/btape.c:820 src/stored/btape.c:932 -msgid "Rewind OK.\n" +#: src/dird/ua_cmds.c:261 +msgid "Enter Volume name: " msgstr "" -#: src/stored/btape.c:827 src/stored/btape.c:981 -msgid "Got EOF on tape.\n" +#: src/dird/ua_cmds.c:265 +msgid "Enter base volume name: " msgstr "" -#: src/stored/btape.c:832 -#, c-format -msgid "Read block %d failed! ERR=%s\n" +#: src/dird/ua_cmds.c:274 src/dird/ua_label.c:605 +msgid "Volume name too long.\n" msgstr "" -#: src/stored/btape.c:838 -#, c-format -msgid "Read record failed. Block %d! ERR=%s\n" +#: src/dird/ua_cmds.c:278 src/dird/ua_label.c:611 src/lib/edit.c:413 +msgid "Volume name must be at least one character long.\n" msgstr "" -#: src/stored/btape.c:844 src/stored/btape.c:1011 -#, c-format -msgid "Bad data in record. Expected %d, got %d at byte %d. Test failed!\n" +#: src/dird/ua_cmds.c:287 +msgid "Enter the starting number: " msgstr "" -#: src/stored/btape.c:851 -msgid "1000 blocks re-read correctly.\n" +#: src/dird/ua_cmds.c:292 +msgid "Start number must be greater than zero.\n" msgstr "" -#: src/stored/btape.c:854 src/stored/btape.c:1018 -msgid "" -"=== Test Succeeded. End Write, rewind, and re-read test ===\n" -"\n" +#: src/dird/ua_cmds.c:303 +msgid "Enter slot (0 for none): " msgstr "" -#: src/stored/btape.c:879 -msgid "" -"\n" -"=== Write, rewind, and position test ===\n" -"\n" -"I'm going to write 1000 records and an EOF\n" -"then write 1000 records and an EOF, then rewind,\n" -"and position to a few blocks and verify that it is correct.\n" -"\n" -"This is an *essential* feature ...\n" -"\n" +#: src/dird/ua_cmds.c:307 +msgid "InChanger? yes/no: " msgstr "" -#: src/stored/btape.c:972 +#: src/dird/ua_cmds.c:334 #, c-format -msgid "Reposition to file:block %d:%d\n" +msgid "%d Volumes created in pool %s\n" msgstr "" -#: src/stored/btape.c:974 -msgid "Reposition error.\n" +#: src/dird/ua_cmds.c:350 src/dird/ua_cmds.c:917 +msgid "Turn on or off? " msgstr "" -#: src/stored/btape.c:987 -#, c-format -msgid "" -"Read block %d failed! file=%d blk=%d. ERR=%s\n" -"\n" +#: src/dird/ua_cmds.c:358 src/dird/ua_cmds.c:925 +msgid "off" msgstr "" -#: src/stored/btape.c:989 -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_cmds.c:378 +msgid "jobid" msgstr "" -#: src/stored/btape.c:1005 +#: src/dird/ua_cmds.c:385 #, c-format -msgid "Read record failed! ERR=%s\n" +msgid "JobId %s is not running. Use Job name to cancel inactive jobs.\n" msgstr "" -#: src/stored/btape.c:1016 +#: src/dird/ua_cmds.c:389 +msgid "job" +msgstr "" + +#: src/dird/ua_cmds.c:394 #, c-format -msgid "Block %d re-read correctly.\n" +msgid "Warning Job %s is not running. Continuing anyway ...\n" msgstr "" -#: src/stored/btape.c:1037 -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_cmds.c:416 src/filed/status.c:195 src/stored/status.c:343 +msgid "No Jobs running.\n" msgstr "" -#: src/stored/btape.c:1061 -msgid "Now moving to end of medium.\n" +#: src/dird/ua_cmds.c:419 +msgid "Select Job:\n" msgstr "" -#: src/stored/btape.c:1063 src/stored/btape.c:1292 +#: src/dird/ua_cmds.c:425 #, c-format -msgid "We should be in file 3. I am at file %d. %s\n" +msgid "JobId=%s Job=%s" msgstr "" -#: src/stored/btape.c:1064 src/stored/btape.c:1082 src/stored/btape.c:1281 -#: src/stored/btape.c:1293 src/stored/btape.c:1306 src/stored/btape.c:1323 -msgid "This is correct!" +#: src/dird/ua_cmds.c:430 +msgid "Choose Job to cancel" msgstr "" -#: src/stored/btape.c:1064 src/stored/btape.c:1082 src/stored/btape.c:1281 -#: src/stored/btape.c:1293 src/stored/btape.c:1306 src/stored/btape.c:1323 -msgid "This is NOT correct!!!!" +#: src/dird/ua_cmds.c:434 +msgid "Confirm cancel (yes/no): " msgstr "" -#: src/stored/btape.c:1070 -msgid "" -"\n" -"Now the important part, I am going to attempt to append to the tape.\n" -"\n" +#: src/dird/ua_cmds.c:442 +#, c-format +msgid "Job %s not found.\n" msgstr "" -#: src/stored/btape.c:1077 +#: src/dird/ua_cmds.c:547 +#, c-format msgid "" -"Done appending, there should be no I/O errors\n" -"\n" -msgstr "" - -#: src/stored/btape.c:1078 -msgid "Doing Bacula scan of blocks:\n" +"Error: Pool %s already exists.\n" +"Use update to change it.\n" msgstr "" -#: src/stored/btape.c:1080 -msgid "End scanning the tape.\n" +#: src/dird/ua_cmds.c:558 +#, c-format +msgid "Pool %s created.\n" msgstr "" -#: src/stored/btape.c:1081 src/stored/btape.c:1305 -#, c-format -msgid "We should be in file 4. I am at file %d. %s\n" +#: src/dird/ua_cmds.c:571 +msgid "restart" msgstr "" -#: src/stored/btape.c:1106 -msgid "" -"\n" -"Autochanger enabled, but no name or no command device specified.\n" +#: src/dird/ua_cmds.c:575 +msgid "Python interpreter restarted.\n" msgstr "" -#: src/stored/btape.c:1110 -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_cmds.c:577 src/dird/ua_cmds.c:1145 +msgid "Nothing done.\n" msgstr "" -#: src/stored/btape.c:1113 -msgid "" -"\n" -"Do you wish to continue with the Autochanger test? (y/n): " +#: src/dird/ua_cmds.c:593 src/dird/ua_cmds.c:639 +msgid "Illegal command from this console.\n" msgstr "" -#: src/stored/btape.c:1120 -msgid "" -"\n" -"\n" -"=== Autochanger test ===\n" -"\n" +#: src/dird/ua_cmds.c:600 src/dird/ua_run.c:353 +#, c-format +msgid "Client \"%s\" not found.\n" msgstr "" -#: src/stored/btape.c:1129 -msgid "3301 Issuing autochanger \"loaded\" command.\n" +#: src/dird/ua_cmds.c:609 +#, c-format +msgid "Client \"%s\" address set to %s\n" msgstr "" -#: src/stored/btape.c:1138 +#: src/dird/ua_cmds.c:634 #, c-format -msgid "3991 Bad autochanger command: %s\n" +msgid "Job \"%s\" not found.\n" msgstr "" -#: src/stored/btape.c:1139 +#: src/dird/ua_cmds.c:643 #, c-format -msgid "3991 result=\"%s\": ERR=%s\n" +msgid "Job \"%s\" %sabled\n" msgstr "" -#: src/stored/btape.c:1143 +#: src/dird/ua_cmds.c:667 src/dird/ua_status.c:286 #, c-format -msgid "Slot %d loaded. I am going to unload it.\n" +msgid "Connecting to Storage daemon %s at %s:%d\n" msgstr "" -#: src/stored/btape.c:1145 -msgid "Nothing loaded in the drive. OK.\n" +#: src/dird/ua_cmds.c:673 src/dird/ua_status.c:297 +msgid "Connected to storage daemon\n" msgstr "" -#: src/stored/btape.c:1152 +#: src/dird/ua_cmds.c:693 src/dird/ua_cmds.c:1032 src/dird/ua_status.c:324 #, c-format -msgid "3302 Issuing autochanger \"unload %d %d\" command.\n" +msgid "Connecting to Client %s at %s:%d\n" msgstr "" -#: src/stored/btape.c:1157 -#, c-format -msgid "unload status=%s %d\n" +#: src/dird/ua_cmds.c:696 src/dird/ua_cmds.c:1035 +msgid "Failed to connect to Client.\n" msgstr "" -#: src/stored/btape.c:1157 -msgid "Bad" +#: src/dird/ua_cmds.c:812 +msgid "Enter new debug level: " msgstr "" -#: src/stored/btape.c:1160 -#, c-format -msgid "3992 Bad autochanger command: %s\n" +#: src/dird/ua_cmds.c:878 +msgid "Available daemons are: \n" msgstr "" -#: src/stored/btape.c:1161 -#, c-format -msgid "3992 result=\"%s\": ERR=%s\n" +#: src/dird/ua_cmds.c:883 +msgid "Select daemon type to set debug level" msgstr "" -#: src/stored/btape.c:1171 +#: src/dird/ua_cmds.c:987 src/dird/ua_run.c:478 #, c-format -msgid "3303 Issuing autochanger \"load %d %d\" command.\n" +msgid "Level %s not valid.\n" msgstr "" -#: src/stored/btape.c:1179 -#, c-format -msgid "3303 Autochanger \"load %d %d\" status is OK.\n" +#: src/dird/ua_cmds.c:1000 +msgid "No job specified.\n" msgstr "" -#: src/stored/btape.c:1183 -#, c-format -msgid "3993 Bad autochanger command: %s\n" +#: src/dird/ua_cmds.c:1040 +msgid "Error sending include list.\n" msgstr "" -#: src/stored/btape.c:1184 -#, c-format -msgid "3993 result=\"%s\": ERR=%s\n" +#: src/dird/ua_cmds.c:1045 +msgid "Error sending exclude list.\n" msgstr "" -#: src/stored/btape.c:1199 +#: src/dird/ua_cmds.c:1131 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 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/stored/btape.c:1212 -#, c-format -msgid "Wrote EOF to %s\n" +#: src/dird/ua_cmds.c:1134 +msgid "Choose catalog item to delete" +msgstr "" + +#: src/dird/ua_cmds.c:1202 +msgid "Enter JobId to delete: " msgstr "" -#: src/stored/btape.c:1216 +#: src/dird/ua_cmds.c:1245 #, 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" +msgid "Job %s and associated records deleted from the catalog.\n" msgstr "" -#: src/stored/btape.c:1221 +#: src/dird/ua_cmds.c:1258 +#, c-format msgid "" "\n" -"The test autochanger worked!!\n" -"\n" -msgstr "" - -#: src/stored/btape.c:1232 -msgid "You must correct this error or the Autochanger will not work.\n" +"This command will delete volume %s\n" +"and all Jobs saved on that volume from the Catalog\n" msgstr "" -#: src/stored/btape.c:1250 -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_cmds.c:1262 +msgid "Are you sure you want to delete this Volume? (yes/no): " msgstr "" -#: src/stored/btape.c:1275 -msgid "Now forward spacing 1 file.\n" +#: src/dird/ua_cmds.c:1283 +msgid "Are you sure you want to delete this Pool? (yes/no): " msgstr "" -#: src/stored/btape.c:1277 src/stored/btape.c:1289 src/stored/btape.c:1302 -#: src/stored/btape.c:1320 src/stored/btape.c:1489 +#: src/dird/ua_cmds.c:1380 #, c-format -msgid "Bad status from fsr. ERR=%s\n" +msgid "Using Catalog name=%s DB=%s\n" msgstr "" -#: src/stored/btape.c:1280 +#: src/dird/ua_cmds.c:1421 src/dird/ua_tree.c:622 src/stored/btape.c:2587 #, c-format -msgid "We should be in file 1. I am at file %d. %s\n" -msgstr "" - -#: src/stored/btape.c:1287 -msgid "Now forward spacing 2 files.\n" +msgid "" +" Command Description\n" +" ======= ===========\n" msgstr "" -#: src/stored/btape.c:1300 -msgid "Now forward spacing 4 files.\n" +#: src/dird/ua_cmds.c:1423 +#, c-format +msgid " %-10s %s\n" msgstr "" -#: src/stored/btape.c:1312 +#: src/dird/ua_cmds.c:1425 msgid "" -"The test worked this time. Please add:\n" "\n" -" Fast Forward Space File = no\n" +"When at a prompt, entering a period cancels the command.\n" "\n" -"to your Device resource for this drive.\n" -msgstr "" - -#: src/stored/btape.c:1318 -msgid "Now forward spacing 1 more file.\n" msgstr "" -#: src/stored/btape.c:1322 +#: src/dird/ua_cmds.c:1441 #, c-format -msgid "We should be in file 5. I am at file %d. %s\n" -msgstr "" - -#: src/stored/btape.c:1327 -msgid "" -"\n" -"=== End Forward space files test ===\n" -"\n" +msgid "%s Version: %s (%s)\n" msgstr "" -#: src/stored/btape.c:1331 -msgid "" -"\n" -"The forward space file test failed.\n" +#: src/dird/ua_cmds.c:1460 +msgid "Could not find a Catalog resource\n" msgstr "" -#: src/stored/btape.c:1333 -msgid "" -"You have Fast Forward Space File enabled.\n" -"I am turning it off then retrying the test.\n" +#: src/dird/ua_cmds.c:1463 +msgid "You must specify a \"use \" command before continuing.\n" msgstr "" -#: src/stored/btape.c:1339 -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_cmds.c:1467 +#, c-format +msgid "Using default Catalog name=%s DB=%s\n" msgstr "" -#: src/stored/btape.c:1371 -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_dotcmds.c:131 +msgid "The Director will segment fault.\n" msgstr "" -#: src/stored/btape.c:1379 -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_dotcmds.c:231 src/dird/ua_restore.c:740 +#: src/dird/ua_restore.c:778 src/dird/ua_restore.c:809 +#, c-format +msgid "Query failed: %s. ERR=%s\n" msgstr "" -#: src/stored/btape.c:1386 -msgid "" -"\n" -"\n" -"That appears *NOT* to have corrected the problem.\n" +#: src/dird/ua_input.c:82 +msgid "Enter slot" msgstr "" -#: src/stored/btape.c:1391 -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_input.c:86 src/dird/ua_input.c:92 +#, c-format +msgid "Expected a positive integer, got: %s\n" msgstr "" -#: src/stored/btape.c:1396 -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_input.c:120 src/dird/ua_run.c:862 src/dird/ua_select.c:54 +#: src/dird/ua_update.c:223 src/dird/ua_update.c:237 src/dird/ua_update.c:247 +#: src/dird/ua_update.c:261 src/dird/ua_update.c:551 +#: src/stored/parse_bsr.c:741 src/tools/dbcheck.c:1098 +msgid "yes" msgstr "" -#: src/stored/btape.c:1407 -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_input.c:124 src/dird/ua_select.c:57 src/dird/ua_update.c:225 +#: src/dird/ua_update.c:237 src/dird/ua_update.c:249 src/dird/ua_update.c:261 +#: src/dird/ua_update.c:551 src/stored/parse_bsr.c:741 +msgid "no" msgstr "" -#: src/stored/btape.c:1428 -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_input.c:127 +msgid "Invalid response. You must answer yes or no.\n" msgstr "" -#: src/stored/btape.c:1467 -#, c-format -msgid "Bad status from fsf. ERR=%s\n" +#: src/dird/ua_label.c:89 +msgid "Negative numbers not permitted\n" msgstr "" -#: src/stored/btape.c:1471 -msgid "Forward spaced 1 file.\n" +#: src/dird/ua_label.c:95 +msgid "Range end is not integer.\n" msgstr "" -#: src/stored/btape.c:1474 -#, c-format -msgid "Forward spaced %d files.\n" +#: src/dird/ua_label.c:100 +msgid "Range start is not an integer.\n" msgstr "" -#: src/stored/btape.c:1493 -msgid "Forward spaced 1 record.\n" +#: src/dird/ua_label.c:106 +msgid "Range end not bigger than start.\n" msgstr "" -#: src/stored/btape.c:1496 -#, c-format -msgid "Forward spaced %d records.\n" +#: src/dird/ua_label.c:112 +msgid "Input value is not an integer.\n" msgstr "" -#: src/stored/btape.c:1530 -#, c-format -msgid "Wrote one record of %d bytes.\n" +#: src/dird/ua_label.c:118 +msgid "Values must be be greater than zero.\n" msgstr "" -#: src/stored/btape.c:1532 -msgid "Wrote block to device.\n" +#: src/dird/ua_label.c:122 +msgid "Slot too large.\n" msgstr "" -#: src/stored/btape.c:1547 -msgid "Enter length to read: " +#: src/dird/ua_label.c:176 src/dird/ua_label.c:473 +msgid "No slots in changer to scan.\n" msgstr "" -#: src/stored/btape.c:1552 -msgid "Bad length entered, using default of 1024 bytes.\n" +#: src/dird/ua_label.c:188 src/dird/ua_label.c:484 +msgid "No Volumes found to label, or no barcodes.\n" msgstr "" -#: src/stored/btape.c:1561 +#: src/dird/ua_label.c:198 #, c-format -msgid "Read of %d bytes gives stat=%d. ERR=%s\n" +msgid "Slot %d greater than max %d ignored.\n" msgstr "" -#: src/stored/btape.c:1584 src/stored/btape.c:1633 +#: src/dird/ua_label.c:227 #, c-format -msgid "End of tape\n" +msgid "No VolName for Slot=%d InChanger set to zero.\n" msgstr "" -#: src/stored/btape.c:1589 +#: src/dird/ua_label.c:242 #, c-format -msgid "Starting scan at file %u\n" +msgid "Catalog record for Volume \"%s\" updated to reference slot %d.\n" msgstr "" -#: src/stored/btape.c:1594 src/stored/dev.c:1228 +#: src/dird/ua_label.c:246 #, c-format -msgid "read error on %s. ERR=%s.\n" +msgid "Catalog record for Volume \"%s\" is up to date.\n" msgstr "" -#: src/stored/btape.c:1596 +#: src/dird/ua_label.c:252 #, c-format -msgid "Bad status from read %d. ERR=%s\n" +msgid "Volume \"%s\" not found in catalog. Slot=%d InChanger set to zero.\n" msgstr "" -#: src/stored/btape.c:1599 src/stored/btape.c:1613 src/stored/btape.c:1677 -#: src/stored/btape.c:1689 src/stored/btape.c:1702 src/stored/btape.c:1718 +#: src/dird/ua_label.c:344 #, c-format -msgid "1 block of %d bytes in file %d\n" +msgid "" +"Volume \"%s\" has VolStatus %s. It must be Purged or Recycled before " +"relabeling.\n" msgstr "" -#: src/stored/btape.c:1602 src/stored/btape.c:1616 src/stored/btape.c:1680 -#: src/stored/btape.c:1692 src/stored/btape.c:1705 src/stored/btape.c:1721 -#, c-format -msgid "%d blocks of %d bytes in file %d\n" +#: src/dird/ua_label.c:360 +msgid "Enter new Volume name: " msgstr "" -#: src/stored/btape.c:1624 src/stored/btape.c:1696 +#: src/dird/ua_label.c:373 #, c-format -msgid "End of File mark.\n" +msgid "Media record for new Volume \"%s\" already exists.\n" msgstr "" -#: src/stored/btape.c:1645 src/stored/btape.c:1749 -#, c-format -msgid "Total files=%d, blocks=%d, bytes = %s\n" +#: src/dird/ua_label.c:388 +msgid "Enter slot (0 or Enter for none): " msgstr "" -#: src/stored/btape.c:1709 +#: src/dird/ua_label.c:413 #, c-format -msgid "Short block read.\n" +msgid "Delete of Volume \"%s\" failed. ERR=%s" msgstr "" -#: src/stored/btape.c:1712 +#: src/dird/ua_label.c:416 #, c-format -msgid "Error reading block. ERR=%s\n" +msgid "Old volume \"%s\" deleted from catalog.\n" msgstr "" -#: src/stored/btape.c:1736 +#: src/dird/ua_label.c:427 #, c-format -msgid "" -"Blk_block: %u dev_blk=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=%" -"s rlen=%d\n" +msgid "Requesting to mount %s ...\n" msgstr "" -#: src/stored/btape.c:1758 -#, c-format -msgid "Device status: %u. ERR=%s\n" +#: src/dird/ua_label.c:449 +msgid "Do not forget to mount the drive!!!\n" msgstr "" -#: src/stored/btape.c:1788 +#: src/dird/ua_label.c:489 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 3.2 GB. 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" +"The following Volumes will be labeled:\n" +"Slot Volume\n" +"==============\n" msgstr "" -#: src/stored/btape.c:1805 -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_label.c:498 src/stored/btape.c:606 +msgid "Do you want to continue? (y/n): " msgstr "" -#: src/stored/btape.c:1808 -msgid "Simple test (single tape) selected.\n" +#: src/dird/ua_label.c:519 +#, c-format +msgid "Media record for Slot %d Volume \"%s\" already exists.\n" msgstr "" -#: src/stored/btape.c:1811 -msgid "Multiple tape test selected.\n" +#: src/dird/ua_label.c:525 +#, c-format +msgid "Error setting InChanger: ERR=%s" msgstr "" -#: src/stored/btape.c:1827 -msgid "Rewind failed.\n" +#: src/dird/ua_label.c:548 +#, c-format +msgid "Maximum pool Volumes=%d reached.\n" msgstr "" -#: src/stored/btape.c:1830 -msgid "Write EOF failed.\n" +#: src/dird/ua_label.c:555 +#, c-format +msgid "Catalog record for cleaning tape \"%s\" successfully created.\n" msgstr "" -#: src/stored/btape.c:1857 -msgid "Wrote Start of Session label.\n" +#: src/dird/ua_label.c:562 +#, c-format +msgid "Catalog error on cleaning tape: %s" msgstr "" -#: src/stored/btape.c:1888 +#: src/dird/ua_label.c:598 #, c-format -msgid "%s Begin writing Bacula records to tape ...\n" +msgid "Illegal character \"%c\" in a volume name.\n" msgstr "" -#: src/stored/btape.c:1890 +#: src/dird/ua_label.c:643 #, c-format -msgid "%s Begin writing Bacula records to first tape ...\n" +msgid "Sending relabel command from \"%s\" to \"%s\" ...\n" msgstr "" -#: src/stored/btape.c:1931 +#: src/dird/ua_label.c:650 #, c-format -msgid "Wrote blk_block=%u, dev_blk_num=%u VolBytes=%s rate=%.1f KB/s\n" +msgid "Sending label command for Volume \"%s\" Slot %d ...\n" msgstr "" -#: src/stored/btape.c:1941 +#: src/dird/ua_label.c:682 #, c-format -msgid "%s Flush block, write EOF\n" +msgid "Catalog record for Volume \"%s\", Slot %d successfully created.\n" msgstr "" -#: src/stored/btape.c:1952 -msgid "Not OK\n" +#: src/dird/ua_label.c:695 +#, c-format +msgid "Label command failed for Volume %s.\n" msgstr "" -#: src/stored/btape.c:1980 -msgid "Set ok=false after write_block_to_device.\n" +#: src/dird/ua_label.c:705 +#, c-format +msgid "Connecting to Storage daemon %s at %s:%d ...\n" msgstr "" -#: src/stored/btape.c:1983 -msgid "Wrote End of Session label.\n" +#: src/dird/ua_label.c:733 +msgid "Could not open SD socket.\n" msgstr "" -#: src/stored/btape.c:2007 +#: src/dird/ua_label.c:739 #, c-format -msgid "Wrote state file last_block_num1=%d last_block_num2=%d\n" +msgid "readlabel %s Slot=%d drive=%d\n" msgstr "" -#: src/stored/btape.c:2011 +#: src/dird/ua_label.c:781 #, c-format -msgid "Could not create state file: %s ERR=%s\n" +msgid "autochanger list %s \n" msgstr "" -#: src/stored/btape.c:2019 +#: src/dird/ua_label.c:805 src/dird/ua_label.c:815 #, c-format -msgid "" -"\n" -"\n" -"%s Done filling tape at %d:%d. Now beginning re-read of tape ...\n" +msgid "Invalid Slot number: %s\n" msgstr "" -#: src/stored/btape.c:2023 +#: src/dird/ua_label.c:824 #, c-format -msgid "" -"\n" -"\n" -"%s Done filling tapes at %d:%d. Now beginning re-read of first tape ...\n" +msgid "Invalid Volume name: %s\n" msgstr "" -#: src/stored/btape.c:2062 -msgid "" -"\n" -"The state file level has changed. You must redo\n" -"the fill command.\n" +#: src/dird/ua_label.c:893 +#, c-format +msgid "autochanger slots %s\n" msgstr "" -#: src/stored/btape.c:2068 +#: src/dird/ua_label.c:903 #, c-format -msgid "" -"\n" -"Could not find the state file: %s ERR=%s\n" -"You must redo the fill command.\n" +msgid "Device \"%s\" has %d slots.\n" msgstr "" -#: src/stored/btape.c:2110 -msgid "Mount first tape. Press enter when ready: " +#: src/dird/ua_label.c:925 +#, c-format +msgid "autochanger drives %s\n" msgstr "" -#: src/stored/btape.c:2129 -msgid "Rewinding.\n" +#: src/dird/ua_label.c:952 +#, c-format +msgid "Pool \"%s\" resource not found!\n" msgstr "" -#: src/stored/btape.c:2134 -#, c-format -msgid "Reading the first 10000 records from %u:%u.\n" +#: src/dird/ua_output.c:64 src/dird/ua_output.c:88 +msgid "ON or OFF keyword missing.\n" msgstr "" -#: src/stored/btape.c:2138 src/stored/btape.c:2205 -#, c-format -msgid "Reposition from %u:%u to %u:%u\n" +#: src/dird/ua_output.c:176 +msgid "Keywords for the show command are:\n" msgstr "" -#: src/stored/btape.c:2141 src/stored/btape.c:2192 src/stored/btape.c:2208 +#: src/dird/ua_output.c:182 #, c-format -msgid "Reposition error. ERR=%s\n" +msgid "%s resource %s not found.\n" msgstr "" -#: src/stored/btape.c:2144 +#: src/dird/ua_output.c:185 #, c-format -msgid "Reading block %u.\n" +msgid "Resource %s not found\n" msgstr "" -#: src/stored/btape.c:2146 src/stored/btape.c:2197 src/stored/btape.c:2213 +#: src/dird/ua_output.c:251 +msgid "Hey! DB is NULL\n" +msgstr "" + +#: src/dird/ua_output.c:358 #, c-format -msgid "Error reading block: ERR=%s\n" +msgid "Jobid %d used %d Volume(s): %s\n" msgstr "" -#: src/stored/btape.c:2151 -msgid "" -"\n" -"The last block on the tape matches. Test succeeded.\n" -"\n" +#: src/dird/ua_output.c:376 +msgid "No Pool specified.\n" msgstr "" -#: src/stored/btape.c:2153 -msgid "" -"\n" -"The last block of the first tape matches.\n" -"\n" +#: src/dird/ua_output.c:387 src/dird/ua_select.c:458 +#, c-format +msgid "Error obtaining pool ids. ERR=%s\n" msgstr "" -#: src/stored/btape.c:2178 -msgid "Mount second tape. Press enter when ready: " +#: src/dird/ua_output.c:397 +#, c-format +msgid "Pool: %s\n" +msgstr "" + +#: src/dird/ua_output.c:413 src/dird/ua_status.c:452 +msgid "Ignoring illegal value for days.\n" msgstr "" -#: src/stored/btape.c:2190 +#: src/dird/ua_output.c:422 #, c-format -msgid "Reposition from %u:%u to 0:1\n" +msgid "Unknown list keyword: %s\n" msgstr "" -#: src/stored/btape.c:2195 src/stored/btape.c:2211 +#: src/dird/ua_output.c:448 #, c-format -msgid "Reading block %d.\n" +msgid "%s is not a job name.\n" msgstr "" -#: src/stored/btape.c:2201 -msgid "" -"\n" -"The first block on the second tape matches.\n" -"\n" +#: src/dird/ua_output.c:469 +#, c-format +msgid "Could not find next Volume for Job %s (%s, %s).\n" msgstr "" -#: src/stored/btape.c:2217 -msgid "" -"\n" -"The last block on the second tape matches. Test succeeded.\n" -"\n" +#: src/dird/ua_output.c:473 +#, c-format +msgid "The next Volume to be used by Job \"%s\" (%s, %s) will be %s\n" msgstr "" -#: src/stored/btape.c:2232 +#: src/dird/ua_output.c:483 #, c-format -msgid "10000 records read now at %d:%d\n" +msgid "Could not find next Volume for Job %s.\n" msgstr "" -#: src/stored/btape.c:2255 src/stored/btape.c:2266 src/stored/btape.c:2314 -msgid "Last block written" +#: src/dird/ua_output.c:673 +msgid "You have no messages.\n" msgstr "" -#: src/stored/btape.c:2257 src/stored/btape.c:2267 -msgid "Block read back" +#: src/dird/ua_prune.c:173 +msgid "Choose item to prune" +msgstr "" + +#: src/dird/ua_prune.c:254 +msgid "No Files found to prune.\n" msgstr "" -#: src/stored/btape.c:2258 +#: src/dird/ua_prune.c:286 #, c-format -msgid "" -"\n" -"\n" -"The blocks differ at byte %u\n" +msgid "Pruned Files from %s Jobs for client %s from catalog.\n" msgstr "" -#: src/stored/btape.c:2259 -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_prune.c:392 +msgid "No Jobs found to prune.\n" msgstr "" -#: src/stored/btape.c:2298 +#: src/dird/ua_prune.c:453 #, c-format -msgid "Last block at: %u:%u this_dev_block_num=%d\n" +msgid "Pruned %d %s for client %s from catalog.\n" msgstr "" -#: src/stored/btape.c:2312 -#, c-format -msgid "Block not written: FileIndex=%u blk_block=%u Size=%u\n" +#: src/dird/ua_prune.c:454 +msgid "Jobs" msgstr "" -#: src/stored/btape.c:2316 -msgid "Block not written" +#: src/dird/ua_prune.c:501 +#, c-format +msgid "There are no Jobs associated with Volume \"%s\". Prune not needed.\n" msgstr "" -#: src/stored/btape.c:2331 +#: src/dird/ua_prune.c:508 src/dird/ua_purge.c:482 #, c-format -msgid "End of tape %d:%d. VolumeCapacity=%s. Write rate = %.1f KB/s\n" +msgid "There are no Jobs associated with Volume \"%s\". Marking it purged.\n" msgstr "" -#: src/stored/btape.c:2340 src/stored/bcopy.c:235 src/stored/bcopy.c:242 -#: src/stored/bcopy.c:265 +#: src/dird/ua_prune.c:566 #, c-format -msgid "Cannot fixup device error. %s\n" +msgid "Pruned %d %s on Volume \"%s\" from catalog.\n" msgstr "" -#: src/stored/btape.c:2381 -msgid "Test writing blocks of 64512 bytes to tape.\n" +#: src/dird/ua_purge.c:177 +msgid "" +"\n" +"This command is 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" +"for retention periods. Normally you should use the\n" +"PRUNE command, which respects retention periods.\n" msgstr "" -#: src/stored/btape.c:2383 -msgid "How many blocks do you want to write? (1000): " +#: src/dird/ua_purge.c:237 +msgid "Choose item to purge" msgstr "" -#: src/stored/btape.c:2398 +#: src/dird/ua_purge.c:282 #, c-format -msgid "Begin writing %d Bacula blocks to tape ...\n" +msgid "Begin purging files for Client \"%s\"\n" msgstr "" -#: src/stored/btape.c:2450 +#: src/dird/ua_purge.c:294 #, c-format -msgid "Begin writing raw blocks of %u bytes.\n" +msgid "No Files found for client %s to purge from %s catalog.\n" msgstr "" -#: src/stored/btape.c:2470 +#: src/dird/ua_purge.c:325 #, c-format -msgid "Write failed at block %u. stat=%d ERR=%s\n" +msgid "%d Files for client \"%s\" purged from %s catalog.\n" msgstr "" -#: src/stored/btape.c:2500 +#: src/dird/ua_purge.c:362 #, c-format -msgid "Begin writing Bacula blocks of %u bytes.\n" +msgid "Begin purging jobs from Client \"%s\"\n" msgstr "" -#: src/stored/btape.c:2519 +#: src/dird/ua_purge.c:373 #, c-format -msgid "Write failed at block %u.\n" +msgid "No Jobs found for client %s to purge from %s catalog.\n" msgstr "" -#: src/stored/btape.c:2526 -msgid "test autochanger" +#: src/dird/ua_purge.c:413 +#, c-format +msgid "%d Jobs for client %s purged from %s catalog.\n" msgstr "" -#: src/stored/btape.c:2527 -msgid "backspace file" +#: src/dird/ua_purge.c:464 +#, c-format +msgid "" +"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/stored/btape.c:2528 -msgid "backspace record" +#: src/dird/ua_purge.c:535 +#, c-format +msgid "%d File%s on Volume \"%s\" purged from catalog.\n" msgstr "" -#: src/stored/btape.c:2529 -msgid "fill tape using Bacula writes" +#: src/dird/ua_purge.c:549 +#, c-format +msgid "" +"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" msgstr "" -#: src/stored/btape.c:2530 -msgid "list device capabilities" +#: src/dird/ua_purge.c:581 +#, c-format +msgid "Cannot purge Volume with VolStatus=%s\n" msgstr "" -#: src/stored/btape.c:2531 -msgid "clear tape errors" +#: src/dird/ua_query.c:59 src/findlib/create_file.c:282 +#: src/findlib/create_file.c:339 +#, c-format +msgid "Could not open %s: ERR=%s\n" msgstr "" -#: src/stored/btape.c:2532 -msgid "go to end of Bacula data for append" +#: src/dird/ua_query.c:64 +msgid "Available queries:\n" msgstr "" -#: src/stored/btape.c:2533 -msgid "go to the physical end of medium" +#: src/dird/ua_query.c:71 +msgid "Choose a query" msgstr "" -#: src/stored/btape.c:2534 -msgid "fill tape, write onto second volume" +#: src/dird/ua_query.c:85 +msgid "Could not find query.\n" msgstr "" -#: src/stored/btape.c:2535 -msgid "read filled tape" +#: src/dird/ua_query.c:103 +msgid "Too many prompts in query, max is 9.\n" msgstr "" -#: src/stored/btape.c:2536 -msgid "forward space a file" +#: src/dird/ua_query.c:206 +#, c-format +msgid "Warning prompt %d missing.\n" msgstr "" -#: src/stored/btape.c:2537 -msgid "forward space a record" +#: src/dird/ua_query.c:252 +msgid "" +"Entering SQL query mode.\n" +"Terminate each query with a semicolon.\n" +"Terminate query mode with a blank line.\n" msgstr "" -#: src/stored/btape.c:2538 src/dird/ua_cmds.c:101 -msgid "print this command" +#: src/dird/ua_query.c:255 src/dird/ua_query.c:272 +msgid "Enter SQL query: " msgstr "" -#: src/stored/btape.c:2539 -msgid "write a Bacula label to the tape" +#: src/dird/ua_query.c:274 +msgid "Add to SQL query: " msgstr "" -#: src/stored/btape.c:2540 -msgid "load a tape" +#: src/dird/ua_query.c:278 +msgid "End query mode.\n" msgstr "" -#: src/stored/btape.c:2541 -msgid "quit btape" -msgstr "" +#: src/dird/ua_restore.c:115 +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/btape.c:2542 -msgid "use write() to fill tape" +#: src/dird/ua_restore.c:131 +msgid "Restore not done.\n" msgstr "" -#: src/stored/btape.c:2543 -msgid "read and print the Bacula tape label" +#: src/dird/ua_restore.c:142 +msgid "Unable to construct a valid BSR. Cannot continue.\n" msgstr "" -#: src/stored/btape.c:2544 -msgid "test record handling functions" +#: src/dird/ua_restore.c:146 src/dird/ua_restore.c:160 +msgid "No files selected to be restored.\n" msgstr "" -#: src/stored/btape.c:2545 -msgid "rewind the tape" +#: src/dird/ua_restore.c:154 +msgid "" +"\n" +"1 file selected to be restored.\n" +"\n" msgstr "" -#: src/stored/btape.c:2546 -msgid "read() tape block by block to EOT and report" +#: src/dird/ua_restore.c:157 +#, c-format +msgid "" +"\n" +"%u files selected to be restored.\n" +"\n" msgstr "" -#: src/stored/btape.c:2547 -msgid "Bacula read block by block to EOT and report" +#: src/dird/ua_restore.c:175 +msgid "No Restore Job resource found!\n" msgstr "" -#: src/stored/btape.c:2548 -msgid "print tape status" +#: src/dird/ua_restore.c:237 +#, c-format +msgid "Missing value for keyword: %s\n" msgstr "" -#: src/stored/btape.c:2549 -msgid "General test Bacula tape functions" +#: src/dird/ua_restore.c:286 +msgid "List last 20 Jobs run" msgstr "" -#: src/stored/btape.c:2550 -msgid "write an EOF on the tape" +#: src/dird/ua_restore.c:287 +msgid "List Jobs where a given File is saved" msgstr "" -#: src/stored/btape.c:2551 -msgid "write a single Bacula block" +#: src/dird/ua_restore.c:288 +msgid "Enter list of comma separated JobIds to select" msgstr "" -#: src/stored/btape.c:2552 -msgid "read a single record" +#: src/dird/ua_restore.c:289 +msgid "Enter SQL list command" msgstr "" -#: src/stored/btape.c:2553 -msgid "quick fill command" +#: src/dird/ua_restore.c:290 +msgid "Select the most recent backup for a client" msgstr "" -#: src/stored/btape.c:2574 -#, c-format -msgid "%s is an illegal command\n" +#: src/dird/ua_restore.c:291 +msgid "Select backup for a client before a specified time" msgstr "" -#: src/stored/btape.c:2584 -#, c-format -msgid "Interactive commands:\n" +#: src/dird/ua_restore.c:292 +msgid "Enter a list of files to restore" msgstr "" -#: src/stored/btape.c:2585 src/dird/ua_tree.c:622 src/dird/ua_cmds.c:1423 -#, c-format -msgid "" -" Command Description\n" -" ======= ===========\n" +#: src/dird/ua_restore.c:293 +msgid "Enter a list of files to restore before a specified time" msgstr "" -#: src/stored/btape.c:2594 -#, c-format -msgid "" -"Copyright (C) 2000-2005 Kern Sibbald.\n" -"\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 nn\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_restore.c:294 +msgid "Find the JobIds of the most recent backup for a client" msgstr "" -#: src/stored/btape.c:2681 -#, c-format -msgid "Mount second Volume on device %s and press return when ready: " +#: src/dird/ua_restore.c:295 +msgid "Find the JobIds for a backup for a client before a specified time" msgstr "" -#: src/stored/btape.c:2708 -#, c-format -msgid "Mount blank Volume on device %s and press return when ready: " +#: src/dird/ua_restore.c:296 +msgid "Enter a list of directories to restore for found JobIds" msgstr "" -#: src/stored/btape.c:2726 -#, c-format -msgid "End of Volume \"%s\"\n" +#: src/dird/ua_restore.c:297 src/dird/ua_status.c:713 src/filed/status.c:251 +#: src/stored/status.c:412 src/wx-console/wxbconfigpanel.cpp:191 +msgid "Cancel" msgstr "" -#: src/stored/btape.c:2738 +#: src/dird/ua_restore.c:333 #, c-format -msgid "Read block=%u, VolBytes=%s rate=%.1f KB/s\n" +msgid "Unknown keyword: %s\n" msgstr "" -#: src/stored/btape.c:2752 src/stored/mount.c:540 +#: src/dird/ua_restore.c:357 #, c-format -msgid "Cannot open Dev=%s, Vol=%s\n" +msgid "Improper date format: %s\n" msgstr "" -#: src/stored/autochanger.c:53 +#: src/dird/ua_restore.c:397 src/dird/ua_select.c:590 #, c-format -msgid "No Changer Name given for device %s. Cannot continue.\n" +msgid "Error: Pool resource \"%s\" does not exist.\n" msgstr "" -#: src/stored/autochanger.c:59 +#: src/dird/ua_restore.c:402 #, c-format -msgid "No Changer Command given for device %s. Cannot continue.\n" +msgid "Error: Pool resource \"%s\" access not allowed.\n" msgstr "" -#: src/stored/autochanger.c:72 -#, c-format +#: src/dird/ua_restore.c:421 msgid "" -"Media Type not the same for all devices in changer %s. Cannot continue.\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" +"\n" msgstr "" -#: src/stored/autochanger.c:153 -#, c-format -msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" +#: src/dird/ua_restore.c:433 +msgid "To select the JobIds, you have the following choices:\n" msgstr "" -#: src/stored/autochanger.c:162 -#, c-format -msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" +#: src/dird/ua_restore.c:438 +msgid "Select item: " msgstr "" -#: src/stored/autochanger.c:168 -#, c-format -msgid "3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" +#: src/dird/ua_restore.c:452 +msgid "Enter Filename (no path):" msgstr "" -#: src/stored/autochanger.c:209 -msgid "3992 Missing Changer command.\n" +#: src/dird/ua_restore.c:467 src/dird/ua_restore.c:567 +msgid "Enter JobId(s), comma separated, to restore: " msgstr "" -#: src/stored/autochanger.c:219 -#, c-format -msgid "3301 Issuing autochanger \"loaded drive %d\" command.\n" +#: src/dird/ua_restore.c:473 +msgid "Enter SQL list command: " msgstr "" -#: src/stored/autochanger.c:229 -#, c-format -msgid "3302 Autochanger \"loaded drive %d\", result is Slot %d.\n" +#: src/dird/ua_restore.c:501 src/dird/ua_restore.c:526 +msgid "" +"Enter file names with paths, or < to enter a filename\n" +"containg a list of file names with paths, and terminate\n" +"them with a blank line.\n" msgstr "" -#: src/stored/autochanger.c:233 -#, c-format -msgid "3302 Autochanger \"loaded drive %d\", result: nothing loaded.\n" +#: src/dird/ua_restore.c:505 src/dird/ua_restore.c:530 +msgid "Enter full filename: " msgstr "" -#: src/stored/autochanger.c:240 +#: src/dird/ua_restore.c:565 #, c-format -msgid "3991 Bad autochanger \"loaded drive %d\" command: ERR=%s.\n" +msgid "You have already seleted the following JobIds: %s\n" msgstr "" -#: src/stored/autochanger.c:299 src/stored/autochanger.c:381 -#, c-format -msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" +#: src/dird/ua_restore.c:580 +msgid "" +"Enter full directory names or start the name\n" +"with a < to indicate it is a filename containg a list\n" +"of directories and terminate them with a blank line.\n" msgstr "" -#: src/stored/autochanger.c:312 src/stored/autochanger.c:403 -#, c-format -msgid "3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" +#: src/dird/ua_restore.c:584 +msgid "Enter directory name: " msgstr "" -#: src/stored/autochanger.c:370 -#, c-format -msgid "Volume \"%s\" is in use by device %s\n" +#: src/dird/ua_restore.c:609 +msgid "No Jobs selected.\n" msgstr "" -#: src/stored/autochanger.c:441 +#: src/dird/ua_restore.c:613 #, c-format -msgid "3993 Device %s not an autochanger device.\n" +msgid "You have selected the following JobIds: %s\n" msgstr "" -#: src/stored/autochanger.c:466 +#: src/dird/ua_restore.c:616 #, c-format -msgid "3306 Issuing autochanger \"%s\" command.\n" +msgid "You have selected the following JobId: %s\n" msgstr "" -#: src/stored/autochanger.c:469 -msgid "3996 Open bpipe failed.\n" +#: src/dird/ua_restore.c:624 +msgid "Invalid JobId in list.\n" msgstr "" -#: src/stored/autochanger.c:496 +#: src/dird/ua_restore.c:637 #, c-format -msgid "Autochanger error: ERR=%s\n" +msgid "Unable to get Job record for JobId=%s: ERR=%s\n" msgstr "" -#: src/stored/dvd.c:155 src/stored/dev.c:1822 +#: src/dird/ua_restore.c:642 #, c-format -msgid "Device %s cannot be mounted. ERR=%s\n" +msgid "No authorization. Job \"%s\" not selected.\n" msgstr "" -#: src/stored/dvd.c:276 -#, c-format -msgid "Cannot run free space command (%s)\n" +#: src/dird/ua_restore.c:656 +msgid "" +"The restored files will the most current backup\n" +"BEFORE the date you specify below.\n" +"\n" msgstr "" -#: src/stored/dvd.c:379 -#, c-format -msgid "Error while writing current part to the DVD: %s" +#: src/dird/ua_restore.c:659 +msgid "Enter date as YYYY-MM-DD HH:MM:SS :" msgstr "" -#: src/stored/dvd.c:399 -#, c-format -msgid "Remaining free space %s on %s\n" +#: src/dird/ua_restore.c:665 +msgid "Improper date format.\n" msgstr "" -#: src/stored/dvd.c:469 +#: src/dird/ua_restore.c:686 #, c-format -msgid "Next Volume part already exists on DVD. Cannot continue: %s\n" +msgid "Cannot open file %s: ERR=%s\n" msgstr "" -#: src/stored/dvd.c:486 +#: src/dird/ua_restore.c:694 src/dird/ua_restore.c:698 #, c-format -msgid "open_next_part can't unlink existing part %s, ERR=%s\n" +msgid "Error occurred on line %d of %s\n" msgstr "" -#: src/stored/dvd.c:705 +#: src/dird/ua_restore.c:744 src/dird/ua_restore.c:782 #, c-format -msgid "Unable to write part %s: ERR=%s\n" +msgid "No database record found for: %s\n" msgstr "" -#: src/stored/dvd.c:739 src/stored/dev.c:1734 -#, c-format -msgid "Unable to truncate device %s. ERR=%s\n" +#: src/dird/ua_restore.c:769 +msgid "No JobId specified cannot continue.\n" msgstr "" -#: src/stored/fd_cmds.c:334 src/filed/job.c:991 +#: src/dird/ua_restore.c:813 #, c-format -msgid "Could not create bootstrap file %s: ERR=%s\n" +msgid "No table found: %s\n" msgstr "" -#: src/stored/fd_cmds.c:345 -msgid "Error parsing bootstrap file.\n" +#: src/dird/ua_restore.c:918 +#, c-format +msgid "" +"\n" +"Building directory tree for JobId %s ... " msgstr "" -#: src/stored/mount.c:223 src/stored/mount.c:445 -#, c-format -msgid "Volume \"%s\" not on device %s.\n" +#: src/dird/ua_restore.c:937 +msgid "" +"\n" +"There were no files inserted into the tree, so file selection\n" +"is not possible.Most likely your retention policy pruned the files\n" msgstr "" -#: src/stored/mount.c:255 -#, c-format +#: src/dird/ua_restore.c:939 msgid "" -"Director wanted Volume \"%s\".\n" -" Current Volume \"%s\" not acceptable because:\n" -" %s" +"\n" +"Do you want to restore all the files? (yes|no): " msgstr "" -#: src/stored/mount.c:334 +#: src/dird/ua_restore.c:955 #, c-format -msgid "Volume \"%s\" previously written, moving to end of data.\n" +msgid "" +"\n" +"1 Job, %s files inserted into the tree and marked for extraction.\n" msgstr "" -#: src/stored/mount.c:337 +#: src/dird/ua_restore.c:959 #, c-format -msgid "Unable to position to end of data on device %s: ERR=%s\n" +msgid "" +"\n" +"1 Job, %s files inserted into the tree.\n" msgstr "" -#: src/stored/mount.c:349 +#: src/dird/ua_restore.c:965 #, c-format -msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" +msgid "" +"\n" +"%d Jobs, %s files inserted into the tree and marked for extraction.\n" msgstr "" -#: src/stored/mount.c:352 +#: src/dird/ua_restore.c:969 #, c-format msgid "" -"I cannot write on Volume \"%s\" because:\n" -"The number of files mismatch! Volume=%u Catalog=%u\n" +"\n" +"%d Jobs, %s files inserted into the tree.\n" msgstr "" -#: src/stored/mount.c:380 +#: src/dird/ua_restore.c:1046 #, c-format -msgid "Ready to append to end of Volume \"%s\" at file address=%u.\n" +msgid "Error getting FileSet \"%s\": ERR=%s\n" msgstr "" -#: src/stored/mount.c:384 -#, c-format -msgid "" -"I cannot write on Volume \"%s\" because:\n" -"The EOD file address is wrong: Volume file address=%u != Catalog Endblock=%u" -"(+1)\n" -"You probably removed DVD last part in spool directory.\n" +#: src/dird/ua_restore.c:1054 src/dird/ua_select.c:167 +msgid "The defined FileSet resources are:\n" msgstr "" -#: src/stored/mount.c:435 -#, c-format -msgid "Labeled new Volume \"%s\" on device %s.\n" +#: src/dird/ua_restore.c:1058 src/dird/ua_run.c:644 src/dird/ua_select.c:175 +msgid "FileSet" msgstr "" -#: src/stored/mount.c:440 -#, c-format -msgid "Warning device %s not configured to autolabel Volumes.\n" +#: src/dird/ua_restore.c:1058 src/dird/ua_select.c:175 +msgid "Select FileSet resource" msgstr "" -#: src/stored/mount.c:460 +#: src/dird/ua_restore.c:1065 #, c-format -msgid "Marking Volume \"%s\" in Error in Catalog.\n" +msgid "Error getting FileSet record: %s\n" msgstr "" -#: src/stored/mount.c:476 -#, c-format +#: src/dird/ua_restore.c:1066 msgid "" -"Autochanger Volume \"%s\" not found in slot %d.\n" -" Setting InChanger to zero in catalog.\n" -msgstr "" - -#: src/stored/mount.c:495 -msgid "Hey!!!!! WroteVol non-zero !!!!!\n" +"This probably means you modified the FileSet.\n" +"Continuing anyway.\n" msgstr "" -#: src/stored/label.c:81 src/stored/label.c:122 src/stored/label.c:210 +#: src/dird/ua_restore.c:1081 #, c-format -msgid "Wrong Volume mounted on device %s: Wanted %s have %s\n" +msgid "Pool \"%s\" not found, using any pool.\n" msgstr "" -#: src/stored/label.c:88 src/stored/label.c:125 src/stored/label.c:197 +#: src/dird/ua_restore.c:1107 src/dird/ua_restore.c:1123 #, c-format -msgid "Too many tries: %s" +msgid "No Full backup before %s found.\n" msgstr "" -#: src/stored/label.c:104 -#, c-format -msgid "Couldn't rewind device %s: ERR=%s\n" +#: src/dird/ua_restore.c:1146 +msgid "No jobs found.\n" msgstr "" -#: src/stored/label.c:142 -#, c-format +#: src/dird/ua_restore.c:1312 msgid "" -"Requested Volume \"%s\" on %s is not a Bacula labeled Volume, because: ERR=%s" +"Warning, the JobIds that you selected refer to more than one MediaType.\n" +"Restore is not possible. The MediaTypes used are:\n" msgstr "" -#: src/stored/label.c:147 -msgid "Could not read Volume label from block.\n" +#: src/dird/ua_restore.c:1320 +msgid "No MediaType found for your JobIds.\n" msgstr "" -#: src/stored/label.c:150 +#: src/dird/ua_restore.c:1352 #, c-format -msgid "Could not unserialize Volume label: ERR=%s\n" +msgid "Warning default storage overridden by %s on command line.\n" msgstr "" -#: src/stored/label.c:155 +#: src/dird/ua_restore.c:1363 #, c-format -msgid "Volume Header Id bad: %s\n" +msgid "" +"\n" +"Warning. Unable to find Storage resource for\n" +"MediaType \"%s\", needed by the Jobs you selected.\n" +"You will be allowed to select a Storage device later.\n" msgstr "" -#: src/stored/label.c:182 +#: src/dird/ua_run.c:112 #, c-format -msgid "Volume on %s has wrong Bacula version. Wanted %d got %d\n" +msgid "Value missing for keyword %s\n" msgstr "" -#: src/stored/label.c:193 -#, c-format -msgid "Volume on %s has bad Bacula label type: %x\n" +#: src/dird/ua_run.c:119 +msgid "Job name specified twice.\n" msgstr "" -#: src/stored/label.c:274 -#, c-format -msgid "Cannot write Volume label to block for device %s\n" +#: src/dird/ua_run.c:127 +msgid "JobId specified twice.\n" msgstr "" -#: src/stored/label.c:403 -#, c-format -msgid "Rewind error on device %s: ERR=%s\n" +#: src/dird/ua_run.c:136 +msgid "Client specified twice.\n" msgstr "" -#: src/stored/label.c:408 -#, c-format -msgid "Truncate error on device %s: ERR=%s\n" +#: src/dird/ua_run.c:144 +msgid "FileSet specified twice.\n" msgstr "" -#: src/stored/label.c:430 -#, c-format -msgid "Unable to write device %s: ERR=%s\n" +#: src/dird/ua_run.c:152 +msgid "Level specified twice.\n" msgstr "" -#: src/stored/label.c:458 -#, c-format -msgid "Recycled volume \"%s\" on device %s, all previous data lost.\n" +#: src/dird/ua_run.c:161 +msgid "Storage specified twice.\n" msgstr "" -#: src/stored/label.c:461 -#, c-format -msgid "Wrote label to prelabeled Volume \"%s\" on device %s\n" +#: src/dird/ua_run.c:169 +msgid "Pool specified twice.\n" msgstr "" -#: src/stored/label.c:660 -#, c-format -msgid "Bad session label = %d\n" +#: src/dird/ua_run.c:177 +msgid "Where specified twice.\n" msgstr "" -#: src/stored/label.c:678 src/stored/label.c:685 -#, c-format -msgid "Error writing Session label to %s: %s\n" +#: src/dird/ua_run.c:185 +msgid "Bootstrap specified twice.\n" msgstr "" -#: src/stored/label.c:720 -#, c-format -msgid "Expecting Volume Label, got FI=%s Stream=%s len=%d\n" +#: src/dird/ua_run.c:193 +msgid "Replace specified twice.\n" msgstr "" -#: src/stored/label.c:847 -#, c-format -msgid "Unknown %d" +#: src/dird/ua_run.c:201 +msgid "When specified twice.\n" msgstr "" -#: src/stored/label.c:851 -#, 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/dird/ua_run.c:209 +msgid "Priority specified twice.\n" msgstr "" -#: src/stored/label.c:873 -#, c-format -msgid "Date label written: %s\n" +#: src/dird/ua_run.c:214 +msgid "Priority must be positive nonzero setting it to 10.\n" msgstr "" -#: src/stored/label.c:879 -#, c-format -msgid "Date label written: %04d-%02d-%02d at %02d:%02d\n" +#: src/dird/ua_run.c:224 +msgid "Verify Job specified twice.\n" msgstr "" -#: src/stored/label.c:899 +#: src/dird/ua_run.c:268 #, 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 "Invalid keyword: %s\n" msgstr "" -#: src/stored/label.c:912 +#: src/dird/ua_run.c:280 #, c-format -msgid "" -"Job (unique name) : %s\n" -"FileSet : %s\n" -"JobType : %c\n" -"JobLevel : %c\n" +msgid "Catalog \"%s\" not found\n" msgstr "" -#: src/stored/label.c:921 +#: src/dird/ua_run.c:291 #, 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 "Job \"%s\" not found\n" msgstr "" -#: src/stored/label.c:942 -#, c-format -msgid "Date written : %s\n" +#: src/dird/ua_run.c:298 +msgid "A job name must be specified.\n" msgstr "" -#: src/stored/label.c:947 +#: src/dird/ua_run.c:304 #, c-format -msgid "Date written : %04d-%02d-%02d at %02d:%02d\n" -msgstr "" - -#: src/stored/label.c:966 -msgid "Fresh Volume" +msgid "No authorization. Job \"%s\".\n" msgstr "" -#: src/stored/label.c:969 -msgid "Volume" +#: src/dird/ua_run.c:313 +#, c-format +msgid "Storage \"%s\" not found.\n" msgstr "" -#: src/stored/label.c:978 src/stored/read_record.c:341 -msgid "End of Media" +#: src/dird/ua_run.c:323 +#, c-format +msgid "No authorization. Storage \"%s\".\n" msgstr "" -#: src/stored/label.c:981 -msgid "End of Tape" +#: src/dird/ua_run.c:333 +#, c-format +msgid "Pool \"%s\" not found.\n" msgstr "" -#: src/stored/label.c:1001 src/stored/label.c:1009 src/stored/label.c:1042 +#: src/dird/ua_run.c:343 #, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n" +msgid "No authorization. Pool \"%s\".\n" msgstr "" -#: src/stored/label.c:1006 -msgid "End of physical tape.\n" +#: src/dird/ua_run.c:363 +#, c-format +msgid "No authorization. Client \"%s\".\n" msgstr "" -#: src/stored/label.c:1021 src/stored/label.c:1030 +#: src/dird/ua_run.c:372 #, c-format -msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d\n" +msgid "FileSet \"%s\" not found.\n" msgstr "" -#: src/stored/label.c:1023 +#: src/dird/ua_run.c:381 #, c-format -msgid " Job=%s Date=%s Level=%c Type=%c\n" +msgid "No authorization. FileSet \"%s\".\n" msgstr "" -#: src/stored/label.c:1032 +#: src/dird/ua_run.c:389 #, c-format -msgid " Date=%s Level=%c Type=%c Files=%s Bytes=%s Errors=%d Status=%c\n" +msgid "Verify Job \"%s\" not found.\n" msgstr "" -#: src/stored/butil.c:46 -msgid "Nohdr," +#: src/dird/ua_run.c:422 src/dird/ua_run.c:764 +msgid "Invalid time, using current time.\n" msgstr "" -#: src/stored/butil.c:49 -msgid "partial," +#: src/dird/ua_run.c:442 +#, c-format +msgid "Invalid replace option: %s\n" msgstr "" -#: src/stored/butil.c:52 -msgid "empty," +#: src/dird/ua_run.c:500 +#, c-format +msgid "" +"Run %s job\n" +"JobName: %s\n" +"FileSet: %s\n" +"Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/stored/butil.c:55 -msgid "Nomatch," +#: src/dird/ua_run.c:507 src/lib/util.c:295 +msgid "Admin" msgstr "" -#: src/stored/butil.c:58 -msgid "cont," +#: src/dird/ua_run.c:519 +#, c-format +msgid "" +"Run %s job\n" +"JobName: %s\n" +"FileSet: %s\n" +"Level: %s\n" +"Client: %s\n" +"Storage: %s\n" +"Pool: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/stored/butil.c:131 -msgid "Volume name or names is too long. Please use a .bsr file.\n" +#: src/dird/ua_run.c:528 src/lib/util.c:286 +msgid "Backup" msgstr "" -#: src/stored/butil.c:151 +#: src/dird/ua_run.c:544 #, c-format -msgid "Cannot find device \"%s\" in config file %s.\n" +msgid "" +"Run %s job\n" +"JobName: %s\n" +"FileSet: %s\n" +"Level: %s\n" +"Client: %s\n" +"Storage: %s\n" +"Pool: %s\n" +"Verify Job: %s\n" +"When: %s\n" +"Priority: %d\n" msgstr "" -#: src/stored/butil.c:158 -#, c-format -msgid "Cannot init device %s\n" +#: src/dird/ua_run.c:554 src/lib/util.c:289 +msgid "Verify" msgstr "" -#: src/stored/butil.c:179 -#, c-format -msgid "Cannot open %s\n" +#: src/dird/ua_run.c:571 +msgid "Please enter a JobId for restore: " msgstr "" -#: src/stored/butil.c:262 +#: src/dird/ua_run.c:580 #, c-format -msgid "Could not find device \"%s\" in config file %s.\n" +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"Where: %s\n" +"Replace: %s\n" +"FileSet: %s\n" +"Client: %s\n" +"Storage: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/stored/butil.c:267 +#: src/dird/ua_run.c:602 #, c-format -msgid "Using device: \"%s\" for reading.\n" +msgid "" +"Run Restore job\n" +"JobName: %s\n" +"Bootstrap: %s\n" +"Where: %s\n" +"Replace: %s\n" +"Client: %s\n" +"Storage: %s\n" +"JobId: %s\n" +"When: %s\n" +"Catalog: %s\n" +"Priority: %d\n" msgstr "" -#: src/stored/butil.c:270 +#: src/dird/ua_run.c:626 #, c-format -msgid "Using device: \"%s\" for writing.\n" +msgid "Unknown Job Type=%d\n" msgstr "" -#: src/stored/butil.c:286 -msgid "Unexpected End of Data\n" +#: src/dird/ua_run.c:631 +msgid "OK to run? (yes/mod/no): " msgstr "" -#: src/stored/butil.c:288 -msgid "Unexpected End of Tape\n" +#: src/dird/ua_run.c:637 src/dird/ua_select.c:44 +msgid "mod" msgstr "" -#: src/stored/butil.c:290 -msgid "Unexpected End of File\n" +#: src/dird/ua_run.c:640 src/dird/ua_update.c:464 +msgid "Parameters to modify:\n" msgstr "" -#: src/stored/butil.c:292 -msgid "Tape Door is Open\n" +#: src/dird/ua_run.c:641 +msgid "Level" msgstr "" -#: src/stored/butil.c:294 -msgid "Unexpected Tape is Off-line\n" +#: src/dird/ua_run.c:642 src/dird/ua_select.c:152 +#: src/wx-console/wxbrestorepanel.cpp:321 +#: src/wx-console/wxbrestorepanel.cpp:337 +#: src/wx-console/wxbrestorepanel.cpp:458 +#: src/wx-console/wxbrestorepanel.cpp:459 +#: src/wx-console/wxbrestorepanel.cpp:469 +#: src/wx-console/wxbrestorepanel.cpp:470 +#: src/wx-console/wxbrestorepanel.cpp:1133 +#: src/wx-console/wxbrestorepanel.cpp:1794 +#: src/wx-console/wxbrestorepanel.cpp:1865 +msgid "Storage" msgstr "" -#: src/stored/dev.c:112 -#, c-format -msgid "Unable to stat device %s: ERR=%s\n" +#: src/dird/ua_run.c:645 src/dird/ua_select.c:282 src/dird/ua_select.c:391 +#: src/wx-console/wxbrestorepanel.cpp:318 +#: src/wx-console/wxbrestorepanel.cpp:336 +#: src/wx-console/wxbrestorepanel.cpp:410 +#: src/wx-console/wxbrestorepanel.cpp:411 +#: src/wx-console/wxbrestorepanel.cpp:421 +#: src/wx-console/wxbrestorepanel.cpp:422 +#: src/wx-console/wxbrestorepanel.cpp:669 +#: src/wx-console/wxbrestorepanel.cpp:1103 +#: src/wx-console/wxbrestorepanel.cpp:1190 +#: src/wx-console/wxbrestorepanel.cpp:1787 +#: src/wx-console/wxbrestorepanel.cpp:1789 +#: src/wx-console/wxbrestorepanel.cpp:1863 +#: src/wx-console/wxbrestorepanel.cpp:1918 +msgid "Client" msgstr "" -#: src/stored/dev.c:123 -#, 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_run.c:646 src/wx-console/wxbrestorepanel.cpp:338 +#: src/wx-console/wxbrestorepanel.cpp:823 +#: src/wx-console/wxbrestorepanel.cpp:1867 +msgid "When" msgstr "" -#: src/stored/dev.c:181 -#, c-format -msgid "Unable to stat mount point %s: ERR=%s\n" +#: src/dird/ua_run.c:647 src/wx-console/wxbrestorepanel.cpp:339 +#: src/wx-console/wxbrestorepanel.cpp:1096 +#: src/wx-console/wxbrestorepanel.cpp:1869 +msgid "Priority" msgstr "" -#: src/stored/dev.c:188 -msgid "" -"Mount and unmount commands must defined for a device which requires mount.\n" +#: src/dird/ua_run.c:650 src/dird/ua_select.c:476 src/dird/ua_select.c:566 +#: src/dird/ua_update.c:400 src/dird/ua_update.c:475 +#: src/wx-console/wxbrestorepanel.cpp:320 +#: src/wx-console/wxbrestorepanel.cpp:506 +#: src/wx-console/wxbrestorepanel.cpp:516 +#: src/wx-console/wxbrestorepanel.cpp:1783 +msgid "Pool" msgstr "" -#: src/stored/dev.c:191 -msgid "Write part command must be defined for a device which requires mount.\n" +#: src/dird/ua_run.c:652 +msgid "Verify Job" msgstr "" -#: src/stored/dev.c:196 -#, c-format -msgid "Block size %u on device %s is too large, using default %u\n" +#: src/dird/ua_run.c:655 src/wx-console/wxbrestorepanel.cpp:331 +#: src/wx-console/wxbrestorepanel.cpp:1848 +msgid "Bootstrap" msgstr "" -#: src/stored/dev.c:201 -#, c-format -msgid "Max block size %u not multiple of device %s block size.\n" +#: src/dird/ua_run.c:656 src/wx-console/wxbrestorepanel.cpp:332 +#: src/wx-console/wxbrestorepanel.cpp:1072 +#: src/wx-console/wxbrestorepanel.cpp:1850 +msgid "Where" msgstr "" -#: src/stored/dev.c:217 src/stored/dev.c:223 -#, c-format -msgid "Unable to init cond variable: ERR=%s\n" +#: src/dird/ua_run.c:657 src/wx-console/wxbrestorepanel.cpp:334 +#: src/wx-console/wxbrestorepanel.cpp:1080 +#: src/wx-console/wxbrestorepanel.cpp:1854 +#: src/wx-console/wxbrestorepanel.cpp:1855 +#: src/wx-console/wxbrestorepanel.cpp:1856 +#: src/wx-console/wxbrestorepanel.cpp:1857 +#: src/wx-console/wxbrestorepanel.cpp:1858 +msgid "Replace" msgstr "" -#: src/stored/dev.c:313 -msgid "Illegal mode given to open dev.\n" +#: src/dird/ua_run.c:658 +msgid "JobId" msgstr "" -#: src/stored/dev.c:356 src/stored/device.c:295 -#, c-format -msgid "Unable to open device %s: ERR=%s\n" +#: src/dird/ua_run.c:660 src/dird/ua_update.c:479 +msgid "Select parameter to modify" msgstr "" -#: src/stored/dev.c:428 src/stored/dev.c:483 -#, c-format -msgid "Could not open file device %s. No Volume name given.\n" +#: src/dird/ua_run.c:664 src/dird/ua_run.c:691 +msgid "Levels:\n" msgstr "" -#: src/stored/dev.c:451 src/stored/dev.c:563 -#, c-format -msgid "Could not open: %s, ERR=%s\n" +#: src/dird/ua_run.c:665 src/filed/status.c:368 src/lib/util.c:319 +#: src/stored/status.c:451 +msgid "Base" msgstr "" -#: src/stored/dev.c:508 -#, c-format -msgid "" -"The media in the device %s is not empty, please blank it before writing " -"anything to it.\n" +#: src/dird/ua_run.c:666 src/filed/status.c:370 src/lib/util.c:321 +#: src/stored/status.c:453 +msgid "Full" msgstr "" -#: src/stored/dev.c:524 -#, c-format -msgid "There is no valid media in the device %s.\n" +#: src/dird/ua_run.c:667 src/filed/status.c:373 src/lib/util.c:324 +#: src/stored/status.c:456 +msgid "Incremental" msgstr "" -#: src/stored/dev.c:531 -#, c-format -msgid "Could not mount device %s.\n" +#: src/dird/ua_run.c:668 src/filed/status.c:376 src/lib/util.c:327 +#: src/stored/status.c:459 +msgid "Differential" msgstr "" -#: src/stored/dev.c:589 -#, c-format -msgid "Could not fstat: %s, ERR=%s\n" +#: src/dird/ua_run.c:669 src/filed/status.c:379 src/lib/util.c:330 +#: src/stored/status.c:462 +msgid "Since" msgstr "" -#: src/stored/dev.c:632 -#, c-format -msgid "Bad call to rewind. Device %s not open\n" +#: src/dird/ua_run.c:670 src/dird/ua_run.c:697 +msgid "Select level" msgstr "" -#: src/stored/dev.c:678 -#, c-format -msgid "Rewind error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:692 +msgid "Initialize Catalog" msgstr "" -#: src/stored/dev.c:688 src/stored/dev.c:801 src/stored/dev.c:937 -#: src/stored/dev.c:1453 -#, c-format -msgid "lseek_dev error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:693 src/filed/status.c:382 src/lib/util.c:333 +#: src/stored/status.c:465 +msgid "Verify Catalog" msgstr "" -#: src/stored/dev.c:728 -msgid "unknown blocked code" +#: src/dird/ua_run.c:694 src/lib/util.c:339 +msgid "Verify Volume to Catalog" msgstr "" -#: src/stored/dev.c:772 -#, c-format -msgid "Bad call to eod_dev. Device %s not open\n" +#: src/dird/ua_run.c:695 src/lib/util.c:342 +msgid "Verify Disk to Catalog" msgstr "" -#: src/stored/dev.c:837 -#, c-format -msgid "ioctl MTEOM error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:696 +msgid "Verify Volume Data (not yet implemented)" msgstr "" -#: src/stored/dev.c:845 src/stored/dev.c:977 -#, c-format -msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:718 +msgid "Level not appropriate for this Job. Cannot be changed.\n" msgstr "" -#: src/stored/dev.c:923 -msgid "Bad device call. Device not open\n" +#: src/dird/ua_run.c:756 +msgid "" +"Please enter desired start time as YYYY-MM-DD HH:MM:SS (return for now): " msgstr "" -#: src/stored/dev.c:936 -#, c-format -msgid "Seek error: ERR=%s\n" +#: src/dird/ua_run.c:771 +msgid "Enter new Priority: " msgstr "" -#: src/stored/dev.c:972 -msgid " Bacula status:" +#: src/dird/ua_run.c:775 +msgid "Priority must be a positive integer.\n" +msgstr "" + +#: src/dird/ua_run.c:793 +msgid "Please enter the Bootstrap file name: " msgstr "" -#: src/stored/dev.c:973 src/stored/dev.c:1022 src/stored/dev.c:1024 +#: src/dird/ua_run.c:804 #, c-format -msgid " file=%d block=%d\n" +msgid "Warning cannot open %s: ERR=%s\n" msgstr "" -#: src/stored/dev.c:981 -msgid " Device status:" +#: src/dird/ua_run.c:823 +msgid "Please enter path prefix for restore (/ for none): " msgstr "" -#: src/stored/dev.c:1046 -msgid "Bad call to load_dev. Device not open\n" +#: src/dird/ua_run.c:837 +msgid "Replace:\n" msgstr "" -#: src/stored/dev.c:1057 src/stored/dev.c:1070 -#, c-format -msgid "ioctl MTLOAD error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:841 +msgid "Select replace option" msgstr "" -#: src/stored/dev.c:1106 -#, c-format -msgid "ioctl MTOFFL error on %s. ERR=%s.\n" +#: src/dird/ua_run.c:851 +msgid "" +"You must set the bootstrap file to NULL to be able to specify a JobId.\n" msgstr "" -#: src/stored/dev.c:1147 -msgid "Bad call to fsf_dev. Device not open\n" +#: src/dird/ua_run.c:869 +msgid "Job failed.\n" msgstr "" -#: src/stored/dev.c:1157 src/stored/dev.c:1278 +#: src/dird/ua_run.c:872 #, c-format -msgid "Device %s at End of Tape.\n" +msgid "Job started. JobId=%s\n" +msgstr "" + +#: src/dird/ua_run.c:878 +msgid "Job not run.\n" msgstr "" -#: src/stored/dev.c:1182 src/stored/dev.c:1258 +#: src/dird/ua_select.c:39 #, c-format -msgid "ioctl MTFSF error on %s. ERR=%s.\n" +msgid "The current %s retention period is: %s\n" msgstr "" -#: src/stored/dev.c:1306 -msgid "Bad call to bsf. Device not open\n" +#: src/dird/ua_select.c:41 +msgid "Continue? (yes/mod/no): " msgstr "" -#: src/stored/dev.c:1312 -#, c-format -msgid "Device %s cannot BSF because it is not a tape.\n" +#: src/dird/ua_select.c:45 +msgid "Enter new retention period: " msgstr "" -#: src/stored/dev.c:1327 -#, c-format -msgid "ioctl MTBSF error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:49 +msgid "Invalid period.\n" msgstr "" -#: src/stored/dev.c:1347 -msgid "Bad call to fsr. Device not open\n" +#: src/dird/ua_select.c:128 +msgid "You have the following choices:\n" msgstr "" -#: src/stored/dev.c:1356 -#, c-format -msgid "ioctl MTFSR not permitted on %s.\n" +#: src/dird/ua_select.c:144 +msgid "The defined Storage resources are:\n" msgstr "" -#: src/stored/dev.c:1384 -#, c-format -msgid "ioctl MTFSR %d error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:152 +msgid "Select Storage resource" msgstr "" -#: src/stored/dev.c:1403 -msgid "Bad call to bsr_dev. Device not open\n" +#: src/dird/ua_select.c:193 +msgid "catalog" msgstr "" -#: src/stored/dev.c:1413 -#, c-format -msgid "ioctl MTBSR not permitted on %s.\n" +#: src/dird/ua_select.c:201 +msgid "The defined Catalog resources are:\n" msgstr "" -#: src/stored/dev.c:1426 -#, c-format -msgid "ioctl MTBSR error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:209 +msgid "Catalog" msgstr "" -#: src/stored/dev.c:1442 -msgid "Bad call to reposition. Device not open\n" +#: src/dird/ua_select.c:209 +msgid "Select Catalog resource" msgstr "" -#: src/stored/dev.c:1510 -msgid "Bad call to weof_dev. Device not open\n" +#: src/dird/ua_select.c:226 +msgid "The defined Job resources are:\n" msgstr "" -#: src/stored/dev.c:1520 -msgid "Attempt to WEOF on non-appendable Volume\n" +#: src/dird/ua_select.c:234 +msgid "Select Job resource" msgstr "" -#: src/stored/dev.c:1537 -#, c-format -msgid "ioctl MTWEOF error on %s. ERR=%s.\n" +#: src/dird/ua_select.c:249 +msgid "The defined Restore Job resources are:\n" msgstr "" -#: src/stored/dev.c:1567 -msgid "Got ENOTTY on read/write!\n" +#: src/dird/ua_select.c:257 +msgid "Select Restore Job" msgstr "" -#: src/stored/dev.c:1614 +#: src/dird/ua_select.c:274 +msgid "The defined Client resources are:\n" +msgstr "" + +#: src/dird/ua_select.c:282 +msgid "Select Client (File daemon) resource" +msgstr "" + +#: src/dird/ua_select.c:309 #, c-format -msgid "unknown func code %d" +msgid "Error: Client resource %s does not exist.\n" msgstr "" -#: src/stored/dev.c:1620 +#: src/dird/ua_select.c:334 #, c-format -msgid "I/O function \"%s\" not supported on this device.\n" +msgid "Could not find Client %s: ERR=%s" msgstr "" -#: src/stored/pythonsd.c:95 src/stored/pythonsd.c:160 src/filed/pythonfd.c:102 -#: src/filed/pythonfd.c:156 src/filed/pythonfd.c:220 src/dird/pythondir.c:105 -msgid "Job pointer not found." +#: src/dird/ua_select.c:337 src/lib/bnet_server.c:284 +#: src/lib/bnet_server.c:378 +msgid "client" msgstr "" -#: src/stored/pythonsd.c:137 src/filed/pythonfd.c:133 src/dird/pythondir.c:166 -#, c-format -msgid "Attribute %s not found." +#: src/dird/ua_select.c:338 +msgid "fd" msgstr "" -#: src/stored/pythonsd.c:154 src/filed/pythonfd.c:150 +#: src/dird/ua_select.c:344 src/dird/ua_select.c:398 #, c-format -msgid "Cannot delete attribute %s" +msgid "Could not find Client \"%s\": ERR=%s" msgstr "" -#: src/stored/pythonsd.c:177 src/filed/pythonfd.c:175 src/dird/pythondir.c:209 -#: src/dird/pythondir.c:215 -msgid "Read-only attribute" +#: src/dird/ua_select.c:373 +#, c-format +msgid "Error obtaining client ids. ERR=%s\n" msgstr "" -#: src/stored/pythonsd.c:187 src/filed/pythonfd.c:168 src/filed/pythonfd.c:184 -#, c-format -msgid "Cannot find attribute %s" +#: src/dird/ua_select.c:377 +msgid "No clients defined. You must run a job before using this command.\n" msgstr "" -#: src/stored/pythonsd.c:202 -msgid "Error in ParseTuple\n" +#: src/dird/ua_select.c:381 +msgid "Defined Clients:\n" msgstr "" -#: src/stored/pythonsd.c:218 -msgid "Parse tuple error in job_write\n" +#: src/dird/ua_select.c:391 +msgid "Select the Client" msgstr "" -#: src/stored/pythonsd.c:254 +#: src/dird/ua_select.c:424 src/dird/ua_select.c:447 src/dird/ua_select.c:483 #, c-format -msgid "Error in Python method %s\n" +msgid "Could not find Pool \"%s\": ERR=%s" msgstr "" -#: src/stored/bcopy.c:58 -#, c-format -msgid "" -"Copyright (C) 2002-2005 Kern Sibbald.\n" -"\n" -"Version: %s (%s)\n" -"\n" -"Usage: bcopy [-d debug_level] \n" -" -b bootstrap specify a bootstrap file\n" -" -c specify configuration file\n" -" -d set debug level to nn\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/stored/bcopy.c:185 -msgid "Write of last block failed.\n" +#: src/dird/ua_select.c:462 +msgid "No pools defined. Use the \"create\" command to create one.\n" msgstr "" -#: src/stored/bcopy.c:188 -#, c-format -msgid "%u Jobs copied. %u records copied.\n" +#: src/dird/ua_select.c:466 +msgid "Defined Pools:\n" msgstr "" -#: src/stored/bcopy.c:220 -msgid "Volume is prelabeled. This volume cannot be copied.\n" +#: src/dird/ua_select.c:476 +msgid "Select the Pool" msgstr "" -#: src/stored/bcopy.c:223 -msgid "Volume label not copied.\n" +#: src/dird/ua_select.c:506 +#, c-format +msgid "No access to Pool \"%s\"\n" msgstr "" -#: src/stored/bcopy.c:247 -msgid "EOM label not copied.\n" +#: src/dird/ua_select.c:532 +msgid "Enter MediaId or Volume name: " msgstr "" -#: src/stored/bcopy.c:250 -msgid "EOT label not copied.\n" +#: src/dird/ua_select.c:558 +msgid "The defined Pool resources are:\n" msgstr "" -#: src/stored/record.c:60 -#, c-format -msgid "unknown: %d" +#: src/dird/ua_select.c:566 +msgid "Select Pool resource" msgstr "" -#: src/stored/record.c:367 -msgid "Damaged buffer\n" +#: src/dird/ua_select.c:601 +msgid "Enter the JobId to select: " msgstr "" -#: src/stored/device.c:100 +#: src/dird/ua_select.c:638 #, c-format -msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" +msgid "Could not find Job \"%s\": ERR=%s" msgstr "" -#: src/stored/device.c:114 +#: src/dird/ua_select.c:705 #, c-format -msgid "New volume \"%s\" mounted on device %s at %s.\n" +msgid "Automatically selected %s: %s\n" msgstr "" -#: src/stored/device.c:126 +#: src/dird/ua_select.c:710 #, c-format -msgid "write_block_to_device Volume label failed. ERR=%s" +msgid "Cannot select %s in batch mode.\n" msgstr "" -#: src/stored/device.c:162 -#, c-format -msgid "write_block_to_device overflow block failed. ERR=%s" +#: src/dird/ua_select.c:722 +msgid "Selection is empty!\n" msgstr "" -#: src/stored/device.c:297 -#, c-format -msgid "Unable to open archive %s: ERR=%s\n" +#: src/dird/ua_select.c:728 +msgid "Item 1 selected automatically.\n" msgstr "" -#: src/stored/device.c:311 -#, c-format -msgid "Device write lock failure. ERR=%s\n" +#: src/dird/ua_select.c:739 +msgid "Selection aborted, nothing done.\n" msgstr "" -#: src/stored/device.c:319 +#: src/dird/ua_select.c:744 #, c-format -msgid "Device write unlock failure. ERR=%s\n" +msgid "Please enter a number between 1 and %d\n" msgstr "" -#: src/stored/device.c:338 -#, c-format -msgid "pthread_cond_wait failure. ERR=%s\n" +#: src/dird/ua_select.c:793 +msgid "Storage name given twice.\n" msgstr "" -#: src/stored/read_record.c:68 +#: src/dird/ua_select.c:810 #, c-format -msgid "End of Volume at file %u on device %s, Volume \"%s\"\n" -msgstr "" - -#: src/stored/read_record.c:71 -msgid "End of all volumes.\n" +msgid "Expecting jobid=nn command, got: %s\n" msgstr "" -#: src/stored/read_record.c:110 +#: src/dird/ua_select.c:814 #, c-format -msgid "Got EOF at file %u on device %s, Volume \"%s\"\n" -msgstr "" - -#: src/stored/read_record.c:124 -msgid "Did fsr\n" +msgid "JobId %s is not running.\n" msgstr "" -#: src/stored/read_record.c:281 +#: src/dird/ua_select.c:823 #, c-format -msgid "Reposition from (file:block) %u:%u to %u:%u\n" +msgid "Expecting job=xxx, got: %s.\n" msgstr "" -#: src/stored/read_record.c:308 +#: src/dird/ua_select.c:827 #, c-format -msgid "Forward spacing to file:block %u:%u.\n" +msgid "Job \"%s\" is not running.\n" msgstr "" -#: src/stored/read_record.c:334 -msgid "Begin Session" +#: src/dird/ua_select.c:843 +#, c-format +msgid "Storage resource \"%s\": not found\n" msgstr "" -#: src/stored/read_record.c:338 -msgid "End Session" +#: src/dird/ua_select.c:875 +msgid "Enter autochanger drive[0]: " msgstr "" -#: src/stored/read_record.c:344 -#, c-format -msgid "Unknown code %d\n" +#: src/dird/ua_select.c:905 +msgid "Media Types defined in conf file:\n" msgstr "" -#: src/stored/mac.c:68 -#, c-format -msgid "No Volume names found for %s.\n" +#: src/dird/ua_select.c:911 +msgid "Media Type" msgstr "" -#: src/testprogs/schedule.c:37 -#, c-format -msgid "" -"\n" -"Version: " +#: src/dird/ua_select.c:911 +msgid "Select the Media Type" msgstr "" -#: src/testprogs/schedule.c:37 src/console/console.c:103 src/dird/admin.c:108 +#: src/dird/ua_server.c:61 #, c-format -msgid " (" +msgid "Cannot create UA thread: %s\n" msgstr "" -#: src/testprogs/schedule.c:37 -#, c-format -msgid "" -")\n" -"\n" -"Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n" -" -c set configuration file to file\n" -" -dnn set debug level to nn\n" -" -f run in foreground (for debugging)\n" -" -r run now\n" -" -s no signals\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" +#: src/dird/ua_server.c:142 +msgid "You have messages.\n" msgstr "" -#: src/testprogs/schedule.c:192 src/dird/dird.c:474 -#, c-format -msgid "" -"No Director resource defined in %s\n" -"Without that I don't know who I am :-(\n" +#: src/dird/ua_status.c:126 +msgid "Status available for:\n" msgstr "" -#: src/testprogs/schedule.c:197 -msgid "No working directory specified. Cannot continue.\n" +#: src/dird/ua_status.c:132 +msgid "Select daemon type for status" msgstr "" -#: src/testprogs/schedule.c:204 src/filed/filed.c:295 src/dird/dird.c:482 +#: src/dird/ua_status.c:245 #, c-format -msgid "No Messages resource defined in %s\n" +msgid "%s Version: %s (%s) %s %s %s\n" msgstr "" -#: src/testprogs/schedule.c:209 src/dird/dird.c:487 +#: src/dird/ua_status.c:249 src/stored/status.c:71 #, c-format -msgid "Only one Director resource permitted in %s\n" +msgid "Daemon started %s, 1 Job run since started.\n" msgstr "" -#: src/testprogs/schedule.c:216 src/dird/dird.c:541 +#: src/dird/ua_status.c:252 src/stored/status.c:74 #, c-format -msgid "No Job records defined in %s\n" +msgid "Daemon started %s, %d Jobs run since started.\n" msgstr "" -#: src/testprogs/schedule.c:221 +#: src/dird/ua_status.c:257 src/filed/status.c:121 src/stored/status.c:78 #, c-format -msgid "No Client record defined for job %s\n" +msgid " Heap: bytes=%s max_bytes=%s bufs=%s max_bufs=%s\n" msgstr "" -#: src/testprogs/schedule.c:225 -#, c-format -msgid "No FileSet record defined for job %s\n" +#: src/dird/ua_status.c:277 src/dird/ua_status.c:493 src/dird/ua_status.c:655 +#: src/filed/status.c:198 src/filed/status.c:277 src/stored/status.c:345 +#: src/stored/status.c:361 src/stored/status.c:438 +msgid "====\n" msgstr "" -#: src/testprogs/schedule.c:229 +#: src/dird/ua_status.c:289 #, c-format -msgid "No Storage resource defined for job %s\n" +msgid "" +"\n" +"Failed to connect to Storage daemon %s.\n" +"====\n" msgstr "" -#: src/testprogs/schedule.c:233 +#: src/dird/ua_status.c:327 #, c-format -msgid "No Pool resource defined for job %s\n" +msgid "" +"Failed to connect to Client %s.\n" +"====\n" msgstr "" -#: src/testprogs/schedule.c:242 -#, c-format -msgid "No Catalog resource defined for client %s\n" +#: src/dird/ua_status.c:335 +msgid "Connected to file daemon\n" msgstr "" -#: src/testprogs/testfind.c:46 src/testprogs/testfind.map.c:48 -#, c-format +#: src/dird/ua_status.c:350 msgid "" "\n" -"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -dnn set debug level to nn\n" -" -e specify file of exclude patterns\n" -" -i specify file of include patterns\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" +"Scheduled Jobs:\n" msgstr "" -#: src/testprogs/testfind.c:155 src/testprogs/testfind.map.c:160 -#: src/tools/testfind.c:160 -#, c-format +#: src/dird/ua_status.c:351 msgid "" -"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" +"Level Type Pri Scheduled Name Volume\n" msgstr "" -#: src/testprogs/testfind.c:292 src/testprogs/testfind.map.c:256 -#: src/tools/testls.c:178 src/tools/testfind.c:240 -#, c-format -msgid "Err: Could not access %s: %s\n" +#: src/dird/ua_status.c:352 +msgid "===================================================================================\n" msgstr "" -#: src/testprogs/testfind.c:295 src/testprogs/testfind.map.c:259 -#: src/tools/testls.c:181 src/tools/testfind.c:243 +#: src/dird/ua_status.c:399 #, c-format -msgid "Err: Could not follow ff->link %s: %s\n" +msgid "%-14s %-8s %3d %-18s %-18s %s\n" msgstr "" -#: src/testprogs/testfind.c:298 src/testprogs/testfind.map.c:262 -#: src/tools/testls.c:184 src/tools/testfind.c:246 -#, c-format -msgid "Err: Could not stat %s: %s\n" +#: src/dird/ua_status.c:491 +msgid "No Scheduled Jobs.\n" msgstr "" -#: src/testprogs/testfind.c:301 src/testprogs/testfind.map.c:265 -#: src/tools/testls.c:187 src/tools/testfind.c:249 -#, c-format -msgid "Skip: File not saved. No change. %s\n" +#: src/dird/ua_status.c:508 src/stored/status.c:277 +msgid "" +"\n" +"Running Jobs:\n" msgstr "" -#: src/testprogs/testfind.c:304 src/testprogs/testfind.map.c:268 -#: src/tools/testls.c:190 src/tools/testfind.c:252 +#: src/dird/ua_status.c:516 #, c-format -msgid "Err: Attempt to backup archive. Not saved. %s\n" +msgid "Console connected at %s\n" msgstr "" -#: src/testprogs/testfind.c:307 src/testprogs/testfind.map.c:271 -#: src/tools/testls.c:193 -#, c-format -msgid "Recursion turned off. Directory not entered. %s\n" +#: src/dird/ua_status.c:526 +msgid "" +"No Jobs running.\n" +"====\n" msgstr "" -#: src/testprogs/testfind.c:310 src/testprogs/testfind.map.c:274 -#: src/tools/testls.c:196 -#, c-format -msgid "Skip: File system change prohibited. Directory not entered. %s\n" +#: src/dird/ua_status.c:531 +msgid " JobId Level Name Status\n" msgstr "" -#: src/testprogs/testfind.c:313 src/testprogs/testfind.map.c:277 -#: src/tools/testls.c:199 src/tools/testfind.c:255 -#, c-format -msgid "Err: Could not open directory %s: %s\n" +#: src/dird/ua_status.c:532 src/filed/status.c:221 src/stored/status.c:382 +msgid "======================================================================\n" msgstr "" -#: src/testprogs/testfind.c:316 src/testprogs/testfind.map.c:280 -#: src/tools/testls.c:202 src/tools/testfind.c:258 -#, c-format -msgid "Err: Unknown file ff->type %d: %s\n" +#: src/dird/ua_status.c:540 +msgid "is waiting execution" msgstr "" -#: src/testprogs/testfind.c:366 src/testprogs/testfind.map.c:330 -#: src/tools/testfind.c:308 -#, c-format -msgid "===== Filename truncated to 255 chars: %s\n" +#: src/dird/ua_status.c:543 +msgid "is running" msgstr "" -#: src/testprogs/testfind.c:383 src/testprogs/testfind.map.c:347 -#: src/tools/testfind.c:325 -#, c-format -msgid "========== Path name truncated to 255 chars: %s\n" +#: src/dird/ua_status.c:546 +msgid "is blocked" msgstr "" -#: src/testprogs/testfind.c:392 src/testprogs/testfind.map.c:356 -#: src/tools/testfind.c:334 -#, c-format -msgid "========== Path length is zero. File=%s\n" +#: src/dird/ua_status.c:549 +msgid "has terminated" msgstr "" -#: src/testprogs/window.c:608 -msgid "Folder" +#: src/dird/ua_status.c:552 +msgid "has erred" msgstr "" -#: src/testprogs/window.c:744 src/testprogs/window.c:753 -#: src/testprogs/window.c:2449 src/testprogs/window.c:4167 -msgid "File Roller" +#: src/dird/ua_status.c:555 +msgid "has errors" msgstr "" -#: src/testprogs/window.c:752 -msgid "[read only]" +#: src/dird/ua_status.c:558 +msgid "has a fatal error" msgstr "" -#: src/testprogs/window.c:846 -#, c-format -msgid "1 file (%s)" +#: src/dird/ua_status.c:561 +msgid "has verify differences" msgstr "" -#: src/testprogs/window.c:849 -#, c-format -msgid "%d files (%s)" +#: src/dird/ua_status.c:564 +msgid "has been canceled" msgstr "" -#: src/testprogs/window.c:857 +#: src/dird/ua_status.c:568 #, c-format -msgid "1 file selected (%s)" +msgid "is waiting on Client %s" msgstr "" -#: src/testprogs/window.c:860 +#: src/dird/ua_status.c:574 #, c-format -msgid "%d files selected (%s)" +msgid "is waiting on Storage %s" msgstr "" -#: src/testprogs/window.c:1149 -msgid "Reading archive" +#: src/dird/ua_status.c:579 +msgid "is waiting on max Storage jobs" msgstr "" -#: src/testprogs/window.c:1152 -msgid "Deleting files from archive" +#: src/dird/ua_status.c:582 +msgid "is waiting on max Client jobs" msgstr "" -#: src/testprogs/window.c:1155 -msgid "Adding files to archive" -msgstr "" +#: src/dird/ua_status.c:585 +msgid "is waiting on max Job jobs" +msgstr "" -#: src/testprogs/window.c:1158 -msgid "Extracting files from archive" +#: src/dird/ua_status.c:588 +msgid "is waiting on max total jobs" msgstr "" -#: src/testprogs/window.c:1161 -msgid "Testing archive" +#: src/dird/ua_status.c:591 +msgid "is waiting for its start time" msgstr "" -#: src/testprogs/window.c:1167 -msgid "wait please..." +#: src/dird/ua_status.c:594 +msgid "is waiting for higher priority jobs to finish" msgstr "" -#: src/testprogs/window.c:1253 -msgid "Operation stopped" +#: src/dird/ua_status.c:599 +#, c-format +msgid "is in unknown state %c" msgstr "" -#: src/testprogs/window.c:1271 -msgid "An error occurred while extracting files." +#: src/dird/ua_status.c:613 +msgid "is waiting for a mount request" msgstr "" -#: src/testprogs/window.c:1275 -msgid "An error occurred while loading the archive." +#: src/dird/ua_status.c:620 +msgid "is waiting for an appendable Volume" msgstr "" -#: src/testprogs/window.c:1279 -msgid "An error occurred while deleting files from the archive." +#: src/dird/ua_status.c:627 +#, c-format +msgid "is waiting for Client %s to connect to Storage %s" msgstr "" -#: src/testprogs/window.c:1283 -msgid "An error occurred while adding files to the archive." +#: src/dird/ua_status.c:643 +#, c-format +msgid "%6d %-6s %-20s %s\n" msgstr "" -#: src/testprogs/window.c:1287 -msgid "An error occurred while testing archive." +#: src/dird/ua_status.c:665 src/filed/status.c:211 src/stored/status.c:373 +msgid "No Terminated Jobs.\n" msgstr "" -#: src/testprogs/window.c:1293 -msgid "Command not found." +#: src/dird/ua_status.c:670 src/stored/status.c:378 +msgid "" +"\n" +"Terminated Jobs:\n" msgstr "" -#: src/testprogs/window.c:1296 -msgid "Command exited abnormally." +#: src/dird/ua_status.c:671 +msgid " JobId Level Files Bytes Status Finished Name \n" msgstr "" -#: src/testprogs/window.c:1588 -msgid "You don't have permissions to add files to this archive." +#: src/dird/ua_status.c:672 +msgid "========================================================================\n" msgstr "" -#: src/testprogs/window.c:1610 -msgid "You can't add an archive to itself." +#: src/dird/ua_status.c:703 src/filed/status.c:241 src/lib/util.c:178 +#: src/stored/status.c:402 +msgid "Created" msgstr "" -#: src/testprogs/window.c:1770 -msgid "" -"Do you want to add this file to the current archive or open it as a new " -"archive?" +#: src/dird/ua_status.c:707 src/filed/status.c:245 src/lib/util.c:191 +#: src/lib/util.c:258 src/stored/status.c:406 +msgid "Error" msgstr "" -#: src/testprogs/window.c:1813 -msgid "Do you want to create a new archive with these files?" +#: src/dird/ua_status.c:710 src/filed/status.c:248 src/stored/status.c:409 +msgid "Diffs" msgstr "" -#: src/testprogs/window.c:1815 -msgid "Create _Archive" +#: src/dird/ua_status.c:716 src/filed/status.c:254 src/lib/util.c:187 +#: src/lib/util.c:254 src/stored/btape.c:1158 src/stored/status.c:415 +#: src/wx-console/wxbconfigpanel.cpp:180 +msgid "OK" msgstr "" -#: src/testprogs/window.c:2158 -msgid "Name" +#: src/dird/ua_status.c:719 src/filed/status.c:257 src/stored/status.c:418 +msgid "Other" msgstr "" -#: src/testprogs/window.c:2617 -msgid "_Up" +#: src/dird/ua_status.c:722 src/filed/status.c:268 src/stored/status.c:429 +#, c-format +msgid "%6d %-6s %8s %14s %-7s %-8s %s\n" msgstr "" -#: src/testprogs/window.c:2639 -msgid "Current Location:" +#: src/dird/ua_status.c:730 src/stored/btape.c:180 +msgid "\n" msgstr "" -#: src/testprogs/window.c:2671 src/wx-console/wxbrestorepanel.cpp:245 -#: src/wx-console/wxbrestorepanel.cpp:299 -msgid "Add" +#: src/dird/ua_tree.c:58 +msgid "change current directory" msgstr "" -#: src/testprogs/window.c:2672 -msgid "Add files to the archive" +#: src/dird/ua_tree.c:59 +msgid "count marked files in and below the cd" msgstr "" -#: src/testprogs/window.c:2682 -msgid "Extract" +#: src/dird/ua_tree.c:60 src/dird/ua_tree.c:61 +msgid "long list current directory, wildcards allowed" msgstr "" -#: src/testprogs/window.c:2683 -msgid "Extract files from the archive" +#: src/dird/ua_tree.c:62 +msgid "leave file selection mode" msgstr "" -#: src/testprogs/window.c:2693 -msgid "View" +#: src/dird/ua_tree.c:63 +msgid "estimate restore size" msgstr "" -#: src/testprogs/window.c:2694 -msgid "View selected file" +#: src/dird/ua_tree.c:64 +msgid "same as done command" msgstr "" -#: src/testprogs/window.c:3093 -msgid "File type not supported." +#: src/dird/ua_tree.c:65 +msgid "find files, wildcards allowed" msgstr "" -#: src/testprogs/window.c:3162 -msgid "Cannot load archive." +#: src/dird/ua_tree.c:66 src/dird/ua_tree.c:75 +msgid "print help" msgstr "" -#: src/testprogs/window.c:3227 -msgid "Destination folder does not exist. Do you want to create it?" +#: src/dird/ua_tree.c:67 +msgid "list current directory, wildcards allowed" msgstr "" -#: src/testprogs/window.c:3229 -msgid "Create _Folder" +#: src/dird/ua_tree.c:68 +msgid "list the marked files in and below the cd" msgstr "" -#: src/testprogs/window.c:3249 -#, c-format -msgid "" -"Could not create the destination folder: %s.\n" -"Extraction not performed." +#: src/dird/ua_tree.c:69 +msgid "mark dir/file to be restored recursively, wildcards allowed" msgstr "" -#: src/testprogs/window.c:3264 -msgid "Extraction not performed." +#: src/dird/ua_tree.c:70 +msgid "mark directory name to be restored (no files)" msgstr "" -#: src/testprogs/window.c:3576 -msgid "Last Output" +#: src/dird/ua_tree.c:71 +msgid "print current working directory" msgstr "" -#: src/testprogs/window.c:4102 -msgid "Add files to an archive" +#: src/dird/ua_tree.c:72 +msgid "unmark dir/file to be restored recursively in dir" msgstr "" -#: src/testprogs/window.c:4127 -msgid "Extract archive" +#: src/dird/ua_tree.c:73 +msgid "unmark directory name only no recursion" msgstr "" -#: src/cats/sql_list.c:53 -#, c-format -msgid "Query failed: %s\n" +#: src/dird/ua_tree.c:74 +msgid "quit and do not do restore" msgstr "" -#: src/cats/sql.c:96 -#, c-format +#: src/dird/ua_tree.c:94 msgid "" -"query %s failed:\n" -"%s\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/cats/sql.c:118 +#: src/dird/ua_tree.c:104 src/dird/ua_tree.c:664 src/dird/ua_tree.c:672 #, c-format -msgid "" -"insert %s failed:\n" -"%s\n" +msgid "cwd is: %s\n" msgstr "" -#: src/cats/sql.c:132 -#, c-format -msgid "Insertion problem: affected_rows=%s\n" +#: src/dird/ua_tree.c:125 +msgid "Illegal command. Enter \"done\" to exit.\n" msgstr "" -#: src/cats/sql.c:152 -#, c-format -msgid "" -"update %s failed:\n" -"%s\n" +#: src/dird/ua_tree.c:298 src/dird/ua_tree.c:309 src/dird/ua_tree.c:326 +msgid "No files marked.\n" msgstr "" -#: src/cats/sql.c:162 -#, c-format -msgid "Update problem: affected_rows=%s\n" +#: src/dird/ua_tree.c:311 +msgid "1 file marked.\n" msgstr "" -#: src/cats/sql.c:183 +#: src/dird/ua_tree.c:313 #, c-format -msgid "" -"delete %s failed:\n" -"%s\n" +msgid "%s files marked.\n" msgstr "" -#: src/cats/sql.c:209 src/cats/sql.c:216 src/cats/sql_create.c:823 -#: src/cats/sql_get.c:180 src/cats/sql_get.c:231 src/cats/sql_get.c:624 -#: src/cats/sql_get.c:699 src/cats/sql_get.c:926 -#, c-format -msgid "error fetching row: %s\n" +#: src/dird/ua_tree.c:340 +msgid "No directories marked.\n" msgstr "" -#: src/cats/sql.c:326 src/dird/catreq.c:375 src/dird/catreq.c:449 -#, c-format -msgid "Attribute create error. %s" +#: src/dird/ua_tree.c:342 +msgid "1 directory marked.\n" msgstr "" -#: src/cats/sql.c:407 +#: src/dird/ua_tree.c:344 #, c-format -msgid "Path length is zero. File=%s\n" +msgid "%s directories marked.\n" msgstr "" -#: src/cats/sql.c:451 -msgid "No results to list.\n" +#: src/dird/ua_tree.c:365 +#, c-format +msgid "%s total files/dirs. %s marked to be restored.\n" msgstr "" -#: src/cats/mysql.c:60 -msgid "A user name for MySQL must be supplied.\n" +#: src/dird/ua_tree.c:376 +msgid "No file specification given.\n" msgstr "" -#: src/cats/mysql.c:124 src/cats/postgresql.c:128 src/cats/sqlite.c:122 -#: src/cats/bdb.c:152 +#: src/dird/ua_tree.c:520 #, c-format -msgid "Unable to initialize DB lock. ERR=%s\n" +msgid "Node %s has no children.\n" msgstr "" -#: src/cats/mysql.c:161 +#: src/dird/ua_tree.c:611 #, c-format -msgid "" -"Unable to connect to MySQL server. \n" -"Database=%s User=%s\n" -"It is probably not running or your password is incorrect.\n" +msgid "%d total files; %d marked to be restored; %s bytes.\n" msgstr "" -#: src/cats/mysql.c:320 src/cats/postgresql.c:264 src/cats/sqlite.c:323 -#, c-format -msgid "Query failed: %s: ERR=%s\n" +#: src/dird/ua_tree.c:656 +msgid "Invalid path given.\n" msgstr "" -#: src/cats/postgresql.c:62 -msgid "A user name for PostgreSQL must be supplied.\n" +#: src/dird/ua_tree.c:683 src/dird/ua_tree.c:694 +msgid "No files unmarked.\n" msgstr "" -#: src/cats/postgresql.c:165 -#, c-format -msgid "" -"Unable to connect to PostgreSQL server.\n" -"Database=%s User=%s\n" -"It is probably not running or your password is incorrect.\n" +#: src/dird/ua_tree.c:696 +msgid "1 file unmarked.\n" msgstr "" -#: src/cats/postgresql.c:506 +#: src/dird/ua_tree.c:698 #, c-format -msgid "error fetching currval: %s\n" +msgid "%d files unmarked.\n" msgstr "" -#: src/cats/sql_delete.c:79 -#, c-format -msgid "No pool record %s exists\n" +#: src/dird/ua_tree.c:709 src/dird/ua_tree.c:725 +msgid "No directories unmarked.\n" msgstr "" -#: src/cats/sql_delete.c:84 -#, c-format -msgid "Expecting one pool record, got %d\n" +#: src/dird/ua_tree.c:727 +msgid "1 directory unmarked.\n" msgstr "" -#: src/cats/sql_delete.c:90 +#: src/dird/ua_tree.c:729 #, c-format -msgid "Error fetching row %s\n" +msgid "%d directories unmarked.\n" msgstr "" -#: src/cats/sql_create.c:86 -#, c-format -msgid "Create DB Job record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:79 +msgid "Update choice:\n" msgstr "" -#: src/cats/sql_create.c:135 -#, c-format -msgid "Create DB MAC record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:80 +msgid "Volume parameters" msgstr "" -#: src/cats/sql_create.c:182 -#, c-format -msgid "Create JobMedia record %s failed: ERR=%s\n" +#: src/dird/ua_update.c:81 +msgid "Pool from resource" msgstr "" -#: src/cats/sql_create.c:191 -#, c-format -msgid "Update Media record %s failed: ERR=%s\n" +#: src/dird/ua_update.c:82 +msgid "Slots from autochanger" msgstr "" -#: src/cats/sql_create.c:221 -#, c-format -msgid "pool record %s already exists\n" +#: src/dird/ua_update.c:83 +msgid "item" msgstr "" -#: src/cats/sql_create.c:247 -#, c-format -msgid "Create db Pool record %s failed: ERR=%s\n" +#: src/dird/ua_update.c:83 +msgid "Choose catalog item to update" msgstr "" -#: src/cats/sql_create.c:278 +#: src/dird/ua_update.c:122 #, c-format -msgid "Device record %s already exists\n" +msgid "Invalid VolStatus specified: %s\n" msgstr "" -#: src/cats/sql_create.c:294 +#: src/dird/ua_update.c:131 #, c-format -msgid "Create db Device record %s failed: ERR=%s\n" +msgid "New Volume status is: %s\n" msgstr "" -#: src/cats/sql_create.c:327 +#: src/dird/ua_update.c:141 #, c-format -msgid "More than one Storage record!: %d\n" +msgid "Invalid retention period specified: %s\n" msgstr "" -#: src/cats/sql_create.c:332 +#: src/dird/ua_update.c:149 #, c-format -msgid "error fetching Storage row: %s\n" +msgid "New retention period is: %s\n" msgstr "" -#: src/cats/sql_create.c:352 +#: src/dird/ua_update.c:160 #, c-format -msgid "Create DB Storage record %s failed. ERR=%s\n" +msgid "Invalid use duration specified: %s\n" msgstr "" -#: src/cats/sql_create.c:384 +#: src/dird/ua_update.c:168 #, c-format -msgid "mediatype record %s already exists\n" +msgid "New use duration is: %s\n" msgstr "" -#: src/cats/sql_create.c:400 +#: src/dird/ua_update.c:182 #, c-format -msgid "Create db mediatype record %s failed: ERR=%s\n" +msgid "New max jobs is: %s\n" msgstr "" -#: src/cats/sql_create.c:434 +#: src/dird/ua_update.c:195 #, c-format -msgid "Volume \"%s\" already exists.\n" +msgid "New max files is: %s\n" msgstr "" -#: src/cats/sql_create.c:472 +#: src/dird/ua_update.c:206 #, c-format -msgid "Create DB Media record %s failed. ERR=%s\n" +msgid "Invalid max. bytes specification: %s\n" msgstr "" -#: src/cats/sql_create.c:520 +#: src/dird/ua_update.c:214 #, c-format -msgid "More than one Client!: %d\n" +msgid "New Max bytes is: %s\n" msgstr "" -#: src/cats/sql_create.c:525 -#, c-format -msgid "error fetching Client row: %s\n" +#: src/dird/ua_update.c:228 src/dird/ua_update.c:252 +msgid "Invalid value. It must be yes or no.\n" msgstr "" -#: src/cats/sql_create.c:552 +#: src/dird/ua_update.c:236 #, c-format -msgid "Create DB Client record %s failed. ERR=%s\n" +msgid "New Recycle flag is: %s\n" msgstr "" -#: src/cats/sql_create.c:595 +#: src/dird/ua_update.c:260 #, c-format -msgid "Create DB Counters record %s failed. ERR=%s\n" +msgid "New InChanger flag is: %s\n" msgstr "" -#: src/cats/sql_create.c:628 +#: src/dird/ua_update.c:278 #, c-format -msgid "More than one FileSet!: %d\n" +msgid "Invalid slot, it must be between 0 and MaxVols=%d\n" msgstr "" -#: src/cats/sql_create.c:633 +#: src/dird/ua_update.c:287 src/dird/ua_update.c:577 #, c-format -msgid "error fetching FileSet row: ERR=%s\n" +msgid "Error updating media record Slot: ERR=%s" msgstr "" -#: src/cats/sql_create.c:663 +#: src/dird/ua_update.c:289 #, c-format -msgid "Create DB FileSet record %s failed. ERR=%s\n" +msgid "New Slot is: %d\n" msgstr "" -#: src/cats/sql_create.c:720 +#: src/dird/ua_update.c:316 #, c-format -msgid "Attempt to put non-attributes into catalog. Stream=%d\n" +msgid "New Pool is: %s\n" msgstr "" -#: src/cats/sql_create.c:783 +#: src/dird/ua_update.c:345 #, c-format -msgid "Create db File record %s failed. ERR=%s" +msgid "Error updating Volume record: ERR=%s" msgstr "" -#: src/cats/sql_create.c:816 src/cats/sql_get.c:224 +#: src/dird/ua_update.c:347 #, c-format -msgid "More than one Path!: %s for path: %s\n" +msgid "Volume defaults updated from \"%s\" Pool record.\n" msgstr "" -#: src/cats/sql_create.c:847 +#: src/dird/ua_update.c:369 #, c-format -msgid "Create db Path record %s failed. ERR=%s\n" +msgid "Error updating Volume records: ERR=%s" msgstr "" -#: src/cats/sql_create.c:880 -#, c-format -msgid "More than one Filename! %s for file: %s\n" +#: src/dird/ua_update.c:371 +msgid "All Volume defaults updated from Pool record.\n" msgstr "" -#: src/cats/sql_create.c:886 -#, c-format -msgid "Error fetching row for file=%s: ERR=%s\n" +#: src/dird/ua_update.c:391 +msgid "VolStatus" msgstr "" -#: src/cats/sql_create.c:902 -#, c-format -msgid "Create db Filename record %s failed. ERR=%s\n" +#: src/dird/ua_update.c:392 +msgid "VolRetention" msgstr "" -#: src/cats/bdb_update.c:83 src/cats/bdb_update.c:114 -#, c-format -msgid "Error updating DB Job file. ERR=%s\n" +#: src/dird/ua_update.c:393 +msgid "VolUse" msgstr "" -#: src/cats/bdb_update.c:153 src/cats/bdb_update.c:189 -#, c-format -msgid "Error updating DB Media file. ERR=%s\n" +#: src/dird/ua_update.c:394 +msgid "MaxVolJobs" msgstr "" -#: src/cats/sqlite.c:136 -#, c-format -msgid "Database %s does not exist, please create it.\n" +#: src/dird/ua_update.c:395 +msgid "MaxVolFiles" msgstr "" -#: src/cats/sqlite.c:161 -#, c-format -msgid "Unable to open Database=%s. ERR=%s\n" +#: src/dird/ua_update.c:396 +msgid "MaxVolBytes" msgstr "" -#: src/cats/sqlite.c:162 src/lib/bnet_server.c:371 -msgid "unknown" +#: src/dird/ua_update.c:397 +msgid "Recycle" msgstr "" -#: src/cats/sqlite.c:221 -#, c-format -msgid "next_index query error: ERR=%s\n" +#: src/dird/ua_update.c:398 +msgid "InChanger" msgstr "" -#: src/cats/sqlite.c:226 -#, c-format -msgid "Error fetching index: ERR=%s\n" +#: src/dird/ua_update.c:399 src/dird/ua_update.c:472 +msgid "Slot" msgstr "" -#: src/cats/sqlite.c:236 -#, c-format -msgid "next_index update error: ERR=%s\n" +#: src/dird/ua_update.c:401 +msgid "FromPool" msgstr "" -#: src/cats/sql_find.c:90 src/cats/sql_find.c:119 -#, c-format -msgid "" -"Query error for start time request: ERR=%s\n" -"CMD=%s\n" +#: src/dird/ua_update.c:402 +msgid "AllFromPool" msgstr "" -#: src/cats/sql_find.c:96 -msgid "No prior Full backup Job record found.\n" +#: src/dird/ua_update.c:463 +#, c-format +msgid "Updating Volume \"%s\"\n" msgstr "" -#: src/cats/sql_find.c:108 -#, c-format -msgid "Unknown level=%d\n" +#: src/dird/ua_update.c:465 +msgid "Volume Status" msgstr "" -#: src/cats/sql_find.c:125 -#, c-format -msgid "" -"No Job record found: ERR=%s\n" -"CMD=%s\n" +#: src/dird/ua_update.c:466 +msgid "Volume Retention Period" msgstr "" -#: src/cats/sql_find.c:224 -#, c-format -msgid "Unknown Job level=%d\n" +#: src/dird/ua_update.c:467 +msgid "Volume Use Duration" msgstr "" -#: src/cats/sql_find.c:234 -#, c-format -msgid "No Job found for: %s.\n" +#: src/dird/ua_update.c:468 +msgid "Maximum Volume Jobs" msgstr "" -#: src/cats/sql_find.c:245 -#, c-format -msgid "No Job found for: %s\n" +#: src/dird/ua_update.c:469 +msgid "Maximum Volume Files" msgstr "" -#: src/cats/sql_find.c:317 -#, c-format -msgid "Request for Volume item %d greater than max %d\n" +#: src/dird/ua_update.c:470 +msgid "Maximum Volume Bytes" msgstr "" -#: src/cats/sql_find.c:329 -#, c-format -msgid "No Volume record found for item %d.\n" +#: src/dird/ua_update.c:471 +msgid "Recycle Flag" msgstr "" -#: src/cats/sql_get.c:130 -#, c-format -msgid "get_file_record want 1 got rows=%d\n" +#: src/dird/ua_update.c:473 +msgid "InChanger Flag" msgstr "" -#: src/cats/sql_get.c:135 -#, c-format -msgid "Error fetching row: %s\n" +#: src/dird/ua_update.c:474 +msgid "Volume Files" msgstr "" -#: src/cats/sql_get.c:143 -#, c-format -msgid "File record for PathId=%s FilenameId=%s not found.\n" +#: src/dird/ua_update.c:476 +msgid "Volume from Pool" msgstr "" -#: src/cats/sql_get.c:149 -msgid "File record not found in Catalog.\n" +#: src/dird/ua_update.c:477 +msgid "All Volumes from Pool" msgstr "" -#: src/cats/sql_get.c:174 -#, c-format -msgid "More than one Filename!: %s for file: %s\n" +#: src/dird/ua_update.c:478 +msgid "Done" msgstr "" -#: src/cats/sql_get.c:184 +#: src/dird/ua_update.c:489 #, c-format -msgid "Get DB Filename record %s found bad record: %d\n" +msgid "Current Volume status is: %s\n" msgstr "" -#: src/cats/sql_get.c:190 -#, c-format -msgid "Filename record: %s not found.\n" +#: src/dird/ua_update.c:490 +msgid "Possible Values are:\n" msgstr "" -#: src/cats/sql_get.c:194 -#, c-format -msgid "Filename record: %s not found in Catalog.\n" +#: src/dird/ua_update.c:501 +msgid "Choose new Volume Status" msgstr "" -#: src/cats/sql_get.c:235 +#: src/dird/ua_update.c:507 #, c-format -msgid "Get DB path record %s found bad record: %s\n" +msgid "Current retention period is: %s\n" msgstr "" -#: src/cats/sql_get.c:248 -#, c-format -msgid "Path record: %s not found.\n" +#: src/dird/ua_update.c:509 +msgid "Enter Volume Retention period: " msgstr "" -#: src/cats/sql_get.c:252 +#: src/dird/ua_update.c:516 #, c-format -msgid "Path record: %s not found in Catalog.\n" +msgid "Current use duration is: %s\n" msgstr "" -#: src/cats/sql_get.c:287 -#, c-format -msgid "No Job found for JobId %s\n" +#: src/dird/ua_update.c:518 +msgid "Enter Volume Use Duration: " msgstr "" -#: src/cats/sql_get.c:334 +#: src/dird/ua_update.c:525 #, c-format -msgid "No MAC record found for JobId %s\n" +msgid "Current max jobs is: %u\n" msgstr "" -#: src/cats/sql_get.c:385 src/cats/sql_get.c:441 -#, c-format -msgid "No volumes found for JobId=%d\n" +#: src/dird/ua_update.c:526 +msgid "Enter new Maximum Jobs: " msgstr "" -#: src/cats/sql_get.c:391 src/cats/sql_get.c:452 +#: src/dird/ua_update.c:533 #, c-format -msgid "Error fetching row %d: ERR=%s\n" +msgid "Current max files is: %u\n" msgstr "" -#: src/cats/sql_get.c:405 -#, c-format -msgid "No Volume for JobId %d found in Catalog.\n" +#: src/dird/ua_update.c:534 +msgid "Enter new Maximum Files: " msgstr "" -#: src/cats/sql_get.c:540 +#: src/dird/ua_update.c:541 #, c-format -msgid "Pool id select failed: ERR=%s\n" +msgid "Current value is: %s\n" msgstr "" -#: src/cats/sql_get.c:577 -#, c-format -msgid "Client id select failed: ERR=%s\n" +#: src/dird/ua_update.c:542 +msgid "Enter new Maximum Bytes: " msgstr "" -#: src/cats/sql_get.c:619 +#: src/dird/ua_update.c:550 #, c-format -msgid "More than one Pool!: %s\n" +msgid "Current recycle flag is: %s\n" msgstr "" -#: src/cats/sql_get.c:660 -msgid "Pool record not found in Catalog.\n" +#: src/dird/ua_update.c:552 +msgid "Enter new Recycle status: " msgstr "" -#: src/cats/sql_get.c:694 +#: src/dird/ua_update.c:559 #, c-format -msgid "More than one Client!: %s\n" +msgid "Current Slot is: %d\n" msgstr "" -#: src/cats/sql_get.c:711 src/cats/sql_get.c:715 -msgid "Client record not found in Catalog.\n" +#: src/dird/ua_update.c:560 +msgid "Enter new Slot: " msgstr "" -#: src/cats/sql_get.c:740 +#: src/dird/ua_update.c:567 #, c-format -msgid "More than one Counter!: %d\n" +msgid "Current InChanger flag is: %d\n" msgstr "" -#: src/cats/sql_get.c:745 -#, c-format -msgid "error fetching Counter row: %s\n" +#: src/dird/ua_update.c:568 +msgid "Set InChanger flag? yes/no: " msgstr "" -#: src/cats/sql_get.c:765 +#: src/dird/ua_update.c:579 #, c-format -msgid "Counter record: %s not found in Catalog.\n" +msgid "New InChanger flag is: %d\n" msgstr "" -#: src/cats/sql_get.c:801 -#, c-format -msgid "Error got %s FileSets but expected only one!\n" +#: src/dird/ua_update.c:586 +msgid "" +"Warning changing Volume Files can result\n" +"in loss of data on your Volume\n" +"\n" msgstr "" -#: src/cats/sql_get.c:806 +#: src/dird/ua_update.c:588 #, c-format -msgid "FileSet record \"%s\" not found.\n" +msgid "Current Volume Files is: %u\n" msgstr "" -#: src/cats/sql_get.c:816 -msgid "FileSet record not found in Catalog.\n" +#: src/dird/ua_update.c:589 +msgid "Enter new number of Files for Volume: " msgstr "" -#: src/cats/sql_get.c:873 -#, c-format -msgid "Media id select failed: ERR=%s\n" +#: src/dird/ua_update.c:594 +msgid "Normally, you should only increase Volume Files by one!\n" msgstr "" -#: src/cats/sql_get.c:921 -#, c-format -msgid "More than one Volume!: %s\n" +#: src/dird/ua_update.c:595 +msgid "Continue? (yes/no): " msgstr "" -#: src/cats/sql_get.c:966 +#: src/dird/ua_update.c:605 #, c-format -msgid "Media record MediaId=%s not found.\n" +msgid "New Volume Files is: %u\n" msgstr "" -#: src/cats/sql_get.c:969 +#: src/dird/ua_update.c:617 #, c-format -msgid "Media record for Volume \"%s\" not found.\n" +msgid "Current Pool is: %s\n" msgstr "" -#: src/cats/sql_get.c:976 -#, c-format -msgid "Media record for MediaId=%u not found in Catalog.\n" +#: src/dird/ua_update.c:618 +msgid "Enter new Pool name: " +msgstr "" + +#: src/dird/ua_update.c:631 +msgid "Selection terminated.\n" msgstr "" -#: src/cats/sql_get.c:979 +#: src/dird/ua_update.c:664 #, c-format -msgid "Media record for Vol=%s not found in Catalog.\n" +msgid "db_update_pool_record returned %d. ERR=%s\n" msgstr "" -#: src/cats/bdb.c:128 -msgid "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +#: src/dird/ua_update.c:671 +msgid "Pool DB record updated from resource.\n" msgstr "" -#: src/cats/bdb.c:129 -msgid "WARNING!!!! The Internal Database is NOT OPERATIONAL!\n" -msgstr "" - -#: src/cats/bdb.c:130 -msgid "You should use SQLite, PostgreSQL, or MySQL\n" +#: src/dird/verify.c:87 +msgid "" +"Unable to find JobId of previous InitCatalog Job.\n" +"Please run a Verify with Level=InitCatalog before\n" +"running the current Job.\n" msgstr "" -#: src/cats/bdb.c:162 +#: src/dird/verify.c:117 #, c-format -msgid "Unable to open Catalog DB control file %s: ERR=%s\n" +msgid "Verifying against JobId=%d Job=%s\n" msgstr "" -#: src/cats/bdb.c:217 +#: src/dird/verify.c:187 #, c-format -msgid "Error reading catalog DB control file. ERR=%s\n" +msgid "Start Verify JobId=%s Level=%s Job=%s\n" msgstr "" -#: src/cats/bdb.c:220 -#, c-format -msgid "" -"Error, catalog DB control file wrong version. Wanted %d, got %d\n" -"Please reinitialize the working directory.\n" +#: src/dird/verify.c:266 +msgid "Deprecated feature ... use bootstrap.\n" msgstr "" -#: src/console/authenticate.c:117 src/wx-console/authenticate.c:121 -msgid "TLS negotiation failed\n" +#: src/dird/verify.c:279 +#, c-format +msgid "Unimplemented Verify level %d(%c)\n" msgstr "" -#: src/console/authenticate.c:129 src/gnome2-console/authenticate.c:85 -#: src/tray-monitor/authenticate.c:87 src/pyqt/pconsole.cpp:97 -#: src/pyqt/bacula-gui-gtk/pconsole.cpp:97 src/pyqt/save/pconsole.cpp:97 +#: src/dird/verify.c:331 #, c-format -msgid "Bad response to Hello command: ERR=%s\n" +msgid "Unimplemented verify level %d\n" msgstr "" -#: src/console/authenticate.c:136 src/wx-console/authenticate.c:136 -#: src/gnome2-console/authenticate.c:95 src/tray-monitor/authenticate.c:94 -#: src/pyqt/pconsole.cpp:103 src/pyqt/bacula-gui-gtk/pconsole.cpp:103 -#: src/pyqt/save/pconsole.cpp:103 -msgid "Director rejected Hello command\n" +#: src/dird/verify.c:386 +msgid "Verify OK" msgstr "" -#: src/console/authenticate.c:146 src/wx-console/authenticate.c:146 -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 http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +#: src/dird/verify.c:390 +msgid "*** Verify Error ***" msgstr "" -#: src/console/console_conf.c:123 src/wx-console/console_conf.c:128 -#: src/gnome2-console/console_conf.c:122 -#, c-format -msgid "No record for %d %s\n" +#: src/dird/verify.c:394 +msgid "Verify warnings" msgstr "" -#: src/console/console_conf.c:132 src/wx-console/console_conf.c:137 -#, c-format -msgid "Console: name=%s rcfile=%s histfile=%s\n" +#: src/dird/verify.c:397 +msgid "Verify Canceled" msgstr "" -#: src/console/console_conf.c:136 src/wx-console/console_conf.c:141 -#: src/gnome2-console/console_conf.c:131 -#, c-format -msgid "Director: name=%s address=%s DIRport=%d\n" +#: src/dird/verify.c:400 +msgid "Verify Differences" msgstr "" -#: src/console/console_conf.c:242 src/wx-console/console_conf.c:246 -#: src/gnome2-console/console_conf.c:246 src/tray-monitor/tray_conf.c:262 -#: src/filed/filed_conf.c:332 src/dird/dird_conf.c:1137 -#: src/dird/dird_conf.c:1152 +#: src/dird/verify.c:405 #, c-format -msgid "%s item is required in %s resource, but not found.\n" +msgid "Inappropriate term code: %d %c\n" msgstr "" -#: src/console/console_conf.c:304 src/wx-console/console_conf.c:308 -#: src/gnome2-console/console_conf.c:314 src/tray-monitor/tray_conf.c:341 -#: src/filed/filed_conf.c:416 src/dird/dird_conf.c:1338 +#: src/dird/verify.c:419 #, c-format -msgid "Attempt to define second %s resource named \"%s\" is not permitted.\n" +msgid "" +"Bacula %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 "" -#: src/console/console.c:102 +#: src/dird/verify.c:454 #, c-format msgid "" -"Copyright (C) 2000-2005 Kern Sibbald\n" +"Bacula %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" -"Version: " msgstr "" -#: src/console/console.c:103 +#: src/dird/verify.c:530 #, c-format msgid "" -") %s %s %s\n" -"\n" -"Usage: bconsole [-s] [-c config_file] [-d debug_level]\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" +"birdSD.\n" +msgstr "" + +#: src/filed/backup.c:155 #, c-format -msgid "Cannot open file %s for input. ERR=%s\n" +msgid " Recursion turned off. Will not descend into %s\n" msgstr "" -#: src/console/console.c:802 -msgid "Too many arguments on output/tee command.\n" +#: src/filed/backup.c:162 +#, c-format +msgid " Filesystem change prohibited. Will not descend into %s\n" msgstr "" -#: src/console/console.c:818 +#: src/filed/backup.c:168 #, c-format -msgid "Cannot open file %s for output. ERR=%s\n" +msgid " Disallowed filesystem. Will not descend into %s\n" msgstr "" -#: src/wx-console/authenticate.c:129 -msgid "Bad response to Hello command: ERR=" +#: src/filed/backup.c:186 src/filed/verify.c:113 +#, c-format +msgid " Could not access %s: ERR=%s\n" msgstr "" -#: src/lib/bshm.c:69 +#: src/filed/backup.c:193 src/filed/verify.c:120 #, c-format -msgid "shmget failure key = %x\n" +msgid " Could not follow link %s: ERR=%s\n" msgstr "" -#: src/lib/bshm.c:77 +#: src/filed/backup.c:200 src/filed/verify.c:127 #, c-format -msgid "Could not get %d bytes of shared memory: %s\n" +msgid " Could not stat %s: ERR=%s\n" msgstr "" -#: src/lib/bshm.c:102 +#: src/filed/backup.c:207 src/filed/verify.c:133 #, c-format -msgid "Could not attach shared memory: %s\n" +msgid " Unchanged file skipped: %s\n" msgstr "" -#: src/lib/bshm.c:123 +#: src/filed/backup.c:210 #, c-format -msgid "Error detaching shared memory: %s\n" +msgid " Archive file not saved: %s\n" msgstr "" -#: src/lib/bshm.c:139 +#: src/filed/backup.c:214 src/filed/verify.c:147 #, c-format -msgid "Could not destroy shared memory: %s\n" +msgid " Could not open directory %s: ERR=%s\n" msgstr "" -#: src/lib/lex.c:79 src/wx-console/console_thread.cpp:186 +#: src/filed/backup.c:220 #, c-format -msgid "Problem probably begins at line %d.\n" +msgid " Unknown file type %d; not saved: %s\n" msgstr "" -#: src/lib/lex.c:84 src/wx-console/console_thread.cpp:191 +#: src/filed/backup.c:240 #, c-format -msgid "" -"Config error: %s\n" -" : line %d, col %d of file %s\n" -"%s\n" -"%s" +msgid "Python reader program \"%s\" not found.\n" msgstr "" -#: src/lib/lex.c:88 +#: src/filed/backup.c:269 src/filed/verify.c:214 #, c-format -msgid "Config error: %s\n" +msgid " Cannot open %s: ERR=%s.\n" msgstr "" -#: src/lib/lex.c:108 -msgid "Close of NULL file\n" +#: src/filed/backup.c:298 src/filed/verify.c:229 +#, c-format +msgid " Cannot open resource fork for %s: ERR=%s.\n" msgstr "" -#: src/lib/lex.c:181 -msgid "get_char: called after EOF\n" +#: src/filed/backup.c:349 +#, c-format +msgid "Unknown signature type %i.\n" msgstr "" -#: src/lib/lex.c:220 +#: src/filed/backup.c:414 src/filed/backup.c:499 src/filed/backup.c:525 +#: src/filed/backup.c:557 src/filed/backup.c:570 src/filed/backup.c:578 +#: src/filed/backup.c:619 src/filed/backup.c:653 #, c-format -msgid "Config token too long, file: %s, line %d, begins at line %d\n" +msgid "Network send error to SD. ERR=%s\n" msgstr "" -#: src/lib/lex.c:244 -msgid "none" +#: src/filed/backup.c:479 +#, c-format +msgid "Compression error: %d\n" msgstr "" -#: src/lib/lex.c:245 -msgid "comment" +#: src/filed/backup.c:516 +#, c-format +msgid "Read error on file %s. ERR=%s\n" msgstr "" -#: src/lib/lex.c:246 -msgid "number" +#: src/filed/backup.c:519 +msgid "Too many errors.\n" msgstr "" -#: src/lib/lex.c:247 -msgid "ip_addr" +#: src/filed/backup.c:548 +#, c-format +msgid "Error reading ACL of %s\n" msgstr "" -#: src/lib/lex.c:248 -msgid "identifier" +#: src/filed/filed.c:62 +#, c-format +msgid "" +"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" +" -c use as configuration file\n" +" -dnn set debug level to nn\n" +" -f run in foreground (for debugging)\n" +" -g groupid\n" +" -i inetd request\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" msgstr "" -#: src/lib/lex.c:249 -msgid "string" +#: src/filed/filed.c:282 +#, c-format +msgid "" +"No File daemon resource defined in %s\n" +"Without that I don't know who I am :-(\n" msgstr "" -#: src/lib/lex.c:250 -msgid "quoted_string" +#: src/filed/filed.c:287 +#, c-format +msgid "Only one Client resource permitted in %s\n" msgstr "" -#: src/lib/lex.c:286 +#: src/filed/filed.c:310 #, c-format -msgid "expected a positive integer number, got: %s" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"File daemon in %s.\n" msgstr "" -#: src/lib/lex.c:292 +#: src/filed/filed.c:339 #, c-format -msgid "expected a postive integer number, got: %s" +msgid "No Director resource defined in %s\n" msgstr "" -#: src/lib/lex.c:504 +#: src/filed/job.c:324 #, c-format -msgid "Cannot open included config file %s: %s\n" +msgid "2901 Job %s not found.\n" msgstr "" -#: src/lib/lex.c:539 +#: src/filed/job.c:340 #, c-format -msgid "expected an integer or a range, got %s: %s" +msgid "2001 Job %s marked to be canceled.\n" msgstr "" -#: src/lib/lex.c:553 src/lib/lex.c:561 src/lib/lex.c:572 src/lib/lex.c:580 -#, c-format -msgid "expected an integer number, got %s: %s" +#: src/filed/job.c:343 +msgid "2902 Error scanning cancel command.\n" msgstr "" -#: src/lib/lex.c:590 +#: src/filed/job.c:362 #, c-format -msgid "expected a name, got %s: %s" +msgid "2991 Bad setdebug command: %s\n" msgstr "" -#: src/lib/lex.c:594 +#: src/filed/job.c:378 #, c-format -msgid "name %s length %d too long, max is %d\n" +msgid "Bad estimate command: %s" msgstr "" -#: src/lib/lex.c:602 -#, c-format -msgid "expected a string, got %s: %s" +#: src/filed/job.c:379 +msgid "2992 Bad estimate command.\n" msgstr "" -#: src/lib/tls.c:81 +#: src/filed/job.c:402 #, c-format -msgid "" -"Error with certificate at depth: %d, issuer = %s, subject = %s, ERR=%d:%s\n" +msgid "Bad Job Command: %s" msgstr "" -#: src/lib/tls.c:118 -msgid "Error initializing SSL context" +#: src/filed/job.c:422 +#, c-format +msgid "Bad RunBeforeJob command: %s\n" msgstr "" -#: src/lib/tls.c:139 -msgid "Error loading certificate verification stores" +#: src/filed/job.c:423 src/filed/job.c:436 +msgid "2905 Bad RunBeforeJob command.\n" msgstr "" -#: src/lib/tls.c:144 -msgid "" -"Either a certificate file or a directory must be specified as a verification " -"store\n" +#: src/filed/job.c:449 +#, c-format +msgid "Bad RunAfter command: %s\n" msgstr "" -#: src/lib/tls.c:155 -msgid "Error loading certificate file" +#: src/filed/job.c:450 +msgid "2905 Bad RunAfterJob command.\n" msgstr "" -#: src/lib/tls.c:163 -msgid "Error loading private key" +#: src/filed/job.c:476 +#, c-format +msgid "%s could not execute. ERR=%s\n" msgstr "" -#: src/lib/tls.c:171 -msgid "Unable to open DH parameters file" +#: src/filed/job.c:485 +#, c-format +msgid "%s: %s\n" msgstr "" -#: src/lib/tls.c:177 -msgid "Unable to load DH parameters from specified file" +#: src/filed/job.c:490 +#, c-format +msgid "%s returned non-zero status=%d. ERR=%s\n" msgstr "" -#: src/lib/tls.c:181 -msgid "Failed to set TLS Diffie-Hellman parameters" +#: src/filed/job.c:575 +#, c-format +msgid "Error running program: %s. RtnStat=%d ERR=%s\n" msgstr "" -#: src/lib/tls.c:190 -msgid "Error setting cipher list, no valid ciphers available\n" +#: src/filed/job.c:585 +#, c-format +msgid "Cannot open FileSet input file: %s. ERR=%s\n" msgstr "" -#: src/lib/tls.c:238 -msgid "Peer failed to present a TLS certificate\n" +#: src/filed/job.c:679 +#, c-format +msgid "REGEX %s compile error. ERR=%s\n" msgstr "" -#: src/lib/tls.c:280 +#: src/filed/job.c:733 #, c-format -msgid "Peer %s failed to present a TLS certificate\n" +msgid "Invalid FileSet command: %s\n" msgstr "" -#: src/lib/tls.c:383 -msgid "Error creating file descriptor-based BIO" +#: src/filed/job.c:902 src/findlib/match.c:184 +#, c-format +msgid "Unknown include/exclude option: %c\n" msgstr "" -#: src/lib/tls.c:394 -msgid "Error creating new SSL object" +#: src/filed/job.c:962 src/stored/fd_cmds.c:329 +#, c-format +msgid "Could not create bootstrap file %s: ERR=%s\n" msgstr "" -#: src/lib/tls.c:458 src/lib/tls.c:481 -msgid "Connect failure" +#: src/filed/job.c:1061 +#, c-format +msgid "DIR and FD clocks differ by %d seconds, FD automatically adjusting.\n" msgstr "" -#: src/lib/tls.c:558 src/lib/tls.c:562 -msgid "TLS shutdown failure." +#: src/filed/job.c:1069 +#, c-format +msgid "Unknown backup level: %s\n" msgstr "" -#: src/lib/tls.c:611 src/lib/tls.c:631 -msgid "TLS read/write failure." +#: src/filed/job.c:1081 +#, c-format +msgid "Bad level command: %s\n" msgstr "" -#: src/lib/parse_conf.c:160 -msgid "***UNKNOWN***" +#: src/filed/job.c:1102 +#, c-format +msgid "Bad session command: %s" msgstr "" -#: src/lib/parse_conf.c:179 +#: src/filed/job.c:1123 #, c-format -msgid "Unable to initialize resource lock. ERR=%s\n" +msgid "Bad storage command: %s" msgstr "" -#: src/lib/parse_conf.c:213 src/tray-monitor/tray_conf.c:268 -#: src/dird/dird_conf.c:1143 +#: src/filed/job.c:1132 #, c-format -msgid "Too many items in %s resource\n" +msgid "Failed to connect to Storage daemon: %s:%d\n" msgstr "" -#: src/lib/parse_conf.c:264 src/lib/parse_conf.c:283 -#, c-format -msgid "expected an =, got: %s" +#: src/filed/job.c:1144 +msgid "Failed to authenticate Storage daemon.\n" msgstr "" -#: src/lib/parse_conf.c:291 -#, c-format -msgid "Unknown item code: %d\n" +#: src/filed/job.c:1170 +msgid "Cannot contact Storage daemon\n" msgstr "" -#: src/lib/parse_conf.c:331 +#: src/filed/job.c:1188 #, c-format -msgid "message type: %s not found" +msgid "Bad response to append open: %s\n" msgstr "" -#: src/lib/parse_conf.c:368 -#, c-format -msgid "Attempt to redefine name \"%s\" to \"%s\"." +#: src/filed/job.c:1193 +msgid "Bad response from stored to open command\n" msgstr "" -#: src/lib/parse_conf.c:459 +#: src/filed/job.c:1222 #, c-format -msgid "Could not find config Resource %s referenced on line %d : %s\n" +msgid "Generate VSS snapshots. Driver=\"%s\", Drive(s)=\"%s\"\n" msgstr "" -#: src/lib/parse_conf.c:463 +#: src/filed/job.c:1225 #, c-format -msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" +msgid "Generate VSS snapshots failed. ERR=%s\n" msgstr "" -#: src/lib/parse_conf.c:498 +#: src/filed/job.c:1232 #, c-format -msgid "Too many %s directives. Max. is %d. line %d: %s\n" +msgid "Generate VSS snapshot of drive \"%c:\\\" failed\n" msgstr "" -#: src/lib/parse_conf.c:508 +#: src/filed/job.c:1241 #, c-format -msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" +msgid "VSS Writer: %s\n" msgstr "" -#: src/lib/parse_conf.c:570 -#, c-format -msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" +#: src/filed/job.c:1245 +msgid "No drive letters found for generating VSS snapshots.\n" +msgstr "" + +#: src/filed/job.c:1248 +msgid "VSS was not initialized properly. VSS support is disabled.\n" +msgstr "" + +#: src/filed/job.c:1297 +msgid "Append Close with SD failed.\n" msgstr "" -#: src/lib/parse_conf.c:634 +#: src/filed/job.c:1301 #, c-format -msgid "expected a size number, got: %s" +msgid "Bad status %d returned from Storage Daemon.\n" msgstr "" -#: src/lib/parse_conf.c:639 +#: src/filed/job.c:1336 #, c-format -msgid "expected a size, got: %s" +msgid "2994 Bad verify command: %s\n" msgstr "" -#: src/lib/parse_conf.c:676 src/lib/parse_conf.c:681 +#: src/filed/job.c:1351 src/filed/job.c:1390 #, c-format -msgid "expected a time period, got: %s" +msgid "2994 Bad verify level: %s\n" msgstr "" -#: src/lib/parse_conf.c:700 src/lib/parse_conf.c:715 +#: src/filed/job.c:1430 #, c-format -msgid "Expect %s, got: %s" +msgid "Bad replace command. CMD=%s\n" msgstr "" -#: src/lib/parse_conf.c:740 +#: src/filed/job.c:1507 +msgid "Improper calling sequence.\n" +msgstr "" + +#: src/filed/job.c:1527 #, c-format -msgid "Expected a Tape Label keyword, got: %s" +msgid "Bad response to SD read open: %s\n" +msgstr "" + +#: src/filed/job.c:1532 +msgid "Bad response from stored to read open command\n" msgstr "" -#: src/lib/parse_conf.c:789 +#: src/filed/job.c:1598 #, c-format -msgid "Cannot open config file \"%s\": %s\n" +msgid "Comm error with SD. bad response to %s. ERR=%s\n" msgstr "" -#: src/lib/parse_conf.c:802 +#: src/filed/job.c:1601 #, c-format -msgid "Expected a Resource name identifier, got: %s" +msgid "Bad response to %s command. Wanted %s, got %s\n" msgstr "" -#: src/lib/parse_conf.c:814 +#: src/filed/pythonfd.c:150 src/stored/pythonsd.c:154 #, c-format -msgid "expected resource name, got: %s" +msgid "Cannot delete attribute %s" msgstr "" -#: src/lib/parse_conf.c:825 +#: src/filed/pythonfd.c:168 src/filed/pythonfd.c:184 src/stored/pythonsd.c:187 #, c-format -msgid "not in resource definition: %s" +msgid "Cannot find attribute %s" msgstr "" -#: src/lib/parse_conf.c:836 src/dird/inc_conf.c:320 src/dird/inc_conf.c:585 +#: src/filed/restore.c:55 #, c-format -msgid "expected an equals, got: %s" +msgid "Size of data or stream of %s not correct. Original %s, restored %s.\n" msgstr "" -#: src/lib/parse_conf.c:850 +#: src/filed/restore.c:165 src/filed/verify_vol.c:90 #, c-format -msgid "" -"Keyword \"%s\" not permitted in this resource.\n" -"Perhaps you left the trailing brace off of the previous resource." +msgid "Record header scan error: %s\n" msgstr "" -#: src/lib/parse_conf.c:867 +#: src/filed/restore.c:172 src/filed/verify_vol.c:99 #, c-format -msgid "unexpected token %d %s in resource definition" +msgid "Data record error. ERR=%s\n" msgstr "" -#: src/lib/parse_conf.c:873 +#: src/filed/restore.c:176 src/filed/verify_vol.c:103 #, c-format -msgid "Unknown parser state %d\n" +msgid "Actual data size %d not same as header %d\n" msgstr "" -#: src/lib/parse_conf.c:878 -msgid "End of conf file reached with unclosed resource." +#: src/filed/restore.c:201 src/filed/restore.c:383 +msgid "Logic error: output file should be open\n" msgstr "" -#: src/lib/mem_pool.c:95 +#: src/filed/restore.c:207 src/filed/restore.c:388 +msgid "Logic error: output file should not be open\n" +msgstr "" + +#: src/filed/restore.c:218 src/filed/verify_vol.c:142 +#: src/stored/bextract.c:289 src/stored/bls.c:371 src/stored/bscan.c:651 #, c-format -msgid "MemPool index %d larger than max %d\n" +msgid "Record header file index %ld not equal record index %ld\n" msgstr "" -#: src/lib/mem_pool.c:113 src/lib/mem_pool.c:133 src/lib/mem_pool.c:168 -#: src/lib/mem_pool.c:239 src/lib/mem_pool.c:259 src/lib/mem_pool.c:297 -#: src/lib/mem_pool.c:550 +#: src/filed/restore.c:231 src/stored/bextract.c:298 #, c-format -msgid "Out of memory requesting %d bytes\n" +msgid "%s stream not supported on this Client.\n" msgstr "" -#: src/lib/watchdog.c:69 +#: src/filed/restore.c:308 #, c-format -msgid "Unable to initialize watchdog lock. ERR=%s\n" +msgid " Cannot open resource fork for %s.\n" msgstr "" -#: src/lib/watchdog.c:165 -msgid "BUG! register_watchdog called before start_watchdog\n" +#: src/filed/restore.c:331 +#, c-format +msgid " Invalid length of Finder Info (got %d, not 32)\n" msgstr "" -#: src/lib/watchdog.c:168 +#: src/filed/restore.c:335 #, c-format -msgid "BUG! Watchdog %p has NULL callback\n" +msgid " Could not set Finder Info on %s\n" msgstr "" -#: src/lib/watchdog.c:171 +#: src/filed/restore.c:347 #, c-format -msgid "BUG! Watchdog %p has zero interval\n" +msgid "Can't restore ACL of %s\n" msgstr "" -#: src/lib/watchdog.c:191 -msgid "BUG! unregister_watchdog_unlocked called before start_watchdog\n" +#: src/filed/restore.c:359 +#, c-format +msgid "Can't restore default ACL of %s\n" msgstr "" -#: src/lib/watchdog.c:309 +#: src/filed/restore.c:391 src/stored/bextract.c:455 #, c-format -msgid "rwl_writelock failure. ERR=%s\n" +msgid "Unknown stream=%d ignored. This shouldn't happen!\n" msgstr "" -#: src/lib/watchdog.c:323 +#: src/filed/restore.c:428 #, c-format -msgid "rwl_writeunlock failure. ERR=%s\n" +msgid "" +"%d non-supported data streams and %d non-supported attrib streams ignored.\n" msgstr "" -#: src/lib/regex.c:1040 -msgid "Success" +#: src/filed/restore.c:432 +#, c-format +msgid "%d non-supported resource fork streams ignored.\n" msgstr "" -#: src/lib/regex.c:1043 -msgid "No match" +#: src/filed/restore.c:435 +#, c-format +msgid "%d non-supported Finder Info streams ignored.\n" msgstr "" -#: src/lib/regex.c:1046 -msgid "Invalid regular expression" +#: src/filed/restore.c:438 +#, c-format +msgid "%d non-supported acl streams ignored.\n" msgstr "" -#: src/lib/regex.c:1049 -msgid "Invalid collation character" +#: src/filed/restore.c:450 +msgid "None" msgstr "" -#: src/lib/regex.c:1052 -msgid "Invalid character class name" +#: src/filed/restore.c:454 +msgid "Zlib errno" msgstr "" -#: src/lib/regex.c:1055 -msgid "Trailing backslash" +#: src/filed/restore.c:456 +msgid "Zlib stream error" msgstr "" -#: src/lib/regex.c:1058 -msgid "Invalid back reference" +#: src/filed/restore.c:458 +msgid "Zlib data error" msgstr "" -#: src/lib/regex.c:1061 -msgid "Unmatched [ or [^" +#: src/filed/restore.c:460 +msgid "Zlib memory error" msgstr "" -#: src/lib/regex.c:1064 -msgid "Unmatched ( or \\(" +#: src/filed/restore.c:462 +msgid "Zlib buffer error" msgstr "" -#: src/lib/regex.c:1067 -msgid "Unmatched \\{" +#: src/filed/restore.c:464 +msgid "Zlib version error" msgstr "" -#: src/lib/regex.c:1070 -msgid "Invalid content of \\{\\}" +#: src/filed/restore.c:466 src/lib/util.c:546 src/lib/util.c:556 +#: src/lib/util.c:564 src/lib/util.c:571 src/lib/util.c:578 src/lib/util.c:592 +#: src/lib/util.c:602 src/lib/util.c:609 src/lib/util.c:620 +msgid "*none*" msgstr "" -#: src/lib/regex.c:1073 -msgid "Invalid range end" +#: src/filed/restore.c:498 src/stored/bextract.c:387 +#, c-format +msgid "Seek to %s error on %s: ERR=%s\n" msgstr "" -#: src/lib/regex.c:1076 -msgid "Memory exhausted" +#: src/filed/restore.c:522 +#, c-format +msgid "Uncompression error on file %s. ERR=%s\n" msgstr "" -#: src/lib/regex.c:1079 -msgid "Invalid preceding regular expression" +#: src/filed/restore.c:530 src/stored/bextract.c:421 +msgid "GZIP data stream found, but GZIP not configured!\n" msgstr "" -#: src/lib/regex.c:1082 -msgid "Premature end of regular expression" +#: src/filed/restore.c:539 src/stored/bextract.c:359 src/stored/bextract.c:409 +#, c-format +msgid "Write error on %s: %s\n" msgstr "" -#: src/lib/regex.c:1085 -msgid "Regular expression too big" +#: src/filed/status.c:67 +#, c-format +msgid "%s Version: %s (%s) %s %s %s %s\n" msgstr "" -#: src/lib/regex.c:1088 -msgid "Unmatched ) or \\)" +#: src/filed/status.c:71 +#, c-format +msgid "Daemon started %s, %d Job%s run since started.\n" msgstr "" -#: src/lib/regex.c:5874 -msgid "No previous regular expression" +#: src/filed/status.c:127 +#, c-format +msgid " Sizeof: off_t=%d size_t=%d debug=%d trace=%d\n" msgstr "" -#: src/lib/util.c:181 -msgid "Running" +#: src/filed/status.c:138 +msgid "Running Jobs:\n" msgstr "" -#: src/lib/util.c:184 -msgid "Blocked" +#: src/filed/status.c:149 +#, c-format +msgid "Director connected at: %s\n" msgstr "" -#: src/lib/util.c:194 -msgid "Non-fatal error" +#: src/filed/status.c:151 +#, c-format +msgid "JobId %d Job %s is running.\n" msgstr "" -#: src/lib/util.c:197 src/lib/util.c:264 -msgid "Canceled" +#: src/filed/status.c:154 +#, c-format +msgid " %s%s Job started: %s\n" msgstr "" -#: src/lib/util.c:200 -msgid "Verify differences" +#: src/filed/status.c:166 src/stored/status.c:323 +#, c-format +msgid " Files=%s Bytes=%s Bytes/sec=%s\n" msgstr "" -#: src/lib/util.c:203 -msgid "Waiting on FD" +#: src/filed/status.c:171 +#, c-format +msgid " Files Examined=%s\n" msgstr "" -#: src/lib/util.c:206 -msgid "Wait on SD" +#: src/filed/status.c:176 +#, c-format +msgid " Processing file: %s\n" msgstr "" -#: src/lib/util.c:209 -msgid "Wait for new Volume" +#: src/filed/status.c:187 +msgid " SDSocket closed.\n" msgstr "" -#: src/lib/util.c:212 -msgid "Waiting for mount" +#: src/filed/status.c:217 +msgid "Terminated Jobs:\n" msgstr "" -#: src/lib/util.c:215 -msgid "Waiting for Storage resource" +#: src/filed/status.c:219 +msgid " JobId Level Files Bytes Status Finished Name \n" msgstr "" -#: src/lib/util.c:218 -msgid "Waiting for Job resource" +#: src/filed/status.c:323 src/filed/status.c:347 src/stored/status.c:513 +#: src/stored/status.c:536 +#, c-format +msgid "Bad .status command: %s\n" msgstr "" -#: src/lib/util.c:221 -msgid "Waiting for Client resource" +#: src/filed/status.c:324 +msgid "2900 Bad .status command, missing argument.\n" msgstr "" -#: src/lib/util.c:224 -msgid "Waiting on Max Jobs" +#: src/filed/status.c:348 +msgid "2900 Bad .status command, wrong argument.\n" msgstr "" -#: src/lib/util.c:227 -msgid "Waiting for Start Time" +#: src/filed/status.c:385 src/stored/status.c:468 +msgid "Init Catalog" msgstr "" -#: src/lib/util.c:230 -msgid "Waiting on Priority" +#: src/filed/status.c:388 src/stored/status.c:471 +msgid "Volume to Catalog" msgstr "" -#: src/lib/util.c:237 -#, c-format -msgid "Unknown Job termination status=%d" +#: src/filed/status.c:391 src/stored/status.c:474 +msgid "Disk to Catalog" msgstr "" -#: src/lib/util.c:261 -msgid "Fatal Error" +#: src/filed/status.c:394 src/stored/status.c:477 +msgid "Data" msgstr "" -#: src/lib/util.c:267 -msgid "Differences" +#: src/filed/status.c:400 src/lib/util.c:351 src/stored/status.c:483 +msgid "Unknown Job Level" msgstr "" -#: src/lib/util.c:270 -msgid "Unknown term code" +#: src/filed/status.c:451 +msgid "Bacula Idle" msgstr "" -#: src/lib/util.c:286 src/dird/ua_run.c:561 -msgid "Backup" +#: src/filed/status.c:462 +msgid "Bacula Running" msgstr "" -#: src/lib/util.c:289 src/dird/ua_run.c:594 -msgid "Verify" +#: src/filed/status.c:476 +msgid "Last Job Canceled" msgstr "" -#: src/lib/util.c:292 src/gnome2-console/interface.c:261 -#: src/wx-console/wxbrestorepanel.cpp:384 -#: src/wx-console/wxbrestorepanel.cpp:1949 -msgid "Restore" +#: src/filed/status.c:480 +msgid "Last Job Failed" msgstr "" -#: src/lib/util.c:295 src/dird/ua_run.c:540 -msgid "Admin" +#: src/filed/status.c:484 +msgid "Last Job had Warnings" msgstr "" -#: src/lib/util.c:298 -msgid "Migrate" +#: src/filed/verify.c:45 +#, c-format +msgid "Cannot malloc %d network read buffer\n" msgstr "" -#: src/lib/util.c:301 -msgid "Copy" +#: src/filed/verify.c:136 +#, c-format +msgid " Archive file skipped: %s\n" msgstr "" -#: src/lib/util.c:304 -msgid "Unknown Type" +#: src/filed/verify.c:139 +#, c-format +msgid " Recursion turned off. Directory skipped: %s\n" msgstr "" -#: src/lib/util.c:336 -msgid "Verify Init Catalog" +#: src/filed/verify.c:142 +#, c-format +msgid " File system change prohibited. Directory skipped: %s\n" msgstr "" -#: src/lib/util.c:339 src/dird/ua_run.c:760 -msgid "Verify Volume to Catalog" +#: src/filed/verify.c:152 +#, c-format +msgid " Unknown file type %d: %s\n" msgstr "" -#: src/lib/util.c:342 src/dird/ua_run.c:761 -msgid "Verify Disk to Catalog" +#: src/filed/verify.c:195 src/filed/verify_vol.c:200 +#, c-format +msgid "Network error in send to Director: ERR=%s\n" msgstr "" -#: src/lib/util.c:345 -msgid "Verify Data" +#: src/filed/verify.c:284 +#, c-format +msgid "Error reading file %s: ERR=%s\n" msgstr "" -#: src/lib/util.c:546 src/lib/util.c:556 src/lib/util.c:564 src/lib/util.c:571 -#: src/lib/util.c:578 src/lib/util.c:592 src/lib/util.c:602 src/lib/util.c:609 -#: src/lib/util.c:620 src/filed/restore.c:629 -msgid "*none*" +#: src/filed/verify_vol.c:56 +msgid "Storage command not issued before Verify.\n" msgstr "" -#: src/lib/util.c:647 -msgid "Working directory not defined. Cannot continue.\n" +#: src/filed/verify_vol.c:136 +#, c-format +msgid "Error scanning record header: %s\n" msgstr "" -#: src/lib/util.c:650 +#: src/findlib/attribs.c:335 #, c-format -msgid "Working Directory: \"%s\" not found. Cannot continue.\n" +msgid "File size of restored file %s not correct. Original %s, restored %s.\n" msgstr "" -#: src/lib/util.c:654 +#: src/findlib/attribs.c:353 src/findlib/attribs.c:360 #, c-format -msgid "Working Directory: \"%s\" is not a directory. Cannot continue.\n" +msgid "Unable to set file owner %s: ERR=%s\n" msgstr "" -#: src/lib/bpipe.c:282 src/lib/bpipe.c:361 -msgid "Program killed by Bacula watchdog (timeout)\n" +#: src/findlib/attribs.c:366 +#, c-format +msgid "Unable to set file modes %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:50 +#: src/findlib/attribs.c:376 #, c-format -msgid "Only ipv4 and ipv6 are supported (%d)\n" +msgid "Unable to set file times %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:54 +#: src/findlib/attribs.c:390 #, c-format -msgid "Only ipv4 is supported (%d)\n" +msgid "Unable to set file flags %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:163 +#: src/findlib/attribs.c:635 #, c-format -msgid "It was tried to assign a ipv6 address to a ipv4(%d)\n" +msgid "Error in %s file %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:172 +#: src/findlib/attribs.c:652 #, c-format -msgid "It was tried to assign a ipv4 address to a ipv6(%d)\n" +msgid "Error in %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:251 -#, c-format -msgid "Can't add default address (%s)\n" +#: src/findlib/bfile.c:67 +msgid "GZIP data" msgstr "" -#: src/lib/address_conf.c:281 -msgid "the old style addresses cannot be mixed with new style" +#: src/findlib/bfile.c:69 +msgid "GZIP sparse data" msgstr "" -#: src/lib/address_conf.c:304 -#, c-format -msgid "can't resolve service(%s)" +#: src/findlib/bfile.c:71 +msgid "Win32 data" msgstr "" -#: src/lib/address_conf.c:314 -#, c-format -msgid "can't resolve hostname(%s) %s" +#: src/findlib/bfile.c:73 +msgid "Win32 GZIP data" msgstr "" -#: src/lib/address_conf.c:403 -#, c-format -msgid "Expected a block begin { , got: %s" +#: src/findlib/bfile.c:75 +msgid "File attributes" msgstr "" -#: src/lib/address_conf.c:408 -msgid "Empty addr block is not allowed" +#: src/findlib/bfile.c:77 +msgid "File data" msgstr "" -#: src/lib/address_conf.c:412 -#, c-format -msgid "Expected a string, got: %s" +#: src/findlib/bfile.c:79 +msgid "MD5 signature" msgstr "" -#: src/lib/address_conf.c:421 -#, c-format -msgid "Expected a string [ip|ipv4|ipv6], got: %s" +#: src/findlib/bfile.c:81 +msgid "Extended attributes" msgstr "" -#: src/lib/address_conf.c:425 -#, c-format -msgid "Expected a string [ip|ipv4], got: %s" +#: src/findlib/bfile.c:83 +msgid "Sparse data" msgstr "" -#: src/lib/address_conf.c:430 src/lib/address_conf.c:460 -#, c-format -msgid "Expected a equal =, got: %s" +#: src/findlib/bfile.c:85 +msgid "Program names" msgstr "" -#: src/lib/address_conf.c:434 -#, c-format -msgid "Expected a block beginn { , got: %s" +#: src/findlib/bfile.c:87 +msgid "Program data" msgstr "" -#: src/lib/address_conf.c:441 src/lib/address_conf.c:456 -#, c-format -msgid "Expected a identifier [addr|port], got: %s" +#: src/findlib/bfile.c:89 +msgid "SHA1 signature" msgstr "" -#: src/lib/address_conf.c:446 -msgid "Only one port per address block" +#: src/findlib/bfile.c:91 +msgid "HFS+ resource fork" msgstr "" -#: src/lib/address_conf.c:452 -msgid "Only one addr per address block" +#: src/findlib/bfile.c:93 +msgid "HFS+ Finder Info" msgstr "" -#: src/lib/address_conf.c:468 +#: src/findlib/create_file.c:86 #, c-format -msgid "Expected a number or a string, got: %s" +msgid "File skipped. Not newer: %s\n" msgstr "" -#: src/lib/address_conf.c:474 +#: src/findlib/create_file.c:93 #, c-format -msgid "Expected an IP number or a hostname, got: %s" +msgid "File skipped. Not older: %s\n" msgstr "" -#: src/lib/address_conf.c:480 -msgid "State machine missmatch" +#: src/findlib/create_file.c:99 +#, c-format +msgid "File skipped. Already exists: %s\n" msgstr "" -#: src/lib/address_conf.c:486 src/lib/address_conf.c:499 +#: src/findlib/create_file.c:124 #, c-format -msgid "Expected a end of block }, got: %s" +msgid "File %s already exists and could not be replaced. ERR=%s.\n" msgstr "" -#: src/lib/address_conf.c:492 +#: src/findlib/create_file.c:176 src/findlib/create_file.c:277 +#: src/findlib/create_file.c:328 #, c-format -msgid "Can't add hostname(%s) and port(%s) to addrlist (%s)" +msgid "bpkt already open fid=%d\n" msgstr "" -#: src/lib/address_conf.c:508 -#, c-format -msgid "Expected a hostname or IP nummer, got: %s" +#: src/findlib/create_file.c:198 +msgid "Could not save_dirn" msgstr "" -#: src/lib/address_conf.c:513 src/lib/address_conf.c:527 +#: src/findlib/create_file.c:207 src/findlib/create_file.c:220 #, c-format -msgid "can't add port (%s) to (%s)" +msgid "Could not chdir to %s: ERR=%s\n" msgstr "" -#: src/lib/address_conf.c:522 +#: src/findlib/create_file.c:240 #, c-format -msgid "Expected a port number or string, got: %s" -msgstr "" - -#: src/lib/jcr.c:279 -msgid "NULL jcr.\n" +msgid "Could not create %s: ERR=%s\n" msgstr "" -#: src/lib/jcr.c:400 +#: src/findlib/create_file.c:253 #, c-format -msgid "JCR use_count=%d JobId=%d\n" +msgid "Cannot make fifo %s: ERR=%s\n" msgstr "" -#: src/lib/jcr.c:682 +#: src/findlib/create_file.c:261 #, c-format -msgid "" -"Watchdog sending kill after %d secs to thread stalled reading Storage " -"daemon.\n" +msgid "Cannot make node %s: ERR=%s\n" msgstr "" -#: src/lib/jcr.c:694 +#: src/findlib/create_file.c:297 #, c-format -msgid "" -"Watchdog sending kill after %d secs to thread stalled reading File daemon.\n" +msgid "Could not symlink %s -> %s: ERR=%s\n" msgstr "" -#: src/lib/jcr.c:706 +#: src/findlib/create_file.c:307 #, c-format -msgid "" -"Watchdog sending kill after %d secs to thread stalled reading Director.\n" +msgid "Could not hard link %s -> %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:253 src/lib/message.c:263 +#: src/findlib/create_file.c:358 #, c-format -msgid "Could not open console message file %s: ERR=%s\n" +msgid "Original file %s not saved: type=%d\n" msgstr "" -#: src/lib/message.c:268 +#: src/findlib/create_file.c:361 #, c-format -msgid "Could not get con mutex: ERR=%s\n" +msgid "Unknown file type %d; not restored: %s\n" msgstr "" -#: src/lib/message.c:372 +#: src/findlib/create_file.c:392 #, c-format -msgid "open mail pipe %s failed: ERR=%s\n" -msgstr "" - -#: src/lib/message.c:378 -msgid "Bacula Message" +msgid "Zero length filename: %s\n" msgstr "" -#: src/lib/message.c:431 -msgid "open mail pipe failed.\n" +#: src/findlib/enable_priv.c:85 +msgid "AdjustTokenPrivileges set " msgstr "" -#: src/lib/message.c:443 +#: src/findlib/find_one.c:168 #, c-format -msgid "close error: ERR=%s\n" +msgid "Top level directory \"%s\" has an unlisted fstype\n" msgstr "" -#: src/lib/message.c:454 +#: src/findlib/makepath.c:117 #, c-format -msgid "Mail prog: %s" +msgid "Cannot create directory %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:463 +#: src/findlib/makepath.c:121 src/findlib/makepath.c:378 #, c-format -msgid "" -"Mail program terminated in error.\n" -"CMD=%s\n" -"ERR=%s\n" +msgid "%s exists but is not a directory\n" msgstr "" -#: src/lib/message.c:650 +#: src/findlib/makepath.c:276 src/findlib/makepath.c:337 +#: src/findlib/makepath.c:397 #, c-format -msgid "" -"Operator mail program terminated in error.\n" -"CMD=%s\n" -"ERR=%s\n" +msgid "Cannot change owner and/or group of %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:667 src/lib/message.c:689 src/lib/message.c:705 +#: src/findlib/makepath.c:297 #, c-format -msgid "fopen %s failed: ERR=%s\n" +msgid "Cannot chdir to directory, %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:933 +#: src/findlib/makepath.c:352 src/findlib/makepath.c:368 +#: src/findlib/makepath.c:402 #, c-format -msgid "%s: ABORTING due to ERROR in %s:%d\n" +msgid "Cannot change permissions of %s: ERR=%s\n" msgstr "" -#: src/lib/message.c:937 +#: src/findlib/save-cwd.c:48 #, c-format -msgid "%s: ERROR TERMINATION at %s:%d\n" +msgid "Cannot open current directory: %s\n" msgstr "" -#: src/lib/message.c:942 +#: src/findlib/save-cwd.c:62 #, c-format -msgid "%s: Fatal Error because: " +msgid "Current directory: %s\n" msgstr "" -#: src/lib/message.c:944 +#: src/findlib/save-cwd.c:84 #, c-format -msgid "%s: Fatal Error at %s:%d because:\n" +msgid "Cannot get current directory: %s\n" msgstr "" -#: src/lib/message.c:948 +#: src/findlib/save-cwd.c:105 #, c-format -msgid "%s: ERROR: " +msgid "Cannot return to %s from %s: %s\n" msgstr "" -#: src/lib/message.c:950 +#: src/findlib/save-cwd.c:109 #, c-format -msgid "%s: ERROR in %s:%d " +msgid "Cannot return to saved working directory from %s: %s\n" msgstr "" -#: src/lib/message.c:953 +#: src/findlib/save-cwd.c:115 #, c-format -msgid "%s: Warning: " +msgid "Cannot return to %s: %s\n" msgstr "" -#: src/lib/message.c:956 +#: src/findlib/save-cwd.c:119 #, c-format -msgid "%s: Security violation: " +msgid "Cannot return to saved working directory: %s\n" msgstr "" -#: src/lib/message.c:1032 +#: src/gnome2-console/authenticate.c:74 #, c-format -msgid "%s ABORTING due to ERROR\n" +msgid "%s: Director authorization problem.\n" msgstr "" -#: src/lib/message.c:1035 -#, c-format -msgid "%s ERROR TERMINATION\n" +#: src/gnome2-console/authenticate.c:75 +msgid "Director authorization problem.\n" msgstr "" -#: src/lib/message.c:1038 -#, c-format -msgid "%s: %s Fatal error: " +#: src/gnome2-console/authenticate.c:77 +msgid "" +"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " +"help.\n" msgstr "" -#: src/lib/message.c:1044 +#: src/gnome2-console/authenticate.c:87 #, c-format -msgid "%s: %s Error: " +msgid "%s: Bad response to Hello command: ERR=%s\n" msgstr "" -#: src/lib/message.c:1050 -#, c-format -msgid "%s: %s Warning: " +#: src/gnome2-console/authenticate.c:89 +msgid "The Director is probably not running.\n" msgstr "" -#: src/lib/message.c:1053 +#: src/gnome2-console/console.c:88 #, c-format -msgid "%s: %s Security violation: " +msgid "" +"Copyright (C) 2002-2005 Kern Sibbald\n" +"\n" +"Version: %s (%s) %s %s %s\n" +"\n" +"Usage: gnome-console [-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 "" -#: src/lib/edit.c:433 +#: src/gnome2-console/console.c:219 #, c-format -msgid "Illegal character \"%c\" in name.\n" -msgstr "" - -#: src/lib/edit.c:440 -msgid "Name too long.\n" +msgid "Pthread cond init error = %s\n" msgstr "" -#: src/lib/edit.c:446 src/dird/ua_cmds.c:278 src/dird/ua_label.c:611 -msgid "Volume name must be at least one character long.\n" +#: src/gnome2-console/console.c:357 +msgid " Not Connected" msgstr "" -#: src/lib/bnet_server.c:96 +#: src/gnome2-console/console.c:478 #, c-format -msgid "Cannot open stream socket. ERR=%s. Current %s All %s\n" +msgid " Connecting to Director %s:%d" msgstr "" -#: src/lib/bnet_server.c:109 src/lib/bnet_server.c:258 +#: src/gnome2-console/console.c:479 #, c-format -msgid "Cannot set SO_REUSEADDR on socket: %s\n" +msgid "" +"Connecting to Director %s:%d\n" +"\n" msgstr "" -#: src/lib/bnet_server.c:118 +#: src/gnome2-console/console.c:494 src/wx-console/console_thread.cpp:360 #, c-format -msgid "Cannot bind port %d: ERR=%s: Retrying ...\n" +msgid "Passphrase for Console \"%s\" TLS private key: " msgstr "" -#: src/lib/bnet_server.c:123 +#: src/gnome2-console/console.c:516 src/wx-console/console_thread.cpp:381 #, c-format -msgid "Cannot bind port %d: ERR=%s.\n" +msgid "Passphrase for Director \"%s\" TLS private key: " msgstr "" -#: src/lib/bnet_server.c:134 -#, c-format -msgid "Could not init client queue: ERR=%s\n" +#: src/gnome2-console/console.c:535 src/tray-monitor/tray-monitor.c:860 +#: src/wx-console/console_thread.cpp:399 +msgid "Director daemon" msgstr "" -#: src/lib/bnet_server.c:157 src/lib/bnet_server.c:320 -#, c-format -msgid "Error in select: %s\n" +#: src/gnome2-console/console.c:547 +msgid " Initializing ..." msgstr "" -#: src/lib/bnet_server.c:178 src/lib/bnet_server.c:339 -#, c-format -msgid "Connection from %s:%d refused by hosts.access\n" +#: src/gnome2-console/console.c:583 +msgid " Connected" msgstr "" -#: src/lib/bnet_server.c:193 src/lib/bnet_server.c:351 src/lib/bnet.c:796 -#: src/lib/bnet.c:821 -#, c-format -msgid "Cannot set SO_KEEPALIVE on socket: %s\n" +#: src/gnome2-console/console.c:591 +msgid " Processing command ..." msgstr "" -#: src/lib/bnet_server.c:204 -msgid "Could not create client BSOCK.\n" +#: src/gnome2-console/console.c:626 +msgid " At prompt waiting for input ..." msgstr "" -#: src/lib/bnet_server.c:211 -#, c-format -msgid "Could not add job to client queue: ERR=%s\n" +#: src/gnome2-console/console.c:746 +msgid " Ready" msgstr "" -#: src/lib/bnet_server.c:222 +#: src/gnome2-console/console_conf.c:135 #, c-format -msgid "Could not destroy client queue: ERR=%s\n" +msgid "Console: name=%s\n" msgstr "" -#: src/lib/bnet_server.c:249 +#: src/gnome2-console/console_conf.c:138 #, c-format -msgid "Cannot open stream socket: %s\n" +msgid "ConsoleFont: name=%s font face=%s\n" msgstr "" -#: src/lib/bnet_server.c:278 -#, c-format -msgid "Cannot bind port %d: ERR=%s: retrying ...\n" +#: src/gnome2-console/interface.c:32 +msgid "_Connect" msgstr "" -#: src/lib/bnet_server.c:284 -msgid "Server socket" +#: src/gnome2-console/interface.c:33 src/gnome2-console/interface.c:232 +msgid "Connect to Director" msgstr "" -#: src/lib/bnet_server.c:284 src/lib/bnet_server.c:378 -#: src/dird/ua_select.c:337 -msgid "client" +#: src/gnome2-console/interface.c:39 +msgid "_Disconnect" msgstr "" -#: src/lib/bnet_server.c:366 -#, c-format -msgid "Socket accept error for %s. ERR=%s\n" +#: src/gnome2-console/interface.c:40 +msgid "Disconnect from Director" msgstr "" -#: src/lib/bget_msg.c:86 -msgid "Status OK\n" +#: src/gnome2-console/interface.c:93 +msgid "_Display Messages" msgstr "" -#: src/lib/bget_msg.c:90 -#, c-format -msgid "bget_msg: unknown signal %d\n" +#: src/gnome2-console/interface.c:129 +msgid "_File" msgstr "" -#: src/lib/rwlock.c:289 -msgid "rwl_writeunlock called too many times.\n" +#: src/gnome2-console/interface.c:136 +msgid "_Edit" msgstr "" -#: src/lib/rwlock.c:293 -msgid "rwl_writeunlock by non-owner.\n" +#: src/gnome2-console/interface.c:143 +msgid "_View" msgstr "" -#: src/lib/rwlock.c:358 src/lib/semlock.c:248 -#, c-format -msgid "Write lock failed. ERR=%s\n" +#: src/gnome2-console/interface.c:144 src/gnome2-console/interface.c:252 +msgid "Display Messages" msgstr "" -#: src/lib/rwlock.c:365 src/lib/semlock.c:255 -#, c-format -msgid "Write unlock failed. ERR=%s\n" +#: src/gnome2-console/interface.c:150 +msgid "_Settings" msgstr "" -#: src/lib/rwlock.c:375 src/lib/semlock.c:265 -#, c-format -msgid "Read lock failed. ERR=%s\n" +#: src/gnome2-console/interface.c:157 +msgid "_Help" msgstr "" -#: src/lib/rwlock.c:382 src/lib/semlock.c:272 -#, c-format -msgid "Read unlock failed. ERR=%s\n" +#: src/gnome2-console/interface.c:197 +msgid "Bacula Console" msgstr "" -#: src/lib/rwlock.c:391 src/lib/semlock.c:281 -#, c-format -msgid "Thread %d found unchanged elements %d times\n" +#: src/gnome2-console/interface.c:231 src/wx-console/wxbmainframe.cpp:229 +#: src/wx-console/wxbmainframe.cpp:597 +msgid "Connect" msgstr "" -#: src/lib/rwlock.c:423 src/lib/semlock.c:313 -#, c-format -msgid "Init rwlock failed. ERR=%s\n" +#: src/gnome2-console/interface.c:241 +msgid "Run" msgstr "" -#: src/lib/rwlock.c:438 src/lib/semlock.c:328 -#, c-format -msgid "Create thread failed. ERR=%s\n" +#: src/gnome2-console/interface.c:242 src/gnome2-console/interface.c:677 +#: src/gnome2-console/interface.c:690 +msgid "Run a Job" msgstr "" -#: src/lib/rwlock.c:449 src/lib/semlock.c:339 -#, c-format -msgid "Join thread failed. ERR=%s\n" +#: src/gnome2-console/interface.c:251 +msgid "Msgs" msgstr "" -#: src/lib/rwlock.c:452 src/lib/semlock.c:342 -#, c-format -msgid "%02d: interval %d, writes %d, reads %d\n" +#: src/gnome2-console/interface.c:261 src/lib/util.c:292 +#: src/wx-console/wxbrestorepanel.cpp:384 +#: src/wx-console/wxbrestorepanel.cpp:1949 +msgid "Restore" msgstr "" -#: src/lib/rwlock.c:462 src/lib/semlock.c:352 -#, c-format -msgid "data %02d: value %d, %d writes\n" +#: src/gnome2-console/interface.c:271 +msgid "Label" msgstr "" -#: src/lib/rwlock.c:467 src/lib/semlock.c:357 -#, c-format -msgid "Total: %d thread writes, %d data writes\n" +#: src/gnome2-console/interface.c:299 +msgid " Command: " msgstr "" -#: src/lib/rwlock.c:539 src/lib/semlock.c:429 -msgid "Try write lock" +#: src/gnome2-console/interface.c:307 +msgid "Enter Commands Here" msgstr "" -#: src/lib/rwlock.c:545 src/lib/semlock.c:435 -msgid "Try read lock" +#: src/gnome2-console/interface.c:318 +msgid " Status: " msgstr "" -#: src/lib/rwlock.c:600 src/lib/semlock.c:490 -msgid "Create thread" +#: src/gnome2-console/interface.c:326 +msgid " " msgstr "" -#: src/lib/rwlock.c:610 src/lib/semlock.c:500 -msgid "Join thread" +#: src/gnome2-console/interface.c:422 +msgid "About Bacula Console" msgstr "" -#: src/lib/rwlock.c:612 src/lib/semlock.c:502 -#, c-format -msgid "%02d: interval %d, updates %d, r_collisions %d, w_collisions %d\n" +#: src/gnome2-console/interface.c:436 +msgid "Bacula Console\n" msgstr "" -#: src/lib/rwlock.c:624 src/lib/semlock.c:514 -#, c-format -msgid "data %02d: value %d, %d updates\n" +#: src/gnome2-console/interface.c:444 +msgid "Copyright (c) 2000 - 2004, Kern Sibbald and John Walker" msgstr "" -#: src/lib/cram-md5.c:76 src/lib/cram-md5.c:101 -msgid "1999 Authorization failed.\n" +#: src/gnome2-console/interface.c:450 +msgid "Authors: Kern Sibbald and John Walker" msgstr "" -#: src/lib/smartall.c:132 src/lib/smartall.c:223 src/lib/smartall.c:238 -msgid "Out of memory\n" +#: src/gnome2-console/interface.c:456 +msgid "It comes by night and sucks the essence from your computers" msgstr "" -#: src/lib/smartall.c:160 -#, c-format -msgid "Attempt to free NULL called from %s:%d\n" +#: src/gnome2-console/interface.c:521 src/gnome2-console/interface.c:536 +msgid "Select Director" msgstr "" -#: src/lib/smartall.c:176 -#, c-format -msgid "qp->qnext->qprev != qp called from %s:%d\n" +#: src/gnome2-console/interface.c:708 src/gnome2-console/interface.c:1616 +msgid "Job:" msgstr "" -#: src/lib/smartall.c:180 -#, c-format -msgid "qp->qprev->qnext != qp called from %s:%d\n" +#: src/gnome2-console/interface.c:728 +msgid " Type:" msgstr "" -#: src/lib/smartall.c:189 -#, c-format -msgid "Buffer overrun called from %s:%d\n" +#: src/gnome2-console/interface.c:757 src/gnome2-console/interface.c:1644 +#: src/wx-console/wxbrestorepanel.cpp:1862 +msgid "Client:" msgstr "" -#: src/lib/smartall.c:260 -#, c-format -msgid "sm_realloc size: %d\n" +#: src/gnome2-console/interface.c:787 src/gnome2-console/interface.c:1672 +msgid "FileSet: " msgstr "" -#: src/lib/smartall.c:301 -#, c-format -msgid "sm_realloc %d at %x from %s:%d\n" +#: src/gnome2-console/interface.c:813 src/wx-console/wxbrestorepanel.cpp:1868 +msgid "Priority:" msgstr "" -#: src/lib/smartall.c:363 -#, 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: %lx\n" +#: src/gnome2-console/interface.c:836 +msgid "Level:" msgstr "" -#: src/lib/smartall.c:374 -#, c-format -msgid "Orphaned buffer: %6u bytes allocated at line %d of %s %s\n" +#: src/gnome2-console/interface.c:866 src/gnome2-console/interface.c:1418 +#: src/gnome2-console/interface.c:1700 +msgid "Pool:" msgstr "" -#: src/lib/smartall.c:410 -#, c-format -msgid "Damaged buffer found. Called from %s:%d\n" +#: src/gnome2-console/interface.c:895 src/gnome2-console/interface.c:1393 +#: src/gnome2-console/interface.c:1728 src/wx-console/wxbrestorepanel.cpp:1864 +msgid "Storage:" msgstr "" -#: src/lib/smartall.c:440 -#, c-format -msgid "" -"\n" -"Damaged buffers found at %s:%d\n" +#: src/gnome2-console/interface.c:924 +msgid "Messages:" msgstr "" -#: src/lib/smartall.c:443 -#, c-format -msgid " discovery of bad prev link.\n" +#: src/gnome2-console/interface.c:952 +msgid "Where: " msgstr "" -#: src/lib/smartall.c:446 -#, c-format -msgid " discovery of bad next link.\n" +#: src/gnome2-console/interface.c:970 src/wx-console/wxbrestorepanel.cpp:1866 +msgid "When:" msgstr "" -#: src/lib/smartall.c:449 -#, c-format -msgid " discovery of data overrun.\n" +#: src/gnome2-console/interface.c:988 src/wx-console/wxbrestorepanel.cpp:1847 +msgid "Bootstrap:" msgstr "" -#: src/lib/smartall.c:452 -#, c-format -msgid " Buffer address: %lx\n" +#: src/gnome2-console/interface.c:1108 +msgid "_New" msgstr "" -#: src/lib/smartall.c:459 -#, c-format -msgid "Damaged buffer: %6u bytes allocated at line %d of %s %s\n" +#: src/gnome2-console/interface.c:1177 +msgid "Restore File Selection" msgstr "" -#: src/lib/bsys.c:176 src/lib/bsys.c:192 src/lib/bsys.c:202 src/lib/bsys.c:214 -#, c-format -msgid "Out of memory: ERR=%s\n" +#: src/gnome2-console/interface.c:1226 +msgid "Current dir:" msgstr "" -#: src/lib/bsys.c:256 -msgid "Buffer overflow.\n" +#: src/gnome2-console/interface.c:1252 +msgid "Files Selected: " msgstr "" -#: src/lib/bsys.c:322 -msgid "Bad errno" +#: src/gnome2-console/interface.c:1373 src/gnome2-console/interface.c:1383 +msgid "Label a Volume" msgstr "" -#: src/lib/bsys.c:339 -msgid "Possible mutex deadlock.\n" +#: src/gnome2-console/interface.c:1444 +msgid "Volume Name:" msgstr "" -#: src/lib/bsys.c:343 src/lib/bsys.c:375 -#, c-format -msgid "Mutex lock failure. ERR=%s\n" +#: src/gnome2-console/interface.c:1459 +msgid "Slot:" msgstr "" -#: src/lib/bsys.c:346 -msgid "Possible mutex deadlock resolved.\n" +#: src/gnome2-console/interface.c:1585 +msgid "Restore Files Dialog" msgstr "" -#: src/lib/bsys.c:358 -#, c-format -msgid "Mutex unlock not locked. ERR=%s\n" +#: src/gnome2-console/interface.c:1599 +msgid "Restore Files" msgstr "" -#: src/lib/bsys.c:363 src/lib/bsys.c:385 -#, c-format -msgid "Mutex unlock failure. ERR=%s\n" +#: src/gnome2-console/interface.c:1756 +msgid "Before:" msgstr "" -#: src/lib/bsys.c:399 -#, c-format -msgid "Memset for %d bytes at %s:%d\n" +#: src/gnome2-console/interface.c:1799 +msgid "Select Files" msgstr "" -#: src/lib/bsys.c:428 -#, c-format -msgid "Cannot open pid file. %s ERR=%s\n" +#: src/gnome2-console/interface.c:1883 +msgid "Progress" msgstr "" -#: src/lib/bsys.c:432 -#, c-format -msgid "" -"%s is already running. pid=%d\n" -"Check file %s\n" +#: src/gnome2-console/restore.c:121 +msgid "Mark" msgstr "" -#: src/lib/bsys.c:445 -#, c-format -msgid "Could not open pid file. %s ERR=%s\n" +#: src/gnome2-console/restore.c:121 +msgid "File" msgstr "" -#: src/lib/bsys.c:565 -#, c-format -msgid "Could not create state file. %s ERR=%s\n" +#: src/gnome2-console/restore.c:121 +msgid "Mode" msgstr "" -#: src/lib/bsys.c:584 -#, c-format -msgid "Write final hdr error: ERR=%s\n" +#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:288 +msgid "User" msgstr "" -#: src/lib/bsys.c:611 -#, c-format -msgid "Could not find specified group: %s\n" +#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:292 +msgid "Group" msgstr "" -#: src/lib/bsys.c:614 src/lib/bsys.c:618 -#, c-format -msgid "Could not set specified group: %s\n" +#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:276 +msgid "Size" msgstr "" -#: src/lib/bsys.c:627 -#, c-format -msgid "Could not find specified userid: %s\n" +#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:280 +msgid "Date" msgstr "" -#: src/lib/bsys.c:630 +#: src/gnome2-console/support.c:41 #, c-format -msgid "Could not set specified userid: %s\n" +msgid "Widget not found: %s" +msgstr "" + +#: src/gnome2-console/support.c:60 src/gnome2-console/support.c:85 +#, c-format +msgid "Couldn't find pixmap file: %s" +msgstr "" + +#: src/gnome2-console/support.c:92 +#, c-format +msgid "Failed to load pixbuf file: %s: %s\n" +msgstr "" + +#: src/lib/tls.c:105 +#, c-format +msgid "" +"Error with certificate at depth: %d, issuer = %s, subject = %s, ERR=%d:%s\n" +msgstr "" + +#: src/lib/tls.c:152 +msgid "Error initializing SSL context" +msgstr "" + +#: src/lib/tls.c:173 +msgid "Error loading certificate verification stores" +msgstr "" + +#: src/lib/tls.c:178 +msgid "" +"Either a certificate file or a directory must be specified as a verification " +"store\n" +msgstr "" + +#: src/lib/tls.c:189 +msgid "Error loading certificate file" +msgstr "" + +#: src/lib/tls.c:197 +msgid "Error loading private key" +msgstr "" + +#: src/lib/tls.c:205 +msgid "Unable to open DH parameters file" +msgstr "" + +#: src/lib/tls.c:211 +msgid "Unable to load DH parameters from specified file" +msgstr "" + +#: src/lib/tls.c:215 +msgid "Failed to set TLS Diffie-Hellman parameters" +msgstr "" + +#: src/lib/tls.c:224 +msgid "Error setting cipher list, no valid ciphers available\n" +msgstr "" + +#: src/lib/tls.c:272 +msgid "Peer failed to present a TLS certificate\n" +msgstr "" + +#: src/lib/tls.c:314 +#, c-format +msgid "Peer %s failed to present a TLS certificate\n" +msgstr "" + +#: src/lib/tls.c:417 +msgid "Error creating file descriptor-based BIO" +msgstr "" + +#: src/lib/tls.c:428 +msgid "Error creating new SSL object" +msgstr "" + +#: src/lib/tls.c:492 src/lib/tls.c:515 +msgid "Connect failure" +msgstr "" + +#: src/lib/tls.c:592 src/lib/tls.c:596 +msgid "TLS shutdown failure." +msgstr "" + +#: src/lib/tls.c:645 src/lib/tls.c:665 +msgid "TLS read/write failure." +msgstr "" + +#: src/lib/tls.c:723 src/lib/tls.c:780 src/stored/dev.c:209 +#: src/stored/dev.c:227 src/stored/dev.c:233 src/stored/stored_conf.c:593 +#, c-format +msgid "Unable to init mutex: ERR=%s\n" +msgstr "" + +#: src/lib/tls.c:743 src/lib/tls.c:812 +#, c-format +msgid "Unable to destroy mutex: ERR=%s\n" +msgstr "" + +#: src/lib/tls.c:877 +#, c-format +msgid "Unable to init OpenSSL threading: ERR=%s\n" +msgstr "" + +#: src/lib/tls.c:887 +msgid "Failed to seed OpenSSL PRNG\n" +msgstr "" + +#: src/lib/tls.c:913 +msgid "Failed to save OpenSSL PRNG\n" +msgstr "" + +#: src/lib/address_conf.c:50 +#, c-format +msgid "Only ipv4 and ipv6 are supported (%d)\n" +msgstr "" + +#: src/lib/address_conf.c:54 +#, c-format +msgid "Only ipv4 is supported (%d)\n" +msgstr "" + +#: src/lib/address_conf.c:163 +#, c-format +msgid "It was tried to assign a ipv6 address to a ipv4(%d)\n" +msgstr "" + +#: src/lib/address_conf.c:172 +#, c-format +msgid "It was tried to assign a ipv4 address to a ipv6(%d)\n" +msgstr "" + +#: src/lib/address_conf.c:251 +#, c-format +msgid "Can't add default address (%s)\n" +msgstr "" + +#: src/lib/address_conf.c:281 +msgid "the old style addresses cannot be mixed with new style" +msgstr "" + +#: src/lib/address_conf.c:304 +#, c-format +msgid "can't resolve service(%s)" +msgstr "" + +#: src/lib/address_conf.c:314 +#, c-format +msgid "can't resolve hostname(%s) %s" +msgstr "" + +#: src/lib/address_conf.c:403 +#, c-format +msgid "Expected a block begin { , got: %s" +msgstr "" + +#: src/lib/address_conf.c:408 +msgid "Empty addr block is not allowed" +msgstr "" + +#: src/lib/address_conf.c:412 +#, c-format +msgid "Expected a string, got: %s" +msgstr "" + +#: src/lib/address_conf.c:421 +#, c-format +msgid "Expected a string [ip|ipv4|ipv6], got: %s" +msgstr "" + +#: src/lib/address_conf.c:425 +#, c-format +msgid "Expected a string [ip|ipv4], got: %s" +msgstr "" + +#: src/lib/address_conf.c:430 src/lib/address_conf.c:460 +#, c-format +msgid "Expected a equal =, got: %s" +msgstr "" + +#: src/lib/address_conf.c:434 +#, c-format +msgid "Expected a block beginn { , got: %s" +msgstr "" + +#: src/lib/address_conf.c:441 src/lib/address_conf.c:456 +#, c-format +msgid "Expected a identifier [addr|port], got: %s" +msgstr "" + +#: src/lib/address_conf.c:446 +msgid "Only one port per address block" +msgstr "" + +#: src/lib/address_conf.c:452 +msgid "Only one addr per address block" +msgstr "" + +#: src/lib/address_conf.c:468 +#, c-format +msgid "Expected a number or a string, got: %s" +msgstr "" + +#: src/lib/address_conf.c:474 +#, c-format +msgid "Expected an IP number or a hostname, got: %s" +msgstr "" + +#: src/lib/address_conf.c:480 +msgid "State machine missmatch" +msgstr "" + +#: src/lib/address_conf.c:486 src/lib/address_conf.c:499 +#, c-format +msgid "Expected a end of block }, got: %s" +msgstr "" + +#: src/lib/address_conf.c:492 +#, c-format +msgid "Can't add hostname(%s) and port(%s) to addrlist (%s)" +msgstr "" + +#: src/lib/address_conf.c:508 +#, c-format +msgid "Expected a hostname or IP nummer, got: %s" +msgstr "" + +#: src/lib/address_conf.c:513 src/lib/address_conf.c:527 +#, c-format +msgid "can't add port (%s) to (%s)" +msgstr "" + +#: src/lib/address_conf.c:522 +#, c-format +msgid "Expected a port number or string, got: %s" +msgstr "" + +#: src/lib/attr.c:64 +#, c-format +msgid "Error scanning attributes: %s\n" msgstr "" #: src/lib/berrno.c:48 @@ -6988,14 +6865,13 @@ msgstr "" msgid "Invalid errno. No error message possible." msgstr "" -#: src/lib/res.c:66 -#, c-format -msgid "rwl_writelock failure at %s:%d: ERR=%s\n" +#: src/lib/bget_msg.c:86 +msgid "Status OK\n" msgstr "" -#: src/lib/res.c:76 +#: src/lib/bget_msg.c:90 #, c-format -msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" +msgid "bget_msg: unknown signal %d\n" msgstr "" #: src/lib/bnet.c:109 @@ -7097,6 +6973,12 @@ msgstr "" msgid "Socket open error. proto=%d port=%d. ERR=%s\n" msgstr "" +#: src/lib/bnet.c:796 src/lib/bnet.c:821 src/lib/bnet_server.c:193 +#: src/lib/bnet_server.c:351 +#, c-format +msgid "Cannot set SO_KEEPALIVE on socket: %s\n" +msgstr "" + #: src/lib/bnet.c:852 #, c-format msgid "" @@ -7143,7116 +7025,6813 @@ msgstr "" msgid "Unknown sig %d" msgstr "" -#: src/lib/pythonlib.c:108 -msgid "Could not initialize Python\n" -msgstr "" - -#: src/lib/pythonlib.c:113 +#: src/lib/bnet_pkt.c:89 src/lib/bnet_pkt.c:147 #, c-format -msgid "Could not Run Python string %s\n" +msgid "Unknown BPKT type: %d\n" msgstr "" -#: src/lib/pythonlib.c:125 -msgid "Could not initialize Python Job type.\n" +#: src/lib/bnet_server.c:96 +#, c-format +msgid "Cannot open stream socket. ERR=%s. Current %s All %s\n" msgstr "" -#: src/lib/pythonlib.c:130 +#: src/lib/bnet_server.c:109 src/lib/bnet_server.c:258 #, c-format -msgid "Could not import Python script %s/%s. Python disabled.\n" +msgid "Cannot set SO_REUSEADDR on socket: %s\n" msgstr "" -#: src/lib/pythonlib.c:230 -msgid "Could not create Python Job Object.\n" +#: src/lib/bnet_server.c:118 +#, c-format +msgid "Cannot bind port %d: ERR=%s: Retrying ...\n" msgstr "" -#: src/lib/pythonlib.c:243 src/lib/pythonlib.c:267 +#: src/lib/bnet_server.c:123 #, c-format -msgid "Python function \"%s\" not found.\n" +msgid "Cannot bind port %d: ERR=%s.\n" msgstr "" -#: src/lib/pythonlib.c:282 +#: src/lib/bnet_server.c:134 #, c-format -msgid "Unknown Python daemon event %s\n" +msgid "Could not init client queue: ERR=%s\n" msgstr "" -#: src/lib/attr.c:64 +#: src/lib/bnet_server.c:157 src/lib/bnet_server.c:320 #, c-format -msgid "Error scanning attributes: %s\n" +msgid "Error in select: %s\n" msgstr "" -#: src/lib/daemon.c:53 +#: src/lib/bnet_server.c:178 src/lib/bnet_server.c:339 #, c-format -msgid "Cannot fork to become daemon: %s\n" +msgid "Connection from %s:%d refused by hosts.access\n" msgstr "" -#: src/lib/signal.c:61 -msgid "Invalid signal number" +#: src/lib/bnet_server.c:204 +msgid "Could not create client BSOCK.\n" msgstr "" -#: src/lib/signal.c:87 +#: src/lib/bnet_server.c:211 #, c-format -msgid "Bacula interrupted by signal %d: %s\n" +msgid "Could not add job to client queue: ERR=%s\n" msgstr "" -#: src/lib/signal.c:100 +#: src/lib/bnet_server.c:222 #, c-format -msgid "Kaboom! %s, %s got signal %d. Attempting traceback.\n" +msgid "Could not destroy client queue: ERR=%s\n" msgstr "" -#: src/lib/signal.c:102 +#: src/lib/bnet_server.c:249 #, c-format -msgid "Kaboom! exepath=%s\n" +msgid "Cannot open stream socket: %s\n" msgstr "" -#: src/lib/signal.c:136 +#: src/lib/bnet_server.c:278 #, c-format -msgid "Fork error: ERR=%s\n" +msgid "Cannot bind port %d: ERR=%s: retrying ...\n" msgstr "" -#: src/lib/signal.c:143 -#, c-format -msgid "Calling: %s %s %s\n" +#: src/lib/bnet_server.c:284 +msgid "Server socket" msgstr "" -#: src/lib/signal.c:145 +#: src/lib/bnet_server.c:366 #, c-format -msgid "execv: %s failed: ERR=%s\n" +msgid "Socket accept error for %s. ERR=%s\n" msgstr "" -#: src/lib/signal.c:160 -#, c-format -msgid "Traceback complete, attempting cleanup ...\n" +#: src/lib/bpipe.c:282 src/lib/bpipe.c:361 +msgid "Program killed by Bacula watchdog (timeout)\n" msgstr "" -#: src/lib/signal.c:168 +#: src/lib/bshm.c:69 #, c-format -msgid "It looks like the traceback worked ...\n" +msgid "shmget failure key = %x\n" msgstr "" -#: src/lib/signal.c:197 +#: src/lib/bshm.c:77 #, c-format -msgid "BA_NSIG too small (%d) should be (%d)\n" +msgid "Could not get %d bytes of shared memory: %s\n" msgstr "" -#: src/lib/signal.c:203 -msgid "UNKNOWN SIGNAL" +#: src/lib/bshm.c:102 +#, c-format +msgid "Could not attach shared memory: %s\n" msgstr "" -#: src/lib/signal.c:204 -msgid "Hangup" +#: src/lib/bshm.c:123 +#, c-format +msgid "Error detaching shared memory: %s\n" msgstr "" -#: src/lib/signal.c:205 -msgid "Interrupt" +#: src/lib/bshm.c:139 +#, c-format +msgid "Could not destroy shared memory: %s\n" msgstr "" -#: src/lib/signal.c:206 -msgid "Quit" +#: src/lib/bsys.c:176 src/lib/bsys.c:192 src/lib/bsys.c:202 src/lib/bsys.c:214 +#, c-format +msgid "Out of memory: ERR=%s\n" msgstr "" -#: src/lib/signal.c:207 -msgid "Illegal instruction" +#: src/lib/bsys.c:256 +msgid "Buffer overflow.\n" msgstr "" -#: src/lib/signal.c:208 -msgid "Trace/Breakpoint trap" +#: src/lib/bsys.c:322 +msgid "Bad errno" msgstr "" -#: src/lib/signal.c:209 -msgid "Abort" +#: src/lib/bsys.c:339 +msgid "Possible mutex deadlock.\n" msgstr "" -#: src/lib/signal.c:211 -msgid "EMT instruction (Emulation Trap)" +#: src/lib/bsys.c:343 src/lib/bsys.c:375 +#, c-format +msgid "Mutex lock failure. ERR=%s\n" msgstr "" -#: src/lib/signal.c:214 -msgid "IOT trap" +#: src/lib/bsys.c:346 +msgid "Possible mutex deadlock resolved.\n" msgstr "" -#: src/lib/signal.c:216 -msgid "BUS error" +#: src/lib/bsys.c:358 +#, c-format +msgid "Mutex unlock not locked. ERR=%s\n" msgstr "" -#: src/lib/signal.c:217 -msgid "Floating-point exception" +#: src/lib/bsys.c:363 src/lib/bsys.c:385 +#, c-format +msgid "Mutex unlock failure. ERR=%s\n" msgstr "" -#: src/lib/signal.c:218 -msgid "Kill, unblockable" +#: src/lib/bsys.c:399 +#, c-format +msgid "Memset for %d bytes at %s:%d\n" msgstr "" -#: src/lib/signal.c:219 -msgid "User-defined signal 1" +#: src/lib/bsys.c:428 +#, c-format +msgid "Cannot open pid file. %s ERR=%s\n" msgstr "" -#: src/lib/signal.c:220 -msgid "Segmentation violation" +#: src/lib/bsys.c:432 +#, c-format +msgid "" +"%s is already running. pid=%d\n" +"Check file %s\n" msgstr "" -#: src/lib/signal.c:221 -msgid "User-defined signal 2" +#: src/lib/bsys.c:445 +#, c-format +msgid "Could not open pid file. %s ERR=%s\n" msgstr "" -#: src/lib/signal.c:222 -msgid "Broken pipe" +#: src/lib/bsys.c:565 +#, c-format +msgid "Could not create state file. %s ERR=%s\n" msgstr "" -#: src/lib/signal.c:223 -msgid "Alarm clock" +#: src/lib/bsys.c:584 +#, c-format +msgid "Write final hdr error: ERR=%s\n" msgstr "" -#: src/lib/signal.c:224 -msgid "Termination" +#: src/lib/bsys.c:611 +#, c-format +msgid "Could not find specified group: %s\n" msgstr "" -#: src/lib/signal.c:226 -msgid "Stack fault" +#: src/lib/bsys.c:614 src/lib/bsys.c:618 +#, c-format +msgid "Could not set specified group: %s\n" msgstr "" -#: src/lib/signal.c:228 -msgid "Child status has changed" +#: src/lib/bsys.c:627 +#, c-format +msgid "Could not find specified userid: %s\n" msgstr "" -#: src/lib/signal.c:229 -msgid "Continue" +#: src/lib/bsys.c:630 +#, c-format +msgid "Could not set specified userid: %s\n" msgstr "" -#: src/lib/signal.c:230 -msgid "Stop, unblockable" +#: src/lib/btimers.c:241 +msgid "stop_btimer called with NULL btimer_id\n" msgstr "" -#: src/lib/signal.c:231 -msgid "Keyboard stop" +#: src/lib/cram-md5.c:76 src/lib/cram-md5.c:101 +msgid "1999 Authorization failed.\n" msgstr "" -#: src/lib/signal.c:232 -msgid "Background read from tty" +#: src/lib/daemon.c:53 +#, c-format +msgid "Cannot fork to become daemon: %s\n" msgstr "" -#: src/lib/signal.c:233 -msgid "Background write to tty" +#: src/lib/edit.c:400 +#, c-format +msgid "Illegal character \"%c\" in name.\n" msgstr "" -#: src/lib/signal.c:234 -msgid "Urgent condition on socket" +#: src/lib/edit.c:407 +msgid "Name too long.\n" msgstr "" -#: src/lib/signal.c:235 -msgid "CPU limit exceeded" +#: src/lib/events.c:161 +msgid "Events not available" msgstr "" -#: src/lib/signal.c:236 -msgid "File size limit exceeded" +#: src/lib/jcr.c:278 +msgid "NULL jcr.\n" msgstr "" -#: src/lib/signal.c:237 -msgid "Virtual alarm clock" +#: src/lib/jcr.c:399 +#, c-format +msgid "JCR use_count=%d JobId=%d\n" msgstr "" -#: src/lib/signal.c:238 -msgid "Profiling alarm clock" +#: src/lib/jcr.c:680 +#, c-format +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading Storage " +"daemon.\n" msgstr "" -#: src/lib/signal.c:239 -msgid "Window size change" +#: src/lib/jcr.c:692 +#, c-format +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading File daemon.\n" msgstr "" -#: src/lib/signal.c:240 -msgid "I/O now possible" +#: src/lib/jcr.c:704 +#, c-format +msgid "" +"Watchdog sending kill after %d secs to thread stalled reading Director.\n" msgstr "" -#: src/lib/signal.c:242 -msgid "Power failure restart" +#: src/lib/lex.c:79 src/wx-console/console_thread.cpp:186 +#, c-format +msgid "Problem probably begins at line %d.\n" msgstr "" -#: src/lib/signal.c:245 -msgid "No runnable lwp" +#: src/lib/lex.c:84 src/wx-console/console_thread.cpp:191 +#, c-format +msgid "" +"Config error: %s\n" +" : line %d, col %d of file %s\n" +"%s\n" +"%s" msgstr "" -#: src/lib/signal.c:248 -msgid "SIGLWP special signal used by thread library" +#: src/lib/lex.c:88 +#, c-format +msgid "Config error: %s\n" msgstr "" -#: src/lib/signal.c:251 -msgid "Checkpoint Freeze" +#: src/lib/lex.c:108 +msgid "Close of NULL file\n" msgstr "" -#: src/lib/signal.c:254 -msgid "Checkpoint Thaw" +#: src/lib/lex.c:181 +msgid "get_char: called after EOF\n" msgstr "" -#: src/lib/signal.c:257 -msgid "Thread Cancellation" +#: src/lib/lex.c:220 +#, c-format +msgid "Config token too long, file: %s, line %d, begins at line %d\n" msgstr "" -#: src/lib/signal.c:260 -msgid "Resource Lost (e.g. record-lock lost)" +#: src/lib/lex.c:244 +msgid "none" msgstr "" -#: src/lib/events.c:161 -msgid "Events not available" +#: src/lib/lex.c:245 +msgid "comment" msgstr "" -#: src/lib/btimers.c:241 -msgid "stop_btimer called with NULL btimer_id\n" +#: src/lib/lex.c:246 +msgid "number" msgstr "" -#: src/lib/var.c:2659 -msgid "everything ok" +#: src/lib/lex.c:247 +msgid "ip_addr" msgstr "" -#: src/lib/var.c:2660 -msgid "incomplete named character" +#: src/lib/lex.c:248 +msgid "identifier" msgstr "" -#: src/lib/var.c:2661 -msgid "incomplete hexadecimal value" +#: src/lib/lex.c:249 +msgid "string" msgstr "" -#: src/lib/var.c:2662 -msgid "invalid hexadecimal value" +#: src/lib/lex.c:250 +msgid "quoted_string" msgstr "" -#: src/lib/var.c:2663 -msgid "octal value too large" +#: src/lib/lex.c:286 +#, c-format +msgid "expected a positive integer number, got: %s" msgstr "" -#: src/lib/var.c:2664 -msgid "invalid octal value" +#: src/lib/lex.c:292 +#, c-format +msgid "expected a postive integer number, got: %s" msgstr "" -#: src/lib/var.c:2665 -msgid "incomplete octal value" +#: src/lib/lex.c:504 +#, c-format +msgid "Cannot open included config file %s: %s\n" msgstr "" -#: src/lib/var.c:2666 -msgid "incomplete grouped hexadecimal value" +#: src/lib/lex.c:539 +#, c-format +msgid "expected an integer or a range, got %s: %s" msgstr "" -#: src/lib/var.c:2667 -msgid "incorrect character class specification" +#: src/lib/lex.c:553 src/lib/lex.c:561 src/lib/lex.c:572 src/lib/lex.c:580 +#, c-format +msgid "expected an integer number, got %s: %s" msgstr "" -#: src/lib/var.c:2668 -msgid "invalid expansion configuration" +#: src/lib/lex.c:590 +#, c-format +msgid "expected a name, got %s: %s" msgstr "" -#: src/lib/var.c:2669 -msgid "out of memory" +#: src/lib/lex.c:594 +#, c-format +msgid "name %s length %d too long, max is %d\n" msgstr "" -#: src/lib/var.c:2670 -msgid "incomplete variable specification" +#: src/lib/lex.c:602 +#, c-format +msgid "expected a string, got %s: %s" msgstr "" -#: src/lib/var.c:2671 -msgid "undefined variable" +#: src/lib/mem_pool.c:95 +#, c-format +msgid "MemPool index %d larger than max %d\n" msgstr "" -#: src/lib/var.c:2672 -msgid "input is neither text nor variable" +#: src/lib/mem_pool.c:113 src/lib/mem_pool.c:133 src/lib/mem_pool.c:168 +#: src/lib/mem_pool.c:239 src/lib/mem_pool.c:259 src/lib/mem_pool.c:297 +#: src/lib/mem_pool.c:550 +#, c-format +msgid "Out of memory requesting %d bytes\n" msgstr "" -#: src/lib/var.c:2673 -msgid "unknown command character in variable" +#: src/lib/message.c:253 src/lib/message.c:263 +#, c-format +msgid "Could not open console message file %s: ERR=%s\n" msgstr "" -#: src/lib/var.c:2674 -msgid "malformatted search and replace operation" +#: src/lib/message.c:268 +#, c-format +msgid "Could not get con mutex: ERR=%s\n" msgstr "" -#: src/lib/var.c:2675 -msgid "unknown flag in search and replace operation" +#: src/lib/message.c:372 +#, c-format +msgid "open mail pipe %s failed: ERR=%s\n" msgstr "" -#: src/lib/var.c:2676 -msgid "invalid regex in search and replace operation" +#: src/lib/message.c:378 +msgid "Bacula Message" msgstr "" -#: src/lib/var.c:2677 -msgid "missing parameter in command" +#: src/lib/message.c:431 +msgid "open mail pipe failed.\n" msgstr "" -#: src/lib/var.c:2678 -msgid "empty search string in search and replace operation" +#: src/lib/message.c:443 +#, c-format +msgid "close error: ERR=%s\n" msgstr "" -#: src/lib/var.c:2679 -msgid "start offset missing in cut operation" +#: src/lib/message.c:454 +#, c-format +msgid "Mail prog: %s" msgstr "" -#: src/lib/var.c:2680 -msgid "offsets in cut operation delimited by unknown character" +#: src/lib/message.c:463 +#, c-format +msgid "" +"Mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" -#: src/lib/var.c:2681 -msgid "range out of bounds in cut operation" +#: src/lib/message.c:650 +#, c-format +msgid "" +"Operator mail program terminated in error.\n" +"CMD=%s\n" +"ERR=%s\n" msgstr "" -#: src/lib/var.c:2682 -msgid "offset out of bounds in cut operation" +#: src/lib/message.c:667 src/lib/message.c:689 src/lib/message.c:705 +#, c-format +msgid "fopen %s failed: ERR=%s\n" msgstr "" -#: src/lib/var.c:2683 -msgid "logic error in cut operation" +#: src/lib/message.c:933 +#, c-format +msgid "%s: ABORTING due to ERROR in %s:%d\n" msgstr "" -#: src/lib/var.c:2684 -msgid "malformatted transpose operation" +#: src/lib/message.c:937 +#, c-format +msgid "%s: ERROR TERMINATION at %s:%d\n" msgstr "" -#: src/lib/var.c:2685 -msgid "source and target class mismatch in transpose operation" +#: src/lib/message.c:942 +#, c-format +msgid "%s: Fatal Error because: " msgstr "" -#: src/lib/var.c:2686 -msgid "empty character class in transpose operation" +#: src/lib/message.c:944 +#, c-format +msgid "%s: Fatal Error at %s:%d because:\n" msgstr "" -#: src/lib/var.c:2687 -msgid "incorrect character class in transpose operation" +#: src/lib/message.c:948 +#, c-format +msgid "%s: ERROR: " msgstr "" -#: src/lib/var.c:2688 -msgid "malformatted padding operation" +#: src/lib/message.c:950 +#, c-format +msgid "%s: ERROR in %s:%d " msgstr "" -#: src/lib/var.c:2689 -msgid "width parameter missing in padding operation" +#: src/lib/message.c:953 +#, c-format +msgid "%s: Warning: " msgstr "" -#: src/lib/var.c:2690 -msgid "fill string missing in padding operation" +#: src/lib/message.c:956 +#, c-format +msgid "%s: Security violation: " msgstr "" -#: src/lib/var.c:2691 -msgid "unknown quoted pair in search and replace operation" +#: src/lib/message.c:1032 +#, c-format +msgid "%s ABORTING due to ERROR\n" msgstr "" -#: src/lib/var.c:2692 -msgid "sub-matching reference out of range" +#: src/lib/message.c:1035 +#, c-format +msgid "%s ERROR TERMINATION\n" msgstr "" -#: src/lib/var.c:2693 -msgid "invalid argument" +#: src/lib/message.c:1038 +#, c-format +msgid "%s: %s Fatal error: " msgstr "" -#: src/lib/var.c:2694 -msgid "incomplete quoted pair" +#: src/lib/message.c:1044 +#, c-format +msgid "%s: %s Error: " msgstr "" -#: src/lib/var.c:2695 -msgid "lookup function does not support variable arrays" +#: src/lib/message.c:1050 +#, c-format +msgid "%s: %s Warning: " msgstr "" -#: src/lib/var.c:2696 -msgid "index of array variable contains an invalid character" +#: src/lib/message.c:1053 +#, c-format +msgid "%s: %s Security violation: " msgstr "" -#: src/lib/var.c:2697 -msgid "index of array variable is incomplete" +#: src/lib/parse_conf.c:160 +msgid "***UNKNOWN***" msgstr "" -#: src/lib/var.c:2698 -msgid "bracket expression in array variable's index not closed" +#: src/lib/parse_conf.c:179 +#, c-format +msgid "Unable to initialize resource lock. ERR=%s\n" msgstr "" -#: src/lib/var.c:2699 -msgid "division by zero error in index specification" +#: src/lib/parse_conf.c:262 src/lib/parse_conf.c:281 +#, c-format +msgid "expected an =, got: %s" msgstr "" -#: src/lib/var.c:2700 -msgid "unterminated loop construct" +#: src/lib/parse_conf.c:289 +#, c-format +msgid "Unknown item code: %d\n" msgstr "" -#: src/lib/var.c:2701 -msgid "invalid character in loop limits" +#: src/lib/parse_conf.c:328 +#, c-format +msgid "message type: %s not found" msgstr "" -#: src/lib/var.c:2702 -msgid "malformed operation argument list" +#: src/lib/parse_conf.c:367 +#, c-format +msgid "Attempt to redefine name \"%s\" to \"%s\"." msgstr "" -#: src/lib/var.c:2703 -msgid "undefined operation" +#: src/lib/parse_conf.c:458 +#, c-format +msgid "Could not find config Resource %s referenced on line %d : %s\n" msgstr "" -#: src/lib/var.c:2704 -msgid "formatting failure" +#: src/lib/parse_conf.c:462 +#, c-format +msgid "Attempt to redefine resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/lib/var.c:2713 -msgid "unknown error" +#: src/lib/parse_conf.c:497 +#, c-format +msgid "Too many %s directives. Max. is %d. line %d: %s\n" msgstr "" -#: src/lib/semlock.c:185 -msgid "sem_unlock by non-owner.\n" +#: src/lib/parse_conf.c:507 +#, c-format +msgid "Could not find config Resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/lib/crypto.c:423 -msgid "Unable to open certificate file" +#: src/lib/parse_conf.c:569 +#, c-format +msgid "Missing config Resource \"%s\" referenced on line %d : %s\n" msgstr "" -#: src/lib/crypto.c:430 -msgid "Unable to read certificate from file" +#: src/lib/parse_conf.c:633 +#, c-format +msgid "expected a size number, got: %s" msgstr "" -#: src/lib/crypto.c:436 -msgid "Unable to extract public key from certificate" +#: src/lib/parse_conf.c:638 +#, c-format +msgid "expected a size, got: %s" msgstr "" -#: src/lib/crypto.c:442 -msgid "" -"Provided certificate does not include the required subjectKeyIdentifier " -"extension." +#: src/lib/parse_conf.c:675 src/lib/parse_conf.c:680 +#, c-format +msgid "expected a time period, got: %s" msgstr "" -#: src/lib/crypto.c:448 +#: src/lib/parse_conf.c:699 #, c-format -msgid "Unsupported key type provided: %d\n" +msgid "Expect a %s or %s, got: %s" msgstr "" -#: src/lib/crypto.c:485 src/lib/crypto.c:533 -msgid "Unable to open private key file" +#: src/lib/parse_conf.c:723 +#, c-format +msgid "Expected a Tape Label keyword, got: %s" msgstr "" -#: src/lib/crypto.c:515 src/lib/crypto.c:549 -msgid "Unable to read private key from file" +#: src/lib/parse_conf.c:772 +#, c-format +msgid "Cannot open config file \"%s\": %s\n" msgstr "" -#: src/lib/crypto.c:606 +#: src/lib/parse_conf.c:785 #, c-format -msgid "Unsupported digest type: %d\n" +msgid "Expected a Resource name identifier, got: %s" msgstr "" -#: src/lib/crypto.c:619 -msgid "OpenSSL digest initialization failed" +#: src/lib/parse_conf.c:797 +#, c-format +msgid "expected resource name, got: %s" msgstr "" -#: src/lib/crypto.c:773 -msgid "OpenSSL error occured" +#: src/lib/parse_conf.c:808 +#, c-format +msgid "not in resource definition: %s" msgstr "" -#: src/lib/crypto.c:839 -msgid "Signature creation failed" +#: src/lib/parse_conf.c:833 +#, c-format +msgid "" +"Keyword \"%s\" not permitted in this resource.\n" +"Perhaps you left the trailing brace off of the previous resource." msgstr "" -#: src/lib/crypto.c:916 -msgid "Signature decoding failed" +#: src/lib/parse_conf.c:850 +#, c-format +msgid "unexpected token %d %s in resource definition" msgstr "" -#: src/lib/crypto.c:992 -msgid "Unsupported cipher type specified\n" +#: src/lib/parse_conf.c:856 +#, c-format +msgid "Unknown parser state %d\n" msgstr "" -#: src/lib/crypto.c:1149 -msgid "CryptoData decoding failed" +#: src/lib/parse_conf.c:861 +msgid "End of conf file reached with unclosed resource." msgstr "" -#: src/lib/crypto.c:1193 -msgid "Failure decrypting the session key" +#: src/lib/pythonlib.c:108 +msgid "Could not initialize Python\n" msgstr "" -#: src/lib/crypto.c:1246 +#: src/lib/pythonlib.c:113 #, c-format -msgid "Unsupported contentEncryptionAlgorithm: %d\n" +msgid "Could not Run Python string %s\n" msgstr "" -#: src/lib/crypto.c:1256 src/lib/crypto.c:1262 -msgid "OpenSSL cipher context initialization failed" +#: src/lib/pythonlib.c:125 +msgid "Could not initialize Python Job type.\n" msgstr "" -#: src/lib/crypto.c:1269 -msgid "Encryption session provided an invalid symmetric key" -msgstr "" +#: src/lib/pythonlib.c:130 +#, c-format +msgid "Could not import Python script %s/%s. Python disabled.\n" +msgstr "" -#: src/lib/crypto.c:1275 -msgid "Encryption session provided an invalid IV" +#: src/lib/pythonlib.c:230 +msgid "Could not create Python Job Object.\n" msgstr "" -#: src/lib/crypto.c:1281 -msgid "OpenSSL cipher context key/IV initialization failed" +#: src/lib/pythonlib.c:243 src/lib/pythonlib.c:267 +#, c-format +msgid "Python function \"%s\" not found.\n" msgstr "" -#: src/lib/crypto.c:1347 +#: src/lib/pythonlib.c:282 #, c-format -msgid "Unable to init OpenSSL threading: ERR=%s\n" +msgid "Unknown Python daemon event %s\n" msgstr "" -#: src/lib/crypto.c:1360 -msgid "Failed to seed OpenSSL PRNG\n" +#: src/lib/regex.c:1040 +msgid "Success" msgstr "" -#: src/lib/crypto.c:1386 -msgid "Failed to save OpenSSL PRNG\n" +#: src/lib/regex.c:1043 +msgid "No match" msgstr "" -#: src/lib/crypto.c:1444 -msgid "Unsupported digest type specified\n" +#: src/lib/regex.c:1046 +msgid "Invalid regular expression" msgstr "" -#: src/lib/crypto.c:1463 -#, c-format -msgid "SHA1Update() returned an error: %d\n" +#: src/lib/regex.c:1049 +msgid "Invalid collation character" msgstr "" -#: src/lib/openssl.c:109 src/lib/openssl.c:178 -#, c-format -msgid "Unable to destroy mutex: ERR=%s\n" +#: src/lib/regex.c:1052 +msgid "Invalid character class name" msgstr "" -#: src/gnome2-console/restore.c:121 -msgid "Mark" +#: src/lib/regex.c:1055 +msgid "Trailing backslash" msgstr "" -#: src/gnome2-console/restore.c:121 -msgid "File" +#: src/lib/regex.c:1058 +msgid "Invalid back reference" msgstr "" -#: src/gnome2-console/restore.c:121 -msgid "Mode" +#: src/lib/regex.c:1061 +msgid "Unmatched [ or [^" msgstr "" -#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:288 -msgid "User" +#: src/lib/regex.c:1064 +msgid "Unmatched ( or \\(" msgstr "" -#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:292 -msgid "Group" +#: src/lib/regex.c:1067 +msgid "Unmatched \\{" msgstr "" -#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:276 -msgid "Size" +#: src/lib/regex.c:1070 +msgid "Invalid content of \\{\\}" msgstr "" -#: src/gnome2-console/restore.c:121 src/wx-console/wxbrestorepanel.cpp:280 -msgid "Date" +#: src/lib/regex.c:1073 +msgid "Invalid range end" msgstr "" -#: src/gnome2-console/interface.c:32 -msgid "_Connect" +#: src/lib/regex.c:1076 +msgid "Memory exhausted" msgstr "" -#: src/gnome2-console/interface.c:33 src/gnome2-console/interface.c:232 -msgid "Connect to Director" +#: src/lib/regex.c:1079 +msgid "Invalid preceding regular expression" msgstr "" -#: src/gnome2-console/interface.c:39 -msgid "_Disconnect" +#: src/lib/regex.c:1082 +msgid "Premature end of regular expression" msgstr "" -#: src/gnome2-console/interface.c:40 -msgid "Disconnect from Director" +#: src/lib/regex.c:1085 +msgid "Regular expression too big" msgstr "" -#: src/gnome2-console/interface.c:93 -msgid "_Display Messages" +#: src/lib/regex.c:1088 +msgid "Unmatched ) or \\)" msgstr "" -#: src/gnome2-console/interface.c:129 -msgid "_File" +#: src/lib/regex.c:5874 +msgid "No previous regular expression" msgstr "" -#: src/gnome2-console/interface.c:136 -msgid "_Edit" +#: src/lib/res.c:66 +#, c-format +msgid "rwl_writelock failure at %s:%d: ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:143 -msgid "_View" +#: src/lib/res.c:76 +#, c-format +msgid "rwl_writeunlock failure at %s:%d:. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:144 src/gnome2-console/interface.c:252 -msgid "Display Messages" +#: src/lib/rwlock.c:289 +msgid "rwl_writeunlock called too many times.\n" msgstr "" -#: src/gnome2-console/interface.c:150 -msgid "_Settings" +#: src/lib/rwlock.c:293 +msgid "rwl_writeunlock by non-owner.\n" msgstr "" -#: src/gnome2-console/interface.c:157 -msgid "_Help" +#: src/lib/rwlock.c:358 src/lib/semlock.c:248 +#, c-format +msgid "Write lock failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:197 -msgid "Bacula Console" +#: src/lib/rwlock.c:365 src/lib/semlock.c:255 +#, c-format +msgid "Write unlock failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:231 src/wx-console/wxbmainframe.cpp:229 -#: src/wx-console/wxbmainframe.cpp:597 -msgid "Connect" +#: src/lib/rwlock.c:375 src/lib/semlock.c:265 +#, c-format +msgid "Read lock failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:241 -msgid "Run" +#: src/lib/rwlock.c:382 src/lib/semlock.c:272 +#, c-format +msgid "Read unlock failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:242 src/gnome2-console/interface.c:677 -#: src/gnome2-console/interface.c:690 -msgid "Run a Job" +#: src/lib/rwlock.c:391 src/lib/semlock.c:281 +#, c-format +msgid "Thread %d found unchanged elements %d times\n" msgstr "" -#: src/gnome2-console/interface.c:251 -msgid "Msgs" +#: src/lib/rwlock.c:423 src/lib/semlock.c:313 +#, c-format +msgid "Init rwlock failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:271 -msgid "Label" +#: src/lib/rwlock.c:438 src/lib/semlock.c:328 +#, c-format +msgid "Create thread failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:299 -msgid " Command: " +#: src/lib/rwlock.c:449 src/lib/semlock.c:339 +#, c-format +msgid "Join thread failed. ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:307 -msgid "Enter Commands Here" +#: src/lib/rwlock.c:452 src/lib/semlock.c:342 +#, c-format +msgid "%02d: interval %d, writes %d, reads %d\n" msgstr "" -#: src/gnome2-console/interface.c:318 -msgid " Status: " +#: src/lib/rwlock.c:462 src/lib/semlock.c:352 +#, c-format +msgid "data %02d: value %d, %d writes\n" msgstr "" -#: src/gnome2-console/interface.c:326 -msgid " " +#: src/lib/rwlock.c:467 src/lib/semlock.c:357 +#, c-format +msgid "Total: %d thread writes, %d data writes\n" msgstr "" -#: src/gnome2-console/interface.c:422 -msgid "About Bacula Console" +#: src/lib/rwlock.c:539 src/lib/semlock.c:429 +msgid "Try write lock" msgstr "" -#: src/gnome2-console/interface.c:436 -msgid "Bacula Console\n" +#: src/lib/rwlock.c:545 src/lib/semlock.c:435 +msgid "Try read lock" msgstr "" -#: src/gnome2-console/interface.c:444 -msgid "Copyright (c) 2000 - 2004, Kern Sibbald and John Walker" +#: src/lib/rwlock.c:600 src/lib/semlock.c:490 +msgid "Create thread" msgstr "" -#: src/gnome2-console/interface.c:450 -msgid "Authors: Kern Sibbald and John Walker" +#: src/lib/rwlock.c:610 src/lib/semlock.c:500 +msgid "Join thread" msgstr "" -#: src/gnome2-console/interface.c:456 -msgid "It comes by night and sucks the essence from your computers" +#: src/lib/rwlock.c:612 src/lib/semlock.c:502 +#, c-format +msgid "%02d: interval %d, updates %d, r_collisions %d, w_collisions %d\n" msgstr "" -#: src/gnome2-console/interface.c:521 src/gnome2-console/interface.c:536 -msgid "Select Director" +#: src/lib/rwlock.c:624 src/lib/semlock.c:514 +#, c-format +msgid "data %02d: value %d, %d updates\n" msgstr "" -#: src/gnome2-console/interface.c:708 src/gnome2-console/interface.c:1616 -msgid "Job:" +#: src/lib/semlock.c:185 +msgid "sem_unlock by non-owner.\n" msgstr "" -#: src/gnome2-console/interface.c:728 -msgid " Type:" +#: src/lib/signal.c:61 +msgid "Invalid signal number" msgstr "" -#: src/gnome2-console/interface.c:757 src/gnome2-console/interface.c:1644 -#: src/wx-console/wxbrestorepanel.cpp:1862 -msgid "Client:" +#: src/lib/signal.c:87 +#, c-format +msgid "Bacula interrupted by signal %d: %s\n" msgstr "" -#: src/gnome2-console/interface.c:787 src/gnome2-console/interface.c:1672 -msgid "FileSet: " +#: src/lib/signal.c:100 +#, c-format +msgid "Kaboom! %s, %s got signal %d. Attempting traceback.\n" msgstr "" -#: src/gnome2-console/interface.c:813 src/wx-console/wxbrestorepanel.cpp:1868 -msgid "Priority:" +#: src/lib/signal.c:102 +#, c-format +msgid "Kaboom! exepath=%s\n" msgstr "" -#: src/gnome2-console/interface.c:836 -msgid "Level:" +#: src/lib/signal.c:136 +#, c-format +msgid "Fork error: ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:866 src/gnome2-console/interface.c:1418 -#: src/gnome2-console/interface.c:1700 -msgid "Pool:" +#: src/lib/signal.c:143 +#, c-format +msgid "Calling: %s %s %s\n" msgstr "" -#: src/gnome2-console/interface.c:895 src/gnome2-console/interface.c:1393 -#: src/gnome2-console/interface.c:1728 src/wx-console/wxbrestorepanel.cpp:1864 -msgid "Storage:" +#: src/lib/signal.c:145 +#, c-format +msgid "execv: %s failed: ERR=%s\n" msgstr "" -#: src/gnome2-console/interface.c:924 -msgid "Messages:" +#: src/lib/signal.c:160 +#, c-format +msgid "Traceback complete, attempting cleanup ...\n" msgstr "" -#: src/gnome2-console/interface.c:952 -msgid "Where: " +#: src/lib/signal.c:168 +#, c-format +msgid "It looks like the traceback worked ...\n" msgstr "" -#: src/gnome2-console/interface.c:970 src/wx-console/wxbrestorepanel.cpp:1866 -msgid "When:" +#: src/lib/signal.c:197 +#, c-format +msgid "BA_NSIG too small (%d) should be (%d)\n" msgstr "" -#: src/gnome2-console/interface.c:988 src/wx-console/wxbrestorepanel.cpp:1847 -msgid "Bootstrap:" +#: src/lib/signal.c:203 +msgid "UNKNOWN SIGNAL" msgstr "" -#: src/gnome2-console/interface.c:1108 -msgid "_New" +#: src/lib/signal.c:204 +msgid "Hangup" msgstr "" -#: src/gnome2-console/interface.c:1177 -msgid "Restore File Selection" +#: src/lib/signal.c:205 +msgid "Interrupt" msgstr "" -#: src/gnome2-console/interface.c:1226 -msgid "Current dir:" +#: src/lib/signal.c:206 +msgid "Quit" msgstr "" -#: src/gnome2-console/interface.c:1252 -msgid "Files Selected: " +#: src/lib/signal.c:207 +msgid "Illegal instruction" msgstr "" -#: src/gnome2-console/interface.c:1373 src/gnome2-console/interface.c:1383 -msgid "Label a Volume" +#: src/lib/signal.c:208 +msgid "Trace/Breakpoint trap" msgstr "" -#: src/gnome2-console/interface.c:1444 -msgid "Volume Name:" +#: src/lib/signal.c:209 +msgid "Abort" msgstr "" -#: src/gnome2-console/interface.c:1459 -msgid "Slot:" +#: src/lib/signal.c:211 +msgid "EMT instruction (Emulation Trap)" msgstr "" -#: src/gnome2-console/interface.c:1585 -msgid "Restore Files Dialog" +#: src/lib/signal.c:214 +msgid "IOT trap" msgstr "" -#: src/gnome2-console/interface.c:1599 -msgid "Restore Files" +#: src/lib/signal.c:216 +msgid "BUS error" msgstr "" -#: src/gnome2-console/interface.c:1756 -msgid "Before:" +#: src/lib/signal.c:217 +msgid "Floating-point exception" msgstr "" -#: src/gnome2-console/interface.c:1799 -msgid "Select Files" +#: src/lib/signal.c:218 +msgid "Kill, unblockable" msgstr "" -#: src/gnome2-console/interface.c:1883 -msgid "Progress" +#: src/lib/signal.c:219 +msgid "User-defined signal 1" msgstr "" -#: src/gnome2-console/support.c:41 -#, c-format -msgid "Widget not found: %s" +#: src/lib/signal.c:220 +msgid "Segmentation violation" msgstr "" -#: src/gnome2-console/support.c:60 src/gnome2-console/support.c:85 -#, c-format -msgid "Couldn't find pixmap file: %s" +#: src/lib/signal.c:221 +msgid "User-defined signal 2" msgstr "" -#: src/gnome2-console/support.c:92 -#, c-format -msgid "Failed to load pixbuf file: %s: %s\n" +#: src/lib/signal.c:222 +msgid "Broken pipe" msgstr "" -#: src/gnome2-console/authenticate.c:74 -#, c-format -msgid "%s: Director authorization problem.\n" +#: src/lib/signal.c:223 +msgid "Alarm clock" msgstr "" -#: src/gnome2-console/authenticate.c:75 -msgid "Director authorization problem.\n" +#: src/lib/signal.c:224 +msgid "Termination" msgstr "" -#: src/gnome2-console/authenticate.c:77 -msgid "" -"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +#: src/lib/signal.c:226 +msgid "Stack fault" msgstr "" -#: src/gnome2-console/authenticate.c:87 -#, c-format -msgid "%s: Bad response to Hello command: ERR=%s\n" +#: src/lib/signal.c:228 +msgid "Child status has changed" msgstr "" -#: src/gnome2-console/authenticate.c:89 -msgid "The Director is probably not running.\n" +#: src/lib/signal.c:229 +msgid "Continue" msgstr "" -#: src/gnome2-console/console_conf.c:135 -#, c-format -msgid "Console: name=%s\n" +#: src/lib/signal.c:230 +msgid "Stop, unblockable" msgstr "" -#: src/gnome2-console/console_conf.c:138 -#, c-format -msgid "ConsoleFont: name=%s font face=%s\n" +#: src/lib/signal.c:231 +msgid "Keyboard stop" msgstr "" -#: src/gnome2-console/console.c:88 -#, c-format -msgid "" -"Copyright (C) 2002-2005 Kern Sibbald\n" -"\n" -"Version: %s (%s) %s %s %s\n" -"\n" -"Usage: gnome-console [-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" +#: src/lib/signal.c:232 +msgid "Background read from tty" msgstr "" -#: src/gnome2-console/console.c:219 -#, c-format -msgid "Pthread cond init error = %s\n" +#: src/lib/signal.c:233 +msgid "Background write to tty" msgstr "" -#: src/gnome2-console/console.c:357 -msgid " Not Connected" +#: src/lib/signal.c:234 +msgid "Urgent condition on socket" msgstr "" -#: src/gnome2-console/console.c:478 -#, c-format -msgid " Connecting to Director %s:%d" +#: src/lib/signal.c:235 +msgid "CPU limit exceeded" msgstr "" -#: src/gnome2-console/console.c:479 -#, c-format -msgid "" -"Connecting to Director %s:%d\n" -"\n" +#: src/lib/signal.c:236 +msgid "File size limit exceeded" msgstr "" -#: src/gnome2-console/console.c:494 src/wx-console/console_thread.cpp:360 -#, c-format -msgid "Passphrase for Console \"%s\" TLS private key: " +#: src/lib/signal.c:237 +msgid "Virtual alarm clock" msgstr "" -#: src/gnome2-console/console.c:516 src/wx-console/console_thread.cpp:381 -#, c-format -msgid "Passphrase for Director \"%s\" TLS private key: " +#: src/lib/signal.c:238 +msgid "Profiling alarm clock" msgstr "" -#: src/gnome2-console/console.c:535 src/tray-monitor/tray-monitor.c:860 -#: src/wx-console/console_thread.cpp:399 -msgid "Director daemon" +#: src/lib/signal.c:239 +msgid "Window size change" msgstr "" -#: src/gnome2-console/console.c:547 -msgid " Initializing ..." +#: src/lib/signal.c:240 +msgid "I/O now possible" msgstr "" -#: src/gnome2-console/console.c:583 -msgid " Connected" +#: src/lib/signal.c:242 +msgid "Power failure restart" msgstr "" -#: src/gnome2-console/console.c:591 -msgid " Processing command ..." +#: src/lib/signal.c:245 +msgid "No runnable lwp" msgstr "" -#: src/gnome2-console/console.c:626 -msgid " At prompt waiting for input ..." +#: src/lib/signal.c:248 +msgid "SIGLWP special signal used by thread library" msgstr "" -#: src/gnome2-console/console.c:746 -msgid " Ready" +#: src/lib/signal.c:251 +msgid "Checkpoint Freeze" msgstr "" -#: src/tools/bsmtp.c:85 -#, c-format -msgid "Fatal malformed reply from %s: %s\n" +#: src/lib/signal.c:254 +msgid "Checkpoint Thaw" msgstr "" -#: src/tools/bsmtp.c:121 -#, c-format -msgid "" -"\n" -"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" -" -c set the Cc: field\n" -" -dnn set debug level to nn\n" -" -f set the From: field\n" -" -h use mailhost:port as the SMTP server\n" -" -s set the Subject: field\n" -" -? print this message.\n" -"\n" +#: src/lib/signal.c:257 +msgid "Thread Cancellation" msgstr "" -#: src/tools/bsmtp.c:204 -msgid "Fatal error: no recipient given.\n" +#: src/lib/signal.c:260 +msgid "Resource Lost (e.g. record-lock lost)" msgstr "" -#: src/tools/bsmtp.c:225 +#: src/lib/smartall.c:132 src/lib/smartall.c:223 src/lib/smartall.c:238 +msgid "Out of memory\n" +msgstr "" + +#: src/lib/smartall.c:160 #, c-format -msgid "Fatal gethostname error: ERR=%s\n" +msgid "Attempt to free NULL called from %s:%d\n" msgstr "" -#: src/tools/bsmtp.c:229 +#: src/lib/smartall.c:176 #, c-format -msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" +msgid "qp->qnext->qprev != qp called from %s:%d\n" msgstr "" -#: src/tools/bsmtp.c:254 +#: src/lib/smartall.c:180 #, c-format -msgid "Error unknown mail host \"%s\": ERR=%s\n" +msgid "qp->qprev->qnext != qp called from %s:%d\n" msgstr "" -#: src/tools/bsmtp.c:257 -msgid "Retrying connection using \"localhost\".\n" +#: src/lib/smartall.c:189 +#, c-format +msgid "Buffer overrun called from %s:%d\n" msgstr "" -#: src/tools/bsmtp.c:265 +#: src/lib/smartall.c:260 #, c-format -msgid "Fatal error: Unknown address family for smtp host: %d\n" +msgid "sm_realloc size: %d\n" msgstr "" -#: src/tools/bsmtp.c:273 +#: src/lib/smartall.c:301 #, c-format -msgid "Fatal socket error: ERR=%s\n" +msgid "sm_realloc %d at %x from %s:%d\n" msgstr "" -#: src/tools/bsmtp.c:277 +#: src/lib/smartall.c:363 #, c-format -msgid "Fatal connect error to %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: %lx\n" msgstr "" -#: src/tools/bsmtp.c:282 +#: src/lib/smartall.c:374 #, c-format -msgid "Fatal dup error: ERR=%s\n" +msgid "Orphaned buffer: %6u bytes allocated at line %d of %s %s\n" msgstr "" -#: src/tools/bsmtp.c:286 src/tools/bsmtp.c:290 +#: src/lib/smartall.c:410 #, c-format -msgid "Fatal fdopen error: ERR=%s\n" +msgid "Damaged buffer found. Called from %s:%d\n" msgstr "" -#: src/tools/testls.c:45 +#: src/lib/smartall.c:440 #, c-format msgid "" "\n" -"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -dnn set debug level to nn\n" -" -e specify file of exclude patterns\n" -" -i specify file of include patterns\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" +"Damaged buffers found at %s:%d\n" msgstr "" -#: src/tools/testls.c:130 src/tools/testfind.c:134 +#: src/lib/smartall.c:443 #, c-format -msgid "Could not open include file: %s\n" +msgid " discovery of bad prev link.\n" msgstr "" -#: src/tools/testls.c:143 src/tools/testfind.c:147 +#: src/lib/smartall.c:446 #, c-format -msgid "Could not open exclude file: %s\n" +msgid " discovery of bad next link.\n" msgstr "" -#: src/tools/testfind.c:49 +#: src/lib/smartall.c:449 #, c-format -msgid "" -"\n" -"Usage: testfind [-d debug_level] [-] [pattern1 ...]\n" -" -a print extended attributes (Win32 debug)\n" -" -dnn set debug level to nn\n" -" -e specify file of exclude patterns\n" -" -i specify file of include patterns\n" -" - read pattern(s) from stdin\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 " discovery of data overrun.\n" msgstr "" -#: src/tools/testfind.c:199 +#: src/lib/smartall.c:452 #, c-format -msgid "Reg: %s\n" +msgid " Buffer address: %lx\n" msgstr "" -#: src/tools/testfind.c:220 -msgid "\t[will not descend: recursion turned off]" +#: src/lib/smartall.c:459 +#, c-format +msgid "Damaged buffer: %6u bytes allocated at line %d of %s %s\n" msgstr "" -#: src/tools/testfind.c:222 -msgid "\t[will not descend: file system change not allowed]" +#: src/lib/util.c:181 +msgid "Running" msgstr "" -#: src/tools/testfind.c:224 -msgid "\t[will not descend: disallowed file system]" +#: src/lib/util.c:184 +msgid "Blocked" msgstr "" -#: src/tools/testfind.c:337 -#, c-format -msgid "Path: %s\n" +#: src/lib/util.c:194 +msgid "Non-fatal error" msgstr "" -#: src/tools/testfind.c:338 src/dird/verify.c:756 -#, c-format -msgid "File: %s\n" +#: src/lib/util.c:197 src/lib/util.c:264 +msgid "Canceled" msgstr "" -#: src/tools/fstype.c:34 -#, c-format -msgid "" -"\n" -"Usage: fstype [-d debug_level] 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" +#: src/lib/util.c:200 +msgid "Verify differences" msgstr "" -#: src/tools/fstype.c:86 -#, c-format -msgid "%s: unknown\n" +#: src/lib/util.c:203 +msgid "Waiting on FD" msgstr "" -#: src/tools/dbcheck.c:158 -msgid "" -"Warning skipping the additional parameters for working directory/dbname/user/" -"password/host.\n" +#: src/lib/util.c:206 +msgid "Wait on SD" msgstr "" -#: src/tools/dbcheck.c:174 -#, c-format -msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" +#: src/lib/util.c:209 +msgid "Wait for new Volume" msgstr "" -#: src/tools/dbcheck.c:176 -#, c-format -msgid "Error there is no Catalog section in the given config file [%s]\n" +#: src/lib/util.c:212 +msgid "Waiting for mount" msgstr "" -#: src/tools/dbcheck.c:185 -msgid "Error no Director resource defined.\n" +#: src/lib/util.c:215 +msgid "Waiting for Storage resource" msgstr "" -#: src/tools/dbcheck.c:199 -msgid "Wrong number of arguments.\n" +#: src/lib/util.c:218 +msgid "Waiting for Job resource" msgstr "" -#: src/tools/dbcheck.c:204 -msgid "Working directory not supplied.\n" +#: src/lib/util.c:221 +msgid "Waiting for Client resource" msgstr "" -#: src/tools/dbcheck.c:269 -#, c-format -msgid "Hello, this is the database check/correct program.\n" +#: src/lib/util.c:224 +msgid "Waiting on Max Jobs" msgstr "" -#: src/tools/dbcheck.c:271 -#, c-format -msgid "Modify database is on." +#: src/lib/util.c:227 +msgid "Waiting for Start Time" msgstr "" -#: src/tools/dbcheck.c:273 -#, c-format -msgid "Modify database is off." +#: src/lib/util.c:230 +msgid "Waiting on Priority" msgstr "" -#: src/tools/dbcheck.c:275 src/tools/dbcheck.c:336 +#: src/lib/util.c:237 #, c-format -msgid " Verbose is on.\n" +msgid "Unknown Job termination status=%d" msgstr "" -#: src/tools/dbcheck.c:277 src/tools/dbcheck.c:338 -#, c-format -msgid " Verbose is off.\n" +#: src/lib/util.c:261 +msgid "Fatal Error" msgstr "" -#: src/tools/dbcheck.c:279 -#, c-format -msgid "Please select the fuction you want to perform.\n" +#: src/lib/util.c:267 +msgid "Differences" msgstr "" -#: src/tools/dbcheck.c:283 -#, 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/lib/util.c:270 +msgid "Unknown term code" msgstr "" -#: src/tools/dbcheck.c:302 -#, 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/lib/util.c:298 +msgid "Migrate" msgstr "" -#: src/tools/dbcheck.c:322 -msgid "Select function number: " +#: src/lib/util.c:301 +msgid "Copy" msgstr "" -#: src/tools/dbcheck.c:329 -#, c-format -msgid "Database will be modified.\n" +#: src/lib/util.c:304 +msgid "Unknown Type" msgstr "" -#: src/tools/dbcheck.c:331 -#, c-format -msgid "Database will NOT be modified.\n" +#: src/lib/util.c:336 +msgid "Verify Init Catalog" msgstr "" -#: src/tools/dbcheck.c:421 -#, c-format -msgid "JobId=%s Name=\"%s\" StartTime=%s\n" +#: src/lib/util.c:345 +msgid "Verify Data" msgstr "" -#: src/tools/dbcheck.c:429 -#, c-format -msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" +#: src/lib/util.c:647 +msgid "Working directory not defined. Cannot continue.\n" msgstr "" -#: src/tools/dbcheck.c:436 +#: src/lib/util.c:650 #, c-format -msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" +msgid "Working Directory: \"%s\" not found. Cannot continue.\n" msgstr "" -#: src/tools/dbcheck.c:443 +#: src/lib/util.c:654 #, c-format -msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" +msgid "Working Directory: \"%s\" is not a directory. Cannot continue.\n" msgstr "" -#: src/tools/dbcheck.c:450 -#, c-format -msgid "Orphaned ClientId=%s Name=\"%s\"\n" +#: src/lib/var.c:2659 +msgid "everything ok" msgstr "" -#: src/tools/dbcheck.c:503 -#, c-format -msgid "Deleting: %s\n" +#: src/lib/var.c:2660 +msgid "incomplete named character" msgstr "" -#: src/tools/dbcheck.c:577 -#, c-format -msgid "Checking for duplicate Filename entries.\n" +#: src/lib/var.c:2661 +msgid "incomplete hexadecimal value" msgstr "" -#: src/tools/dbcheck.c:586 -#, c-format -msgid "Found %d duplicate Filename records.\n" +#: src/lib/var.c:2662 +msgid "invalid hexadecimal value" msgstr "" -#: src/tools/dbcheck.c:587 -msgid "Print the list? (yes/no): " +#: src/lib/var.c:2663 +msgid "octal value too large" msgstr "" -#: src/tools/dbcheck.c:603 src/tools/dbcheck.c:657 -#, c-format -msgid "Found %d for: %s\n" +#: src/lib/var.c:2664 +msgid "invalid octal value" msgstr "" -#: src/tools/dbcheck.c:630 -#, c-format -msgid "Checking for duplicate Path entries.\n" +#: src/lib/var.c:2665 +msgid "incomplete octal value" msgstr "" -#: src/tools/dbcheck.c:640 -#, c-format -msgid "Found %d duplicate Path records.\n" +#: src/lib/var.c:2666 +msgid "incomplete grouped hexadecimal value" msgstr "" -#: src/tools/dbcheck.c:641 src/tools/dbcheck.c:691 src/tools/dbcheck.c:723 -#: src/tools/dbcheck.c:755 src/tools/dbcheck.c:783 src/tools/dbcheck.c:811 -#: src/tools/dbcheck.c:849 src/tools/dbcheck.c:887 src/tools/dbcheck.c:918 -#: src/tools/dbcheck.c:948 src/tools/dbcheck.c:982 src/tools/dbcheck.c:1040 -msgid "Print them? (yes/no): " +#: src/lib/var.c:2667 +msgid "incorrect character class specification" msgstr "" -#: src/tools/dbcheck.c:683 -#, c-format -msgid "Checking for orphaned JobMedia entries.\n" +#: src/lib/var.c:2668 +msgid "invalid expansion configuration" msgstr "" -#: src/tools/dbcheck.c:690 -#, c-format -msgid "Found %d orphaned JobMedia records.\n" +#: src/lib/var.c:2669 +msgid "out of memory" msgstr "" -#: src/tools/dbcheck.c:703 -#, c-format -msgid "Deleting %d orphaned JobMedia records.\n" +#: src/lib/var.c:2670 +msgid "incomplete variable specification" msgstr "" -#: src/tools/dbcheck.c:712 -#, c-format -msgid "Checking for orphaned File entries. This may take some time!\n" +#: src/lib/var.c:2671 +msgid "undefined variable" msgstr "" -#: src/tools/dbcheck.c:722 -#, c-format -msgid "Found %d orphaned File records.\n" +#: src/lib/var.c:2672 +msgid "input is neither text nor variable" msgstr "" -#: src/tools/dbcheck.c:735 -#, c-format -msgid "Deleting %d orphaned File records.\n" +#: src/lib/var.c:2673 +msgid "unknown command character in variable" msgstr "" -#: src/tools/dbcheck.c:744 -#, c-format -msgid "Checking for orphaned Path entries. This may take some time!\n" +#: src/lib/var.c:2674 +msgid "malformatted search and replace operation" msgstr "" -#: src/tools/dbcheck.c:754 -#, c-format -msgid "Found %d orphaned Path records.\n" +#: src/lib/var.c:2675 +msgid "unknown flag in search and replace operation" msgstr "" -#: src/tools/dbcheck.c:763 -#, c-format -msgid "Deleting %d orphaned Path records.\n" +#: src/lib/var.c:2676 +msgid "invalid regex in search and replace operation" msgstr "" -#: src/tools/dbcheck.c:772 -#, c-format -msgid "Checking for orphaned Filename entries. This may take some time!\n" +#: src/lib/var.c:2677 +msgid "missing parameter in command" msgstr "" -#: src/tools/dbcheck.c:782 -#, c-format -msgid "Found %d orphaned Filename records.\n" +#: src/lib/var.c:2678 +msgid "empty search string in search and replace operation" msgstr "" -#: src/tools/dbcheck.c:791 -#, c-format -msgid "Deleting %d orphaned Filename records.\n" +#: src/lib/var.c:2679 +msgid "start offset missing in cut operation" msgstr "" -#: src/tools/dbcheck.c:800 -#, c-format -msgid "Checking for orphaned FileSet entries. This takes some time!\n" +#: src/lib/var.c:2680 +msgid "offsets in cut operation delimited by unknown character" msgstr "" -#: src/tools/dbcheck.c:810 -#, c-format -msgid "Found %d orphaned FileSet records.\n" +#: src/lib/var.c:2681 +msgid "range out of bounds in cut operation" msgstr "" -#: src/tools/dbcheck.c:822 -#, c-format -msgid "Deleting %d orphaned FileSet records.\n" +#: src/lib/var.c:2682 +msgid "offset out of bounds in cut operation" msgstr "" -#: src/tools/dbcheck.c:831 -#, c-format -msgid "Checking for orphaned Client entries.\n" +#: src/lib/var.c:2683 +msgid "logic error in cut operation" msgstr "" -#: src/tools/dbcheck.c:848 -#, c-format -msgid "Found %d orphaned Client records.\n" +#: src/lib/var.c:2684 +msgid "malformatted transpose operation" msgstr "" -#: src/tools/dbcheck.c:860 -#, c-format -msgid "Deleting %d orphaned Client records.\n" +#: src/lib/var.c:2685 +msgid "source and target class mismatch in transpose operation" msgstr "" -#: src/tools/dbcheck.c:869 -#, c-format -msgid "Checking for orphaned Job entries.\n" +#: src/lib/var.c:2686 +msgid "empty character class in transpose operation" msgstr "" -#: src/tools/dbcheck.c:886 -#, c-format -msgid "Found %d orphaned Job records.\n" +#: src/lib/var.c:2687 +msgid "incorrect character class in transpose operation" msgstr "" -#: src/tools/dbcheck.c:898 -#, c-format -msgid "Deleting %d orphaned Job records.\n" +#: src/lib/var.c:2688 +msgid "malformatted padding operation" msgstr "" -#: src/tools/dbcheck.c:908 -#, c-format -msgid "Checking for Admin Job entries.\n" +#: src/lib/var.c:2689 +msgid "width parameter missing in padding operation" msgstr "" -#: src/tools/dbcheck.c:917 -#, c-format -msgid "Found %d Admin Job records.\n" +#: src/lib/var.c:2690 +msgid "fill string missing in padding operation" msgstr "" -#: src/tools/dbcheck.c:929 -#, c-format -msgid "Deleting %d Admin Job records.\n" +#: src/lib/var.c:2691 +msgid "unknown quoted pair in search and replace operation" msgstr "" -#: src/tools/dbcheck.c:938 -#, c-format -msgid "Checking for Restore Job entries.\n" +#: src/lib/var.c:2692 +msgid "sub-matching reference out of range" msgstr "" -#: src/tools/dbcheck.c:947 -#, c-format -msgid "Found %d Restore Job records.\n" +#: src/lib/var.c:2693 +msgid "invalid argument" msgstr "" -#: src/tools/dbcheck.c:959 -#, c-format -msgid "Deleting %d Restore Job records.\n" +#: src/lib/var.c:2694 +msgid "incomplete quoted pair" msgstr "" -#: src/tools/dbcheck.c:972 -#, c-format -msgid "Checking for Filenames with a trailing slash\n" +#: src/lib/var.c:2695 +msgid "lookup function does not support variable arrays" msgstr "" -#: src/tools/dbcheck.c:981 -#, c-format -msgid "Found %d bad Filename records.\n" +#: src/lib/var.c:2696 +msgid "index of array variable contains an invalid character" msgstr "" -#: src/tools/dbcheck.c:995 src/tools/dbcheck.c:1053 -#, c-format -msgid "Reparing %d bad Filename records.\n" +#: src/lib/var.c:2697 +msgid "index of array variable is incomplete" msgstr "" -#: src/tools/dbcheck.c:1030 -#, c-format -msgid "Checking for Paths without a trailing slash\n" +#: src/lib/var.c:2698 +msgid "bracket expression in array variable's index not closed" msgstr "" -#: src/tools/dbcheck.c:1039 -#, c-format -msgid "Found %d bad Path records.\n" +#: src/lib/var.c:2699 +msgid "division by zero error in index specification" msgstr "" -#: src/findlib/enable_priv.c:85 -msgid "AdjustTokenPrivileges set " +#: src/lib/var.c:2700 +msgid "unterminated loop construct" msgstr "" -#: src/findlib/find_one.c:168 -#, c-format -msgid "Top level directory \"%s\" has an unlisted fstype\n" +#: src/lib/var.c:2701 +msgid "invalid character in loop limits" msgstr "" -#: src/findlib/save-cwd.c:48 -#, c-format -msgid "Cannot open current directory: %s\n" +#: src/lib/var.c:2702 +msgid "malformed operation argument list" msgstr "" -#: src/findlib/save-cwd.c:62 -#, c-format -msgid "Current directory: %s\n" +#: src/lib/var.c:2703 +msgid "undefined operation" msgstr "" -#: src/findlib/save-cwd.c:84 -#, c-format -msgid "Cannot get current directory: %s\n" +#: src/lib/var.c:2704 +msgid "formatting failure" msgstr "" -#: src/findlib/save-cwd.c:105 -#, c-format -msgid "Cannot return to %s from %s: %s\n" +#: src/lib/var.c:2713 +msgid "unknown error" msgstr "" -#: src/findlib/save-cwd.c:109 +#: src/lib/watchdog.c:74 #, c-format -msgid "Cannot return to saved working directory from %s: %s\n" +msgid "Unable to initialize watchdog lock. ERR=%s\n" msgstr "" -#: src/findlib/save-cwd.c:115 -#, c-format -msgid "Cannot return to %s: %s\n" +#: src/lib/watchdog.c:170 +msgid "BUG! register_watchdog called before start_watchdog\n" msgstr "" -#: src/findlib/save-cwd.c:119 +#: src/lib/watchdog.c:173 #, c-format -msgid "Cannot return to saved working directory: %s\n" +msgid "BUG! Watchdog %p has NULL callback\n" msgstr "" -#: src/findlib/bfile.c:64 -msgid "GZIP data" +#: src/lib/watchdog.c:176 +#, c-format +msgid "BUG! Watchdog %p has zero interval\n" msgstr "" -#: src/findlib/bfile.c:66 -msgid "GZIP sparse data" +#: src/lib/watchdog.c:196 +msgid "BUG! unregister_watchdog_unlocked called before start_watchdog\n" msgstr "" -#: src/findlib/bfile.c:68 -msgid "Win32 data" +#: src/lib/watchdog.c:313 +#, c-format +msgid "rwl_writelock failure. ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:70 -msgid "Win32 GZIP data" +#: src/lib/watchdog.c:327 +#, c-format +msgid "rwl_writeunlock failure. ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:72 -msgid "File attributes" +#: src/stored/acquire.c:96 +#, c-format +msgid "Hey! num_writers=%d!!!!\n" msgstr "" -#: src/findlib/bfile.c:74 -msgid "File data" +#: src/stored/acquire.c:146 +#, c-format +msgid "Num_writers=%d not zero. Job %d canceled.\n" msgstr "" -#: src/findlib/bfile.c:76 -msgid "MD5 digest" +#: src/stored/acquire.c:154 +#, c-format +msgid "No volumes specified. Job %d canceled.\n" msgstr "" -#: src/findlib/bfile.c:78 -msgid "Extended attributes" +#: src/stored/acquire.c:182 src/stored/mount.c:73 +#, c-format +msgid "Job %d canceled.\n" msgstr "" -#: src/findlib/bfile.c:80 -msgid "Sparse data" +#: src/stored/acquire.c:193 +#, c-format +msgid "Open device %s Volume \"%s\" failed (EIO): ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:82 -msgid "Program names" +#: src/stored/acquire.c:198 +#, c-format +msgid "Open device %s Volume \"%s\" failed: ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:84 -msgid "Program data" +#: src/stored/acquire.c:263 src/stored/mount.c:67 +#, c-format +msgid "Too many errors trying to mount device %s.\n" msgstr "" -#: src/findlib/bfile.c:86 -msgid "SHA1 digest" +#: src/stored/acquire.c:272 +#, c-format +msgid "Ready to read from volume \"%s\" on device %s.\n" msgstr "" -#: src/findlib/bfile.c:88 -msgid "HFS+ resource fork" +#: src/stored/acquire.c:311 +#, c-format +msgid "Device %s is busy reading.\n" msgstr "" -#: src/findlib/bfile.c:90 -msgid "HFS+ Finder Info" +#: src/stored/acquire.c:341 +#, c-format +msgid "Wanted Volume \"%s\", but device %s is busy writing on \"%s\" .\n" msgstr "" -#: src/findlib/bfile.c:92 -msgid "SHA256 digest" +#: src/stored/acquire.c:360 +#, c-format +msgid "" +"Cannot recycle volume \"%s\" on device %s because it is in use by another " +"job.\n" msgstr "" -#: src/findlib/bfile.c:94 -msgid "SHA512 digest" +#: src/stored/acquire.c:382 +#, c-format +msgid "Could not ready device %s for append.\n" msgstr "" -#: src/findlib/bfile.c:96 -msgid "Signed digest" +#: src/stored/acquire.c:459 src/stored/block.c:354 src/stored/block.c:677 +#: src/stored/block.c:746 +#, c-format +msgid "Could not create JobMedia record for Volume=\"%s\" Job=%s\n" msgstr "" -#: src/findlib/bfile.c:98 -msgid "Encrypted File data" +#: src/stored/acquire.c:501 +#, c-format +msgid "Alert: %s" msgstr "" -#: src/findlib/bfile.c:100 -msgid "Encrypted GZIP data" +#: src/stored/acquire.c:509 +#, c-format +msgid "3997 Bad alert command: %s: ERR=%s.\n" msgstr "" -#: src/findlib/bfile.c:102 -msgid "Encrypted Win32 data" +#: src/stored/ansi_label.c:83 +#, c-format +msgid "Read error on device %s in ANSI label. ERR=%s\n" msgstr "" -#: src/findlib/bfile.c:104 -msgid "Encrypted Win32 GZIP data" +#: src/stored/ansi_label.c:93 +msgid "Insane! End of tape while reading ANSI label.\n" msgstr "" -#: src/findlib/bfile.c:106 -msgid "Encrypted HFS+ resource fork" +#: src/stored/ansi_label.c:117 +msgid "No VOL1 label while reading ANSI/IBM label.\n" msgstr "" -#: src/findlib/create_file.c:86 +#: src/stored/ansi_label.c:137 #, c-format -msgid "File skipped. Not newer: %s\n" +msgid "Wanted ANSI Volume \"%s\" got \"%s\"\n" msgstr "" -#: src/findlib/create_file.c:93 -#, c-format -msgid "File skipped. Not older: %s\n" +#: src/stored/ansi_label.c:148 +msgid "No HDR1 label while reading ANSI label.\n" msgstr "" -#: src/findlib/create_file.c:99 +#: src/stored/ansi_label.c:154 #, c-format -msgid "File skipped. Already exists: %s\n" +msgid "ANSI/IBM Volume \"%s\" does not belong to Bacula.\n" msgstr "" -#: src/findlib/create_file.c:124 -#, c-format -msgid "File %s already exists and could not be replaced. ERR=%s.\n" +#: src/stored/ansi_label.c:165 +msgid "No HDR2 label while reading ANSI/IBM label.\n" msgstr "" -#: src/findlib/create_file.c:176 src/findlib/create_file.c:279 -#: src/findlib/create_file.c:330 -#, c-format -msgid "bpkt already open fid=%d\n" -msgstr "" - -#: src/findlib/create_file.c:198 -msgid "Could not save_dirn" +#: src/stored/ansi_label.c:179 +msgid "Unknown or bad ANSI/IBM label record.\n" msgstr "" -#: src/findlib/create_file.c:207 src/findlib/create_file.c:220 -#, c-format -msgid "Could not chdir to %s: ERR=%s\n" +#: src/stored/ansi_label.c:186 +msgid "Too many records in while reading ANSI/IBM label.\n" msgstr "" -#: src/findlib/create_file.c:240 +#: src/stored/ansi_label.c:285 #, c-format -msgid "Could not create %s: ERR=%s\n" +msgid "ANSI Volume label name \"%s\" longer than 6 chars.\n" msgstr "" -#: src/findlib/create_file.c:253 +#: src/stored/ansi_label.c:302 #, c-format -msgid "Cannot make fifo %s: ERR=%s\n" +msgid "Could not write ANSI VOL1 label. ERR=%s\n" msgstr "" -#: src/findlib/create_file.c:263 +#: src/stored/ansi_label.c:340 src/stored/ansi_label.c:369 #, c-format -msgid "Cannot make node %s: ERR=%s\n" +msgid "Could not write ANSI HDR1 label. ERR=%s\n" msgstr "" -#: src/findlib/create_file.c:284 src/findlib/create_file.c:341 -#: src/dird/ua_query.c:59 -#, c-format -msgid "Could not open %s: ERR=%s\n" +#: src/stored/ansi_label.c:345 src/stored/ansi_label.c:376 +msgid "Could not write ANSI HDR1 label.\n" msgstr "" -#: src/findlib/create_file.c:299 +#: src/stored/ansi_label.c:381 #, c-format -msgid "Could not symlink %s -> %s: ERR=%s\n" +msgid "Error writing EOF to tape. ERR=%s" msgstr "" -#: src/findlib/create_file.c:309 -#, c-format -msgid "Could not hard link %s -> %s: ERR=%s\n" +#: src/stored/ansi_label.c:386 +msgid "write_ansi_ibm_label called for non-ANSI/IBM type\n" msgstr "" -#: src/findlib/create_file.c:360 -#, c-format -msgid "Original file %s not saved: type=%d\n" +#: src/stored/append.c:49 +msgid "DCR is NULL!!!\n" msgstr "" -#: src/findlib/create_file.c:363 -#, c-format -msgid "Unknown file type %d; not restored: %s\n" +#: src/stored/append.c:54 +msgid "DEVICE is NULL!!!\n" msgstr "" -#: src/findlib/create_file.c:394 -#, c-format -msgid "Zero length filename: %s\n" +#: src/stored/append.c:66 +msgid "Unable to set network buffer size.\n" msgstr "" -#: src/findlib/makepath.c:117 -#, c-format -msgid "Cannot create directory %s: ERR=%s\n" +#: src/stored/append.c:79 src/stored/append.c:88 src/stored/append.c:100 +#: src/stored/append.c:256 src/stored/append.c:271 src/stored/append.c:283 +#: src/stored/askdir.c:294 src/stored/askdir.c:295 +msgid "NULL Volume name. This shouldn't happen!!!\n" msgstr "" -#: src/findlib/makepath.c:121 src/findlib/makepath.c:378 +#: src/stored/append.c:94 src/stored/btape.c:1854 #, c-format -msgid "%s exists but is not a directory\n" +msgid "Write session label failed. ERR=%s\n" msgstr "" -#: src/findlib/makepath.c:276 src/findlib/makepath.c:337 -#: src/findlib/makepath.c:397 +#: src/stored/append.c:106 #, c-format -msgid "Cannot change owner and/or group of %s: ERR=%s\n" +msgid "Network send error to FD. ERR=%s\n" msgstr "" -#: src/findlib/makepath.c:297 +#: src/stored/append.c:143 #, c-format -msgid "Cannot chdir to directory, %s: ERR=%s\n" +msgid "Error reading data header from FD. ERR=%s\n" msgstr "" -#: src/findlib/makepath.c:352 src/findlib/makepath.c:368 -#: src/findlib/makepath.c:402 +#: src/stored/append.c:165 #, c-format -msgid "Cannot change permissions of %s: ERR=%s\n" +msgid "Malformed data header from FD: %s\n" msgstr "" -#: src/findlib/match.c:184 src/filed/job.c:931 -#, c-format -msgid "Unknown include/exclude option: %c\n" +#: src/stored/append.c:175 +msgid "File index from FD not positive or sequential\n" msgstr "" -#: src/findlib/attribs.c:392 +#: src/stored/append.c:206 src/stored/append.c:276 src/stored/spool.c:248 #, c-format -msgid "File size of restored file %s not correct. Original %s, restored %s.\n" +msgid "Fatal append error on device %s: ERR=%s\n" msgstr "" -#: src/findlib/attribs.c:410 src/findlib/attribs.c:417 +#: src/stored/append.c:231 #, c-format -msgid "Unable to set file owner %s: ERR=%s\n" +msgid "Error updating file attributes. ERR=%s\n" msgstr "" -#: src/findlib/attribs.c:423 +#: src/stored/append.c:244 #, c-format -msgid "Unable to set file modes %s: ERR=%s\n" +msgid "Network error on data channel. ERR=%s\n" msgstr "" -#: src/findlib/attribs.c:433 +#: src/stored/append.c:265 src/stored/btape.c:1976 #, c-format -msgid "Unable to set file times %s: ERR=%s\n" +msgid "Error writting end session label. ERR=%s\n" msgstr "" -#: src/findlib/attribs.c:447 -#, c-format -msgid "Unable to set file flags %s: ERR=%s\n" +#: src/stored/append.c:278 +msgid "Set ok=FALSE after write_block_to_device.\n" msgstr "" -#: src/findlib/attribs.c:692 -#, c-format -msgid "Error in %s file %s: ERR=%s\n" +#: src/stored/askdir.c:161 +msgid "Network error on bnet_recv in req_vol_info.\n" msgstr "" -#: src/findlib/attribs.c:709 +#: src/stored/askdir.c:178 #, c-format -msgid "Error in %s: ERR=%s\n" +msgid "Error getting Volume info: %s" msgstr "" -#: src/tray-monitor/tray_conf.c:152 src/dird/dird_conf.c:455 -#, c-format -msgid "No %s resource defined\n" +#: src/stored/askdir.c:299 src/stored/askdir.c:300 +msgid "Attempt to update_volume_info in read mode!!!\n" msgstr "" -#: src/tray-monitor/tray_conf.c:161 +#: src/stored/askdir.c:328 #, c-format -msgid "Monitor: name=%s FDtimeout=%s SDtimeout=%s\n" +msgid "Didn't get vol info vol=%s: ERR=%s" msgstr "" -#: src/tray-monitor/tray_conf.c:167 +#: src/stored/askdir.c:359 #, c-format -msgid "Director: name=%s address=%s FDport=%d\n" +msgid "Error creating JobMedia record: ERR=%s\n" msgstr "" -#: src/tray-monitor/tray_conf.c:171 +#: src/stored/askdir.c:366 #, c-format -msgid "Client: name=%s address=%s FDport=%d\n" +msgid "Error creating JobMedia record: %s\n" msgstr "" -#: src/tray-monitor/tray_conf.c:175 +#: src/stored/askdir.c:432 #, c-format -msgid "Storage: name=%s address=%s SDport=%d\n" +msgid "Job %s canceled while waiting for mount on Storage Device \"%s\".\n" msgstr "" -#: src/tray-monitor/tray_conf.c:179 src/dird/dird_conf.c:808 +#: src/stored/askdir.c:445 #, c-format -msgid "Unknown resource type %d in dump_resource.\n" +msgid "" +"Job %s waiting. Cannot find any appendable volumes.\n" +"Please use the \"label\" command to create a new Volume for:\n" +" Storage: %s\n" +" Media type: %s\n" +" Pool: %s\n" msgstr "" -#: src/tray-monitor/tray_conf.c:232 src/dird/dird_conf.c:1105 +#: src/stored/askdir.c:469 src/stored/askdir.c:551 #, c-format -msgid "Unknown resource type %d in free_resource.\n" +msgid "Max time exceeded waiting to mount Storage Device %s for Job %s\n" msgstr "" -#: src/tray-monitor/tray_conf.c:287 src/dird/dird_conf.c:1256 -#, c-format -msgid "Unknown resource type %d in save_resource.\n" +#: src/stored/askdir.c:479 +msgid "pthread error in mount_next_volume.\n" msgstr "" -#: src/tray-monitor/tray_conf.c:322 src/dird/dird_conf.c:1316 -#, c-format -msgid "Unknown resource type %d in save_resrouce.\n" +#: src/stored/askdir.c:511 +msgid "Cannot request another volume: no volume name given.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:102 +#: src/stored/askdir.c:517 #, c-format -msgid "" -"Copyright (C) 2000-2004 Kern Sibbald and John Walker\n" -"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" -" -dnn set debug level to nn\n" -" -t test - read configuration and exit\n" -" -? print this message.\n" -"\n" +msgid "Job %s canceled while waiting for mount on Storage Device %s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:251 +#: src/stored/askdir.c:532 #, c-format -msgid "" -"Error: %d Monitor resource defined in %s. You must define one and only one " -"Monitor resource.\n" +msgid "Please mount Volume \"%s\" on Storage Device %s for Job %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:282 -#, c-format -msgid "" -"No Client, Storage nor 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/askdir.c:561 +msgid "pthread error in mount_volume\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:304 +#: src/stored/authenticate.c:53 #, 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:319 -msgid "Open status window..." +msgid "I only authenticate Directors, not %d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:325 -msgid "Exit" +#: src/stored/authenticate.c:120 +msgid "" +"Incorrect password given by Director.\n" +"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " +"help.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:337 -msgid "Bacula tray monitor" +#: src/stored/authenticate.c:178 +#, c-format +msgid "Unable to authenticate Director at %s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:362 -msgid " (DIR)" +#: src/stored/authenticate.c:223 src/stored/authenticate.c:259 +#, c-format +msgid "" +"Incorrect authorization key from File daemon at %s rejected.\n" +"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " +"help.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:366 -msgid " (FD)" +#: src/stored/autochanger.c:53 +#, c-format +msgid "No Changer Name given for device %s. Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:370 -msgid " (SD)" +#: src/stored/autochanger.c:59 +#, c-format +msgid "No Changer Command given for device %s. Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:383 -msgid "Unknown status." +#: src/stored/autochanger.c:72 +#, c-format +msgid "" +"Media Type not the same for all devices in changer %s. Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:424 -msgid "Refresh interval in seconds: " +#: src/stored/autochanger.c:152 +#, c-format +msgid "3304 Issuing autochanger \"load slot %d, drive %d\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:432 -msgid "Refresh now" +#: src/stored/autochanger.c:161 +#, c-format +msgid "3305 Autochanger \"load slot %d, drive %d\", status is OK.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:436 -msgid "About" +#: src/stored/autochanger.c:167 +#, c-format +msgid "3992 Bad autochanger \"load slot %d, drive %d\": ERR=%s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:440 -msgid "Close" +#: src/stored/autochanger.c:208 +msgid "3992 Missing Changer command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:460 +#: src/stored/autochanger.c:218 #, c-format -msgid "Disconnecting from Director %s:%d\n" +msgid "3301 Issuing autochanger \"loaded drive %d\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:463 +#: src/stored/autochanger.c:227 #, c-format -msgid "Disconnecting from Client %s:%d\n" +msgid "3302 Autochanger \"loaded drive %d\", result is Slot %d.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:466 +#: src/stored/autochanger.c:231 #, c-format -msgid "Disconnecting from Storage %s:%d\n" -msgstr "" - -#: src/tray-monitor/tray-monitor.c:502 src/tray-monitor/tray-monitor.c:512 -msgid "Bacula Tray Monitor" +msgid "3302 Autochanger \"loaded drive %d\", result: nothing loaded.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:503 src/tray-monitor/tray-monitor.c:513 -msgid "" -"Copyright (C) 2004-2005 Kern Sibbald\n" -"Written by Nicolas Boichat\n" +#: src/stored/autochanger.c:238 +#, c-format +msgid "3991 Bad autochanger \"loaded drive %d\" command: ERR=%s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:505 src/tray-monitor/tray-monitor.c:515 -msgid "Version:" +#: src/stored/autochanger.c:297 src/stored/autochanger.c:380 +#, c-format +msgid "3307 Issuing autochanger \"unload slot %d, drive %d\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:583 +#: src/stored/autochanger.c:310 src/stored/autochanger.c:401 #, c-format -msgid "Error, currentitem is not a Client or a Storage..\n" +msgid "3995 Bad autochanger \"unload slot %d, drive %d\": ERR=%s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:656 +#: src/stored/autochanger.c:369 #, c-format -msgid "" -"Current job: %s\n" -"Last job: %s" +msgid "Volume %s is in use by device %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:668 +#: src/stored/autochanger.c:439 #, c-format -msgid " (%d errors)" +msgid "3993 Device %s not an autochanger device.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:671 +#: src/stored/autochanger.c:464 #, c-format -msgid " (%d error)" +msgid "3306 Issuing autochanger \"%s\" command.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:708 -msgid "No current job." +#: src/stored/autochanger.c:467 +msgid "3996 Open bpipe failed.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:711 -msgid "No last job." +#: src/stored/autochanger.c:494 +#, c-format +msgid "Autochanger error: ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:719 -msgid "Job status: Created" -msgstr "" - -#: src/tray-monitor/tray-monitor.c:724 -msgid "Job status: Running" +#: src/stored/bcopy.c:58 +#, c-format +msgid "" +"Copyright (C) 2002-2005 Kern Sibbald.\n" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bcopy [-d debug_level] \n" +" -b bootstrap specify a bootstrap file\n" +" -c specify configuration file\n" +" -d set debug level to nn\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/tray-monitor/tray-monitor.c:728 -msgid "Job status: Blocked" +#: src/stored/bcopy.c:137 src/stored/bextract.c:177 src/stored/bscan.c:221 +msgid "Wrong number of arguments: \n" msgstr "" -#: src/tray-monitor/tray-monitor.c:733 -msgid "Job status: Terminated" +#: src/stored/bcopy.c:172 src/stored/btape.c:333 src/stored/device.c:266 +#, c-format +msgid "dev open failed: %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:738 -msgid "Job status: Terminated in error" +#: src/stored/bcopy.c:185 +msgid "Write of last block failed.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:744 -msgid "Job status: Error" +#: src/stored/bcopy.c:188 +#, c-format +msgid "%u Jobs copied. %u records copied.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:748 -msgid "Job status: Fatal error" +#: src/stored/bcopy.c:205 src/stored/bscan.c:390 +#, c-format +msgid "Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:753 -msgid "Job status: Verify differences" +#: src/stored/bcopy.c:220 +msgid "Volume is prelabeled. This volume cannot be copied.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:758 -msgid "Job status: Canceled" +#: src/stored/bcopy.c:223 +msgid "Volume label not copied.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:763 -msgid "Job status: Waiting on File daemon" +#: src/stored/bcopy.c:235 src/stored/bcopy.c:242 src/stored/bcopy.c:265 +#: src/stored/btape.c:2342 +#, c-format +msgid "Cannot fixup device error. %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:768 -msgid "Job status: Waiting on the Storage daemon" +#: src/stored/bcopy.c:247 +msgid "EOM label not copied.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:773 -msgid "Job status: Waiting for new media" +#: src/stored/bcopy.c:250 +msgid "EOT label not copied.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:778 -msgid "Job status: Waiting for Mount" +#: src/stored/bcopy.c:290 src/stored/bextract.c:479 src/stored/bls.c:443 +#: src/stored/bscan.c:1234 src/stored/btape.c:2690 +#, c-format +msgid "Mount Volume \"%s\" on device %s and press return when ready: " msgstr "" -#: src/tray-monitor/tray-monitor.c:783 -msgid "Job status: Waiting for storage resource" +#: src/stored/bextract.c:70 +#, c-format +msgid "" +"Copyright (C) 2000-2005 Kern Sibbald.\n" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: bextract \n" +" -b specify a bootstrap file\n" +" -c specify a configuration file\n" +" -d set debug level to nn\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/tray-monitor/tray-monitor.c:788 -msgid "Job status: Waiting for job resource" +#: src/stored/bextract.c:127 src/stored/bls.c:128 +#, c-format +msgid "Could not open exclude file: %s, ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:793 -msgid "Job status: Waiting for Client resource" +#: src/stored/bextract.c:142 src/stored/bls.c:142 +#, c-format +msgid "Could not open include file: %s, ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:798 -msgid "Job status: Waiting for maximum jobs" +#: src/stored/bextract.c:198 +#, c-format +msgid "%d Program Name and/or Program Data Stream records ignored.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:803 -msgid "Job status: Waiting for start time" +#: src/stored/bextract.c:202 +#, c-format +msgid "%d Win32 data or Win32 gzip data stream records. Ignored.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:808 -msgid "Job status: Waiting for higher priority jobs to finish" +#: src/stored/bextract.c:226 +#, c-format +msgid "Cannot stat %s. It must exist. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:813 +#: src/stored/bextract.c:230 #, c-format -msgid "Unknown job status %c." +msgid "%s must be a directory.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:814 +#: src/stored/bextract.c:251 #, c-format -msgid "Job status: Unknown(%c)" +msgid "%u files restored.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:821 -#, c-format -msgid "Bad scan : '%s' %d\n" +#: src/stored/bextract.c:278 src/stored/bextract.c:450 +msgid "Logic error output file should be open but is not.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:859 -#, c-format -msgid "Connecting to Director %s:%d" +#: src/stored/bextract.c:285 src/stored/bls.c:364 src/stored/bscan.c:647 +msgid "Cannot continue.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:865 +#: src/stored/bextract.c:347 #, c-format -msgid "Connecting to Client %s:%d\n" +msgid "Seek error on %s: %s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:866 +#: src/stored/bextract.c:400 #, c-format -msgid "Connecting to Client %s:%d" +msgid "Uncompression error. ERR=%d\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:867 src/dird/fd_cmds.c:73 -msgid "File daemon" +#: src/stored/bextract.c:408 +msgid "===Write error===\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:872 -#, c-format -msgid "Connecting to Storage %s:%d\n" +#: src/stored/bextract.c:441 +msgid "Got Program Name or Data Stream. Ignored.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:873 +#: src/stored/block.c:79 #, c-format -msgid "Connecting to Storage %s:%d" +msgid "" +"Dump block %s %x: size=%d BlkNum=%d\n" +" Hdrcksum=%x cksum=%x\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:874 src/filed/job.c:1158 -#: src/dird/msgchan.c:78 -msgid "Storage daemon" +#: src/stored/block.c:92 +#, c-format +msgid " Rec: VId=%u VT=%u FI=%s Strm=%s len=%d p=%x\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:878 src/tray-monitor/tray-monitor.c:916 +#: src/stored/block.c:148 #, c-format -msgid "Error, currentitem is not a Client, a Storage or a Director..\n" +msgid "%d block read errors not printed.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:884 -msgid "Cannot connect to daemon.\n" +#: src/stored/block.c:236 src/stored/block.c:252 src/stored/block.c:262 +#, c-format +msgid "" +"Volume data error at %u:%u! Wanted ID: \"%s\", got \"%s\". Buffer " +"discarded.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:885 -msgid "Cannot connect to daemon." +#: src/stored/block.c:276 +#, 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/tray-monitor/tray-monitor.c:897 +#: src/stored/block.c:302 #, c-format -msgid "Authentication error : %s" +msgid "" +"Volume data error at %u:%u!\n" +"Block checksum mismatch in block=%u len=%d: calc=%x blk=%x\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:904 -msgid "Opened connection with Director daemon.\n" +#: src/stored/block.c:410 +msgid "Cannot write block. Device at EOM.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:905 -msgid "Opened connection with Director daemon." +#: src/stored/block.c:415 +msgid "Attempt to write on read-only Volume.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:908 -msgid "Opened connection with File daemon.\n" +#: src/stored/block.c:467 +#, c-format +msgid "User defined maximum volume capacity %s exceeded on device %s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:909 -msgid "Opened connection with File daemon." +#: src/stored/block.c:482 +#, c-format +msgid "Unable to write EOF. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:912 -msgid "Opened connection with Storage daemon.\n" +#: src/stored/block.c:508 src/stored/block.c:519 +msgid "Write block header zeroed.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:913 -msgid "Opened connection with Storage daemon." +#: src/stored/block.c:537 +#, c-format +msgid "Write error at %u:%u on device %s. ERR=%s.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:948 -msgid "<< Error: BNET_PROMPT signal received. >>\n" +#: src/stored/block.c:544 +#, c-format +msgid "End of Volume \"%s\" at %u:%u on device %s. Write of %u bytes got %d.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:953 src/wx-console/console_thread.cpp:465 -msgid "<< Heartbeat signal received, answered. >>\n" +#: src/stored/block.c:619 src/stored/block.c:625 +#, c-format +msgid "Backspace file at EOT failed. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:957 +#: src/stored/block.c:632 #, c-format -msgid "<< Unexpected signal received : %s >>\n" +msgid "Backspace record at EOT failed. ERR=%s\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:962 -msgid "\n" +#: src/stored/block.c:649 +#, c-format +msgid "Re-read last block at EOT failed. ERR=%s" msgstr "" -#: src/tray-monitor/tray-monitor.c:966 -msgid "Error : BNET_HARDEOF or BNET_ERROR" +#: src/stored/block.c:653 +msgid "Re-read of last block succeeded.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:972 -msgid "\n" +#: src/stored/block.c:656 +#, c-format +msgid "Re-read of last block failed. Last block=%u Current block=%u.\n" msgstr "" -#: src/tray-monitor/tray-monitor.c:976 -msgid "Error : Connection closed." +#: src/stored/block.c:685 +#, c-format +msgid "" +"Error writing final EOF to tape. This Volume may not be readable.\n" +"%s" msgstr "" -#: src/tray-monitor/authenticate.c:78 +#: src/stored/block.c:795 src/stored/dvd.c:689 +#, c-format msgid "" -"Director authorization problem.\n" -"Most likely the passwords do not agree.\n" -"Please see http://www.bacula.org/html-manual/faq.html#AuthorizationErrors " -"for help.\n" +"Error while writing, current part number is less than the total number of " +"parts (%d/%d, device=%s)\n" msgstr "" -#: src/tray-monitor/authenticate.c:121 src/dird/authenticate.c:67 -#: src/dird/authenticate.c:68 +#: src/stored/block.c:803 src/stored/block.c:913 #, c-format -msgid "Error sending Hello to Storage daemon. ERR=%s\n" +msgid "Unable to open device next part %s: ERR=%s\n" msgstr "" -#: src/tray-monitor/authenticate.c:127 +#: src/stored/block.c:821 +#, c-format msgid "" -"Director and Storage daemon passwords or names not the same.\n" -"Please see http://www.bacula.org/html-manual/faq.html#AuthorizationErrors " -"for help.\n" +"End of Volume \"%s\" at %u:%u on device %s (part_size=%s, free_space=%s, " +"free_space_errno=%d, errmsg=%s).\n" msgstr "" -#: src/tray-monitor/authenticate.c:134 src/dird/authenticate.c:132 +#: src/stored/block.c:834 #, c-format -msgid "bdird\n" +" -b specify a bootstrap file\n" +" -c specify a config file\n" +" -d specify debug level\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/filed/restore.c:214 src/filed/restore.c:493 -msgid "Logic error: output file should be open\n" +#: src/stored/bls.c:189 +msgid "No archive name specified\n" msgstr "" -#: src/filed/restore.c:231 src/filed/restore.c:509 src/filed/restore.c:546 +#: src/stored/bls.c:224 #, c-format -msgid "Missing cryptographic signature for %s\n" +msgid "" +"\n" +"Warning, this Volume is a continuation of Volume %s\n" msgstr "" -#: src/filed/restore.c:245 src/filed/restore.c:515 -msgid "Logic error: output file should not be open\n" +#: src/stored/bls.c:267 +#, c-format +msgid "Got EOM at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/filed/restore.c:326 -msgid "Missing private key required to decrypt encrypted backup data." +#: src/stored/bls.c:278 +#, c-format +msgid "Mounted Volume \"%s\".\n" msgstr "" -#: src/filed/restore.c:329 -msgid "Decrypt of the session key failed." +#: src/stored/bls.c:280 +#, c-format +msgid "Got EOF at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/filed/restore.c:333 +#: src/stored/bls.c:304 #, c-format -msgid "An error occured while decoding encrypted session data stream: %s" +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/filed/restore.c:345 +#: src/stored/bls.c:313 #, c-format -msgid "Failed to initialize decryption context for %s\n" +msgid "Block: %d size=%d\n" msgstr "" -#: src/filed/restore.c:409 +#: src/stored/bls.c:380 #, c-format -msgid " Cannot open resource fork for %s.\n" +msgid "FileIndex=%d VolSessionId=%d VolSessionTime=%d Stream=%d DataLen=%d\n" msgstr "" -#: src/filed/restore.c:432 -#, c-format -msgid " Invalid length of Finder Info (got %d, not 32)\n" +#: src/stored/bls.c:397 src/stored/read_record.c:322 +msgid "Fresh Volume Label" msgstr "" -#: src/filed/restore.c:436 -#, c-format -msgid " Could not set Finder Info on %s\n" +#: src/stored/bls.c:400 src/stored/read_record.c:325 +msgid "Volume Label" msgstr "" -#: src/filed/restore.c:448 -#, c-format -msgid "Can't restore ACL of %s\n" +#: src/stored/bls.c:404 src/stored/label.c:969 +msgid "Begin Job Session" msgstr "" -#: src/filed/restore.c:460 -#, c-format -msgid "Can't restore default ACL of %s\n" +#: src/stored/bls.c:408 src/stored/label.c:972 +msgid "End Job Session" +msgstr "" + +#: src/stored/bls.c:411 +msgid "End of Medium" +msgstr "" + +#: src/stored/bls.c:414 src/stored/label.c:981 +msgid "Unknown" msgstr "" -#: src/filed/restore.c:470 +#: src/stored/bls.c:420 src/stored/read_record.c:343 #, c-format -msgid "Failed to decode message signature for %s\n" +msgid "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n" msgstr "" -#: src/filed/restore.c:591 +#: src/stored/bscan.c:109 #, c-format msgid "" -"%d non-supported data streams and %d non-supported attrib streams ignored.\n" +"Copyright (C) 2001-2005 Kern Sibbald.\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 nn\n" +" -m update media info in database\n" +" -n specify the database name (default bacula)\n" +" -u specify database user name (default bacula)\n" +" -P specify database host (default NULL)\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/filed/restore.c:595 +#: src/stored/bscan.c:234 src/stored/stored.c:265 #, c-format -msgid "%d non-supported resource fork streams ignored.\n" +msgid "No Storage resource defined in %s. Cannot continue.\n" msgstr "" -#: src/filed/restore.c:598 +#: src/stored/bscan.c:242 src/stored/stored.c:296 #, c-format -msgid "%d non-supported Finder Info streams ignored.\n" +msgid "No Working Directory defined in %s. Cannot continue.\n" msgstr "" -#: src/filed/restore.c:601 +#: src/stored/bscan.c:250 #, c-format -msgid "%d non-supported acl streams ignored.\n" +msgid "Working Directory: %s not found. Cannot continue.\n" msgstr "" -#: src/filed/restore.c:613 -msgid "None" +#: src/stored/bscan.c:254 +#, c-format +msgid "Working Directory: %s is not a directory. Cannot continue.\n" msgstr "" -#: src/filed/restore.c:617 -msgid "Zlib errno" +#: src/stored/bscan.c:268 src/stored/bscan.c:341 +#, c-format +msgid "First Volume Size = %sn" msgstr "" -#: src/filed/restore.c:619 -msgid "Zlib stream error" +#: src/stored/bscan.c:274 +msgid "Could not init Bacula database\n" msgstr "" -#: src/filed/restore.c:621 -msgid "Zlib data error" +#: src/stored/bscan.c:281 +#, c-format +msgid "Using Database: %s, User: %s\n" msgstr "" -#: src/filed/restore.c:623 -msgid "Zlib memory error" +#: src/stored/bscan.c:315 +#, c-format +msgid "Create JobMedia for Job %s\n" msgstr "" -#: src/filed/restore.c:625 -msgid "Zlib buffer error" +#: src/stored/bscan.c:326 +#, c-format +msgid "Could not create JobMedia record for Volume=%s Job=%s\n" msgstr "" -#: src/filed/restore.c:627 -msgid "Zlib version error" +#: src/stored/bscan.c:382 +#, c-format +msgid "done: %d%%\n" msgstr "" -#: src/filed/restore.c:662 -#, c-format -msgid "Signature validation failed for %s: \n" +#: src/stored/bscan.c:406 +msgid "Volume is prelabeled. This tape cannot be scanned.\n" msgstr "" -#: src/filed/restore.c:669 src/filed/restore.c:684 +#: src/stored/bscan.c:418 #, c-format -msgid "Signature validation failed for %s: %s\n" +msgid "Pool record for %s found in DB.\n" msgstr "" -#: src/filed/restore.c:754 +#: src/stored/bscan.c:422 #, c-format -msgid "Uncompression error on file %s. ERR=%s\n" +msgid "VOL_LABEL: Pool record not found for Pool: %s\n" msgstr "" -#: src/filed/restore.c:785 -msgid "Decryption error\n" +#: src/stored/bscan.c:428 +#, c-format +msgid "VOL_LABEL: PoolType mismatch. DB=%s Vol=%s\n" msgstr "" -#: src/filed/restore.c:804 src/filed/restore.c:849 +#: src/stored/bscan.c:432 #, c-format -msgid "Write error in Win32 Block Decomposition on %s: %s\n" +msgid "Pool type \"%s\" is OK.\n" msgstr "" -#: src/filed/restore.c:843 +#: src/stored/bscan.c:442 #, c-format -msgid "Decryption error for %s\n" +msgid "Media record for %s found in DB.\n" msgstr "" -#: src/filed/verify.c:45 +#: src/stored/bscan.c:449 #, c-format -msgid "Cannot malloc %d network read buffer\n" +msgid "VOL_LABEL: Media record not found for Volume: %s\n" msgstr "" -#: src/filed/verify.c:113 src/filed/backup.c:242 +#: src/stored/bscan.c:456 #, c-format -msgid " Could not access %s: ERR=%s\n" +msgid "VOL_LABEL: MediaType mismatch. DB=%s Vol=%s\n" msgstr "" -#: src/filed/verify.c:120 src/filed/backup.c:249 +#: src/stored/bscan.c:460 #, c-format -msgid " Could not follow link %s: ERR=%s\n" +msgid "Media type \"%s\" is OK.\n" msgstr "" -#: src/filed/verify.c:127 src/filed/backup.c:256 +#: src/stored/bscan.c:469 #, c-format -msgid " Could not stat %s: ERR=%s\n" +msgid "VOL_LABEL: OK for Volume: %s\n" msgstr "" -#: src/filed/verify.c:133 src/filed/backup.c:263 +#: src/stored/bscan.c:476 #, c-format -msgid " Unchanged file skipped: %s\n" +msgid "%d \"errors\" ignored before first Start of Session record.\n" msgstr "" -#: src/filed/verify.c:136 +#: src/stored/bscan.c:487 #, c-format -msgid " Archive file skipped: %s\n" +msgid "SOS_LABEL: Found Job record for JobId: %d\n" msgstr "" -#: src/filed/verify.c:139 +#: src/stored/bscan.c:492 #, c-format -msgid " Recursion turned off. Directory skipped: %s\n" +msgid "SOS_LABEL: Job record not found for JobId: %d\n" msgstr "" -#: src/filed/verify.c:142 +#: src/stored/bscan.c:532 #, c-format -msgid " File system change prohibited. Directory skipped: %s\n" +msgid "SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/filed/verify.c:147 src/filed/backup.c:270 +#: src/stored/bscan.c:538 #, c-format -msgid " Could not open directory %s: ERR=%s\n" +msgid "SOS_LABEL: VolSessTime mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/filed/verify.c:152 +#: src/stored/bscan.c:544 #, c-format -msgid " Unknown file type %d: %s\n" +msgid "SOS_LABEL: PoolId mismatch for JobId=%u. DB=%d Vol=%d\n" msgstr "" -#: src/filed/verify.c:195 src/filed/verify_vol.c:201 +#: src/stored/bscan.c:562 src/stored/bscan.c:1013 #, c-format -msgid "Network error in send to Director: ERR=%s\n" +msgid "Could not find SessId=%d SessTime=%d for EOS record.\n" msgstr "" -#: src/filed/verify.c:228 src/filed/backup.c:306 +#: src/stored/bscan.c:606 #, c-format -msgid "%s digest initialization failed\n" +msgid "Could not update job record. ERR=%s\n" msgstr "" -#: src/filed/verify.c:284 src/filed/backup.c:368 +#: src/stored/bscan.c:617 #, c-format -msgid " Cannot open %s: ERR=%s.\n" +msgid "End of all Volumes. VolFiles=%u VolBlocks=%u VolBytes=%s\n" msgstr "" -#: src/filed/verify.c:298 src/filed/backup.c:417 +#: src/stored/bscan.c:629 #, c-format -msgid " Cannot open resource fork for %s: ERR=%s.\n" +msgid "Could not find Job for SessId=%d SessTime=%d record.\n" msgstr "" -#: src/filed/verify.c:334 +#: src/stored/bscan.c:665 #, c-format -msgid "Error reading file %s: ERR=%s\n" +msgid "%s file records. At file:blk=%s:%s bytes=%s\n" msgstr "" -#: src/filed/backup.c:70 -msgid "Cannot set buffer size FD->SD.\n" +#: src/stored/bscan.c:708 +#, c-format +msgid "Got MD5 record: %s\n" msgstr "" -#: src/filed/backup.c:95 src/filed/backup.c:107 -msgid "An error occured while encrypting the stream.\n" +#: src/stored/bscan.c:717 +#, c-format +msgid "Got SHA1 record: %s\n" msgstr "" -#: src/filed/backup.c:211 +#: src/stored/bscan.c:725 #, c-format -msgid " Recursion turned off. Will not descend into %s\n" +msgid "Got Prog Names Stream: %s\n" msgstr "" -#: src/filed/backup.c:218 -#, c-format -msgid " Filesystem change prohibited. Will not descend into %s\n" +#: src/stored/bscan.c:731 +msgid "Got Prog Data Stream record.\n" msgstr "" -#: src/filed/backup.c:224 +#: src/stored/bscan.c:735 #, c-format -msgid " Disallowed filesystem. Will not descend into %s\n" +msgid "Unknown stream type!!! stream=%d data=%s\n" msgstr "" -#: src/filed/backup.c:266 +#: src/stored/bscan.c:799 #, c-format -msgid " Archive file not saved: %s\n" +msgid "Could not create File Attributes record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:276 +#: src/stored/bscan.c:805 #, c-format -msgid " Unknown file type %d; not saved: %s\n" +msgid "Created File record: %s\n" msgstr "" -#: src/filed/backup.c:320 +#: src/stored/bscan.c:842 #, c-format -msgid "%s signature digest initialization failed\n" +msgid "Could not create media record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:338 +#: src/stored/bscan.c:846 src/stored/bscan.c:867 #, c-format -msgid "Python reader program \"%s\" not found.\n" +msgid "Could not update media record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:471 -msgid "Failed to allocate memory for stream signature.\n" +#: src/stored/bscan.c:850 +#, c-format +msgid "Created Media record for Volume: %s\n" msgstr "" -#: src/filed/backup.c:476 src/filed/backup.c:482 src/filed/backup.c:495 -msgid "An error occured while signing the stream.\n" +#: src/stored/bscan.c:871 +#, c-format +msgid "Updated Media record at end of Volume: %s\n" msgstr "" -#: src/filed/backup.c:596 -msgid "Failed to initialize encryption context\n" +#: src/stored/bscan.c:888 +#, c-format +msgid "Could not create pool record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:617 src/filed/backup.c:728 src/filed/backup.c:757 -#: src/filed/backup.c:778 src/filed/backup.c:823 src/filed/backup.c:836 -#: src/filed/backup.c:844 src/filed/backup.c:889 src/filed/backup.c:923 +#: src/stored/bscan.c:892 #, c-format -msgid "Network send error to SD. ERR=%s\n" +msgid "Created Pool record for Pool: %s\n" msgstr "" -#: src/filed/backup.c:692 +#: src/stored/bscan.c:912 #, c-format -msgid "Compression error: %d\n" +msgid "Created Client record for Client: %s\n" msgstr "" -#: src/filed/backup.c:716 -msgid "Encryption error\n" +#: src/stored/bscan.c:929 +#, c-format +msgid "Fileset \"%s\" already exists.\n" msgstr "" -#: src/filed/backup.c:744 -msgid "Encryption padding error\n" +#: src/stored/bscan.c:933 +#, c-format +msgid "Could not create FileSet record \"%s\". ERR=%s\n" msgstr "" -#: src/filed/backup.c:769 +#: src/stored/bscan.c:938 #, c-format -msgid "Read error on file %s. ERR=%s\n" +msgid "Created FileSet record \"%s\"\n" msgstr "" -#: src/filed/backup.c:772 -msgid "Too many errors.\n" +#: src/stored/bscan.c:985 +#, c-format +msgid "Could not create JobId record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:814 +#: src/stored/bscan.c:991 #, c-format -msgid "Error reading ACL of %s\n" +msgid "Could not update job start record. ERR=%s\n" msgstr "" -#: src/filed/backup.c:868 -msgid "Invalid file flags, no supported data stream type.\n" +#: src/stored/bscan.c:994 +#, c-format +msgid "Created new JobId=%u record for original JobId=%u\n" msgstr "" -#: src/filed/job.c:328 +#: src/stored/bscan.c:1044 #, c-format -msgid "2901 Job %s not found.\n" +msgid "Could not update JobId=%u record. ERR=%s\n" msgstr "" -#: src/filed/job.c:344 +#: src/stored/bscan.c:1049 #, c-format -msgid "2001 Job %s marked to be canceled.\n" +msgid "Updated Job termination record for JobId=%u TermStat=%c\n" msgstr "" -#: src/filed/job.c:347 -msgid "2902 Error scanning cancel command.\n" +#: src/stored/bscan.c:1071 +#, c-format +msgid "Job Termination code: %d" msgstr "" -#: src/filed/job.c:366 +#: src/stored/bscan.c:1076 #, c-format -msgid "2991 Bad setdebug command: %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/filed/job.c:382 +#: src/stored/bscan.c:1140 #, c-format -msgid "Bad estimate command: %s" +msgid "Could not create JobMedia record. ERR=%s\n" msgstr "" -#: src/filed/job.c:383 -msgid "2992 Bad estimate command.\n" +#: src/stored/bscan.c:1144 +#, c-format +msgid "Created JobMedia record JobId %d, MediaId %d\n" msgstr "" -#: src/filed/job.c:406 +#: src/stored/bscan.c:1160 #, c-format -msgid "Bad Job Command: %s" +msgid "Could not find SessId=%d SessTime=%d for MD5/SHA1 record.\n" msgstr "" -#: src/filed/job.c:426 +#: src/stored/bscan.c:1174 #, c-format -msgid "Bad RunBeforeJob command: %s\n" +msgid "Could not add MD5/SHA1 to File record. ERR=%s\n" msgstr "" -#: src/filed/job.c:427 src/filed/job.c:440 -msgid "2905 Bad RunBeforeJob command.\n" +#: src/stored/bscan.c:1179 +msgid "Updated MD5/SHA1 record\n" msgstr "" -#: src/filed/job.c:453 +#: src/stored/btape.c:157 src/stored/stored.c:107 #, c-format -msgid "Bad RunAfter command: %s\n" +msgid "Tape block size (%d) not multiple of system size (%d)\n" msgstr "" -#: src/filed/job.c:454 -msgid "2905 Bad RunAfterJob command.\n" +#: src/stored/btape.c:161 src/stored/stored.c:111 +#, c-format +msgid "Tape block size (%d) is not a power of 2\n" msgstr "" -#: src/filed/job.c:480 +#: src/stored/btape.c:164 #, c-format -msgid "%s could not execute. ERR=%s\n" +msgid "" +"\n" +"\n" +"!!!! Warning large disk addressing disabled. off_t=%d should be 8 or " +"more !!!!!\n" +"\n" +"\n" msgstr "" -#: src/filed/job.c:489 +#: src/stored/btape.c:171 #, c-format -msgid "%s: %s\n" +msgid "32 bit printf/scanf problem. i=%d x32=%u y32=%u\n" msgstr "" -#: src/filed/job.c:494 -#, c-format -msgid "%s returned non-zero status=%d. ERR=%s\n" +#: src/stored/btape.c:180 +msgid "64 bit printf/scanf problem. i=%d x64=%" msgstr "" -#: src/filed/job.c:570 src/dird/fd_cmds.c:320 -#, c-format -msgid "Cannot run program: %s. ERR=%s\n" +#: src/stored/btape.c:180 +msgid " y64=%" msgstr "" -#: src/filed/job.c:579 +#: src/stored/btape.c:184 #, c-format -msgid "Error running program: %s. RtnStat=%d ERR=%s\n" +msgid "Tape block granularity is %d bytes.\n" msgstr "" -#: src/filed/job.c:589 -#, c-format -msgid "Cannot open FileSet input file: %s. ERR=%s\n" +#: src/stored/btape.c:251 +msgid "No archive name specified.\n" msgstr "" -#: src/filed/job.c:683 -#, c-format -msgid "REGEX %s compile error. ERR=%s\n" +#: src/stored/btape.c:255 +msgid "Improper number of arguments specified.\n" msgstr "" -#: src/filed/job.c:737 +#: src/stored/btape.c:338 #, c-format -msgid "Invalid FileSet command: %s\n" +msgid "open device %s: OK\n" msgstr "" -#: src/filed/job.c:1090 -#, c-format -msgid "DIR and FD clocks differ by %d seconds, FD automatically adjusting.\n" +#: src/stored/btape.c:359 +msgid "Enter Volume Name: " msgstr "" -#: src/filed/job.c:1098 +#: src/stored/btape.c:366 #, c-format -msgid "Unknown backup level: %s\n" +msgid "Device open failed. ERR=%s\n" msgstr "" -#: src/filed/job.c:1110 +#: src/stored/btape.c:371 #, c-format -msgid "Bad level command: %s\n" +msgid "Wrote Volume label for volume \"%s\".\n" msgstr "" -#: src/filed/job.c:1131 -#, c-format -msgid "Bad session command: %s" +#: src/stored/btape.c:385 +msgid "Volume has no label.\n" msgstr "" -#: src/filed/job.c:1152 -#, c-format -msgid "Bad storage command: %s" +#: src/stored/btape.c:388 +msgid "Volume label read correctly.\n" msgstr "" -#: src/filed/job.c:1161 +#: src/stored/btape.c:391 #, c-format -msgid "Failed to connect to Storage daemon: %s:%d\n" +msgid "I/O error on device: ERR=%s" msgstr "" -#: src/filed/job.c:1173 -msgid "Failed to authenticate Storage daemon.\n" +#: src/stored/btape.c:394 +msgid "Volume name error\n" msgstr "" -#: src/filed/job.c:1199 -msgid "Cannot contact Storage daemon\n" +#: src/stored/btape.c:397 +#, c-format +msgid "Error creating label. ERR=%s" msgstr "" -#: src/filed/job.c:1217 -#, c-format -msgid "Bad response to append open: %s\n" +#: src/stored/btape.c:400 +msgid "Volume version error.\n" msgstr "" -#: src/filed/job.c:1222 -msgid "Bad response from stored to open command\n" +#: src/stored/btape.c:403 +msgid "Bad Volume label type.\n" msgstr "" -#: src/filed/job.c:1249 -#, c-format -msgid "Generate VSS snapshots. Driver=\"%s\", Drive(s)=\"%s\"\n" +#: src/stored/btape.c:406 +msgid "Unknown error.\n" msgstr "" -#: src/filed/job.c:1252 +#: src/stored/btape.c:424 #, c-format -msgid "Generate VSS snapshots failed. ERR=%s\n" +msgid "Bad status from load. ERR=%s\n" msgstr "" -#: src/filed/job.c:1259 +#: src/stored/btape.c:426 #, c-format -msgid "Generate VSS snapshot of drive \"%c:\\\" failed\n" +msgid "Loaded %s\n" msgstr "" -#: src/filed/job.c:1268 +#: src/stored/btape.c:435 src/stored/btape.c:775 src/stored/btape.c:817 +#: src/stored/btape.c:887 src/stored/btape.c:929 src/stored/btape.c:1198 #, c-format -msgid "VSS Writer: %s\n" +msgid "Bad status from rewind. ERR=%s\n" msgstr "" -#: src/filed/job.c:1272 -msgid "No drive letters found for generating VSS snapshots.\n" +#: src/stored/btape.c:438 src/stored/btape.c:1206 +#, c-format +msgid "Rewound %s\n" msgstr "" -#: src/filed/job.c:1275 -msgid "VSS was not initialized properly. VSS support is disabled.\n" +#: src/stored/btape.c:465 src/stored/btape.c:1210 +#, c-format +msgid "Bad status from weof %d. ERR=%s\n" msgstr "" -#: src/filed/job.c:1324 -msgid "Append Close with SD failed.\n" +#: src/stored/btape.c:469 +#, c-format +msgid "Wrote 1 EOF to %s\n" msgstr "" -#: src/filed/job.c:1328 +#: src/stored/btape.c:472 #, c-format -msgid "Bad status %d returned from Storage Daemon.\n" +msgid "Wrote %d EOFs to %s\n" msgstr "" -#: src/filed/job.c:1361 -#, c-format -msgid "2994 Bad verify command: %s\n" +#: src/stored/btape.c:490 +msgid "Moved to end of medium.\n" msgstr "" -#: src/filed/job.c:1376 src/filed/job.c:1415 +#: src/stored/btape.c:517 #, c-format -msgid "2994 Bad verify level: %s\n" +msgid "Bad status from bsf. ERR=%s\n" msgstr "" -#: src/filed/job.c:1455 +#: src/stored/btape.c:519 #, c-format -msgid "Bad replace command. CMD=%s\n" +msgid "Backspaced %d file%s.\n" msgstr "" -#: src/filed/job.c:1532 -msgid "Improper calling sequence.\n" +#: src/stored/btape.c:536 +#, c-format +msgid "Bad status from bsr. ERR=%s\n" msgstr "" -#: src/filed/job.c:1552 +#: src/stored/btape.c:538 #, c-format -msgid "Bad response to SD read open: %s\n" +msgid "Backspaced %d record%s.\n" msgstr "" -#: src/filed/job.c:1557 -msgid "Bad response from stored to read open command\n" +#: src/stored/btape.c:548 src/stored/status.c:227 +#, c-format +msgid "Configured device capabilities:\n" msgstr "" -#: src/filed/job.c:1623 +#: src/stored/btape.c:566 #, c-format -msgid "Comm error with SD. bad response to %s. ERR=%s\n" +msgid "Device status:\n" msgstr "" -#: src/filed/job.c:1626 +#: src/stored/btape.c:580 src/stored/status.c:259 #, c-format -msgid "Bad response to %s command. Wanted %s, got %s\n" +msgid "Device parameters:\n" msgstr "" -#: src/filed/job.c:1647 src/dird/fd_cmds.c:441 +#: src/stored/btape.c:585 #, c-format -msgid "Could not open bootstrap file %s: ERR=%s\n" +msgid "Status:\n" msgstr "" -#: src/filed/status.c:67 -#, c-format -msgid "%s Version: %s (%s) %s %s %s %s\n" +#: src/stored/btape.c:600 +msgid "" +"Test writting 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/filed/status.c:71 -#, c-format -msgid "Daemon started %s, %d Job%s run since started.\n" +#: src/stored/btape.c:608 src/stored/btape.c:1815 +msgid "Command aborted.\n" msgstr "" -#: src/filed/status.c:127 +#: src/stored/btape.c:624 #, c-format -msgid " Sizeof: off_t=%d size_t=%d debug=%d trace=%d\n" +msgid "Block %d i=%d\n" msgstr "" -#: src/filed/status.c:138 -msgid "Running Jobs:\n" +#: src/stored/btape.c:650 +msgid "Skipping read backwards test because BSR turned off.\n" msgstr "" -#: src/filed/status.c:149 -#, c-format -msgid "Director connected at: %s\n" +#: src/stored/btape.c:654 +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/filed/status.c:151 -#, c-format -msgid "JobId %d Job %s is running.\n" +#: src/stored/btape.c:667 src/stored/btape.c:678 src/stored/btape.c:689 +#: src/stored/btape.c:787 src/stored/btape.c:803 src/stored/btape.c:899 +#: src/stored/btape.c:915 src/stored/btape.c:1524 src/stored/btape.c:2407 +msgid "Error writing record to block.\n" msgstr "" -#: src/filed/status.c:154 +#: src/stored/btape.c:671 src/stored/btape.c:682 src/stored/btape.c:693 +#: src/stored/btape.c:791 src/stored/btape.c:807 src/stored/btape.c:903 +#: src/stored/btape.c:919 src/stored/btape.c:1528 src/stored/btape.c:2411 +msgid "Error writing block to device.\n" +msgstr "" + +#: src/stored/btape.c:674 #, c-format -msgid " %s%s Job started: %s\n" +msgid "Wrote first record of %d bytes.\n" msgstr "" -#: src/filed/status.c:171 +#: src/stored/btape.c:685 #, c-format -msgid " Files Examined=%s\n" +msgid "Wrote second record of %d bytes.\n" msgstr "" -#: src/filed/status.c:176 +#: src/stored/btape.c:696 #, c-format -msgid " Processing file: %s\n" +msgid "Wrote third record of %d bytes.\n" msgstr "" -#: src/filed/status.c:187 -msgid " SDSocket closed.\n" +#: src/stored/btape.c:703 src/stored/btape.c:708 +#, c-format +msgid "Backspace file failed! ERR=%s\n" msgstr "" -#: src/filed/status.c:217 -msgid "Terminated Jobs:\n" +#: src/stored/btape.c:712 +msgid "Backspaced over EOF OK.\n" msgstr "" -#: src/filed/status.c:219 -msgid " JobId Level Files Bytes Status Finished Name \n" +#: src/stored/btape.c:714 +#, c-format +msgid "Backspace record failed! ERR=%s\n" msgstr "" -#: src/filed/status.c:324 -msgid "2900 Bad .status command, missing argument.\n" +#: src/stored/btape.c:717 +msgid "Backspace record OK.\n" msgstr "" -#: src/filed/status.c:348 -msgid "2900 Bad .status command, wrong argument.\n" +#: src/stored/btape.c:720 src/stored/btape.c:726 +#, c-format +msgid "Read block failed! ERR=%s\n" msgstr "" -#: src/filed/status.c:451 -msgid "Bacula Idle" +#: src/stored/btape.c:731 +msgid "Bad data in record. Test failed!\n" msgstr "" -#: src/filed/status.c:462 -msgid "Bacula Running" +#: src/stored/btape.c:735 +msgid "" +"\n" +"Block re-read correct. Test succeeded!\n" msgstr "" -#: src/filed/status.c:476 -msgid "Last Job Canceled" -msgstr "" - -#: src/filed/status.c:480 -msgid "Last Job Failed" +#: src/stored/btape.c:736 +msgid "" +"=== End Write, backup, and re-read test ===\n" +"\n" msgstr "" -#: src/filed/status.c:484 -msgid "Last Job had Warnings" +#: src/stored/btape.c:743 +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/filed/filed.c:62 -#, c-format +#: src/stored/btape.c:767 msgid "" -"Copyright (C) 2000-2005 Kern Sibbald\n" "\n" -"Version: %s (%s)\n" +"=== Write, rewind, and re-read test ===\n" "\n" -"Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n" -" -c use as configuration file\n" -" -dnn set debug level to nn\n" -" -f run in foreground (for debugging)\n" -" -g groupid\n" -" -i inetd request\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" +"I'm going to write 1000 records and an EOF\n" +"then write 1000 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/filed/filed.c:282 +#: src/stored/btape.c:795 src/stored/btape.c:811 src/stored/btape.c:907 +#: src/stored/btape.c:923 #, c-format -msgid "" -"No File daemon resource defined in %s\n" -"Without that I don't know who I am :-(\n" +msgid "Wrote 1000 blocks of %d bytes.\n" msgstr "" -#: src/filed/filed.c:287 -#, c-format -msgid "Only one Client resource permitted in %s\n" +#: src/stored/btape.c:820 src/stored/btape.c:932 +msgid "Rewind OK.\n" msgstr "" -#: src/filed/filed.c:310 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon in %s.\n" +#: src/stored/btape.c:827 src/stored/btape.c:981 +msgid "Got EOF on tape.\n" msgstr "" -#: src/filed/filed.c:326 src/dird/dird.c:824 src/dird/dird.c:864 +#: src/stored/btape.c:832 #, c-format -msgid "Failed to initialize TLS context for File daemon \"%s\" in %s.\n" +msgid "Read block %d failed! ERR=%s\n" msgstr "" -#: src/filed/filed.c:334 -msgid "PKI encryption/signing enabled but not compiled into Bacula.\n" +#: src/stored/btape.c:838 +#, c-format +msgid "Read record failed. Block %d! ERR=%s\n" msgstr "" -#: src/filed/filed.c:345 +#: src/stored/btape.c:844 src/stored/btape.c:1011 #, 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 "Bad data in record. Expected %d, got %d at byte %d. Test failed!\n" msgstr "" -#: src/filed/filed.c:357 src/filed/filed.c:388 src/filed/filed.c:429 -msgid "Failed to allocate a new keypair object.\n" +#: src/stored/btape.c:851 +msgid "1000 blocks re-read correctly.\n" msgstr "" -#: src/filed/filed.c:361 -#, c-format -msgid "Failed to load public certificate for File daemon \"%s\" in %s.\n" +#: src/stored/btape.c:854 src/stored/btape.c:1018 +msgid "" +"=== Test Succeeded. End Write, rewind, and re-read test ===\n" +"\n" msgstr "" -#: src/filed/filed.c:367 -#, c-format -msgid "Failed to load private key for File daemon \"%s\" in %s.\n" +#: src/stored/btape.c:879 +msgid "" +"\n" +"=== Write, rewind, and position test ===\n" +"\n" +"I'm going to write 1000 records and an EOF\n" +"then write 1000 records and an EOF, then rewind,\n" +"and position to a few blocks and verify that it is correct.\n" +"\n" +"This is an *essential* feature ...\n" +"\n" msgstr "" -#: src/filed/filed.c:397 src/filed/filed.c:438 +#: src/stored/btape.c:972 #, c-format -msgid "Failed to load private key from file %s for File daemon \"%s\" in %s.\n" +msgid "Reposition to file:block %d:%d\n" +msgstr "" + +#: src/stored/btape.c:974 +msgid "Reposition error.\n" msgstr "" -#: src/filed/filed.c:404 +#: src/stored/btape.c:987 #, c-format msgid "" -"Failed to load trusted signer certificate from file %s for File daemon \"%s" -"\" in %s.\n" +"Read block %d failed! file=%d blk=%d. ERR=%s\n" +"\n" msgstr "" -#: src/filed/filed.c:445 -#, c-format +#: src/stored/btape.c:989 msgid "" -"Failed to load master key certificate from file %s for File daemon \"%s\" in " -"%s.\n" +"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/filed/filed.c:461 +#: src/stored/btape.c:1005 #, c-format -msgid "No Director resource defined in %s\n" +msgid "Read record failed! ERR=%s\n" msgstr "" -#: src/filed/authenticate.c:45 +#: src/stored/btape.c:1016 #, c-format -msgid "I only authenticate directors, not %d\n" +msgid "Block %d re-read correctly.\n" msgstr "" -#: src/filed/authenticate.c:110 -#, c-format +#: src/stored/btape.c:1037 msgid "" -"Incorrect password given by Director at %s.\n" -"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +"\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/filed/authenticate.c:208 -msgid "" -"Authorization key rejected by Storage daemon.\n" -"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +#: src/stored/btape.c:1061 +msgid "Now moving to end of medium.\n" msgstr "" -#: src/filed/filed_conf.c:358 src/dird/dird_conf.c:1239 +#: src/stored/btape.c:1063 src/stored/btape.c:1293 #, c-format -msgid "Cannot find Client resource %s\n" +msgid "We should be in file 3. I am at file %d. %s\n" msgstr "" -#: src/filed/verify_vol.c:57 -msgid "Storage command not issued before Verify.\n" +#: src/stored/btape.c:1064 src/stored/btape.c:1082 src/stored/btape.c:1282 +#: src/stored/btape.c:1294 src/stored/btape.c:1307 src/stored/btape.c:1324 +msgid "This is correct!" msgstr "" -#: src/filed/verify_vol.c:137 -#, c-format -msgid "Error scanning record header: %s\n" +#: src/stored/btape.c:1064 src/stored/btape.c:1082 src/stored/btape.c:1282 +#: src/stored/btape.c:1294 src/stored/btape.c:1307 src/stored/btape.c:1324 +msgid "This is NOT correct!!!!" msgstr "" -#: src/dird/ua_tree.c:58 -msgid "change current directory" +#: src/stored/btape.c:1070 +msgid "" +"\n" +"Now the important part, I am going to attempt to append to the tape.\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:59 -msgid "count marked files in and below the cd" +#: src/stored/btape.c:1077 +msgid "" +"Done appending, there should be no I/O errors\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:60 src/dird/ua_tree.c:61 -msgid "long list current directory, wildcards allowed" +#: src/stored/btape.c:1078 +msgid "Doing Bacula scan of blocks:\n" msgstr "" -#: src/dird/ua_tree.c:62 -msgid "leave file selection mode" +#: src/stored/btape.c:1080 +msgid "End scanning the tape.\n" msgstr "" -#: src/dird/ua_tree.c:63 -msgid "estimate restore size" +#: src/stored/btape.c:1081 src/stored/btape.c:1306 +#, c-format +msgid "We should be in file 4. I am at file %d. %s\n" msgstr "" -#: src/dird/ua_tree.c:64 -msgid "same as done command" +#: src/stored/btape.c:1106 +msgid "" +"\n" +"Autochanger enabled, but no name or no command device specified.\n" msgstr "" -#: src/dird/ua_tree.c:65 -msgid "find files, wildcards allowed" +#: src/stored/btape.c:1110 +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_tree.c:66 src/dird/ua_tree.c:75 -msgid "print help" +#: src/stored/btape.c:1113 +msgid "" +"\n" +"Do you wish to continue with the Autochanger test? (y/n): " msgstr "" -#: src/dird/ua_tree.c:67 -msgid "list current directory, wildcards allowed" +#: src/stored/btape.c:1120 +msgid "" +"\n" +"\n" +"=== Autochanger test ===\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:68 -msgid "list the marked files in and below the cd" +#: src/stored/btape.c:1129 +msgid "3301 Issuing autochanger \"loaded\" command.\n" msgstr "" -#: src/dird/ua_tree.c:69 -msgid "mark dir/file to be restored recursively, wildcards allowed" +#: src/stored/btape.c:1138 +#, c-format +msgid "3991 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_tree.c:70 -msgid "mark directory name to be restored (no files)" +#: src/stored/btape.c:1139 +#, c-format +msgid "3991 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:71 -msgid "print current working directory" +#: src/stored/btape.c:1143 +#, c-format +msgid "Slot %d loaded. I am going to unload it.\n" msgstr "" -#: src/dird/ua_tree.c:72 -msgid "unmark dir/file to be restored recursively in dir" +#: src/stored/btape.c:1145 +msgid "Nothing loaded in the drive. OK.\n" msgstr "" -#: src/dird/ua_tree.c:73 -msgid "unmark directory name only no recursion" +#: src/stored/btape.c:1153 +#, c-format +msgid "3302 Issuing autochanger \"unload %d %d\" command.\n" msgstr "" -#: src/dird/ua_tree.c:74 -msgid "quit and do not do restore" +#: src/stored/btape.c:1158 +#, c-format +msgid "unload status=%s %d\n" msgstr "" -#: src/dird/ua_tree.c:94 -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:1158 +msgid "Bad" msgstr "" -#: src/dird/ua_tree.c:104 src/dird/ua_tree.c:664 src/dird/ua_tree.c:672 +#: src/stored/btape.c:1161 #, c-format -msgid "cwd is: %s\n" +msgid "3992 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_tree.c:125 -msgid "Illegal command. Enter \"done\" to exit.\n" +#: src/stored/btape.c:1162 +#, c-format +msgid "3992 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:298 src/dird/ua_tree.c:309 src/dird/ua_tree.c:326 -msgid "No files marked.\n" +#: src/stored/btape.c:1172 +#, c-format +msgid "3303 Issuing autochanger \"load %d %d\" command.\n" msgstr "" -#: src/dird/ua_tree.c:311 -msgid "1 file marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:313 +#: src/stored/btape.c:1180 #, c-format -msgid "%s files marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:340 -msgid "No directories marked.\n" -msgstr "" - -#: src/dird/ua_tree.c:342 -msgid "1 directory marked.\n" +msgid "3303 Autochanger \"load %d %d\" status is OK.\n" msgstr "" -#: src/dird/ua_tree.c:344 +#: src/stored/btape.c:1184 #, c-format -msgid "%s directories marked.\n" +msgid "3993 Bad autochanger command: %s\n" msgstr "" -#: src/dird/ua_tree.c:365 +#: src/stored/btape.c:1185 #, c-format -msgid "%s total files/dirs. %s marked to be restored.\n" +msgid "3993 result=\"%s\": ERR=%s\n" msgstr "" -#: src/dird/ua_tree.c:376 -msgid "No file specification given.\n" +#: src/stored/btape.c:1200 +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_tree.c:520 +#: src/stored/btape.c:1213 #, c-format -msgid "Node %s has no children.\n" +msgid "Wrote EOF to %s\n" msgstr "" -#: src/dird/ua_tree.c:611 +#: src/stored/btape.c:1217 #, c-format -msgid "%d total files; %d marked to be restored; %s bytes.\n" -msgstr "" - -#: src/dird/ua_tree.c:656 -msgid "Invalid path given.\n" -msgstr "" - -#: src/dird/ua_tree.c:683 src/dird/ua_tree.c:694 -msgid "No files unmarked.\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_tree.c:696 -msgid "1 file unmarked.\n" +#: src/stored/btape.c:1222 +msgid "" +"\n" +"The test autochanger worked!!\n" +"\n" msgstr "" -#: src/dird/ua_tree.c:698 -#, c-format -msgid "%d files unmarked.\n" +#: src/stored/btape.c:1233 +msgid "You must correct this error or the Autochanger will not work.\n" msgstr "" -#: src/dird/ua_tree.c:709 src/dird/ua_tree.c:725 -msgid "No directories unmarked.\n" +#: src/stored/btape.c:1251 +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_tree.c:727 -msgid "1 directory unmarked.\n" +#: src/stored/btape.c:1276 +msgid "Now forward spacing 1 file.\n" msgstr "" -#: src/dird/ua_tree.c:729 +#: src/stored/btape.c:1278 src/stored/btape.c:1290 src/stored/btape.c:1303 +#: src/stored/btape.c:1321 src/stored/btape.c:1490 #, c-format -msgid "%d directories unmarked.\n" -msgstr "" - -#: src/dird/restore.c:71 -msgid "Cannot restore without bootstrap file.\n" +msgid "Bad status from fsr. ERR=%s\n" msgstr "" -#: src/dird/restore.c:78 +#: src/stored/btape.c:1281 #, c-format -msgid "Start Restore Job %s\n" +msgid "We should be in file 1. I am at file %d. %s\n" msgstr "" -#: src/dird/restore.c:225 -msgid "Restore OK -- warning file count mismatch" +#: src/stored/btape.c:1288 +msgid "Now forward spacing 2 files.\n" msgstr "" -#: src/dird/restore.c:227 -msgid "Restore OK" +#: src/stored/btape.c:1301 +msgid "Now forward spacing 4 files.\n" msgstr "" -#: src/dird/restore.c:232 -msgid "*** Restore Error ***" +#: src/stored/btape.c:1313 +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/restore.c:242 -msgid "Restore Canceled" +#: src/stored/btape.c:1319 +msgid "Now forward spacing 1 more file.\n" msgstr "" -#: src/dird/restore.c:252 src/dird/backup.c:382 src/dird/admin.c:102 +#: src/stored/btape.c:1323 #, c-format -msgid "Inappropriate term code: %c\n" +msgid "We should be in file 5. I am at file %d. %s\n" msgstr "" -#: src/dird/restore.c:269 -#, c-format +#: src/stored/btape.c:1328 msgid "" -"Bacula %s (%s): %s\n" -" JobId: %d\n" -" Job: %s\n" -" 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" +"=== End Forward space files test ===\n" "\n" msgstr "" -#: src/dird/scheduler.c:80 -#, c-format -msgid "Job %s not found\n" -msgstr "" - -#: src/dird/scheduler.c:103 -msgid "Walk queue" -msgstr "" - -#: src/dird/scheduler.c:113 -msgid "Dequeued job" +#: src/stored/btape.c:1332 +msgid "" +"\n" +"The forward space file test failed.\n" msgstr "" -#: src/dird/scheduler.c:116 -msgid "Scheduler logic error\n" +#: src/stored/btape.c:1334 +msgid "" +"You have Fast Forward Space File enabled.\n" +"I am turning it off then retrying the test.\n" msgstr "" -#: src/dird/scheduler.c:132 -msgid "Run job" +#: src/stored/btape.c:1340 +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/scheduler.c:349 -msgid "Inserted job" +#: src/stored/btape.c:1372 +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/scheduler.c:357 -msgid "Appended job" +#: src/stored/btape.c:1380 +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/scheduler.c:361 -msgid "Run queue" +#: src/stored/btape.c:1387 +msgid "" +"\n" +"\n" +"That appears *NOT* to have corrected the problem.\n" msgstr "" -#: src/dird/dird_conf.c:464 -#, c-format -msgid "Director: name=%s MaxJobs=%d FDtimeout=%s SDtimeout=%s\n" +#: src/stored/btape.c:1392 +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/dird_conf.c:469 -#, c-format -msgid " query_file=%s\n" +#: src/stored/btape.c:1397 +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/dird_conf.c:472 src/dird/dird_conf.c:492 src/dird/dird_conf.c:506 -#: src/dird/dird_conf.c:551 src/dird/dird_conf.c:555 src/dird/dird_conf.c:559 -#: src/dird/dird_conf.c:583 src/dird/dird_conf.c:588 src/dird/dird_conf.c:592 -#: src/dird/dird_conf.c:596 src/dird/dird_conf.c:600 src/dird/dird_conf.c:604 -#: src/dird/dird_conf.c:614 src/dird/dird_conf.c:789 src/dird/dird_conf.c:795 -msgid " --> " +#: src/stored/btape.c:1408 +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/dird_conf.c:477 -#, c-format -msgid "Console: name=%s SSL=%d\n" +#: src/stored/btape.c:1429 +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/dird_conf.c:482 +#: src/stored/btape.c:1468 #, c-format -msgid "Counter: name=%s min=%d max=%d cur=%d wrapcntr=%s\n" +msgid "Bad status from fsf. ERR=%s\n" msgstr "" -#: src/dird/dird_conf.c:487 -#, c-format -msgid "Counter: name=%s min=%d max=%d\n" +#: src/stored/btape.c:1472 +msgid "Forward spaced 1 file.\n" msgstr "" -#: src/dird/dird_conf.c:498 +#: src/stored/btape.c:1475 #, c-format -msgid "Client: name=%s address=%s FDport=%d MaxJobs=%u\n" +msgid "Forward spaced %d files.\n" msgstr "" -#: src/dird/dird_conf.c:501 -#, c-format -msgid " JobRetention=%s FileRetention=%s AutoPrune=%d\n" +#: src/stored/btape.c:1494 +msgid "Forward spaced 1 record.\n" msgstr "" -#: src/dird/dird_conf.c:513 +#: src/stored/btape.c:1497 #, 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 "Forward spaced %d records.\n" msgstr "" -#: src/dird/dird_conf.c:523 +#: src/stored/btape.c:1531 #, c-format -msgid "" -"Storage: name=%s address=%s SDport=%d MaxJobs=%u\n" -" DeviceName=%s MediaType=%s StorageId=%s\n" +msgid "Wrote one record of %d bytes.\n" msgstr "" -#: src/dird/dird_conf.c:532 -#, c-format -msgid "" -"Catalog: name=%s address=%s DBport=%d db_name=%s\n" -" db_user=%s MutliDBConn=%d\n" +#: src/stored/btape.c:1533 +msgid "Wrote block to device.\n" msgstr "" -#: src/dird/dird_conf.c:540 -#, c-format -msgid "%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:541 src/dird/ua_cmds.c:430 src/dird/ua_run.c:709 -#: src/dird/ua_prune.c:454 src/dird/ua_select.c:234 src/dird/ua_select.c:257 -msgid "Job" -msgstr "" - -#: src/dird/dird_conf.c:541 -msgid "JobDefs" -msgstr "" - -#: src/dird/dird_conf.c:545 -#, c-format -msgid "" -" MaxJobs=%u Resched=%d Times=%d Interval=%s Spool=%d WritePartAfterJob=%" -"d\n" -msgstr "" - -#: src/dird/dird_conf.c:563 -#, c-format -msgid " --> Where=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:566 -#, c-format -msgid " --> Bootstrap=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:569 -#, c-format -msgid " --> RunBefore=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:572 -#, c-format -msgid " --> RunAfter=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:575 -#, c-format -msgid " --> RunAfterFailed=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:578 -#, c-format -msgid " --> WriteBootstrap=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:610 -#, c-format -msgid " --> Run=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:621 -#, c-format -msgid "FileSet: name=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:683 src/dird/dird_conf.c:762 -#, c-format -msgid "Schedule: name=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:688 -#, c-format -msgid " --> Run Level=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:689 -msgid " hour=" -msgstr "" - -#: src/dird/dird_conf.c:698 -msgid " mday=" -msgstr "" - -#: src/dird/dird_conf.c:707 -msgid " month=" -msgstr "" - -#: src/dird/dird_conf.c:716 -msgid " wday=" -msgstr "" - -#: src/dird/dird_conf.c:725 -msgid " wom=" -msgstr "" - -#: src/dird/dird_conf.c:734 -msgid " woy=" -msgstr "" - -#: src/dird/dird_conf.c:743 -#, c-format -msgid " mins=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:745 src/dird/dird_conf.c:749 src/dird/dird_conf.c:753 -msgid " --> " -msgstr "" - -#: src/dird/dird_conf.c:766 -#, c-format -msgid "Pool: name=%s PoolType=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:768 -#, c-format -msgid " use_cat=%d use_once=%d acpt_any=%d cat_files=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:771 -#, c-format -msgid " max_vols=%d auto_prune=%d VolRetention=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:774 -#, c-format -msgid " VolUse=%s recycle=%d LabelFormat=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:778 -#, c-format -msgid " CleaningPrefix=%s LabelType=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:780 -#, c-format -msgid " RecyleOldest=%d PurgeOldest=%d MaxVolJobs=%d MaxVolFiles=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:784 -#, c-format -msgid " MigTime=%s MigHiBytes=%s MigLoBytes=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:801 -#, c-format -msgid "Messages: name=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:803 -#, c-format -msgid " mailcmd=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:805 -#, c-format -msgid " opcmd=%s\n" -msgstr "" - -#: src/dird/dird_conf.c:1183 -#, c-format -msgid "Cannot find Pool resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1191 -#, c-format -msgid "Cannot find Console resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1213 -#, c-format -msgid "Cannot find Job resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1231 -#, c-format -msgid "Cannot find Counter resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1251 -#, c-format -msgid "Cannot find Schedule resource %s\n" -msgstr "" - -#: src/dird/dird_conf.c:1331 -#, c-format -msgid "Name item is required in %s resource, but not found.\n" -msgstr "" - -#: src/dird/dird_conf.c:1343 -#, c-format -msgid "Inserting %s res: %s index=%d pass=%d\n" -msgstr "" - -#: src/dird/dird_conf.c:1416 -#, c-format -msgid "Expected a Job Type keyword, got: %s" -msgstr "" - -#: src/dird/dird_conf.c:1440 -#, c-format -msgid "Expected a Job Level keyword, got: %s" -msgstr "" - -#: src/dird/dird_conf.c:1460 -#, c-format -msgid "Expected a Restore replacement option, got: %s" -msgstr "" - -#: src/dird/msgchan.c:156 -#, c-format -msgid "Storage daemon rejected Job command: %s\n" -msgstr "" - -#: src/dird/msgchan.c:163 -#, c-format -msgid " | ] -- cancel a job" -msgstr "" - -#: src/dird/ua_cmds.c:94 -msgid "create DB Pool from resource" -msgstr "" - -#: src/dird/ua_cmds.c:95 -msgid "delete [pool= | media volume=]" -msgstr "" - -#: src/dird/ua_cmds.c:96 -msgid "disable -- disable a job" -msgstr "" - -#: src/dird/ua_cmds.c:97 -msgid "enable -- enable a job" -msgstr "" - -#: src/dird/ua_cmds.c:98 -msgid "performs FileSet estimate, listing gives full listing" -msgstr "" - -#: src/dird/ua_cmds.c:100 -msgid "gui [on|off] -- non-interactive gui mode" -msgstr "" - -#: src/dird/ua_cmds.c:102 -msgid "" -"list [pools | jobs | jobtotals | media | files ]; " -"from catalog" -msgstr "" - -#: src/dird/ua_cmds.c:103 -msgid "label a tape" -msgstr "" - -#: src/dird/ua_cmds.c:104 -msgid "full or long list like list command" -msgstr "" - -#: src/dird/ua_cmds.c:105 -msgid "messages" -msgstr "" - -#: src/dird/ua_cmds.c:106 -msgid "mount " -msgstr "" - -#: src/dird/ua_cmds.c:107 -msgid "prune expired records from catalog" -msgstr "" - -#: src/dird/ua_cmds.c:108 -msgid "purge records from catalog" -msgstr "" - -#: src/dird/ua_cmds.c:109 -msgid "python control commands" -msgstr "" - -#: src/dird/ua_cmds.c:111 -msgid "query catalog" -msgstr "" - -#: src/dird/ua_cmds.c:112 -msgid "restore files" -msgstr "" - -#: src/dird/ua_cmds.c:113 -msgid "relabel a tape" -msgstr "" - -#: src/dird/ua_cmds.c:114 -msgid "release " -msgstr "" - -#: src/dird/ua_cmds.c:115 -msgid "reload conf file" -msgstr "" - -#: src/dird/ua_cmds.c:116 -msgid "run " -msgstr "" - -#: src/dird/ua_cmds.c:117 -msgid "status [storage | client]=" -msgstr "" - -#: src/dird/ua_cmds.c:118 -msgid "sets debug level" -msgstr "" - -#: src/dird/ua_cmds.c:119 -msgid "sets new client address -- if authorized" -msgstr "" - -#: src/dird/ua_cmds.c:120 -msgid "show (resource records) [jobs | pools | ... | all]" -msgstr "" - -#: src/dird/ua_cmds.c:121 -msgid "use SQL to query catalog" -msgstr "" - -#: src/dird/ua_cmds.c:123 -msgid "turn on/off trace to file" -msgstr "" - -#: src/dird/ua_cmds.c:124 -msgid "unmount " -msgstr "" - -#: src/dird/ua_cmds.c:125 -msgid "umount for old-time Unix guys" -msgstr "" - -#: src/dird/ua_cmds.c:126 -msgid "update Volume, Pool or slots" -msgstr "" - -#: src/dird/ua_cmds.c:127 -msgid "use catalog xxx" -msgstr "" - -#: src/dird/ua_cmds.c:128 -msgid "does variable expansion" -msgstr "" - -#: src/dird/ua_cmds.c:129 -msgid "print Director version" -msgstr "" - -#: src/dird/ua_cmds.c:130 -msgid "wait until no jobs are running" -msgstr "" - -#: src/dird/ua_cmds.c:168 -#, c-format -msgid "%s: is an illegal command.\n" -msgstr "" - -#: src/dird/ua_cmds.c:206 -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/dird/ua_cmds.c:225 -#, c-format -msgid "Pool already has maximum volumes=%d\n" -msgstr "" - -#: src/dird/ua_cmds.c:227 -msgid "Enter new maximum (zero for unlimited): " -msgstr "" - -#: src/dird/ua_cmds.c:248 -#, c-format -msgid "Enter number of Volumes to create. 0=>fixed name. Max=%d: " -msgstr "" - -#: src/dird/ua_cmds.c:254 -#, c-format -msgid "The number must be between 0 and %d\n" -msgstr "" - -#: src/dird/ua_cmds.c:261 -msgid "Enter Volume name: " -msgstr "" - -#: src/dird/ua_cmds.c:265 -msgid "Enter base volume name: " -msgstr "" - -#: src/dird/ua_cmds.c:274 src/dird/ua_label.c:605 -msgid "Volume name too long.\n" -msgstr "" - -#: src/dird/ua_cmds.c:287 -msgid "Enter the starting number: " -msgstr "" - -#: src/dird/ua_cmds.c:292 -msgid "Start number must be greater than zero.\n" -msgstr "" - -#: src/dird/ua_cmds.c:303 -msgid "Enter slot (0 for none): " +#: src/stored/btape.c:1548 +msgid "Enter length to read: " msgstr "" -#: src/dird/ua_cmds.c:307 -msgid "InChanger? yes/no: " +#: src/stored/btape.c:1553 +msgid "Bad length entered, using default of 1024 bytes.\n" msgstr "" -#: src/dird/ua_cmds.c:334 +#: src/stored/btape.c:1562 #, c-format -msgid "%d Volumes created in pool %s\n" +msgid "Read of %d bytes gives stat=%d. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:350 src/dird/ua_cmds.c:917 -msgid "Turn on or off? " +#: src/stored/btape.c:1585 src/stored/btape.c:1634 +#, c-format +msgid "End of tape\n" msgstr "" -#: src/dird/ua_cmds.c:358 src/dird/ua_cmds.c:925 -msgid "off" +#: src/stored/btape.c:1590 +#, c-format +msgid "Starting scan at file %u\n" msgstr "" -#: src/dird/ua_cmds.c:378 -msgid "jobid" +#: src/stored/btape.c:1595 src/stored/dev.c:1229 +#, c-format +msgid "read error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_cmds.c:385 +#: src/stored/btape.c:1597 #, c-format -msgid "JobId %s is not running. Use Job name to cancel inactive jobs.\n" +msgid "Bad status from read %d. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:389 -msgid "job" +#: src/stored/btape.c:1600 src/stored/btape.c:1614 src/stored/btape.c:1678 +#: src/stored/btape.c:1690 src/stored/btape.c:1703 src/stored/btape.c:1719 +#, c-format +msgid "1 block of %d bytes in file %d\n" msgstr "" -#: src/dird/ua_cmds.c:394 +#: src/stored/btape.c:1603 src/stored/btape.c:1617 src/stored/btape.c:1681 +#: src/stored/btape.c:1693 src/stored/btape.c:1706 src/stored/btape.c:1722 #, c-format -msgid "Warning Job %s is not running. Continuing anyway ...\n" +msgid "%d blocks of %d bytes in file %d\n" msgstr "" -#: src/dird/ua_cmds.c:419 -msgid "Select Job:\n" +#: src/stored/btape.c:1625 src/stored/btape.c:1697 +#, c-format +msgid "End of File mark.\n" msgstr "" -#: src/dird/ua_cmds.c:425 +#: src/stored/btape.c:1646 src/stored/btape.c:1750 #, c-format -msgid "JobId=%s Job=%s" +msgid "Total files=%d, blocks=%d, bytes = %s\n" msgstr "" -#: src/dird/ua_cmds.c:430 -msgid "Choose Job to cancel" +#: src/stored/btape.c:1710 +#, c-format +msgid "Short block read.\n" msgstr "" -#: src/dird/ua_cmds.c:434 -msgid "Confirm cancel (yes/no): " +#: src/stored/btape.c:1713 +#, c-format +msgid "Error reading block. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:442 +#: src/stored/btape.c:1737 #, c-format -msgid "Job %s not found.\n" +msgid "" +"Blk_block: %u dev_blk=%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=%" +"s rlen=%d\n" msgstr "" -#: src/dird/ua_cmds.c:547 +#: src/stored/btape.c:1759 #, c-format +msgid "Device status: %u. ERR=%s\n" +msgstr "" + +#: src/stored/btape.c:1789 msgid "" -"Error: Pool %s already exists.\n" -"Use update to change it.\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 3.2 GB. 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_cmds.c:558 -#, c-format -msgid "Pool %s created.\n" +#: src/stored/btape.c:1806 +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_cmds.c:571 -msgid "restart" +#: src/stored/btape.c:1809 +msgid "Simple test (single tape) selected.\n" msgstr "" -#: src/dird/ua_cmds.c:575 -msgid "Python interpreter restarted.\n" +#: src/stored/btape.c:1812 +msgid "Multiple tape test selected.\n" msgstr "" -#: src/dird/ua_cmds.c:577 src/dird/ua_cmds.c:1145 -msgid "Nothing done.\n" +#: src/stored/btape.c:1828 +msgid "Rewind failed.\n" msgstr "" -#: src/dird/ua_cmds.c:593 src/dird/ua_cmds.c:639 -msgid "Illegal command from this console.\n" +#: src/stored/btape.c:1831 +msgid "Write EOF failed.\n" msgstr "" -#: src/dird/ua_cmds.c:600 src/dird/ua_run.c:374 -#, c-format -msgid "Client \"%s\" not found.\n" +#: src/stored/btape.c:1858 +msgid "Wrote Start of Session label.\n" msgstr "" -#: src/dird/ua_cmds.c:609 +#: src/stored/btape.c:1889 #, c-format -msgid "Client \"%s\" address set to %s\n" +msgid "%s Begin writing Bacula records to tape ...\n" msgstr "" -#: src/dird/ua_cmds.c:634 +#: src/stored/btape.c:1891 #, c-format -msgid "Job \"%s\" not found.\n" +msgid "%s Begin writing Bacula records to first tape ...\n" msgstr "" -#: src/dird/ua_cmds.c:643 +#: src/stored/btape.c:1932 #, c-format -msgid "Job \"%s\" %sabled\n" +msgid "Wrote blk_block=%u, dev_blk_num=%u VolBytes=%s rate=%.1f KB/s\n" msgstr "" -#: src/dird/ua_cmds.c:667 src/dird/ua_status.c:286 +#: src/stored/btape.c:1942 #, c-format -msgid "Connecting to Storage daemon %s at %s:%d\n" +msgid "%s Flush block, write EOF\n" msgstr "" -#: src/dird/ua_cmds.c:670 src/dird/ua_cmds.c:1319 src/dird/job.c:414 -#: src/dird/ua_label.c:708 -msgid "Failed to connect to Storage daemon.\n" +#: src/stored/btape.c:1953 +msgid "Not OK\n" msgstr "" -#: src/dird/ua_cmds.c:673 src/dird/ua_status.c:297 -msgid "Connected to storage daemon\n" +#: src/stored/btape.c:1981 +msgid "Set ok=false after write_block_to_device.\n" msgstr "" -#: src/dird/ua_cmds.c:693 src/dird/ua_cmds.c:1032 src/dird/ua_status.c:324 +#: src/stored/btape.c:1984 +msgid "Wrote End of Session label.\n" +msgstr "" + +#: src/stored/btape.c:2008 #, c-format -msgid "Connecting to Client %s at %s:%d\n" +msgid "Wrote state file last_block_num1=%d last_block_num2=%d\n" msgstr "" -#: src/dird/ua_cmds.c:696 src/dird/ua_cmds.c:1035 -msgid "Failed to connect to Client.\n" +#: src/stored/btape.c:2012 +#, c-format +msgid "Could not create state file: %s ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:812 -msgid "Enter new debug level: " +#: src/stored/btape.c:2020 +#, c-format +msgid "" +"\n" +"\n" +"%s Done filling tape at %d:%d. Now beginning re-read of tape ...\n" msgstr "" -#: src/dird/ua_cmds.c:878 -msgid "Available daemons are: \n" +#: src/stored/btape.c:2024 +#, c-format +msgid "" +"\n" +"\n" +"%s Done filling tapes at %d:%d. Now beginning re-read of first tape ...\n" msgstr "" -#: src/dird/ua_cmds.c:883 -msgid "Select daemon type to set debug level" +#: src/stored/btape.c:2063 +msgid "" +"\n" +"The state file level has changed. You must redo\n" +"the fill command.\n" msgstr "" -#: src/dird/ua_cmds.c:987 src/dird/ua_run.c:511 +#: src/stored/btape.c:2069 #, c-format -msgid "Level %s not valid.\n" +msgid "" +"\n" +"Could not find the state file: %s ERR=%s\n" +"You must redo the fill command.\n" msgstr "" -#: src/dird/ua_cmds.c:1000 -msgid "No job specified.\n" +#: src/stored/btape.c:2111 +msgid "Mount first tape. Press enter when ready: " msgstr "" -#: src/dird/ua_cmds.c:1040 -msgid "Error sending include list.\n" +#: src/stored/btape.c:2131 +msgid "Rewinding.\n" msgstr "" -#: src/dird/ua_cmds.c:1045 -msgid "Error sending exclude list.\n" +#: src/stored/btape.c:2136 +#, c-format +msgid "Reading the first 10000 records from %u:%u.\n" msgstr "" -#: src/dird/ua_cmds.c:1131 -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/btape.c:2140 src/stored/btape.c:2207 +#, c-format +msgid "Reposition from %u:%u to %u:%u\n" msgstr "" -#: src/dird/ua_cmds.c:1134 -msgid "Choose catalog item to delete" +#: src/stored/btape.c:2143 src/stored/btape.c:2194 src/stored/btape.c:2210 +#, c-format +msgid "Reposition error. ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1202 -msgid "Enter JobId to delete: " +#: src/stored/btape.c:2146 +#, c-format +msgid "Reading block %u.\n" msgstr "" -#: src/dird/ua_cmds.c:1247 +#: src/stored/btape.c:2148 src/stored/btape.c:2199 src/stored/btape.c:2215 #, c-format -msgid "Job %s and associated records deleted from the catalog.\n" +msgid "Error reading block: ERR=%s\n" msgstr "" -#: src/dird/ua_cmds.c:1260 -#, c-format +#: src/stored/btape.c:2153 msgid "" "\n" -"This command will delete volume %s\n" -"and all Jobs saved on that volume from the Catalog\n" +"The last block on the tape matches. Test succeeded.\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:1264 -msgid "Are you sure you want to delete this Volume? (yes/no): " +#: src/stored/btape.c:2155 +msgid "" +"\n" +"The last block of the first tape matches.\n" +"\n" msgstr "" -#: src/dird/ua_cmds.c:1285 -msgid "Are you sure you want to delete this Pool? (yes/no): " +#: src/stored/btape.c:2180 +msgid "Mount second tape. Press enter when ready: " msgstr "" -#: src/dird/ua_cmds.c:1382 +#: src/stored/btape.c:2192 #, c-format -msgid "Using Catalog name=%s DB=%s\n" +msgid "Reposition from %u:%u to 0:1\n" msgstr "" -#: src/dird/ua_cmds.c:1425 +#: src/stored/btape.c:2197 src/stored/btape.c:2213 #, c-format -msgid " %-10s %s\n" +msgid "Reading block %d.\n" msgstr "" -#: src/dird/ua_cmds.c:1427 +#: src/stored/btape.c:2203 msgid "" "\n" -"When at a prompt, entering a period cancels the command.\n" +"The first block on the second tape matches.\n" +"\n" +msgstr "" + +#: src/stored/btape.c:2219 +msgid "" +"\n" +"The last block on the second tape matches. Test succeeded.\n" "\n" msgstr "" -#: src/dird/ua_cmds.c:1443 +#: src/stored/btape.c:2234 #, c-format -msgid "%s Version: %s (%s)\n" +msgid "10000 records read now at %d:%d\n" msgstr "" -#: src/dird/ua_cmds.c:1462 -msgid "Could not find a Catalog resource\n" +#: src/stored/btape.c:2257 src/stored/btape.c:2268 src/stored/btape.c:2316 +msgid "Last block written" msgstr "" -#: src/dird/ua_cmds.c:1465 -msgid "You must specify a \"use \" command before continuing.\n" +#: src/stored/btape.c:2259 src/stored/btape.c:2269 +msgid "Block read back" msgstr "" -#: src/dird/ua_cmds.c:1469 +#: src/stored/btape.c:2260 #, c-format -msgid "Using default Catalog name=%s DB=%s\n" +msgid "" +"\n" +"\n" +"The blocks differ at byte %u\n" +msgstr "" + +#: src/stored/btape.c:2261 +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/ua_cmds.c:1482 src/dird/job.c:115 src/dird/dird.c:683 -#: src/dird/ua_output.c:607 +#: src/stored/btape.c:2300 #, c-format -msgid "Could not open database \"%s\".\n" +msgid "Last block at: %u:%u this_dev_block_num=%d\n" msgstr "" -#: src/dird/ua_run.c:119 +#: src/stored/btape.c:2314 #, c-format -msgid "Value missing for keyword %s\n" +msgid "Block not written: FileIndex=%u blk_block=%u Size=%u\n" msgstr "" -#: src/dird/ua_run.c:126 -msgid "Job name specified twice.\n" +#: src/stored/btape.c:2318 +msgid "Block not written" msgstr "" -#: src/dird/ua_run.c:134 -msgid "JobId specified twice.\n" +#: src/stored/btape.c:2333 +#, c-format +msgid "End of tape %d:%d. VolumeCapacity=%s. Write rate = %.1f KB/s\n" msgstr "" -#: src/dird/ua_run.c:143 -msgid "Client specified twice.\n" +#: src/stored/btape.c:2383 +msgid "Test writing blocks of 64512 bytes to tape.\n" msgstr "" -#: src/dird/ua_run.c:151 -msgid "FileSet specified twice.\n" +#: src/stored/btape.c:2385 +msgid "How many blocks do you want to write? (1000): " msgstr "" -#: src/dird/ua_run.c:159 -msgid "Level specified twice.\n" +#: src/stored/btape.c:2400 +#, c-format +msgid "Begin writing %d Bacula blocks to tape ...\n" msgstr "" -#: src/dird/ua_run.c:168 -msgid "Storage specified twice.\n" +#: src/stored/btape.c:2452 +#, c-format +msgid "Begin writing raw blocks of %u bytes.\n" msgstr "" -#: src/dird/ua_run.c:176 -msgid "Pool specified twice.\n" +#: src/stored/btape.c:2472 +#, c-format +msgid "Write failed at block %u. stat=%d ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:184 -msgid "Where specified twice.\n" +#: src/stored/btape.c:2502 +#, c-format +msgid "Begin writing Bacula blocks of %u bytes.\n" msgstr "" -#: src/dird/ua_run.c:192 -msgid "Bootstrap specified twice.\n" +#: src/stored/btape.c:2521 +#, c-format +msgid "Write failed at block %u.\n" +msgstr "" + +#: src/stored/btape.c:2528 +msgid "test autochanger" msgstr "" -#: src/dird/ua_run.c:200 -msgid "Replace specified twice.\n" +#: src/stored/btape.c:2529 +msgid "backspace file" msgstr "" -#: src/dird/ua_run.c:208 -msgid "When specified twice.\n" +#: src/stored/btape.c:2530 +msgid "backspace record" msgstr "" -#: src/dird/ua_run.c:216 -msgid "Priority specified twice.\n" +#: src/stored/btape.c:2531 +msgid "fill tape using Bacula writes" msgstr "" -#: src/dird/ua_run.c:221 -msgid "Priority must be positive nonzero setting it to 10.\n" +#: src/stored/btape.c:2532 +msgid "list device capabilities" msgstr "" -#: src/dird/ua_run.c:231 -msgid "Verify Job specified twice.\n" +#: src/stored/btape.c:2533 +msgid "clear tape errors" msgstr "" -#: src/dird/ua_run.c:263 -msgid "Migration Job specified twice.\n" +#: src/stored/btape.c:2534 +msgid "go to end of Bacula data for append" msgstr "" -#: src/dird/ua_run.c:289 -#, c-format -msgid "Invalid keyword: %s\n" +#: src/stored/btape.c:2535 +msgid "go to the physical end of medium" msgstr "" -#: src/dird/ua_run.c:301 -#, c-format -msgid "Catalog \"%s\" not found\n" +#: src/stored/btape.c:2536 +msgid "fill tape, write onto second volume" msgstr "" -#: src/dird/ua_run.c:312 -#, c-format -msgid "Job \"%s\" not found\n" +#: src/stored/btape.c:2537 +msgid "read filled tape" msgstr "" -#: src/dird/ua_run.c:319 -msgid "A job name must be specified.\n" +#: src/stored/btape.c:2538 +msgid "forward space a file" msgstr "" -#: src/dird/ua_run.c:325 -#, c-format -msgid "No authorization. Job \"%s\".\n" +#: src/stored/btape.c:2539 +msgid "forward space a record" msgstr "" -#: src/dird/ua_run.c:334 -#, c-format -msgid "Storage \"%s\" not found.\n" +#: src/stored/btape.c:2541 +msgid "write a Bacula label to the tape" msgstr "" -#: src/dird/ua_run.c:344 -#, c-format -msgid "No authorization. Storage \"%s\".\n" +#: src/stored/btape.c:2542 +msgid "load a tape" msgstr "" -#: src/dird/ua_run.c:354 -#, c-format -msgid "Pool \"%s\" not found.\n" +#: src/stored/btape.c:2543 +msgid "quit btape" msgstr "" -#: src/dird/ua_run.c:364 -#, c-format -msgid "No authorization. Pool \"%s\".\n" +#: src/stored/btape.c:2544 +msgid "use write() to fill tape" msgstr "" -#: src/dird/ua_run.c:384 -#, c-format -msgid "No authorization. Client \"%s\".\n" +#: src/stored/btape.c:2545 +msgid "read and print the Bacula tape label" msgstr "" -#: src/dird/ua_run.c:393 -#, c-format -msgid "FileSet \"%s\" not found.\n" +#: src/stored/btape.c:2546 +msgid "test record handling functions" msgstr "" -#: src/dird/ua_run.c:402 -#, c-format -msgid "No authorization. FileSet \"%s\".\n" +#: src/stored/btape.c:2547 +msgid "rewind the tape" msgstr "" -#: src/dird/ua_run.c:410 -#, c-format -msgid "Verify Job \"%s\" not found.\n" +#: src/stored/btape.c:2548 +msgid "read() tape block by block to EOT and report" msgstr "" -#: src/dird/ua_run.c:420 -#, c-format -msgid "Migration Job \"%s\" not found.\n" +#: src/stored/btape.c:2549 +msgid "Bacula read block by block to EOT and report" msgstr "" -#: src/dird/ua_run.c:455 src/dird/ua_run.c:830 -msgid "Invalid time, using current time.\n" +#: src/stored/btape.c:2550 +msgid "print tape status" msgstr "" -#: src/dird/ua_run.c:475 -#, c-format -msgid "Invalid replace option: %s\n" +#: src/stored/btape.c:2551 +msgid "General test Bacula tape functions" msgstr "" -#: src/dird/ua_run.c:533 -#, c-format -msgid "" -"Run %s job\n" -"JobName: %s\n" -"FileSet: %s\n" -"Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Priority: %d\n" +#: src/stored/btape.c:2552 +msgid "write an EOF on the tape" msgstr "" -#: src/dird/ua_run.c:552 -#, c-format -msgid "" -"Run %s job\n" -"JobName: %s\n" -"FileSet: %s\n" -"Level: %s\n" -"Client: %s\n" -"Storage: %s\n" -"Pool: %s\n" -"When: %s\n" -"Priority: %d\n" +#: src/stored/btape.c:2553 +msgid "write a single Bacula block" msgstr "" -#: src/dird/ua_run.c:583 -#, c-format -msgid "" -"Run %s job\n" -"JobName: %s\n" -"FileSet: %s\n" -"Level: %s\n" -"Client: %s\n" -"Storage: %s\n" -"Pool: %s\n" -"Verify Job: %s\n" -"Verify List: %s\n" -"When: %s\n" -"Priority: %d\n" +#: src/stored/btape.c:2554 +msgid "read a single record" msgstr "" -#: src/dird/ua_run.c:612 -msgid "Please enter a JobId for restore: " +#: src/stored/btape.c:2555 +msgid "quick fill command" msgstr "" -#: src/dird/ua_run.c:621 +#: src/stored/btape.c:2576 #, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"Where: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Client: %s\n" -"Storage: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" +msgid "%s is an illegal command\n" msgstr "" -#: src/dird/ua_run.c:643 +#: src/stored/btape.c:2586 #, c-format -msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"Where: %s\n" -"Replace: %s\n" -"Client: %s\n" -"Storage: %s\n" -"JobId: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" +msgid "Interactive commands:\n" msgstr "" -#: src/dird/ua_run.c:668 +#: src/stored/btape.c:2596 #, c-format msgid "" -"Run Restore job\n" -"JobName: %s\n" -"Bootstrap: %s\n" -"Where: %s\n" -"Replace: %s\n" -"FileSet: %s\n" -"Client: %s\n" -"Storage: %s\n" -"Migration Job: %s\n" -"When: %s\n" -"Catalog: %s\n" -"Priority: %d\n" +"Copyright (C) 2000-2005 Kern Sibbald.\n" +"\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 nn\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_run.c:693 +#: src/stored/btape.c:2687 #, c-format -msgid "Unknown Job Type=%d\n" -msgstr "" - -#: src/dird/ua_run.c:697 -msgid "OK to run? (yes/mod/no): " -msgstr "" - -#: src/dird/ua_run.c:703 src/dird/ua_select.c:44 -msgid "mod" -msgstr "" - -#: src/dird/ua_run.c:706 src/dird/ua_update.c:464 -msgid "Parameters to modify:\n" +msgid "Mount second Volume on device %s and press return when ready: " msgstr "" -#: src/dird/ua_run.c:707 -msgid "Level" +#: src/stored/btape.c:2714 +#, c-format +msgid "Mount blank Volume on device %s and press return when ready: " msgstr "" -#: src/dird/ua_run.c:708 src/dird/ua_select.c:152 -#: src/wx-console/wxbrestorepanel.cpp:321 -#: src/wx-console/wxbrestorepanel.cpp:337 -#: src/wx-console/wxbrestorepanel.cpp:458 -#: src/wx-console/wxbrestorepanel.cpp:459 -#: src/wx-console/wxbrestorepanel.cpp:469 -#: src/wx-console/wxbrestorepanel.cpp:470 -#: src/wx-console/wxbrestorepanel.cpp:1133 -#: src/wx-console/wxbrestorepanel.cpp:1794 -#: src/wx-console/wxbrestorepanel.cpp:1865 -msgid "Storage" +#: src/stored/btape.c:2732 +#, c-format +msgid "End of Volume \"%s\"\n" msgstr "" -#: src/dird/ua_run.c:710 src/dird/ua_restore.c:1058 src/dird/ua_select.c:175 -msgid "FileSet" +#: src/stored/btape.c:2744 +#, c-format +msgid "Read block=%u, VolBytes=%s rate=%.1f KB/s\n" msgstr "" -#: src/dird/ua_run.c:711 src/dird/ua_select.c:282 src/dird/ua_select.c:391 -#: src/wx-console/wxbrestorepanel.cpp:318 -#: src/wx-console/wxbrestorepanel.cpp:336 -#: src/wx-console/wxbrestorepanel.cpp:410 -#: src/wx-console/wxbrestorepanel.cpp:411 -#: src/wx-console/wxbrestorepanel.cpp:421 -#: src/wx-console/wxbrestorepanel.cpp:422 -#: src/wx-console/wxbrestorepanel.cpp:669 -#: src/wx-console/wxbrestorepanel.cpp:1103 -#: src/wx-console/wxbrestorepanel.cpp:1190 -#: src/wx-console/wxbrestorepanel.cpp:1787 -#: src/wx-console/wxbrestorepanel.cpp:1789 -#: src/wx-console/wxbrestorepanel.cpp:1863 -#: src/wx-console/wxbrestorepanel.cpp:1918 -msgid "Client" +#: src/stored/btape.c:2759 src/stored/mount.c:500 +#, c-format +msgid "Cannot open Dev=%s, Vol=%s\n" msgstr "" -#: src/dird/ua_run.c:712 src/wx-console/wxbrestorepanel.cpp:338 -#: src/wx-console/wxbrestorepanel.cpp:823 -#: src/wx-console/wxbrestorepanel.cpp:1867 -msgid "When" +#: src/stored/butil.c:46 +msgid "Nohdr," msgstr "" -#: src/dird/ua_run.c:713 src/wx-console/wxbrestorepanel.cpp:339 -#: src/wx-console/wxbrestorepanel.cpp:1096 -#: src/wx-console/wxbrestorepanel.cpp:1869 -msgid "Priority" +#: src/stored/butil.c:49 +msgid "partial," msgstr "" -#: src/dird/ua_run.c:716 src/dird/ua_select.c:476 src/dird/ua_select.c:566 -#: src/dird/ua_update.c:400 src/dird/ua_update.c:475 -#: src/wx-console/wxbrestorepanel.cpp:320 -#: src/wx-console/wxbrestorepanel.cpp:506 -#: src/wx-console/wxbrestorepanel.cpp:516 -#: src/wx-console/wxbrestorepanel.cpp:1783 -msgid "Pool" +#: src/stored/butil.c:52 +msgid "empty," msgstr "" -#: src/dird/ua_run.c:718 -msgid "Verify Job" +#: src/stored/butil.c:55 +msgid "Nomatch," msgstr "" -#: src/dird/ua_run.c:721 src/wx-console/wxbrestorepanel.cpp:331 -#: src/wx-console/wxbrestorepanel.cpp:1848 -msgid "Bootstrap" +#: src/stored/butil.c:58 +msgid "cont," msgstr "" -#: src/dird/ua_run.c:722 src/wx-console/wxbrestorepanel.cpp:332 -#: src/wx-console/wxbrestorepanel.cpp:1072 -#: src/wx-console/wxbrestorepanel.cpp:1850 -msgid "Where" +#: src/stored/butil.c:130 +msgid "Volume name or names is too long. Please use a .bsr file.\n" msgstr "" -#: src/dird/ua_run.c:723 src/wx-console/wxbrestorepanel.cpp:334 -#: src/wx-console/wxbrestorepanel.cpp:1080 -#: src/wx-console/wxbrestorepanel.cpp:1854 -#: src/wx-console/wxbrestorepanel.cpp:1855 -#: src/wx-console/wxbrestorepanel.cpp:1856 -#: src/wx-console/wxbrestorepanel.cpp:1857 -#: src/wx-console/wxbrestorepanel.cpp:1858 -msgid "Replace" +#: src/stored/butil.c:150 +#, c-format +msgid "Cannot find device \"%s\" in config file %s.\n" msgstr "" -#: src/dird/ua_run.c:724 -msgid "JobId" +#: src/stored/butil.c:157 +#, c-format +msgid "Cannot init device %s\n" msgstr "" -#: src/dird/ua_run.c:726 src/dird/ua_update.c:479 -msgid "Select parameter to modify" +#: src/stored/butil.c:178 +#, c-format +msgid "Cannot open %s\n" msgstr "" -#: src/dird/ua_run.c:730 src/dird/ua_run.c:757 -msgid "Levels:\n" +#: src/stored/butil.c:261 +#, c-format +msgid "Could not find device \"%s\" in config file %s.\n" msgstr "" -#: src/dird/ua_run.c:736 src/dird/ua_run.c:763 -msgid "Select level" +#: src/stored/butil.c:266 +#, c-format +msgid "Using device: \"%s\" for reading.\n" msgstr "" -#: src/dird/ua_run.c:758 -msgid "Initialize Catalog" +#: src/stored/butil.c:269 +#, c-format +msgid "Using device: \"%s\" for writing.\n" msgstr "" -#: src/dird/ua_run.c:762 -msgid "Verify Volume Data (not yet implemented)" +#: src/stored/butil.c:285 +msgid "Unexpected End of Data\n" msgstr "" -#: src/dird/ua_run.c:784 -msgid "Level not appropriate for this Job. Cannot be changed.\n" +#: src/stored/butil.c:287 +msgid "Unexpected End of Tape\n" msgstr "" -#: src/dird/ua_run.c:822 -msgid "" -"Please enter desired start time as YYYY-MM-DD HH:MM:SS (return for now): " +#: src/stored/butil.c:289 +msgid "Unexpected End of File\n" msgstr "" -#: src/dird/ua_run.c:837 -msgid "Enter new Priority: " +#: src/stored/butil.c:291 +msgid "Tape Door is Open\n" msgstr "" -#: src/dird/ua_run.c:841 -msgid "Priority must be a positive integer.\n" +#: src/stored/butil.c:293 +msgid "Unexpected Tape is Off-line\n" msgstr "" -#: src/dird/ua_run.c:859 -msgid "Please enter the Bootstrap file name: " +#: src/stored/dev.c:112 +#, c-format +msgid "Unable to stat device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:870 +#: src/stored/dev.c:123 #, c-format -msgid "Warning cannot open %s: ERR=%s\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_run.c:889 -msgid "Please enter path prefix for restore (/ for none): " +#: src/stored/dev.c:179 +#, c-format +msgid "Unable to stat mount point %s: ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:903 -msgid "Replace:\n" +#: src/stored/dev.c:186 +msgid "" +"Mount and unmount commands must defined for a device which requires mount.\n" msgstr "" -#: src/dird/ua_run.c:907 -msgid "Select replace option" +#: src/stored/dev.c:189 +msgid "Write part command must be defined for a device which requires mount.\n" msgstr "" -#: src/dird/ua_run.c:917 -msgid "" -"You must set the bootstrap file to NULL to be able to specify a JobId.\n" +#: src/stored/dev.c:194 +#, c-format +msgid "Block size %u on device %s is too large, using default %u\n" msgstr "" -#: src/dird/ua_run.c:935 -msgid "Job failed.\n" +#: src/stored/dev.c:199 +#, c-format +msgid "Max block size %u not multiple of device %s block size.\n" msgstr "" -#: src/dird/ua_run.c:938 +#: src/stored/dev.c:215 src/stored/dev.c:221 #, c-format -msgid "Job started. JobId=%s\n" +msgid "Unable to init cond variable: ERR=%s\n" msgstr "" -#: src/dird/ua_run.c:944 -msgid "Job not run.\n" +#: src/stored/dev.c:312 +msgid "Illegal mode given to open dev.\n" msgstr "" -#: src/dird/backup.c:88 src/dird/backup.c:94 src/dird/mac.c:121 -#: src/dird/ua_output.c:618 +#: src/stored/dev.c:355 src/stored/device.c:295 #, c-format -msgid "Pool %s not in database. %s" +msgid "Unable to open device %s: ERR=%s\n" msgstr "" -#: src/dird/backup.c:92 src/dird/mac.c:125 src/dird/ua_output.c:626 +#: src/stored/dev.c:423 src/stored/dev.c:481 #, c-format -msgid "Pool %s created in database.\n" +msgid "Could not open file device %s. No Volume name given.\n" msgstr "" -#: src/dird/backup.c:106 src/dird/mac.c:134 -msgid "No Storage specification found in Job or Pool.\n" +#: src/stored/dev.c:449 src/stored/dev.c:562 +#, c-format +msgid "Could not open: %s, ERR=%s\n" msgstr "" -#: src/dird/backup.c:131 +#: src/stored/dev.c:506 #, c-format -msgid "Start Backup JobId %s, Job=%s\n" +msgid "" +"The media in the device %s is not empty, please blank it before writing " +"anything to it.\n" msgstr "" -#: src/dird/backup.c:262 +#: src/stored/dev.c:523 #, c-format -msgid "Unexpected Client Job message: %s\n" +msgid "There is no valid media in the device %s.\n" msgstr "" -#: src/dird/backup.c:270 +#: src/stored/dev.c:530 #, c-format -msgid "Network error with FD during %s: ERR=%s\n" +msgid "Could not mount device %s.\n" msgstr "" -#: src/dird/backup.c:286 -msgid "No Job status returned from FD.\n" +#: src/stored/dev.c:588 +#, c-format +msgid "Could not fstat: %s, ERR=%s\n" msgstr "" -#: src/dird/backup.c:330 src/dird/admin.c:82 src/dird/mac.c:401 +#: src/stored/dev.c:631 #, c-format -msgid "Error getting job record for stats: %s" +msgid "Bad call to rewind. Device %s not open\n" msgstr "" -#: src/dird/backup.c:337 +#: src/stored/dev.c:677 #, c-format -msgid "Error getting client record for stats: %s" +msgid "Rewind error on %s. ERR=%s.\n" msgstr "" -#: src/dird/backup.c:343 src/dird/mac.c:408 +#: src/stored/dev.c:687 src/stored/dev.c:802 src/stored/dev.c:938 +#: src/stored/dev.c:1457 #, c-format -msgid "Error getting Media record for Volume \"%s\": ERR=%s" +msgid "lseek_dev error on %s. ERR=%s.\n" msgstr "" -#: src/dird/backup.c:355 -msgid "Backup OK -- with warnings" +#: src/stored/dev.c:727 +msgid "unknown blocked code" msgstr "" -#: src/dird/backup.c:422 +#: src/stored/dev.c:772 #, c-format -msgid "" -"Bacula %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\"\n" -" Storage: \"%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" -" 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" +msgid "Bad call to eod_dev. Device %s not open\n" msgstr "" -#: src/dird/backup.c:512 +#: src/stored/dev.c:838 #, c-format -msgid "Could not get Job Volume Parameters to update Bootstrap file. ERR=%s\n" +msgid "ioctl MTEOM error on %s. ERR=%s.\n" msgstr "" -#: src/dird/backup.c:546 +#: src/stored/dev.c:846 src/stored/dev.c:978 #, c-format -msgid "" -"Could not open WriteBootstrap file:\n" -"%s: ERR=%s\n" +msgid "ioctl MTIOCGET error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:50 -#, c-format -msgid "Could not init job queue: ERR=%s\n" +#: src/stored/dev.c:924 +msgid "Bad device call. Device not open\n" msgstr "" -#: src/dird/job.c:81 +#: src/stored/dev.c:937 #, c-format -msgid "Could not add job queue: ERR=%s\n" +msgid "Seek error: ERR=%s\n" msgstr "" -#: src/dird/job.c:184 -msgid "Job canceled because max start delay time exceeded.\n" +#: src/stored/dev.c:973 +msgid " Bacula status:" msgstr "" -#: src/dird/job.c:235 src/dird/job.c:313 +#: src/stored/dev.c:974 src/stored/dev.c:1023 src/stored/dev.c:1025 #, c-format -msgid "Unimplemented job type: %d\n" +msgid " file=%d block=%d\n" msgstr "" -#: src/dird/job.c:260 -#, c-format -msgid "RunBefore: %s" +#: src/stored/dev.c:982 +msgid " Device status:" msgstr "" -#: src/dird/job.c:265 -#, c-format -msgid "RunBeforeJob error: ERR=%s\n" +#: src/stored/dev.c:1047 +msgid "Bad call to load_dev. Device not open\n" msgstr "" -#: src/dird/job.c:331 +#: src/stored/dev.c:1058 src/stored/dev.c:1071 #, c-format -msgid "RunAfter: %s" +msgid "ioctl MTLOAD error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:341 +#: src/stored/dev.c:1107 #, c-format -msgid "RunAfterJob error: ERR=%s\n" +msgid "ioctl MTOFFL error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:343 +#: src/stored/dev.c:1148 +msgid "Bad call to fsf_dev. Device not open\n" +msgstr "" + +#: src/stored/dev.c:1158 src/stored/dev.c:1279 #, c-format -msgid "RunAfterFailedJob error: ERR=%s\n" +msgid "Device %s at End of Tape.\n" msgstr "" -#: src/dird/job.c:382 +#: src/stored/dev.c:1183 src/stored/dev.c:1259 #, c-format -msgid "JobId %d, Job %s marked to be canceled.\n" +msgid "ioctl MTFSF error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:392 -msgid "Failed to connect to File daemon.\n" +#: src/stored/dev.c:1308 +msgid "Bad call to bsf_dev. Device not open\n" msgstr "" -#: src/dird/job.c:548 src/dird/job.c:596 +#: src/stored/dev.c:1314 #, c-format -msgid "Unhandled job status code %d\n" +msgid "Device %s cannot BSF because it is not a tape.\n" msgstr "" -#: src/dird/job.c:656 -msgid "FileSet MD5 digest not found.\n" +#: src/stored/dev.c:1329 +#, c-format +msgid "ioctl MTBSF error on %s. ERR=%s.\n" +msgstr "" + +#: src/stored/dev.c:1349 +msgid "Bad call to fsr. Device not open\n" msgstr "" -#: src/dird/job.c:661 +#: src/stored/dev.c:1358 #, c-format -msgid "Could not create FileSet \"%s\" record. ERR=%s\n" +msgid "ioctl MTFSR not permitted on %s.\n" msgstr "" -#: src/dird/job.c:700 +#: src/stored/dev.c:1386 #, c-format -msgid "Error updating job record. %s" +msgid "ioctl MTFSR %d error on %s. ERR=%s.\n" msgstr "" -#: src/dird/job.c:944 -msgid "Could not start clone job.\n" +#: src/stored/dev.c:1406 +msgid "Bad call to bsr_dev. Device not open\n" msgstr "" -#: src/dird/job.c:946 +#: src/stored/dev.c:1416 #, c-format -msgid "Clone JobId %d started.\n" +msgid "ioctl MTBSR not permitted on %s.\n" msgstr "" -#: src/dird/ua_input.c:82 -msgid "Enter slot" +#: src/stored/dev.c:1429 +#, c-format +msgid "ioctl MTBSR error on %s. ERR=%s.\n" msgstr "" -#: src/dird/ua_input.c:86 src/dird/ua_input.c:92 -#, c-format -msgid "Expected a positive integer, got: %s\n" +#: src/stored/dev.c:1446 +msgid "Bad call to reposition_dev. Device not open\n" msgstr "" -#: src/dird/ua_input.c:127 -msgid "Invalid response. You must answer yes or no.\n" +#: src/stored/dev.c:1514 +msgid "Bad call to weof_dev. Device not open\n" msgstr "" -#: src/dird/bsr.c:176 -#, c-format -msgid "Unable to get Job record. ERR=%s\n" +#: src/stored/dev.c:1524 +msgid "Attempt to WEOF on non-appendable Volume\n" msgstr "" -#: src/dird/bsr.c:183 +#: src/stored/dev.c:1541 #, c-format -msgid "Unable to get Job Volume Parameters. ERR=%s\n" +msgid "ioctl MTWEOF error on %s. ERR=%s.\n" msgstr "" -#: src/dird/bsr.c:224 -#, c-format -msgid "Unable to create bootstrap file %s. ERR=%s\n" +#: src/stored/dev.c:1583 +msgid "Got ENOTTY on read/write!\n" msgstr "" -#: src/dird/bsr.c:233 -msgid "Error writing bsr file.\n" +#: src/stored/dev.c:1630 +#, c-format +msgid "unknown func code %d" msgstr "" -#: src/dird/bsr.c:239 +#: src/stored/dev.c:1636 #, c-format -msgid "Bootstrap records written to %s\n" +msgid "I/O function \"%s\" not supported on this device.\n" msgstr "" -#: src/dird/bsr.c:243 -msgid "The job will require the following Volumes:\n" +#: src/stored/dev.c:1761 src/stored/dvd.c:734 +#, c-format +msgid "Unable to truncate device %s. ERR=%s\n" msgstr "" -#: src/dird/bsr.c:275 -msgid "No Volumes found to restore.\n" +#: src/stored/dev.c:1800 +msgid "Bad call to term_dev. Device not open\n" msgstr "" -#: src/dird/run_conf.c:188 +#: src/stored/device.c:100 #, c-format -msgid "Expected an equals, got: %s" +msgid "End of medium on Volume \"%s\" Bytes=%s Blocks=%s at %s.\n" msgstr "" -#: src/dird/run_conf.c:201 src/dird/run_conf.c:213 +#: src/stored/device.c:114 #, c-format -msgid "Expect a YES or NO, got: %s" +msgid "New volume \"%s\" mounted on device %s at %s.\n" msgstr "" -#: src/dird/run_conf.c:227 +#: src/stored/device.c:126 #, c-format -msgid "Job level field: %s not found in run record" +msgid "write_block_to_device Volume label failed. ERR=%s" msgstr "" -#: src/dird/run_conf.c:245 +#: src/stored/device.c:162 #, c-format -msgid "Could not find specified Pool Resource: %s" +msgid "write_block_to_device overflow block failed. ERR=%s" msgstr "" -#: src/dird/run_conf.c:270 +#: src/stored/device.c:297 #, c-format -msgid "Could not find specified Storage Resource: %s" +msgid "Unable to open archive %s: ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:282 +#: src/stored/device.c:332 #, c-format -msgid "Could not find specified Messages Resource: %s" +msgid "Device write lock failure. ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:290 +#: src/stored/device.c:340 #, c-format -msgid "Expected a keyword name, got: %s" +msgid "Device write unlock failure. ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:327 -msgid "Day number out of range (1-31)" +#: src/stored/device.c:359 +#, c-format +msgid "pthread_cond_wait failure. ERR=%s\n" msgstr "" -#: src/dird/run_conf.c:344 src/dird/run_conf.c:490 -msgid "Week number out of range (0-53)" +#: src/stored/dircmd.c:140 +msgid "Connection request failed.\n" msgstr "" -#: src/dird/run_conf.c:359 +#: src/stored/dircmd.c:149 #, c-format -msgid "Job type field: %s in run record not found" +msgid "Invalid connection. Len=%d\n" msgstr "" -#: src/dird/run_conf.c:366 +#: src/stored/dircmd.c:241 #, c-format -msgid "Unexpected token: %d:%s" -msgstr "" - -#: src/dird/run_conf.c:410 -msgid "Time must be preceded by keyword AT." +msgid "3991 Bad setdebug command: %s\n" msgstr "" -#: src/dird/run_conf.c:418 -msgid "Time logic error.\n" +#: src/stored/dircmd.c:262 +#, c-format +msgid "3904 Job %s not found.\n" msgstr "" -#: src/dird/run_conf.c:430 src/dird/run_conf.c:446 -msgid "Bad time specification." +#: src/stored/dircmd.c:283 +#, c-format +msgid "3000 Job %s marked to be canceled.\n" msgstr "" -#: src/dird/run_conf.c:459 -msgid "Range logic error.\n" +#: src/stored/dircmd.c:287 +msgid "3903 Error scanning cancel command.\n" msgstr "" -#: src/dird/run_conf.c:468 -msgid "Bad day range specification." +#: src/stored/dircmd.c:364 src/stored/dircmd.c:680 src/stored/dircmd.c:756 +#: src/stored/dircmd.c:819 src/stored/dircmd.c:874 src/stored/dircmd.c:918 +#, c-format +msgid "3999 Device \"%s\" not found or could not be opened.\n" msgstr "" -#: src/dird/run_conf.c:515 -msgid "Invalid month, week or position day range" +#: src/stored/dircmd.c:369 +#, c-format +msgid "3903 Error scanning label command: %s\n" msgstr "" -#: src/dird/run_conf.c:530 -msgid "Invalid month, weekday or position range" +#: src/stored/dircmd.c:412 +#, c-format +msgid "3920 Cannot label Volume because it is already labeled: \"%s\"\n" msgstr "" -#: src/dird/run_conf.c:589 -msgid "Unexpected run state\n" +#: src/stored/dircmd.c:419 +msgid "3921 Wrong volume mounted.\n" msgstr "" -#: src/dird/pythondir.c:137 -msgid "Pool record not found." +#: src/stored/dircmd.c:423 +msgid "3922 Cannot relabel an ANSI/IBM labeled Volume.\n" msgstr "" -#: src/dird/ua_restore.c:115 -msgid "" -"No Restore Job Resource found in bacula-dir.conf.\n" -"You must create at least one before running this command.\n" +#: src/stored/dircmd.c:431 src/stored/dircmd.c:440 +#, c-format +msgid "3912 Failed to label Volume: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:131 -msgid "Restore not done.\n" +#: src/stored/dircmd.c:443 +#, c-format +msgid "3913 Cannot label Volume. Unknown status %d from read_volume_label()\n" msgstr "" - -#: src/dird/ua_restore.c:142 -msgid "Unable to construct a valid BSR. Cannot continue.\n" + +#: src/stored/dircmd.c:476 +#, c-format +msgid "3001 Mounted Volume: %s\n" msgstr "" -#: src/dird/ua_restore.c:146 src/dird/ua_restore.c:160 -msgid "No files selected to be restored.\n" +#: src/stored/dircmd.c:480 src/stored/dircmd.c:954 +#, c-format +msgid "" +"3902 Cannot mount Volume on Storage Device %s because:\n" +"%s" msgstr "" -#: src/dird/ua_restore.c:154 +#: src/stored/dircmd.c:508 src/stored/reserve.c:634 +#, c-format msgid "" "\n" -"1 file selected to be restored.\n" -"\n" +" Device \"%s\" requested by DIR could not be opened or does not exist.\n" msgstr "" -#: src/dird/ua_restore.c:157 +#: src/stored/dircmd.c:529 src/stored/reserve.c:630 #, c-format msgid "" "\n" -"%u files selected to be restored.\n" -"\n" +" Device \"%s\" in changer \"%s\" requested by DIR could not be opened or " +"does not exist.\n" msgstr "" -#: src/dird/ua_restore.c:175 -msgid "No Restore Job resource found!\n" +#: src/stored/dircmd.c:593 src/stored/dircmd.c:646 +#, c-format +msgid "3901 open device failed: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:237 +#: src/stored/dircmd.c:613 src/stored/dircmd.c:637 #, c-format -msgid "Missing value for keyword: %s\n" +msgid "3001 Device %s is mounted with Volume \"%s\"\n" msgstr "" -#: src/dird/ua_restore.c:286 -msgid "List last 20 Jobs run" +#: src/stored/dircmd.c:616 src/stored/dircmd.c:640 src/stored/dircmd.c:655 +#, 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_restore.c:287 -msgid "List Jobs where a given File is saved" +#: src/stored/dircmd.c:625 +#, c-format +msgid "3001 Device %s is doing acquire.\n" msgstr "" -#: src/dird/ua_restore.c:288 -msgid "Enter list of comma separated JobIds to select" +#: src/stored/dircmd.c:630 src/stored/dircmd.c:730 +#, c-format +msgid "3903 Device %s is being labeled.\n" msgstr "" -#: src/dird/ua_restore.c:289 -msgid "Enter SQL list command" +#: src/stored/dircmd.c:652 +#, c-format +msgid "3001 Device %s is already mounted with Volume \"%s\"\n" msgstr "" -#: src/dird/ua_restore.c:290 -msgid "Select the most recent backup for a client" +#: src/stored/dircmd.c:661 +#, c-format +msgid "3002 Device %s is mounted.\n" msgstr "" -#: src/dird/ua_restore.c:291 -msgid "Select backup for a client before a specified time" +#: src/stored/dircmd.c:664 +#, c-format +msgid "3907 %s" msgstr "" -#: src/dird/ua_restore.c:292 -msgid "Enter a list of files to restore" +#: src/stored/dircmd.c:667 +#, c-format +msgid "3906 File device %s is always mounted.\n" msgstr "" -#: src/dird/ua_restore.c:293 -msgid "Enter a list of files to restore before a specified time" +#: src/stored/dircmd.c:673 +#, c-format +msgid "3905 Bizarre wait state %d\n" msgstr "" -#: src/dird/ua_restore.c:294 -msgid "Find the JobIds of the most recent backup for a client" +#: src/stored/dircmd.c:684 +#, c-format +msgid "3909 Error scanning mount command: %s\n" msgstr "" -#: src/dird/ua_restore.c:295 -msgid "Find the JobIds for a backup for a client before a specified time" +#: src/stored/dircmd.c:711 +#, c-format +msgid "3901 Device %s is already unmounted.\n" msgstr "" -#: src/dird/ua_restore.c:296 -msgid "Enter a list of directories to restore for found JobIds" +#: src/stored/dircmd.c:722 +#, c-format +msgid "3001 Device %s unmounted.\n" msgstr "" -#: src/dird/ua_restore.c:333 +#: src/stored/dircmd.c:726 #, c-format -msgid "Unknown keyword: %s\n" +msgid "3902 Device %s is busy in acquire.\n" msgstr "" -#: src/dird/ua_restore.c:357 +#: src/stored/dircmd.c:749 #, c-format -msgid "Improper date format: %s\n" +msgid "3002 Device %s unmounted.\n" msgstr "" -#: src/dird/ua_restore.c:397 src/dird/ua_select.c:590 +#: src/stored/dircmd.c:761 #, c-format -msgid "Error: Pool resource \"%s\" does not exist.\n" +msgid "3907 Error scanning unmount command: %s\n" msgstr "" -#: src/dird/ua_restore.c:402 +#: src/stored/dircmd.c:789 #, c-format -msgid "Error: Pool resource \"%s\" access not allowed.\n" +msgid "3921 Device %s already released.\n" msgstr "" -#: src/dird/ua_restore.c:421 -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/dircmd.c:796 +#, c-format +msgid "3922 Device %s waiting for mount.\n" msgstr "" -#: src/dird/ua_restore.c:433 -msgid "To select the JobIds, you have the following choices:\n" +#: src/stored/dircmd.c:800 +#, c-format +msgid "3923 Device %s is busy in acquire.\n" msgstr "" -#: src/dird/ua_restore.c:438 -msgid "Select item: " +#: src/stored/dircmd.c:804 +#, c-format +msgid "3914 Device %s is being labeled.\n" msgstr "" -#: src/dird/ua_restore.c:452 -msgid "Enter Filename (no path):" +#: src/stored/dircmd.c:812 +#, c-format +msgid "3022 Device %s released.\n" msgstr "" -#: src/dird/ua_restore.c:467 src/dird/ua_restore.c:567 -msgid "Enter JobId(s), comma separated, to restore: " +#: src/stored/dircmd.c:824 +#, c-format +msgid "3927 Error scanning release command: %s\n" msgstr "" -#: src/dird/ua_restore.c:473 -msgid "Enter SQL list command: " +#: src/stored/dircmd.c:860 +#, c-format +msgid "3995 Device %s is not an autochanger.\n" msgstr "" -#: src/dird/ua_restore.c:501 src/dird/ua_restore.c:526 -msgid "" -"Enter file names with paths, or < to enter a filename\n" -"containg a list of file names with paths, and terminate\n" -"them with a blank line.\n" +#: src/stored/dircmd.c:878 +#, c-format +msgid "3908 Error scanning autocharger drives/list/slots command: %s\n" msgstr "" -#: src/dird/ua_restore.c:505 src/dird/ua_restore.c:530 -msgid "Enter full filename: " +#: src/stored/dircmd.c:922 +#, c-format +msgid "3909 Error scanning readlabel command: %s\n" msgstr "" -#: src/dird/ua_restore.c:565 +#: src/stored/dircmd.c:950 #, c-format -msgid "You have already seleted the following JobIds: %s\n" +msgid "3001 Volume=%s Slot=%d\n" msgstr "" -#: src/dird/ua_restore.c:580 -msgid "" -"Enter full directory names or start the name\n" -"with a < to indicate it is a filename containg a list\n" -"of directories and terminate them with a blank line.\n" +#: src/stored/dircmd.c:979 +#, c-format +msgid "3910 Unable to open device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:584 -msgid "Enter directory name: " +#: src/stored/dircmd.c:991 +#, c-format +msgid "3931 Device %s is BLOCKED. user unmounted.\n" msgstr "" -#: src/dird/ua_restore.c:609 -msgid "No Jobs selected.\n" +#: src/stored/dircmd.c:995 +#, c-format +msgid "" +"3932 Device %s is BLOCKED. user unmounted during wait for media/mount.\n" msgstr "" -#: src/dird/ua_restore.c:613 +#: src/stored/dircmd.c:999 #, c-format -msgid "You have selected the following JobIds: %s\n" +msgid "3933 Device %s is BLOCKED waiting for media.\n" msgstr "" -#: src/dird/ua_restore.c:616 +#: src/stored/dircmd.c:1003 #, c-format -msgid "You have selected the following JobId: %s\n" +msgid "3934 Device %s is being initialized.\n" msgstr "" -#: src/dird/ua_restore.c:624 -msgid "Invalid JobId in list.\n" +#: src/stored/dircmd.c:1007 +#, c-format +msgid "3935 Device %s is blocked labeling a Volume.\n" msgstr "" -#: src/dird/ua_restore.c:637 +#: src/stored/dircmd.c:1011 #, c-format -msgid "Unable to get Job record for JobId=%s: ERR=%s\n" +msgid "3935 Device %s is blocked for unknown reason.\n" msgstr "" -#: src/dird/ua_restore.c:642 +#: src/stored/dircmd.c:1016 #, c-format -msgid "No authorization. Job \"%s\" not selected.\n" +msgid "3936 Device %s is busy reading.\n" msgstr "" -#: src/dird/ua_restore.c:656 -msgid "" -"The restored files will the most current backup\n" -"BEFORE the date you specify below.\n" -"\n" +#: src/stored/dircmd.c:1019 +#, c-format +msgid "3937 Device %s is busy with %d writer(s).\n" msgstr "" -#: src/dird/ua_restore.c:659 -msgid "Enter date as YYYY-MM-DD HH:MM:SS :" +#: src/stored/dvd.c:153 +#, c-format +msgid "Device %s cannot be mounted. ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:665 -msgid "Improper date format.\n" +#: src/stored/dvd.c:271 +#, c-format +msgid "Cannot run free space command (%s)\n" msgstr "" -#: src/dird/ua_restore.c:686 +#: src/stored/dvd.c:374 #, c-format -msgid "Cannot open file %s: ERR=%s\n" +msgid "Error while writing current part to the DVD: %s" msgstr "" -#: src/dird/ua_restore.c:694 src/dird/ua_restore.c:698 +#: src/stored/dvd.c:394 #, c-format -msgid "Error occurred on line %d of %s\n" +msgid "Remaining free space %s on %s\n" msgstr "" -#: src/dird/ua_restore.c:740 src/dird/ua_restore.c:778 -#: src/dird/ua_restore.c:809 src/dird/ua_dotcmds.c:231 +#: src/stored/dvd.c:464 #, c-format -msgid "Query failed: %s. ERR=%s\n" +msgid "Next Volume part already exists on DVD. Cannot continue: %s\n" msgstr "" -#: src/dird/ua_restore.c:744 src/dird/ua_restore.c:782 +#: src/stored/dvd.c:481 #, c-format -msgid "No database record found for: %s\n" +msgid "open_next_part can't unlink existing part %s, ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:769 -msgid "No JobId specified cannot continue.\n" +#: src/stored/dvd.c:700 +#, c-format +msgid "Unable to write part %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:813 +#: src/stored/fd_cmds.c:340 +msgid "Error parsing bootstrap file.\n" +msgstr "" + +#: src/stored/job.c:79 #, c-format -msgid "No table found: %s\n" +msgid "Bad Job Command from Director: %s\n" msgstr "" -#: src/dird/ua_restore.c:918 +#: src/stored/job.c:189 #, c-format -msgid "" -"\n" -"Building directory tree for JobId %s ... " +msgid "Job name not found: %s\n" msgstr "" -#: src/dird/ua_restore.c:937 -msgid "" -"\n" -"There were no files inserted into the tree, so file selection\n" -"is not possible.Most likely your retention policy pruned the files\n" +#: src/stored/job.c:200 +#, c-format +msgid "Hey!!!! JobId %u Job %s already authenticated.\n" msgstr "" -#: src/dird/ua_restore.c:939 -msgid "" -"\n" -"Do you want to restore all the files? (yes|no): " +#: src/stored/job.c:211 +msgid "Unable to authenticate File daemon\n" msgstr "" -#: src/dird/ua_restore.c:955 -#, c-format -msgid "" -"\n" -"1 Job, %s files inserted into the tree and marked for extraction.\n" +#: src/stored/job.c:338 +msgid "In free_jcr(), but still attached to device!!!!\n" msgstr "" -#: src/dird/ua_restore.c:959 +#: src/stored/label.c:74 +msgid "BAD call to read_dev_volume_label\n" +msgstr "" + +#: src/stored/label.c:79 src/stored/label.c:120 src/stored/label.c:208 #, c-format -msgid "" -"\n" -"1 Job, %s files inserted into the tree.\n" +msgid "Wrong Volume mounted on device %s: Wanted %s have %s\n" msgstr "" -#: src/dird/ua_restore.c:965 +#: src/stored/label.c:86 src/stored/label.c:123 src/stored/label.c:195 #, c-format -msgid "" -"\n" -"%d Jobs, %s files inserted into the tree and marked for extraction.\n" +msgid "Too many tries: %s" msgstr "" -#: src/dird/ua_restore.c:969 +#: src/stored/label.c:102 #, c-format -msgid "" -"\n" -"%d Jobs, %s files inserted into the tree.\n" +msgid "Couldn't rewind device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1046 +#: src/stored/label.c:140 #, c-format -msgid "Error getting FileSet \"%s\": ERR=%s\n" +msgid "" +"Requested Volume \"%s\" on %s is not a Bacula labeled Volume, because: ERR=%s" msgstr "" -#: src/dird/ua_restore.c:1054 src/dird/ua_select.c:167 -msgid "The defined FileSet resources are:\n" +#: src/stored/label.c:145 +msgid "Could not read Volume label from block.\n" msgstr "" -#: src/dird/ua_restore.c:1058 src/dird/ua_select.c:175 -msgid "Select FileSet resource" +#: src/stored/label.c:148 +#, c-format +msgid "Could not unserialize Volume label: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1065 +#: src/stored/label.c:153 #, c-format -msgid "Error getting FileSet record: %s\n" +msgid "Volume Header Id bad: %s\n" msgstr "" -#: src/dird/ua_restore.c:1066 -msgid "" -"This probably means you modified the FileSet.\n" -"Continuing anyway.\n" +#: src/stored/label.c:180 +#, c-format +msgid "Volume on %s has wrong Bacula version. Wanted %d got %d\n" msgstr "" -#: src/dird/ua_restore.c:1081 +#: src/stored/label.c:191 #, c-format -msgid "Pool \"%s\" not found, using any pool.\n" +msgid "Volume on %s has bad Bacula label type: %x\n" msgstr "" -#: src/dird/ua_restore.c:1107 src/dird/ua_restore.c:1123 +#: src/stored/label.c:272 #, c-format -msgid "No Full backup before %s found.\n" +msgid "Cannot write Volume label to block for device %s\n" msgstr "" -#: src/dird/ua_restore.c:1146 -msgid "No jobs found.\n" +#: src/stored/label.c:400 +#, c-format +msgid "Rewind error on device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1312 -msgid "" -"Warning, the JobIds that you selected refer to more than one MediaType.\n" -"Restore is not possible. The MediaTypes used are:\n" +#: src/stored/label.c:405 +#, c-format +msgid "Truncate error on device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1320 -msgid "No MediaType found for your JobIds.\n" +#: src/stored/label.c:427 +#, c-format +msgid "Unable to write device %s: ERR=%s\n" msgstr "" -#: src/dird/ua_restore.c:1352 +#: src/stored/label.c:455 #, c-format -msgid "Warning default storage overridden by %s on command line.\n" +msgid "Recycled volume \"%s\" on device %s, all previous data lost.\n" msgstr "" -#: src/dird/ua_restore.c:1363 +#: src/stored/label.c:458 #, c-format -msgid "" -"\n" -"Warning. Unable to find Storage resource for\n" -"MediaType \"%s\", needed by the Jobs you selected.\n" -"You will be allowed to select a Storage device later.\n" +msgid "Wrote label to prelabeled Volume \"%s\" on device %s\n" msgstr "" -#: src/dird/jobq.c:67 +#: src/stored/label.c:657 #, c-format -msgid "pthread_attr_init: ERR=%s\n" +msgid "Bad session label = %d\n" msgstr "" -#: src/dird/jobq.c:76 +#: src/stored/label.c:675 src/stored/label.c:682 #, c-format -msgid "pthread_mutex_init: ERR=%s\n" +msgid "Error writing Session label to %s: %s\n" msgstr "" -#: src/dird/jobq.c:82 +#: src/stored/label.c:717 #, c-format -msgid "pthread_cond_init: ERR=%s\n" +msgid "Expecting Volume Label, got FI=%s Stream=%s len=%d\n" msgstr "" -#: src/dird/jobq.c:115 src/dird/jobq.c:242 src/dird/jobq.c:307 -#: src/dird/jobq.c:388 +#: src/stored/label.c:844 #, c-format -msgid "pthread_mutex_lock: ERR=%s\n" +msgid "Unknown %d" msgstr "" -#: src/dird/jobq.c:128 +#: src/stored/label.c:848 #, c-format -msgid "pthread_cond_broadcast: 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/jobq.c:136 +#: src/stored/label.c:870 #, c-format -msgid "pthread_cond_wait: ERR=%s\n" +msgid "Date label written: %s\n" msgstr "" -#: src/dird/jobq.c:144 +#: src/stored/label.c:876 #, c-format -msgid "pthread_mutex_unlock: ERR=%s\n" +msgid "Date label written: %04d-%02d-%02d at %02d:%02d\n" msgstr "" -#: src/dird/jobq.c:180 +#: src/stored/label.c:896 #, c-format -msgid "Job %s waiting %d seconds for scheduled start time.\n" +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/jobq.c:235 +#: src/stored/label.c:909 #, c-format -msgid "pthread_thread_create: ERR=%s\n" +msgid "" +"Job (unique name) : %s\n" +"FileSet : %s\n" +"JobType : %c\n" +"JobLevel : %c\n" msgstr "" -#: src/dird/jobq.c:353 +#: src/stored/label.c:918 #, c-format -msgid "pthread_cond_signal: ERR=%s\n" +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/jobq.c:362 +#: src/stored/label.c:939 #, c-format -msgid "pthread_create: ERR=%s\n" +msgid "Date written : %s\n" msgstr "" -#: src/dird/jobq.c:487 +#: src/stored/label.c:944 #, c-format -msgid "Rescheduled Job %s at %s to re-run in %d seconds.\n" +msgid "Date written : %04d-%02d-%02d at %02d:%02d\n" msgstr "" -#: src/dird/ua_prune.c:173 -msgid "Choose item to prune" +#: src/stored/label.c:963 +msgid "Fresh Volume" msgstr "" -#: src/dird/ua_prune.c:254 -msgid "No Files found to prune.\n" +#: src/stored/label.c:966 +msgid "Volume" msgstr "" -#: src/dird/ua_prune.c:286 -#, c-format -msgid "Pruned Files from %s Jobs for client %s from catalog.\n" +#: src/stored/label.c:975 src/stored/read_record.c:336 +msgid "End of Media" msgstr "" -#: src/dird/ua_prune.c:392 -msgid "No Jobs found to prune.\n" +#: src/stored/label.c:978 +msgid "End of Tape" msgstr "" -#: src/dird/ua_prune.c:453 +#: src/stored/label.c:998 src/stored/label.c:1006 src/stored/label.c:1039 #, c-format -msgid "Pruned %d %s for client %s from catalog.\n" +msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d DataLen=%d\n" msgstr "" -#: src/dird/ua_prune.c:454 -msgid "Jobs" +#: src/stored/label.c:1003 +msgid "End of physical tape.\n" msgstr "" -#: src/dird/ua_prune.c:501 +#: src/stored/label.c:1018 src/stored/label.c:1027 #, c-format -msgid "There are no Jobs associated with Volume \"%s\". Prune not needed.\n" +msgid "%s Record: File:blk=%u:%u SessId=%d SessTime=%d JobId=%d\n" msgstr "" -#: src/dird/ua_prune.c:508 src/dird/ua_purge.c:485 +#: src/stored/label.c:1020 #, c-format -msgid "There are no Jobs associated with Volume \"%s\". Marking it purged.\n" +msgid " Job=%s Date=%s Level=%c Type=%c\n" msgstr "" -#: src/dird/ua_prune.c:566 +#: src/stored/label.c:1029 #, c-format -msgid "Pruned %d %s on Volume \"%s\" from catalog.\n" +msgid " Date=%s Level=%c Type=%c Files=%s Bytes=%s Errors=%d Status=%c\n" msgstr "" -#: src/dird/next_vol.c:130 +#: src/stored/mount.c:198 src/stored/mount.c:295 #, c-format -msgid "Purging oldest volume \"%s\"\n" +msgid "Volume \"%s\" not on device %s.\n" msgstr "" -#: src/dird/next_vol.c:136 +#: src/stored/mount.c:231 #, c-format -msgid "Pruning oldest volume \"%s\"\n" -msgstr "" - -#: src/dird/next_vol.c:155 -msgid "We seem to be looping trying to find the next volume. I give up.\n" +msgid "" +"Director wanted Volume \"%s\".\n" +" Current Volume \"%s\" not acceptable because:\n" +" %s" msgstr "" -#: src/dird/next_vol.c:180 +#: src/stored/mount.c:285 #, c-format -msgid "Max Volume bytes exceeded. Marking Volume \"%s\" as Full.\n" +msgid "Labeled new Volume \"%s\" on device %s.\n" msgstr "" -#: src/dird/next_vol.c:187 +#: src/stored/mount.c:290 #, c-format -msgid "Volume used once. Marking Volume \"%s\" as Used.\n" +msgid "Warning device %s not configured to autolabel Volumes.\n" msgstr "" -#: src/dird/next_vol.c:194 +#: src/stored/mount.c:342 #, c-format -msgid "Max Volume jobs exceeded. Marking Volume \"%s\" as Used.\n" +msgid "Volume \"%s\" previously written, moving to end of data.\n" msgstr "" -#: src/dird/next_vol.c:201 +#: src/stored/mount.c:345 #, c-format -msgid "Max Volume files exceeded. Marking Volume \"%s\" as Used.\n" +msgid "Unable to position to end of data on device %s: ERR=%s\n" msgstr "" -#: src/dird/next_vol.c:211 +#: src/stored/mount.c:357 #, c-format -msgid "Max configured use duration exceeded. Marking Volume \"%s\" as Used.\n" +msgid "Ready to append to end of Volume \"%s\" at file=%d.\n" msgstr "" -#: src/dird/next_vol.c:221 +#: src/stored/mount.c:360 #, c-format -msgid "Catalog error updating volume \"%s\". ERR=%s" +msgid "" +"I cannot write on Volume \"%s\" because:\n" +"The number of files mismatch! Volume=%u Catalog=%u\n" msgstr "" -#: src/dird/next_vol.c:242 -msgid "volume has expired" +#: src/stored/mount.c:388 +#, c-format +msgid "Ready to append to end of Volume \"%s\" at file address=%u.\n" msgstr "" -#: src/dird/next_vol.c:260 src/dird/next_vol.c:296 +#: src/stored/mount.c:392 #, c-format -msgid "Recycled current volume \"%s\"\n" +msgid "" +"I cannot write on Volume \"%s\" because:\n" +"The EOD file address is wrong: Volume file address=%u != Catalog Endblock=%u" +"(+1)\n" +"You probably removed DVD last part in spool directory.\n" msgstr "" -#: src/dird/next_vol.c:265 -msgid "and recycling of current volume failed" +#: src/stored/mount.c:418 +#, c-format +msgid "Marking Volume \"%s\" in Error in Catalog.\n" msgstr "" -#: src/dird/next_vol.c:271 -msgid "but should be Append, Purged or Recycle" +#: src/stored/mount.c:434 +#, c-format +msgid "" +"Autochanger Volume \"%s\" not found in slot %d.\n" +" Setting InChanger to zero in catalog.\n" msgstr "" -#: src/dird/next_vol.c:299 -msgid "" -"but should be Append, Purged or Recycle (recycling of the current volume " -"failed)" +#: src/stored/mount.c:453 +msgid "Hey!!!!! WroteVol non-zero !!!!!\n" msgstr "" -#: src/dird/next_vol.c:303 +#: src/stored/parse_bsr.c:104 src/stored/parse_bsr.c:108 +#, c-format msgid "" -"but should be Append, Purged or Recycle (cannot automatically recycle " -"current volume, as it still contains unpruned data)" +"Bootstrap file error: %s\n" +" : Line %d, col %d of file %s\n" +"%s\n" msgstr "" -#: src/dird/next_vol.c:343 +#: src/stored/parse_bsr.c:130 #, c-format -msgid "Unable to get Pool record: ERR=%s" +msgid "Cannot open bootstrap file %s: %s\n" msgstr "" -#: src/dird/next_vol.c:348 +#: src/stored/parse_bsr.c:260 #, c-format -msgid "Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n" +msgid "MediaType %s in bsr at inappropriate place.\n" msgstr "" -#: src/dird/next_vol.c:361 -#, c-format -msgid "Failed to move Scratch Volume. ERR=%s\n" +#: src/stored/parse_bsr.c:416 +msgid "JobType not yet implemented\n" msgstr "" -#: src/dird/next_vol.c:365 -#, c-format -msgid "Using Volume \"%s\" from 'Scratch' pool.\n" +#: src/stored/parse_bsr.c:424 +msgid "JobLevel not yet implemented\n" msgstr "" -#: src/dird/next_vol.c:373 +#: src/stored/parse_bsr.c:626 #, c-format -msgid "Unable to update Volume record: ERR=%s" +msgid "VolFile : %u-%u\n" msgstr "" -#: src/dird/recycle.c:99 +#: src/stored/parse_bsr.c:634 #, c-format -msgid "Recycled volume \"%s\"\n" +msgid "VolBlock : %u-%u\n" msgstr "" -#: src/dird/expand.c:240 +#: src/stored/parse_bsr.c:644 #, c-format -msgid "Count not update counter %s: ERR=%s\n" +msgid "FileIndex : %u\n" msgstr "" -#: src/dird/expand.c:412 +#: src/stored/parse_bsr.c:646 #, c-format -msgid "Cannot create var context: ERR=%s\n" +msgid "FileIndex : %u-%u\n" msgstr "" -#: src/dird/expand.c:417 +#: src/stored/parse_bsr.c:656 #, c-format -msgid "Cannot set var callback: ERR=%s\n" +msgid "JobId : %u\n" msgstr "" -#: src/dird/expand.c:423 +#: src/stored/parse_bsr.c:658 #, c-format -msgid "Cannot set var operate: ERR=%s\n" +msgid "JobId : %u-%u\n" msgstr "" -#: src/dird/expand.c:429 src/dird/expand.c:444 +#: src/stored/parse_bsr.c:668 #, c-format -msgid "Cannot unescape string: ERR=%s\n" +msgid "SessId : %u\n" msgstr "" -#: src/dird/expand.c:437 +#: src/stored/parse_bsr.c:670 #, c-format -msgid "Cannot expand expression \"%s\": ERR=%s\n" +msgid "SessId : %u-%u\n" msgstr "" -#: src/dird/expand.c:455 +#: src/stored/parse_bsr.c:679 #, c-format -msgid "Cannot destroy var context: ERR=%s\n" +msgid "VolumeName : %s\n" msgstr "" -#: src/dird/dird.c:71 -#, c-format -msgid "" -"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 set configuration file to file\n" -" -dnn set debug level to nn\n" -" -f run in foreground (for debugging)\n" -" -g groupid\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/stored/parse_bsr.c:688 +#, c-format +msgid "Client : %s\n" msgstr "" -#: src/dird/dird.c:396 -msgid "Too many open reload requests. Request ignored.\n" +#: src/stored/parse_bsr.c:696 +#, c-format +msgid "Job : %s\n" msgstr "" -#: src/dird/dird.c:411 -msgid "Out of reload table entries. Giving up.\n" +#: src/stored/parse_bsr.c:704 +#, c-format +msgid "SessTime : %u\n" msgstr "" -#: src/dird/dird.c:414 -msgid "Resetting previous configuration.\n" +#: src/stored/parse_bsr.c:718 +msgid "BSR is NULL\n" msgstr "" -#: src/dird/dird.c:586 src/dird/dird.c:599 +#: src/stored/parse_bsr.c:722 #, c-format -msgid "Hey something is wrong. p=0x%lu\n" +msgid "Next : 0x%x\n" msgstr "" -#: src/dird/dird.c:658 +#: src/stored/parse_bsr.c:723 #, c-format -msgid "\"%s\" directive in Job \"%s\" resource is required, but not found.\n" +msgid "Root bsr : 0x%x\n" msgstr "" -#: src/dird/dird.c:665 -msgid "Too many items in Job resource\n" +#: src/stored/parse_bsr.c:734 +#, c-format +msgid "Slot : %u\n" msgstr "" -#: src/dird/dird.c:686 +#: src/stored/parse_bsr.c:737 #, c-format -msgid "%s" +msgid "count : %u\n" msgstr "" -#: src/dird/dird.c:728 +#: src/stored/parse_bsr.c:738 #, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Storage \"%s\" in %s.\n" +msgid "found : %u\n" msgstr "" -#: src/dird/dird.c:795 +#: src/stored/parse_bsr.c:741 #, c-format -msgid "\"TLS Certificate\" file not defined for Console \"%s\" in %s.\n" +msgid "done : %s\n" msgstr "" -#: src/dird/dird.c:801 +#: src/stored/parse_bsr.c:742 #, c-format -msgid "\"TLS Key\" file not defined for Console \"%s\" in %s.\n" +msgid "positioning : %d\n" msgstr "" -#: src/dird/dird.c:807 +#: src/stored/parse_bsr.c:743 #, 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 "fast_reject : %d\n" msgstr "" -#: src/dird/dird.c:847 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"File daemon \"%s\" in %s.\n" +#: src/stored/pythonsd.c:202 +msgid "Error in ParseTuple\n" msgstr "" -#: src/dird/ua_label.c:89 -msgid "Negative numbers not permitted\n" +#: src/stored/pythonsd.c:218 +msgid "Parse tuple error in job_write\n" msgstr "" -#: src/dird/ua_label.c:95 -msgid "Range end is not integer.\n" +#: src/stored/pythonsd.c:254 +#, c-format +msgid "Error in Python method %s\n" msgstr "" -#: src/dird/ua_label.c:100 -msgid "Range start is not an integer.\n" +#: src/stored/read.c:55 +msgid "No Volume names found for restore.\n" msgstr "" -#: src/dird/ua_label.c:106 -msgid "Range end not bigger than start.\n" +#: src/stored/read.c:109 +#, c-format +msgid ">filed: Error Hdr=%s\n" msgstr "" -#: src/dird/ua_label.c:112 -msgid "Input value is not an integer.\n" +#: src/stored/read.c:110 src/stored/read.c:125 +#, c-format +msgid "Error sending to File daemon. ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:118 -msgid "Values must be be greater than zero.\n" +#: src/stored/read.c:124 +#, c-format +msgid "Error sending to FD. ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:122 -msgid "Slot too large.\n" +#: src/stored/read_record.c:68 +#, c-format +msgid "End of Volume at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/dird/ua_label.c:176 src/dird/ua_label.c:473 -msgid "No slots in changer to scan.\n" +#: src/stored/read_record.c:71 +msgid "End of all volumes.\n" msgstr "" -#: src/dird/ua_label.c:188 src/dird/ua_label.c:484 -msgid "No Volumes found to label, or no barcodes.\n" +#: src/stored/read_record.c:105 +#, c-format +msgid "Got EOF at file %u on device %s, Volume \"%s\"\n" msgstr "" -#: src/dird/ua_label.c:198 +#: src/stored/read_record.c:119 +msgid "Did fsr\n" +msgstr "" + +#: src/stored/read_record.c:276 #, c-format -msgid "Slot %d greater than max %d ignored.\n" +msgid "Reposition from (file:block) %u:%u to %u:%u\n" msgstr "" -#: src/dird/ua_label.c:227 +#: src/stored/read_record.c:303 #, c-format -msgid "No VolName for Slot=%d InChanger set to zero.\n" +msgid "Forward spacing to file:block %u:%u.\n" msgstr "" -#: src/dird/ua_label.c:242 +#: src/stored/read_record.c:329 +msgid "Begin Session" +msgstr "" + +#: src/stored/read_record.c:333 +msgid "End Session" +msgstr "" + +#: src/stored/read_record.c:339 #, c-format -msgid "Catalog record for Volume \"%s\" updated to reference slot %d.\n" +msgid "Unknown code %d\n" msgstr "" -#: src/dird/ua_label.c:246 +#: src/stored/record.c:60 #, c-format -msgid "Catalog record for Volume \"%s\" is up to date.\n" +msgid "unknown: %d" msgstr "" -#: src/dird/ua_label.c:252 +#: src/stored/record.c:343 +msgid "Damaged buffer\n" +msgstr "" + +#: src/stored/reserve.c:467 src/stored/reserve.c:479 #, c-format -msgid "Volume \"%s\" not found in catalog. Slot=%d InChanger set to zero.\n" +msgid "Failed command: %s\n" msgstr "" -#: src/dird/ua_label.c:344 +#: src/stored/reserve.c:469 #, c-format msgid "" -"Volume \"%s\" has VolStatus %s. It must be Purged or Recycled before " -"relabeling.\n" +"\n" +" Device \"%s\" with MediaType \"%s\" requested by DIR not found in SD " +"Device resources.\n" msgstr "" -#: src/dird/ua_label.c:360 -msgid "Enter new Volume name: " +#: src/stored/reserve.c:647 +#, c-format +msgid "3926 Could not get dcr for device: %s\n" msgstr "" -#: src/dird/ua_label.c:373 +#: src/stored/reserve.c:709 #, c-format -msgid "Media record for new Volume \"%s\" already exists.\n" +msgid "3601 JobId=%u device %s is BLOCKED due to user unmount.\n" msgstr "" -#: src/dird/ua_label.c:388 -msgid "Enter slot (0 or Enter for none): " +#: src/stored/reserve.c:718 +#, c-format +msgid "3602 JobId=%u device %s is busy (already reading/writing).\n" msgstr "" -#: src/dird/ua_label.c:413 +#: src/stored/reserve.c:761 #, c-format -msgid "Delete of Volume \"%s\" failed. ERR=%s" +msgid "3603 JobId=%u device %s is busy reading.\n" msgstr "" -#: src/dird/ua_label.c:416 +#: src/stored/reserve.c:770 #, c-format -msgid "Old volume \"%s\" deleted from catalog.\n" +msgid "3604 JobId=%u device %s is BLOCKED due to user unmount.\n" msgstr "" -#: src/dird/ua_label.c:427 +#: src/stored/reserve.c:836 #, c-format -msgid "Requesting to mount %s ...\n" +msgid "3605 JobId=%u wants free drive but device %s is busy.\n" msgstr "" -#: src/dird/ua_label.c:449 -msgid "Do not forget to mount the drive!!!\n" +#: src/stored/reserve.c:844 +#, c-format +msgid "3606 JobId=%u wants mounted, but drive %s has no Volume.\n" msgstr "" -#: src/dird/ua_label.c:489 -msgid "" -"The following Volumes will be labeled:\n" -"Slot Volume\n" -"==============\n" +#: src/stored/reserve.c:854 +#, c-format +msgid "3607 JobId=%u wants Vol=\"%s\" drive has Vol=\"%s\" on drive %s.\n" msgstr "" -#: src/dird/ua_label.c:519 +#: src/stored/reserve.c:890 #, c-format -msgid "Media record for Slot %d Volume \"%s\" already exists.\n" +msgid "3608 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" on drive %s.\n" msgstr "" -#: src/dird/ua_label.c:525 +#: src/stored/reserve.c:933 #, c-format -msgid "Error setting InChanger: ERR=%s" +msgid "3609 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" on drive %s.\n" msgstr "" -#: src/dird/ua_label.c:548 -#, c-format -msgid "Maximum pool Volumes=%d reached.\n" +#: src/stored/reserve.c:941 src/stored/reserve.c:945 +msgid "Logic error!!!! Should not get here.\n" msgstr "" -#: src/dird/ua_label.c:555 +#: src/stored/reserve.c:942 #, c-format -msgid "Catalog record for cleaning tape \"%s\" successfully created.\n" +msgid "3910 JobId=%u Logic error!!!! drive %s Should not get here.\n" msgstr "" -#: src/dird/ua_label.c:562 +#: src/stored/reserve.c:948 #, c-format -msgid "Catalog error on cleaning tape: %s" +msgid "3911 JobId=%u failed reserve drive %s.\n" msgstr "" -#: src/dird/ua_label.c:598 +#: src/stored/spool.c:69 #, c-format -msgid "Illegal character \"%c\" in a volume name.\n" +msgid "" +"Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n" msgstr "" -#: src/dird/ua_label.c:643 +#: src/stored/spool.c:75 #, c-format -msgid "Sending relabel command from \"%s\" to \"%s\" ...\n" +msgid "Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n" msgstr "" -#: src/dird/ua_label.c:650 -#, c-format -msgid "Sending label command for Volume \"%s\" Slot %d ...\n" +#: src/stored/spool.c:91 +msgid "Spooling data ...\n" msgstr "" -#: src/dird/ua_label.c:682 +#: src/stored/spool.c:117 #, c-format -msgid "Catalog record for Volume \"%s\", Slot %d successfully created.\n" +msgid "Bad return from despool WroteVol=%d\n" msgstr "" -#: src/dird/ua_label.c:695 +#: src/stored/spool.c:150 #, c-format -msgid "Label command failed for Volume %s.\n" +msgid "Open data spool file %s failed: ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:705 +#: src/stored/spool.c:199 #, c-format -msgid "Connecting to Storage daemon %s at %s:%d ...\n" +msgid "Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n" msgstr "" -#: src/dird/ua_label.c:733 -msgid "Could not open SD socket.\n" +#: src/stored/spool.c:204 +#, c-format +msgid "Writing spooled data to Volume. Despooling %s bytes ...\n" msgstr "" -#: src/dird/ua_label.c:739 +#: src/stored/spool.c:258 src/stored/spool.c:432 src/stored/spool.c:470 #, c-format -msgid "readlabel %s Slot=%d drive=%d\n" +msgid "Ftruncate spool file failed: ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:781 +#: src/stored/spool.c:260 #, c-format -msgid "autochanger list %s \n" +msgid "Bad return from ftruncate. ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:805 src/dird/ua_label.c:815 +#: src/stored/spool.c:309 #, c-format -msgid "Invalid Slot number: %s\n" +msgid "Spool header read error. ERR=%s\n" msgstr "" -#: src/dird/ua_label.c:824 +#: src/stored/spool.c:312 #, c-format -msgid "Invalid Volume name: %s\n" +msgid "Spool read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/ua_label.c:893 +#: src/stored/spool.c:313 #, c-format -msgid "autochanger slots %s\n" +msgid "Spool header read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/ua_label.c:903 +#: src/stored/spool.c:319 src/stored/spool.c:320 #, c-format -msgid "Device \"%s\" has %d slots.\n" +msgid "Spool block too big. Max %u bytes, got %u\n" msgstr "" -#: src/dird/ua_label.c:925 +#: src/stored/spool.c:325 src/stored/spool.c:326 #, c-format -msgid "autochanger drives %s\n" +msgid "Spool data read error. Wanted %u bytes, got %d\n" msgstr "" -#: src/dird/ua_label.c:952 +#: src/stored/spool.c:383 +msgid "User specified spool size reached.\n" +msgstr "" + +#: src/stored/spool.c:385 +msgid "Bad return from despool in write_block.\n" +msgstr "" + +#: src/stored/spool.c:393 +msgid "Spooling data again ...\n" +msgstr "" + +#: src/stored/spool.c:424 #, c-format -msgid "Pool \"%s\" resource not found!\n" +msgid "Error writing header to spool file. ERR=%s\n" msgstr "" -#: src/dird/authenticate.c:93 -msgid "Director and Storage daemon passwords or names not the same.\n" +#: src/stored/spool.c:438 src/stored/spool.c:476 +msgid "Fatal despooling error." msgstr "" -#: src/dird/authenticate.c:95 -msgid "" -"Director unable to authenticate with Storage daemon. 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 http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +#: src/stored/spool.c:445 +msgid "Retrying after header spooling error failed.\n" +msgstr "" + +#: src/stored/spool.c:459 +#, c-format +msgid "Error writing data to spool file. ERR=%s\n" msgstr "" -#: src/dird/authenticate.c:193 -msgid "Director and File daemon passwords or names not the same.\n" +#: src/stored/spool.c:486 +msgid "Retrying after data spooling error failed.\n" msgstr "" -#: src/dird/authenticate.c:195 -msgid "" -"Unable to authenticate with File daemon. Possible causes:\n" -"Passwords or names not the same or\n" -"Maximum Concurrent Jobs exceeded on the FD or\n" -"FD networking messed up (restart daemon).\n" -"Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for " -"help.\n" +#: src/stored/spool.c:541 src/stored/spool.c:548 +#, c-format +msgid "Fseek on attributes file failed: ERR=%s\n" msgstr "" -#: src/dird/authenticate.c:268 +#: src/stored/spool.c:558 #, c-format -msgid "UA Hello from %s:%s:%d is invalid. Len=%d\n" +msgid "Sending spooled attrs to the Director. Despooling %s bytes ...\n" msgstr "" -#: src/dird/authenticate.c:275 +#: src/stored/spool.c:585 #, c-format -msgid "UA Hello from %s:%s:%d is invalid. Got: %s\n" +msgid "fopen attr spool file %s failed: ERR=%s\n" msgstr "" -#: src/dird/authenticate.c:332 +#: src/stored/status.c:67 +#, c-format msgid "" -"Authorization problem: Remote client did not advertise required TLS " -"support.\n" +"\n" +"%s Version: %s (%s) %s %s %s\n" msgstr "" -#: src/dird/authenticate.c:340 -msgid "Authorization problem: Remote client requires TLS.\n" +#: src/stored/status.c:103 +msgid "" +"\n" +"Device status:\n" msgstr "" -#: src/dird/authenticate.c:368 +#: src/stored/status.c:105 #, c-format -msgid "Unable to authenticate console \"%s\" at %s:%s:%d.\n" +msgid "Autochanger \"%s\" with devices:\n" msgstr "" -#: src/dird/authenticate.c:373 +#: src/stored/status.c:119 #, c-format -msgid "1000 OK: %s Version: %s (%s)\n" +msgid "Device %s is mounted with Volume=\"%s\" Pool=\"%s\"\n" msgstr "" -#: src/dird/ua_select.c:39 +#: src/stored/status.c:123 #, c-format -msgid "The current %s retention period is: %s\n" +msgid "Device %s open but no Bacula volume is mounted.\n" msgstr "" -#: src/dird/ua_select.c:41 -msgid "Continue? (yes/mod/no): " +#: src/stored/status.c:133 +#, c-format +msgid " Total Bytes=%s Blocks=%s Bytes/block=%s\n" msgstr "" -#: src/dird/ua_select.c:45 -msgid "Enter new retention period: " +#: src/stored/status.c:147 +#, c-format +msgid " Total Bytes Read=%s Blocks Read=%s Bytes/block=%s\n" msgstr "" -#: src/dird/ua_select.c:49 -msgid "Invalid period.\n" +#: src/stored/status.c:152 +#, c-format +msgid " Positioned at File=%s Block=%s\n" msgstr "" -#: src/dird/ua_select.c:128 -msgid "You have the following choices:\n" +#: src/stored/status.c:158 +#, c-format +msgid "Device %s is not open or does not exist.\n" msgstr "" -#: src/dird/ua_select.c:144 -msgid "The defined Storage resources are:\n" +#: src/stored/status.c:160 +#, c-format +msgid "Device \"%s\" is not open or does not exist.\n" msgstr "" -#: src/dird/ua_select.c:152 -msgid "Select Storage resource" +#: src/stored/status.c:165 src/stored/status.c:168 src/stored/status.c:172 +#: src/stored/status.c:174 +msgid "" +"====\n" +"\n" msgstr "" -#: src/dird/ua_select.c:193 -msgid "catalog" +#: src/stored/status.c:166 +msgid "In Use Volume status:\n" msgstr "" -#: src/dird/ua_select.c:201 -msgid "The defined Catalog resources are:\n" +#: src/stored/status.c:190 +msgid "" +"No DEVICE structure.\n" +"\n" msgstr "" -#: src/dird/ua_select.c:209 -msgid "Catalog" +#: src/stored/status.c:195 +msgid " Device is BLOCKED. User unmounted.\n" msgstr "" -#: src/dird/ua_select.c:209 -msgid "Select Catalog resource" +#: src/stored/status.c:198 +msgid " Device is BLOCKED. User unmounted during wait for media/mount.\n" msgstr "" -#: src/dird/ua_select.c:226 -msgid "The defined Job resources are:\n" +#: src/stored/status.c:202 +#, c-format +msgid " Device is BLOCKED waiting for mount of volume \"%s\".\n" msgstr "" -#: src/dird/ua_select.c:234 -msgid "Select Job resource" +#: src/stored/status.c:205 +msgid " Device is BLOCKED waiting for media.\n" msgstr "" -#: src/dird/ua_select.c:249 -msgid "The defined Restore Job resources are:\n" +#: src/stored/status.c:209 +msgid " Device is being initialized.\n" msgstr "" -#: src/dird/ua_select.c:257 -msgid "Select Restore Job" +#: src/stored/status.c:212 +msgid " Device is blocked labeling a Volume.\n" msgstr "" -#: src/dird/ua_select.c:274 -msgid "The defined Client resources are:\n" +#: src/stored/status.c:220 +#, c-format +msgid " Slot %d is loaded in drive %d.\n" msgstr "" -#: src/dird/ua_select.c:282 -msgid "Select Client (File daemon) resource" +#: src/stored/status.c:223 +#, c-format +msgid " Drive %d is not loaded.\n" msgstr "" -#: src/dird/ua_select.c:309 -#, c-format -msgid "Error: Client resource %s does not exist.\n" +#: src/stored/status.c:242 +msgid "Device state:\n" msgstr "" -#: src/dird/ua_select.c:334 +#: src/stored/status.c:256 #, c-format -msgid "Could not find Client %s: ERR=%s" +msgid "" +"num_writers=%d JobStatus=%c block=%d\n" +"\n" msgstr "" -#: src/dird/ua_select.c:338 -msgid "fd" +#: src/stored/status.c:260 +#, c-format +msgid "Archive name: %s Device name: %s\n" msgstr "" -#: src/dird/ua_select.c:344 src/dird/ua_select.c:398 +#: src/stored/status.c:262 #, c-format -msgid "Could not find Client \"%s\": ERR=%s" +msgid "File=%u block=%u\n" msgstr "" -#: src/dird/ua_select.c:373 +#: src/stored/status.c:263 #, c-format -msgid "Error obtaining client ids. ERR=%s\n" +msgid "Min block=%u Max block=%u\n" msgstr "" -#: src/dird/ua_select.c:377 -msgid "No clients defined. You must run a job before using this command.\n" +#: src/stored/status.c:280 +#, c-format +msgid "%s Job %s waiting for Client connection.\n" msgstr "" -#: src/dird/ua_select.c:381 -msgid "Defined Clients:\n" +#: src/stored/status.c:295 +#, c-format +msgid "" +"Reading: %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=\"%s\"\n" msgstr "" -#: src/dird/ua_select.c:391 -msgid "Select the Client" +#: src/stored/status.c:307 +#, c-format +msgid "" +"Writing: %s %s job %s JobId=%d Volume=\"%s\"\n" +" pool=\"%s\" device=\"%s\"\n" msgstr "" -#: src/dird/ua_select.c:424 src/dird/ua_select.c:447 src/dird/ua_select.c:483 +#: src/stored/status.c:330 #, c-format -msgid "Could not find Pool \"%s\": ERR=%s" +msgid " FDReadSeqNo=%s in_msg=%u out_msg=%d fd=%d\n" msgstr "" -#: src/dird/ua_select.c:458 src/dird/ua_output.c:394 -#, c-format -msgid "Error obtaining pool ids. ERR=%s\n" +#: src/stored/status.c:335 +msgid " FDSocket closed\n" msgstr "" -#: src/dird/ua_select.c:462 -msgid "No pools defined. Use the \"create\" command to create one.\n" +#: src/stored/status.c:352 +msgid "" +"\n" +"Jobs waiting to reserve a drive:\n" msgstr "" -#: src/dird/ua_select.c:466 -msgid "Defined Pools:\n" +#: src/stored/status.c:380 +msgid " JobId Level Files Bytes Status Finished Name \n" msgstr "" -#: src/dird/ua_select.c:476 -msgid "Select the Pool" +#: src/stored/status.c:514 +msgid "3900 Bad .status command, missing argument.\n" msgstr "" -#: src/dird/ua_select.c:506 -#, c-format -msgid "No access to Pool \"%s\"\n" +#: src/stored/status.c:537 +msgid "3900 Bad .status command, wrong argument.\n" msgstr "" -#: src/dird/ua_select.c:532 -msgid "Enter MediaId or Volume name: " +#: src/stored/stored.c:65 +#, c-format +msgid "" +"Copyright (C) 2000-2005 Kern Sibbald.\n" +"\n" +"Version: %s (%s)\n" +"\n" +"Usage: stored [options] [-c config_file] [config_file]\n" +" -c use as configuration file\n" +" -dnn set debug level to nn\n" +" -f run in foreground (for debugging)\n" +" -g set groupid to group\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_select.c:558 -msgid "The defined Pool resources are:\n" +#: src/stored/stored.c:220 +msgid "Volume Session Time is ZERO!\n" msgstr "" -#: src/dird/ua_select.c:566 -msgid "Select Pool resource" +#: src/stored/stored.c:233 +#, c-format +msgid "Unable to create thread. ERR=%s\n" msgstr "" -#: src/dird/ua_select.c:601 -msgid "Enter the JobId to select: " +#: src/stored/stored.c:271 +#, c-format +msgid "Only one Storage resource permitted in %s\n" msgstr "" -#: src/dird/ua_select.c:639 +#: src/stored/stored.c:276 #, c-format -msgid "Could not find Job \"%s\": ERR=%s" +msgid "No Director resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_select.c:716 +#: src/stored/stored.c:281 #, c-format -msgid "Automatically selected %s: %s\n" +msgid "No Device resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_select.c:721 +#: src/stored/stored.c:289 #, c-format -msgid "Cannot select %s in batch mode.\n" +msgid "No Messages resource defined in %s. Cannot continue.\n" msgstr "" -#: src/dird/ua_select.c:735 -msgid "Selection is empty!\n" +#: src/stored/stored.c:316 +#, c-format +msgid "\"TLS Certificate\" file not defined for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_select.c:741 -msgid "Item 1 selected automatically.\n" +#: src/stored/stored.c:322 +#, c-format +msgid "\"TLS Key\" file not defined for Storage \"%s\" in %s.\n" msgstr "" -#: src/dird/ua_select.c:752 -msgid "Selection aborted, nothing done.\n" +#: src/stored/stored.c:328 +#, 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 "" -#: src/dird/ua_select.c:757 +#: src/stored/stored.c:455 #, c-format -msgid "Please enter a number between 1 and %d\n" +msgid "Could not initialize %s\n" msgstr "" -#: src/dird/ua_select.c:806 -msgid "Storage name given twice.\n" +#: src/stored/stored.c:468 +#, c-format +msgid "Could not open device %s\n" msgstr "" -#: src/dird/ua_select.c:823 +#: src/stored/stored.c:481 #, c-format -msgid "Expecting jobid=nn command, got: %s\n" +msgid "Could not mount device %s\n" msgstr "" -#: src/dird/ua_select.c:827 +#: src/stored/stored_conf.c:216 #, c-format -msgid "JobId %s is not running.\n" +msgid "Expected a Device Type keyword, got: %s" msgstr "" -#: src/dird/ua_select.c:836 +#: src/stored/stored_conf.c:231 #, c-format -msgid "Expecting job=xxx, got: %s.\n" +msgid "Warning: no \"%s\" resource (%d) defined.\n" msgstr "" -#: src/dird/ua_select.c:840 +#: src/stored/stored_conf.c:234 #, c-format -msgid "Job \"%s\" is not running.\n" +msgid "dump_resource type=%d\n" msgstr "" -#: src/dird/ua_select.c:856 +#: src/stored/stored_conf.c:350 #, c-format -msgid "Storage resource \"%s\": not found\n" +msgid "Warning: unknown resource type %d\n" msgstr "" -#: src/dird/ua_select.c:888 -msgid "Enter autochanger drive[0]: " +#: src/stored/stored_conf.c:539 +#, c-format +msgid "\"%s\" item is required in \"%s\" resource, but not found.\n" msgstr "" -#: src/dird/ua_select.c:918 -msgid "Media Types defined in conf file:\n" +#: src/stored/stored_conf.c:545 +#, c-format +msgid "Too many items in \"%s\" resource\n" msgstr "" -#: src/dird/ua_select.c:924 -msgid "Media Type" +#: src/stored/stored_conf.c:579 +#, c-format +msgid "Cannot find AutoChanger resource %s\n" msgstr "" -#: src/dird/ua_select.c:924 -msgid "Select the Media Type" +#: src/stored/stored_conf.c:650 +#, c-format +msgid "" +"Attempt to define second \"%s\" resource named \"%s\" is not permitted.\n" msgstr "" -#: src/dird/catreq.c:110 src/dird/catreq.c:303 +#: src/stored/wait.c:114 #, c-format -msgid "1990 Invalid Catalog Request: %s" +msgid "pthread timedwait error. ERR=%s\n" msgstr "" -#: src/dird/catreq.c:111 +#: src/stored/wait.c:199 #, c-format -msgid "Invalid Catalog request; DB not open: %s" +msgid "Job %s waiting to reserve a device.\n" msgstr "" -#: src/dird/catreq.c:136 -msgid "1901 No Media.\n" +#: src/tools/bsmtp.c:85 +#, c-format +msgid "Fatal malformed reply from %s: %s\n" msgstr "" -#: src/dird/catreq.c:164 -msgid "not in Pool" +#: src/tools/bsmtp.c:121 +#, c-format +msgid "" +"\n" +"Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n" +" -c set the Cc: field\n" +" -dnn set debug level to nn\n" +" -f set the From: field\n" +" -h use mailhost:port as the SMTP server\n" +" -s set the Subject: field\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/dird/catreq.c:166 -msgid "not correct MediaType" +#: src/tools/bsmtp.c:204 +msgid "Fatal error: no recipient given.\n" msgstr "" -#: src/dird/catreq.c:182 +#: src/tools/bsmtp.c:225 #, c-format -msgid "1998 Volume \"%s\" status is %s, %s.\n" +msgid "Fatal gethostname error: ERR=%s\n" msgstr "" -#: src/dird/catreq.c:187 +#: src/tools/bsmtp.c:229 #, c-format -msgid "1997 Volume \"%s\" not in catalog.\n" +msgid "Fatal gethostbyname for myself failed \"%s\": ERR=%s\n" msgstr "" -#: src/dird/catreq.c:208 +#: src/tools/bsmtp.c:254 #, c-format -msgid "Unable to get Media record for Volume %s: ERR=%s\n" +msgid "Error unknown mail host \"%s\": ERR=%s\n" msgstr "" -#: src/dird/catreq.c:210 -#, c-format -msgid "1991 Catalog Request for vol=%s failed: %s" +#: src/tools/bsmtp.c:257 +msgid "Retrying connection using \"localhost\".\n" msgstr "" -#: src/dird/catreq.c:230 +#: src/tools/bsmtp.c:265 #, c-format -msgid "" -"Volume Files at %u being set to %u for Volume \"%s\". This is incorrect.\n" +msgid "Fatal error: Unknown address family for smtp host: %d\n" msgstr "" -#: src/dird/catreq.c:233 +#: src/tools/bsmtp.c:273 #, c-format -msgid "1992 Update Media error. VolFiles=%u, CatFiles=%u\n" +msgid "Fatal socket error: ERR=%s\n" msgstr "" -#: src/dird/catreq.c:265 +#: src/tools/bsmtp.c:277 #, c-format -msgid "Catalog error updating Media record. %s" -msgstr "" - -#: src/dird/catreq.c:267 -msgid "1993 Update Media error\n" +msgid "Fatal connect error to %s: ERR=%s\n" msgstr "" -#: src/dird/catreq.c:292 +#: src/tools/bsmtp.c:282 #, c-format -msgid "Catalog error creating JobMedia record. %s" +msgid "Fatal dup error: ERR=%s\n" msgstr "" -#: src/dird/catreq.c:294 -msgid "1991 Update JobMedia error\n" +#: src/tools/bsmtp.c:286 src/tools/bsmtp.c:290 +#, c-format +msgid "Fatal fdopen error: ERR=%s\n" msgstr "" -#: src/dird/catreq.c:304 -#, c-format -msgid "Invalid Catalog request: %s" +#: src/tools/dbcheck.c:158 +msgid "" +"Warning skipping the additional parameters for working directory/dbname/user/" +"password/host.\n" msgstr "" -#: src/dird/catreq.c:338 +#: src/tools/dbcheck.c:174 #, c-format -msgid "1991 Invalid Catalog Update: %s" +msgid "Error can not find the Catalog name[%s] in the given config file [%s]\n" msgstr "" -#: src/dird/catreq.c:339 +#: src/tools/dbcheck.c:176 #, c-format -msgid "Invalid Catalog Update; DB not open: %s" +msgid "Error there is no Catalog section in the given config file [%s]\n" msgstr "" -#: src/dird/catreq.c:412 -#, c-format -msgid "Got %s but not same File as attributes\n" +#: src/tools/dbcheck.c:185 +msgid "Error no Director resource defined.\n" msgstr "" -#: src/dird/catreq.c:438 -#, c-format -msgid "Catalog error updating file digest. Unsupported digest stream type: %d" +#: src/tools/dbcheck.c:199 +msgid "Wrong number of arguments.\n" msgstr "" -#: src/dird/catreq.c:454 -#, c-format -msgid "Catalog error updating file digest. %s" +#: src/tools/dbcheck.c:204 +msgid "Working directory not supplied.\n" msgstr "" -#: src/dird/getmsg.c:130 +#: src/tools/dbcheck.c:269 #, c-format -msgid "bget_dirmsg: unknown bnet signal %d\n" +msgid "Hello, this is the database check/correct program.\n" msgstr "" -#: src/dird/getmsg.c:148 src/dird/getmsg.c:161 src/dird/getmsg.c:173 -#: src/dird/getmsg.c:220 src/dird/getmsg.c:244 +#: src/tools/dbcheck.c:271 #, c-format -msgid "Malformed message: %s\n" +msgid "Modify database is on." msgstr "" -#: src/dird/getmsg.c:154 +#: src/tools/dbcheck.c:273 #, c-format -msgid "Job not found: %s\n" +msgid "Modify database is off." msgstr "" -#: src/dird/getmsg.c:311 +#: src/tools/dbcheck.c:275 src/tools/dbcheck.c:336 #, c-format -msgid "Bad response to %s command: wanted %s, got %s\n" +msgid " Verbose is on.\n" msgstr "" -#: src/dird/getmsg.c:316 +#: src/tools/dbcheck.c:277 src/tools/dbcheck.c:338 #, c-format -msgid "Socket error on %s command: ERR=%s\n" +msgid " Verbose is off.\n" msgstr "" -#: src/dird/newvol.c:77 +#: src/tools/dbcheck.c:279 #, c-format -msgid "Illegal character in Volume name \"%s\"\n" +msgid "Please select the fuction you want to perform.\n" msgstr "" -#: src/dird/newvol.c:89 +#: src/tools/dbcheck.c:283 #, c-format -msgid "Created new Volume \"%s\" in catalog.\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/dird/newvol.c:117 +#: src/tools/dbcheck.c:302 #, c-format -msgid "Wanted to create Volume \"%s\", but it already exists. Trying again.\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/dird/newvol.c:126 -msgid "Too many failures. Giving up creating Volume name.\n" +#: src/tools/dbcheck.c:322 +msgid "Select function number: " msgstr "" -#: src/dird/autoprune.c:57 -msgid "Begin pruning Jobs.\n" +#: src/tools/dbcheck.c:329 +#, c-format +msgid "Database will be modified.\n" msgstr "" -#: src/dird/autoprune.c:65 -msgid "Begin pruning Files.\n" +#: src/tools/dbcheck.c:331 +#, c-format +msgid "Database will NOT be modified.\n" msgstr "" -#: src/dird/autoprune.c:70 -msgid "" -"End auto prune.\n" -"\n" +#: src/tools/dbcheck.c:421 +#, c-format +msgid "JobId=%s Name=\"%s\" StartTime=%s\n" msgstr "" -#: src/dird/ua_server.c:61 +#: src/tools/dbcheck.c:429 #, c-format -msgid "Cannot create UA thread: %s\n" +msgid "Orphaned JobMediaId=%s JobId=%s Volume=\"%s\"\n" msgstr "" -#: src/dird/ua_server.c:142 -msgid "You have messages.\n" +#: src/tools/dbcheck.c:436 +#, c-format +msgid "Orphaned FileId=%s JobId=%s Volume=\"%s\"\n" msgstr "" -#: src/dird/inc_conf.c:251 +#: src/tools/dbcheck.c:443 #, c-format -msgid "Expected a FileSet option keyword, got:%s:" +msgid "Orphaned FileSetId=%s FileSet=\"%s\" MD5=%s\n" msgstr "" -#: src/dird/inc_conf.c:284 -msgid "Old style Include/Exclude not supported\n" +#: src/tools/dbcheck.c:450 +#, c-format +msgid "Orphaned ClientId=%s Name=\"%s\"\n" msgstr "" -#: src/dird/inc_conf.c:312 src/dird/inc_conf.c:579 +#: src/tools/dbcheck.c:503 #, c-format -msgid "Expecting keyword, got: %s\n" +msgid "Deleting: %s\n" msgstr "" -#: src/dird/inc_conf.c:330 src/dird/inc_conf.c:594 +#: src/tools/dbcheck.c:577 #, c-format -msgid "Keyword %s not permitted in this resource" +msgid "Checking for duplicate Filename entries.\n" msgstr "" -#: src/dird/inc_conf.c:383 +#: src/tools/dbcheck.c:586 #, c-format -msgid "Regex compile error. ERR=%s\n" +msgid "Found %d duplicate Filename records.\n" msgstr "" -#: src/dird/inc_conf.c:404 -#, c-format -msgid "Expected a regex string, got: %s\n" +#: src/tools/dbcheck.c:587 +msgid "Print the list? (yes/no): " msgstr "" -#: src/dird/inc_conf.c:490 +#: src/tools/dbcheck.c:603 src/tools/dbcheck.c:657 #, c-format -msgid "Expected a wild-card string, got: %s\n" +msgid "Found %d for: %s\n" msgstr "" -#: src/dird/inc_conf.c:513 +#: src/tools/dbcheck.c:630 #, c-format -msgid "Expected an fstype string, got: %s\n" +msgid "Checking for duplicate Path entries.\n" msgstr "" -#: src/dird/inc_conf.c:548 +#: src/tools/dbcheck.c:640 #, c-format -msgid "Expected a filename, got: %s" +msgid "Found %d duplicate Path records.\n" msgstr "" -#: src/dird/inc_conf.c:564 -#, c-format -msgid "Expecting open brace. Got %s" +#: src/tools/dbcheck.c:641 src/tools/dbcheck.c:691 src/tools/dbcheck.c:723 +#: src/tools/dbcheck.c:755 src/tools/dbcheck.c:783 src/tools/dbcheck.c:811 +#: src/tools/dbcheck.c:849 src/tools/dbcheck.c:887 src/tools/dbcheck.c:918 +#: src/tools/dbcheck.c:948 src/tools/dbcheck.c:982 src/tools/dbcheck.c:1040 +msgid "Print them? (yes/no): " msgstr "" -#: src/dird/inc_conf.c:619 +#: src/tools/dbcheck.c:683 #, c-format -msgid "Expected a FileSet keyword, got: %s" +msgid "Checking for orphaned JobMedia entries.\n" msgstr "" -#: src/dird/fd_cmds.c:104 +#: src/tools/dbcheck.c:690 #, c-format -msgid "File daemon \"%s\" rejected Job command: %s\n" +msgid "Found %d orphaned JobMedia records.\n" msgstr "" -#: src/dird/fd_cmds.c:117 +#: src/tools/dbcheck.c:703 #, c-format -msgid "Error updating Client record. ERR=%s\n" +msgid "Deleting %d orphaned JobMedia records.\n" msgstr "" -#: src/dird/fd_cmds.c:122 +#: src/tools/dbcheck.c:712 #, c-format -msgid "FD gave bad response to JobId command: %s\n" +msgid "Checking for orphaned File entries. This may take some time!\n" msgstr "" -#: src/dird/fd_cmds.c:144 src/dird/fd_cmds.c:180 -msgid ", since=" +#: src/tools/dbcheck.c:722 +#, c-format +msgid "Found %d orphaned File records.\n" msgstr "" -#: src/dird/fd_cmds.c:164 -msgid "No prior or suitable Full backup found. Doing FULL backup.\n" +#: src/tools/dbcheck.c:735 +#, c-format +msgid "Deleting %d orphaned File records.\n" msgstr "" -#: src/dird/fd_cmds.c:165 src/dird/fd_cmds.c:173 +#: src/tools/dbcheck.c:744 #, c-format -msgid " (upgraded from %s)" +msgid "Checking for orphaned Path entries. This may take some time!\n" msgstr "" -#: src/dird/fd_cmds.c:171 +#: src/tools/dbcheck.c:754 #, c-format -msgid "Prior failed job found. Upgrading to %s.\n" +msgid "Found %d orphaned Path records.\n" msgstr "" -#: src/dird/fd_cmds.c:196 -msgid "since_utime " +#: src/tools/dbcheck.c:763 +#, c-format +msgid "Deleting %d orphaned Path records.\n" msgstr "" -#: src/dird/fd_cmds.c:232 +#: src/tools/dbcheck.c:772 #, c-format -msgid "Unimplemented backup level %d %c\n" +msgid "Checking for orphaned Filename entries. This may take some time!\n" msgstr "" -#: src/dird/fd_cmds.c:331 src/dird/fd_cmds.c:356 src/dird/fd_cmds.c:370 -msgid ">filed: write error on socket\n" +#: src/tools/dbcheck.c:782 +#, c-format +msgid "Found %d orphaned Filename records.\n" msgstr "" -#: src/dird/fd_cmds.c:337 +#: src/tools/dbcheck.c:791 #, c-format -msgid "Error running program: %s. ERR=%s\n" +msgid "Deleting %d orphaned Filename records.\n" msgstr "" -#: src/dird/fd_cmds.c:346 +#: src/tools/dbcheck.c:800 #, c-format -msgid "Cannot open included file: %s. ERR=%s\n" +msgid "Checking for orphaned FileSet entries. This takes some time!\n" msgstr "" -#: src/dird/fd_cmds.c:522 +#: src/tools/dbcheck.c:810 #, c-format -msgid "" -"= 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/dird/ua_query.c:64 -msgid "Available queries:\n" +#: src/tools/testfind.c:134 src/tools/testls.c:130 +#, c-format +msgid "Could not open include file: %s\n" msgstr "" -#: src/dird/ua_query.c:71 -msgid "Choose a query" +#: src/tools/testfind.c:147 src/tools/testls.c:143 +#, c-format +msgid "Could not open exclude file: %s\n" msgstr "" -#: src/dird/ua_query.c:85 -msgid "Could not find query.\n" +#: src/tools/testfind.c:160 +#, c-format +msgid "" +"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/dird/ua_query.c:103 -msgid "Too many prompts in query, max is 9.\n" +#: src/tools/testfind.c:199 +#, c-format +msgid "Reg: %s\n" msgstr "" -#: src/dird/ua_query.c:206 -#, c-format -msgid "Warning prompt %d missing.\n" +#: src/tools/testfind.c:220 +msgid "\t[will not descend: recursion turned off]" msgstr "" -#: src/dird/ua_query.c:252 -msgid "" -"Entering SQL query mode.\n" -"Terminate each query with a semicolon.\n" -"Terminate query mode with a blank line.\n" +#: src/tools/testfind.c:222 +msgid "\t[will not descend: file system change not allowed]" msgstr "" -#: src/dird/ua_query.c:255 src/dird/ua_query.c:272 -msgid "Enter SQL query: " +#: src/tools/testfind.c:224 +msgid "\t[will not descend: disallowed file system]" msgstr "" -#: src/dird/ua_query.c:274 -msgid "Add to SQL query: " +#: src/tools/testfind.c:240 src/tools/testls.c:178 +#, c-format +msgid "Err: Could not access %s: %s\n" msgstr "" -#: src/dird/ua_query.c:278 -msgid "End query mode.\n" +#: src/tools/testfind.c:243 src/tools/testls.c:181 +#, c-format +msgid "Err: Could not follow ff->link %s: %s\n" msgstr "" -#: src/dird/ua_update.c:79 -msgid "Update choice:\n" +#: src/tools/testfind.c:246 src/tools/testls.c:184 +#, c-format +msgid "Err: Could not stat %s: %s\n" msgstr "" -#: src/dird/ua_update.c:80 -msgid "Volume parameters" +#: src/tools/testfind.c:249 src/tools/testls.c:187 +#, c-format +msgid "Skip: File not saved. No change. %s\n" msgstr "" -#: src/dird/ua_update.c:81 -msgid "Pool from resource" +#: src/tools/testfind.c:252 src/tools/testls.c:190 +#, c-format +msgid "Err: Attempt to backup archive. Not saved. %s\n" msgstr "" -#: src/dird/ua_update.c:82 -msgid "Slots from autochanger" +#: src/tools/testfind.c:255 src/tools/testls.c:199 +#, c-format +msgid "Err: Could not open directory %s: %s\n" msgstr "" -#: src/dird/ua_update.c:83 -msgid "item" +#: src/tools/testfind.c:258 src/tools/testls.c:202 +#, c-format +msgid "Err: Unknown file ff->type %d: %s\n" msgstr "" -#: src/dird/ua_update.c:83 -msgid "Choose catalog item to update" +#: src/tools/testfind.c:308 +#, c-format +msgid "===== Filename truncated to 255 chars: %s\n" msgstr "" -#: src/dird/ua_update.c:122 +#: src/tools/testfind.c:325 #, c-format -msgid "Invalid VolStatus specified: %s\n" +msgid "========== Path name truncated to 255 chars: %s\n" msgstr "" -#: src/dird/ua_update.c:131 +#: src/tools/testfind.c:334 #, c-format -msgid "New Volume status is: %s\n" +msgid "========== Path length is zero. File=%s\n" msgstr "" -#: src/dird/ua_update.c:141 +#: src/tools/testfind.c:337 #, c-format -msgid "Invalid retention period specified: %s\n" +msgid "Path: %s\n" msgstr "" -#: src/dird/ua_update.c:149 +#: src/tools/testls.c:45 #, c-format -msgid "New retention period is: %s\n" +msgid "" +"\n" +"Usage: testls [-d debug_level] [-] [pattern1 ...]\n" +" -a print extended attributes (Win32 debug)\n" +" -dnn set debug level to nn\n" +" -e specify file of exclude patterns\n" +" -i specify file of include patterns\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/dird/ua_update.c:160 +#: src/tools/testls.c:193 #, c-format -msgid "Invalid use duration specified: %s\n" +msgid "Recursion turned off. Directory not entered. %s\n" msgstr "" -#: src/dird/ua_update.c:168 +#: src/tools/testls.c:196 #, c-format -msgid "New use duration is: %s\n" +msgid "Skip: File system change prohibited. Directory not entered. %s\n" msgstr "" -#: src/dird/ua_update.c:182 -#, c-format -msgid "New max jobs is: %s\n" +#: src/tray-monitor/authenticate.c:78 +msgid "" +"Director authorization problem.\n" +"Most likely the passwords do not agree.\n" +"Please see http://www.bacula.org/html-manual/faq.html#AuthorizationErrors " +"for help.\n" msgstr "" -#: src/dird/ua_update.c:195 -#, c-format -msgid "New max files is: %s\n" +#: src/tray-monitor/authenticate.c:127 +msgid "" +"Director and Storage daemon passwords or names not the same.\n" +"Please see http://www.bacula.org/html-manual/faq.html#AuthorizationErrors " +"for help.\n" msgstr "" -#: src/dird/ua_update.c:206 -#, c-format -msgid "Invalid max. bytes specification: %s\n" +#: src/tray-monitor/authenticate.c:172 +msgid "" +"Director and File daemon passwords or names not the same.\n" +"Please see http://www.bacula.org/html-manual/faq.html#AuthorizationErrors " +"for help.\n" msgstr "" -#: src/dird/ua_update.c:214 +#: src/tray-monitor/tray-monitor.c:102 #, c-format -msgid "New Max bytes is: %s\n" -msgstr "" - -#: src/dird/ua_update.c:228 src/dird/ua_update.c:252 -msgid "Invalid value. It must be yes or no.\n" +msgid "" +"Copyright (C) 2000-2004 Kern Sibbald and John Walker\n" +"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" +" -dnn set debug level to nn\n" +" -t test - read configuration and exit\n" +" -? print this message.\n" +"\n" msgstr "" -#: src/dird/ua_update.c:236 +#: src/tray-monitor/tray-monitor.c:251 #, c-format -msgid "New Recycle flag is: %s\n" +msgid "" +"Error: %d Monitor resource defined in %s. You must define one and only one " +"Monitor resource.\n" msgstr "" -#: src/dird/ua_update.c:260 +#: src/tray-monitor/tray-monitor.c:282 #, c-format -msgid "New InChanger flag is: %s\n" +msgid "" +"No Client, Storage nor 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/dird/ua_update.c:278 +#: src/tray-monitor/tray-monitor.c:304 #, c-format -msgid "Invalid slot, it must be between 0 and MaxVols=%d\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/dird/ua_update.c:287 src/dird/ua_update.c:577 -#, c-format -msgid "Error updating media record Slot: ERR=%s" +#: src/tray-monitor/tray-monitor.c:319 +msgid "Open status window..." msgstr "" -#: src/dird/ua_update.c:289 -#, c-format -msgid "New Slot is: %d\n" +#: src/tray-monitor/tray-monitor.c:325 +msgid "Exit" msgstr "" -#: src/dird/ua_update.c:316 -#, c-format -msgid "New Pool is: %s\n" +#: src/tray-monitor/tray-monitor.c:337 +msgid "Bacula tray monitor" msgstr "" -#: src/dird/ua_update.c:345 -#, c-format -msgid "Error updating Volume record: ERR=%s" +#: src/tray-monitor/tray-monitor.c:362 +msgid " (DIR)" msgstr "" -#: src/dird/ua_update.c:347 -#, c-format -msgid "Volume defaults updated from \"%s\" Pool record.\n" +#: src/tray-monitor/tray-monitor.c:366 +msgid " (FD)" msgstr "" -#: src/dird/ua_update.c:369 -#, c-format -msgid "Error updating Volume records: ERR=%s" +#: src/tray-monitor/tray-monitor.c:370 +msgid " (SD)" msgstr "" -#: src/dird/ua_update.c:371 -msgid "All Volume defaults updated from Pool record.\n" +#: src/tray-monitor/tray-monitor.c:383 +msgid "Unknown status." msgstr "" -#: src/dird/ua_update.c:391 -msgid "VolStatus" +#: src/tray-monitor/tray-monitor.c:424 +msgid "Refresh interval in seconds: " msgstr "" -#: src/dird/ua_update.c:392 -msgid "VolRetention" +#: src/tray-monitor/tray-monitor.c:432 +msgid "Refresh now" msgstr "" -#: src/dird/ua_update.c:393 -msgid "VolUse" +#: src/tray-monitor/tray-monitor.c:436 +msgid "About" msgstr "" -#: src/dird/ua_update.c:394 -msgid "MaxVolJobs" +#: src/tray-monitor/tray-monitor.c:440 +msgid "Close" msgstr "" -#: src/dird/ua_update.c:395 -msgid "MaxVolFiles" +#: src/tray-monitor/tray-monitor.c:460 +#, c-format +msgid "Disconnecting from Director %s:%d\n" msgstr "" -#: src/dird/ua_update.c:396 -msgid "MaxVolBytes" +#: src/tray-monitor/tray-monitor.c:463 +#, c-format +msgid "Disconnecting from Client %s:%d\n" msgstr "" -#: src/dird/ua_update.c:397 -msgid "Recycle" +#: src/tray-monitor/tray-monitor.c:466 +#, c-format +msgid "Disconnecting from Storage %s:%d\n" msgstr "" -#: src/dird/ua_update.c:398 -msgid "InChanger" +#: src/tray-monitor/tray-monitor.c:502 src/tray-monitor/tray-monitor.c:512 +msgid "Bacula Tray Monitor" msgstr "" -#: src/dird/ua_update.c:399 src/dird/ua_update.c:472 -msgid "Slot" +#: src/tray-monitor/tray-monitor.c:503 src/tray-monitor/tray-monitor.c:513 +msgid "" +"Copyright (C) 2004-2005 Kern Sibbald\n" +"Written by Nicolas Boichat\n" msgstr "" -#: src/dird/ua_update.c:401 -msgid "FromPool" +#: src/tray-monitor/tray-monitor.c:505 src/tray-monitor/tray-monitor.c:515 +msgid "Version:" msgstr "" -#: src/dird/ua_update.c:402 -msgid "AllFromPool" +#: src/tray-monitor/tray-monitor.c:583 +#, c-format +msgid "Error, currentitem is not a Client or a Storage..\n" msgstr "" -#: src/dird/ua_update.c:463 +#: src/tray-monitor/tray-monitor.c:656 #, c-format -msgid "Updating Volume \"%s\"\n" +msgid "" +"Current job: %s\n" +"Last job: %s" msgstr "" -#: src/dird/ua_update.c:465 -msgid "Volume Status" +#: src/tray-monitor/tray-monitor.c:668 +#, c-format +msgid " (%d errors)" msgstr "" -#: src/dird/ua_update.c:466 -msgid "Volume Retention Period" +#: src/tray-monitor/tray-monitor.c:671 +#, c-format +msgid " (%d error)" msgstr "" -#: src/dird/ua_update.c:467 -msgid "Volume Use Duration" +#: src/tray-monitor/tray-monitor.c:708 +msgid "No current job." msgstr "" -#: src/dird/ua_update.c:468 -msgid "Maximum Volume Jobs" +#: src/tray-monitor/tray-monitor.c:711 +msgid "No last job." msgstr "" -#: src/dird/ua_update.c:469 -msgid "Maximum Volume Files" +#: src/tray-monitor/tray-monitor.c:719 +msgid "Job status: Created" msgstr "" -#: src/dird/ua_update.c:470 -msgid "Maximum Volume Bytes" +#: src/tray-monitor/tray-monitor.c:724 +msgid "Job status: Running" msgstr "" -#: src/dird/ua_update.c:471 -msgid "Recycle Flag" +#: src/tray-monitor/tray-monitor.c:728 +msgid "Job status: Blocked" msgstr "" -#: src/dird/ua_update.c:473 -msgid "InChanger Flag" +#: src/tray-monitor/tray-monitor.c:733 +msgid "Job status: Terminated" msgstr "" -#: src/dird/ua_update.c:474 -msgid "Volume Files" +#: src/tray-monitor/tray-monitor.c:738 +msgid "Job status: Terminated in error" msgstr "" -#: src/dird/ua_update.c:476 -msgid "Volume from Pool" +#: src/tray-monitor/tray-monitor.c:744 +msgid "Job status: Error" msgstr "" -#: src/dird/ua_update.c:477 -msgid "All Volumes from Pool" +#: src/tray-monitor/tray-monitor.c:748 +msgid "Job status: Fatal error" msgstr "" -#: src/dird/ua_update.c:478 -msgid "Done" +#: src/tray-monitor/tray-monitor.c:753 +msgid "Job status: Verify differences" msgstr "" -#: src/dird/ua_update.c:489 -#, c-format -msgid "Current Volume status is: %s\n" +#: src/tray-monitor/tray-monitor.c:758 +msgid "Job status: Canceled" msgstr "" -#: src/dird/ua_update.c:490 -msgid "Possible Values are:\n" +#: src/tray-monitor/tray-monitor.c:763 +msgid "Job status: Waiting on File daemon" msgstr "" -#: src/dird/ua_update.c:501 -msgid "Choose new Volume Status" +#: src/tray-monitor/tray-monitor.c:768 +msgid "Job status: Waiting on the Storage daemon" msgstr "" -#: src/dird/ua_update.c:507 -#, c-format -msgid "Current retention period is: %s\n" +#: src/tray-monitor/tray-monitor.c:773 +msgid "Job status: Waiting for new media" msgstr "" -#: src/dird/ua_update.c:509 -msgid "Enter Volume Retention period: " +#: src/tray-monitor/tray-monitor.c:778 +msgid "Job status: Waiting for Mount" msgstr "" -#: src/dird/ua_update.c:516 -#, c-format -msgid "Current use duration is: %s\n" +#: src/tray-monitor/tray-monitor.c:783 +msgid "Job status: Waiting for storage resource" msgstr "" -#: src/dird/ua_update.c:518 -msgid "Enter Volume Use Duration: " +#: src/tray-monitor/tray-monitor.c:788 +msgid "Job status: Waiting for job resource" msgstr "" -#: src/dird/ua_update.c:525 -#, c-format -msgid "Current max jobs is: %u\n" +#: src/tray-monitor/tray-monitor.c:793 +msgid "Job status: Waiting for Client resource" msgstr "" -#: src/dird/ua_update.c:526 -msgid "Enter new Maximum Jobs: " +#: src/tray-monitor/tray-monitor.c:798 +msgid "Job status: Waiting for maximum jobs" msgstr "" -#: src/dird/ua_update.c:533 -#, c-format -msgid "Current max files is: %u\n" +#: src/tray-monitor/tray-monitor.c:803 +msgid "Job status: Waiting for start time" msgstr "" -#: src/dird/ua_update.c:534 -msgid "Enter new Maximum Files: " +#: src/tray-monitor/tray-monitor.c:808 +msgid "Job status: Waiting for higher priority jobs to finish" msgstr "" -#: src/dird/ua_update.c:541 +#: src/tray-monitor/tray-monitor.c:813 #, c-format -msgid "Current value is: %s\n" +msgid "Unknown job status %c." msgstr "" -#: src/dird/ua_update.c:542 -msgid "Enter new Maximum Bytes: " +#: src/tray-monitor/tray-monitor.c:814 +#, c-format +msgid "Job status: Unknown(%c)" msgstr "" -#: src/dird/ua_update.c:550 +#: src/tray-monitor/tray-monitor.c:821 #, c-format -msgid "Current recycle flag is: %s\n" +msgid "Bad scan : '%s' %d\n" msgstr "" -#: src/dird/ua_update.c:552 -msgid "Enter new Recycle status: " +#: src/tray-monitor/tray-monitor.c:859 +#, c-format +msgid "Connecting to Director %s:%d" msgstr "" -#: src/dird/ua_update.c:559 +#: src/tray-monitor/tray-monitor.c:865 #, c-format -msgid "Current Slot is: %d\n" +msgid "Connecting to Client %s:%d\n" msgstr "" -#: src/dird/ua_update.c:560 -msgid "Enter new Slot: " +#: src/tray-monitor/tray-monitor.c:866 +#, c-format +msgid "Connecting to Client %s:%d" msgstr "" -#: src/dird/ua_update.c:567 +#: src/tray-monitor/tray-monitor.c:872 #, c-format -msgid "Current InChanger flag is: %d\n" +msgid "Connecting to Storage %s:%d\n" msgstr "" -#: src/dird/ua_update.c:568 -msgid "Set InChanger flag? yes/no: " +#: src/tray-monitor/tray-monitor.c:873 +#, c-format +msgid "Connecting to Storage %s:%d" msgstr "" -#: src/dird/ua_update.c:579 +#: src/tray-monitor/tray-monitor.c:878 src/tray-monitor/tray-monitor.c:916 #, c-format -msgid "New InChanger flag is: %d\n" +msgid "Error, currentitem is not a Client, a Storage or a Director..\n" msgstr "" -#: src/dird/ua_update.c:586 -msgid "" -"Warning changing Volume Files can result\n" -"in loss of data on your Volume\n" -"\n" +#: src/tray-monitor/tray-monitor.c:884 +msgid "Cannot connect to daemon.\n" msgstr "" -#: src/dird/ua_update.c:588 -#, c-format -msgid "Current Volume Files is: %u\n" +#: src/tray-monitor/tray-monitor.c:885 +msgid "Cannot connect to daemon." msgstr "" -#: src/dird/ua_update.c:589 -msgid "Enter new number of Files for Volume: " +#: src/tray-monitor/tray-monitor.c:897 +#, c-format +msgid "Authentication error : %s" msgstr "" -#: src/dird/ua_update.c:594 -msgid "Normally, you should only increase Volume Files by one!\n" +#: src/tray-monitor/tray-monitor.c:904 +msgid "Opened connection with Director daemon.\n" msgstr "" -#: src/dird/ua_update.c:595 -msgid "Continue? (yes/no): " +#: src/tray-monitor/tray-monitor.c:905 +msgid "Opened connection with Director daemon." msgstr "" -#: src/dird/ua_update.c:605 -#, c-format -msgid "New Volume Files is: %u\n" +#: src/tray-monitor/tray-monitor.c:908 +msgid "Opened connection with File daemon.\n" msgstr "" -#: src/dird/ua_update.c:617 -#, c-format -msgid "Current Pool is: %s\n" +#: src/tray-monitor/tray-monitor.c:909 +msgid "Opened connection with File daemon." msgstr "" -#: src/dird/ua_update.c:618 -msgid "Enter new Pool name: " +#: src/tray-monitor/tray-monitor.c:912 +msgid "Opened connection with Storage daemon.\n" msgstr "" -#: src/dird/ua_update.c:631 -msgid "Selection terminated.\n" +#: src/tray-monitor/tray-monitor.c:913 +msgid "Opened connection with Storage daemon." msgstr "" -#: src/dird/ua_update.c:664 -#, c-format -msgid "db_update_pool_record returned %d. ERR=%s\n" +#: src/tray-monitor/tray-monitor.c:948 +msgid "<< Error: BNET_PROMPT signal received. >>\n" msgstr "" -#: src/dird/ua_update.c:671 -msgid "Pool DB record updated from resource.\n" +#: src/tray-monitor/tray-monitor.c:953 src/wx-console/console_thread.cpp:465 +msgid "<< Heartbeat signal received, answered. >>\n" msgstr "" -#: src/dird/ua_dotcmds.c:131 -msgid "The Director will segment fault.\n" +#: src/tray-monitor/tray-monitor.c:957 +#, c-format +msgid "<< Unexpected signal received : %s >>\n" msgstr "" -#: src/dird/ua_purge.c:177 -msgid "" -"\n" -"This command is 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" -"for retention periods. Normally you should use the\n" -"PRUNE command, which respects retention periods.\n" +#: src/tray-monitor/tray-monitor.c:962 +msgid "\n" msgstr "" -#: src/dird/ua_purge.c:237 -msgid "Choose item to purge" +#: src/tray-monitor/tray-monitor.c:966 +msgid "Error : BNET_HARDEOF or BNET_ERROR" msgstr "" -#: src/dird/ua_purge.c:282 -#, c-format -msgid "Begin purging files for Client \"%s\"\n" +#: src/tray-monitor/tray-monitor.c:972 +msgid "\n" msgstr "" -#: src/dird/ua_purge.c:294 -#, c-format -msgid "No Files found for client %s to purge from %s catalog.\n" +#: src/tray-monitor/tray-monitor.c:976 +msgid "Error : Connection closed." msgstr "" -#: src/dird/ua_purge.c:325 +#: src/tray-monitor/tray_conf.c:161 #, c-format -msgid "%d Files for client \"%s\" purged from %s catalog.\n" +msgid "Monitor: name=%s FDtimeout=%s SDtimeout=%s\n" msgstr "" -#: src/dird/ua_purge.c:361 +#: src/tray-monitor/tray_conf.c:167 #, c-format -msgid "Begin purging jobs from Client \"%s\"\n" +msgid "Director: name=%s address=%s FDport=%d\n" msgstr "" -#: src/dird/ua_purge.c:372 +#: src/tray-monitor/tray_conf.c:171 #, c-format -msgid "No Jobs found for client %s to purge from %s catalog.\n" +msgid "Client: name=%s address=%s FDport=%d\n" msgstr "" -#: src/dird/ua_purge.c:416 +#: src/tray-monitor/tray_conf.c:175 #, c-format -msgid "%d Jobs for client %s purged from %s catalog.\n" +msgid "Storage: name=%s address=%s SDport=%d\n" msgstr "" -#: src/dird/ua_purge.c:467 -#, c-format -msgid "" -"Volume \"%s\" has VolStatus \"%s\" and cannot be purged.\n" -"The VolStatus must be: Append, Full, Used, or Error to be purged.\n" +#: src/wx-console/authenticate.c:129 +msgid "Bad response to Hello command: ERR=" msgstr "" -#: src/dird/ua_purge.c:540 +#: src/baconfig.h:55 #, c-format -msgid "%d File%s on Volume \"%s\" purged from catalog.\n" +msgid "Failed ASSERT: %s\n" msgstr "" -#: src/dird/ua_purge.c:554 -#, c-format -msgid "" -"There are no more Jobs associated with Volume \"%s\". Marking it purged.\n" +#: src/baconfig.h:62 +msgid "*None*" msgstr "" -#: src/dird/ua_purge.c:586 -#, c-format -msgid "Cannot purge Volume with VolStatus=%s\n" +#: src/filed/win32/winmain.cpp:228 src/filed/win32/winmain.cpp:236 +msgid "Bacula Usage" msgstr "" -#: src/dird/ua_output.c:64 src/dird/ua_output.c:88 -msgid "ON or OFF keyword missing.\n" +#: src/filed/win32/winmain.cpp:233 +msgid "Bad Command Line Options" msgstr "" -#: src/dird/ua_output.c:176 -msgid "Keywords for the show command are:\n" +#: src/filed/win32/winmain.cpp:326 +msgid "Another instance of Bacula is already running" msgstr "" -#: src/dird/ua_output.c:182 -#, c-format -msgid "%s resource %s not found.\n" +#: src/filed/win32/winservice.cpp:131 src/filed/win32/winservice.cpp:145 +msgid "No existing instance of Bacula could be contacted" msgstr "" -#: src/dird/ua_output.c:185 -#, c-format -msgid "Resource %s not found\n" +#: src/filed/win32/winservice.cpp:218 +msgid "KERNEL32.DLL not found: Bacula service not started" msgstr "" -#: src/dird/ua_output.c:251 -msgid "Hey! DB is NULL\n" +#: src/filed/win32/winservice.cpp:228 +msgid "Registry service not found: Bacula service not started" msgstr "" -#: src/dird/ua_output.c:365 -#, c-format -msgid "Jobid %d used %d Volume(s): %s\n" +#: src/filed/win32/winservice.cpp:230 +msgid "Registry service not found" msgstr "" -#: src/dird/ua_output.c:383 -msgid "No Pool specified.\n" +#: src/filed/win32/winservice.cpp:260 +msgid "StartServiceCtrlDispatcher failed." msgstr "" -#: src/dird/ua_output.c:404 -#, c-format -msgid "Pool: %s\n" +#: src/filed/win32/winservice.cpp:278 +msgid "RegisterServiceCtlHandler failed" msgstr "" -#: src/dird/ua_output.c:420 src/dird/ua_status.c:452 -msgid "Ignoring illegal value for days.\n" +#: src/filed/win32/winservice.cpp:279 +msgid "Contact Register Service Handler failure" msgstr "" -#: src/dird/ua_output.c:429 -#, c-format -msgid "Unknown list keyword: %s\n" +#: src/filed/win32/winservice.cpp:295 +msgid "ReportStatus STOPPED failed 1" msgstr "" -#: src/dird/ua_output.c:455 -#, c-format -msgid "%s is not a job name.\n" +#: src/filed/win32/winservice.cpp:318 +msgid "Report Service failure" msgstr "" -#: src/dird/ua_output.c:476 -#, c-format -msgid "Could not find next Volume for Job %s (%s, %s).\n" +#: src/filed/win32/winservice.cpp:355 +msgid "Unable to install Bacula service" msgstr "" -#: src/dird/ua_output.c:480 -#, c-format -msgid "The next Volume to be used by Job \"%s\" (%s, %s) will be %s\n" +#: src/filed/win32/winservice.cpp:373 +msgid "Service command length too long" msgstr "" -#: src/dird/ua_output.c:490 -#, c-format -msgid "Could not find next Volume for Job %s.\n" +#: src/filed/win32/winservice.cpp:374 +msgid "Service command length too long. Service not registered." msgstr "" -#: src/dird/ua_output.c:679 -msgid "You have no messages.\n" +#: src/filed/win32/winservice.cpp:389 +msgid "Cannot write System Registry" msgstr "" -#: src/dird/ua_status.c:126 -msgid "Status available for:\n" +#: src/filed/win32/winservice.cpp:390 +msgid "" +"The System Registry could not be updated - the Bacula service was not " +"installed" msgstr "" -#: src/dird/ua_status.c:132 -msgid "Select daemon type for status" +#: src/filed/win32/winservice.cpp:397 +msgid "Cannot add Bacula key to System Registry" msgstr "" -#: src/dird/ua_status.c:245 -#, c-format -msgid "%s Version: %s (%s) %s %s %s\n" +#: src/filed/win32/winservice.cpp:398 src/filed/win32/winservice.cpp:449 +msgid "The Bacula service could not be installed" msgstr "" -#: src/dird/ua_status.c:289 -#, c-format +#: src/filed/win32/winservice.cpp:406 msgid "" -"\n" -"Failed to connect to Storage daemon %s.\n" -"====\n" +"The Bacula File service was successfully installed.\n" +"The service may be started by double clicking on the\n" +"Bacula \"Start\" icon and will be automatically\n" +"be run the next time this machine is rebooted. " msgstr "" -#: src/dird/ua_status.c:327 -#, c-format +#: src/filed/win32/winservice.cpp:424 msgid "" -"Failed to connect to Client %s.\n" -"====\n" -msgstr "" - -#: src/dird/ua_status.c:335 -msgid "Connected to file daemon\n" +"The Service Control Manager could not be contacted - the Bacula service was " +"not installed" msgstr "" -#: src/dird/ua_status.c:350 +#: src/filed/win32/winservice.cpp:455 msgid "" -"\n" -"Scheduled Jobs:\n" +"Provides file backup and restore services. Bacula -- the network backup " +"solution." msgstr "" -#: src/dird/ua_status.c:351 +#: src/filed/win32/winservice.cpp:462 msgid "" -"Level Type Pri Scheduled Name Volume\n" +"The Bacula File service was successfully installed.\n" +"The service may be started from the Control Panel and will\n" +"automatically be run the next time this machine is rebooted." msgstr "" -#: src/dird/ua_status.c:352 -msgid "===================================================================================\n" +#: src/filed/win32/winservice.cpp:471 +msgid "" +"Unknown Windows operating system.\n" +"Cannot install Bacula service.\n" msgstr "" -#: src/dird/ua_status.c:399 -#, c-format -msgid "%-14s %-8s %3d %-18s %-18s %s\n" +#: src/filed/win32/winservice.cpp:496 +msgid "" +"Could not find registry entry.\n" +"Service probably not registerd - the Bacula service was not removed" msgstr "" -#: src/dird/ua_status.c:491 -msgid "No Scheduled Jobs.\n" +#: src/filed/win32/winservice.cpp:501 +msgid "" +"Could not delete Registry key.\n" +"The Bacula service could not be removed" msgstr "" -#: src/dird/ua_status.c:516 -#, c-format -msgid "Console connected at %s\n" +#: src/filed/win32/winservice.cpp:511 +msgid "Bacula could not be contacted, probably not running" msgstr "" -#: src/dird/ua_status.c:526 -msgid "" -"No Jobs running.\n" -"====\n" +#: src/filed/win32/winservice.cpp:517 src/filed/win32/winservice.cpp:553 +msgid "The Bacula service has been removed" msgstr "" -#: src/dird/ua_status.c:531 -msgid " JobId Level Name Status\n" +#: src/filed/win32/winservice.cpp:547 +msgid "The Bacula service could not be stopped" msgstr "" -#: src/dird/ua_status.c:540 -msgid "is waiting execution" +#: src/filed/win32/winservice.cpp:555 +msgid "The Bacula service could not be removed" msgstr "" -#: src/dird/ua_status.c:543 -msgid "is running" +#: src/filed/win32/winservice.cpp:560 +msgid "The Bacula service could not be found" msgstr "" -#: src/dird/ua_status.c:546 -msgid "is blocked" +#: src/filed/win32/winservice.cpp:565 +msgid "The SCM could not be contacted - the Bacula service was not removed" msgstr "" -#: src/dird/ua_status.c:549 -msgid "has terminated" +#: src/filed/win32/winservice.cpp:629 +msgid "SetServiceStatus failed" msgstr "" -#: src/dird/ua_status.c:552 -msgid "has erred" +#: src/filed/win32/winservice.cpp:657 +#, c-format +msgid "" +"\n" +"\n" +"%s error: %ld at %s:%d" msgstr "" -#: src/dird/ua_status.c:555 -msgid "has errors" +#: src/filed/win32/winservice.cpp:732 +#, c-format +msgid "Locked by: %s, duration: %ld seconds\n" msgstr "" -#: src/dird/ua_status.c:558 -msgid "has a fatal error" +#: src/filed/win32/winservice.cpp:736 +#, c-format +msgid "No longer locked\n" msgstr "" -#: src/dird/ua_status.c:561 -msgid "has verify differences" +#: src/filed/win32/winservice.cpp:740 +msgid "Could not lock database" msgstr "" -#: src/dird/ua_status.c:564 -msgid "has been canceled" +#: src/wx-console/console_thread.cpp:101 +#, 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 "" -#: src/dird/ua_status.c:568 -#, c-format -msgid "is waiting on Client %s" +#: src/wx-console/console_thread.cpp:108 +msgid "" +"No Director resource defined in config file.\n" +"Without that I don't how to speak to the Director :-(\n" msgstr "" -#: src/dird/ua_status.c:574 +#: src/wx-console/console_thread.cpp:127 #, c-format -msgid "is waiting on Storage %s" +msgid "" +"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " +"Console \"%s\" in config file.\n" msgstr "" -#: src/dird/ua_status.c:579 -msgid "is waiting on max Storage jobs" +#: src/wx-console/console_thread.cpp:148 +msgid "Error while initializing windows sockets...\n" msgstr "" -#: src/dird/ua_status.c:582 -msgid "is waiting on max Client jobs" +#: src/wx-console/console_thread.cpp:163 +msgid "Error while cleaning up windows sockets...\n" msgstr "" -#: src/dird/ua_status.c:585 -msgid "is waiting on max Job jobs" +#: src/wx-console/console_thread.cpp:201 +msgid "Error while initializing library." msgstr "" -#: src/dird/ua_status.c:588 -msgid "is waiting on max total jobs" +#: src/wx-console/console_thread.cpp:227 +msgid "Cryptographic library initialization failed.\n" msgstr "" -#: src/dird/ua_status.c:591 -msgid "is waiting for its start time" +#: src/wx-console/console_thread.cpp:231 +msgid "Please correct configuration file.\n" msgstr "" -#: src/dird/ua_status.c:594 -msgid "is waiting for higher priority jobs to finish" +#: src/wx-console/console_thread.cpp:273 +msgid "Error : Library not initialized\n" msgstr "" -#: src/dird/ua_status.c:599 -#, c-format -msgid "is in unknown state %c" +#: src/wx-console/console_thread.cpp:284 +msgid "Error : No configuration file loaded\n" msgstr "" -#: src/dird/ua_status.c:613 -msgid "is waiting for a mount request" +#: src/wx-console/console_thread.cpp:294 +msgid "Connecting...\n" msgstr "" -#: src/dird/ua_status.c:620 -msgid "is waiting for an appendable Volume" +#: src/wx-console/console_thread.cpp:310 +msgid "Error : No director defined in config file.\n" msgstr "" -#: src/dird/ua_status.c:627 -#, c-format -msgid "is waiting for Client %s to connect to Storage %s" +#: src/wx-console/console_thread.cpp:322 +msgid "Multiple directors found in your config file.\n" msgstr "" -#: src/dird/ua_status.c:643 +#: src/wx-console/console_thread.cpp:331 #, c-format -msgid "%6d %-6s %-20s %s\n" +msgid "Please choose a director (1-%d): " msgstr "" -#: src/dird/ua_status.c:671 -msgid " JobId Level Files Bytes Status Finished Name \n" +#: src/wx-console/console_thread.cpp:403 +msgid "Failed to connect to the director\n" msgstr "" -#: src/dird/ua_status.c:672 -msgid "========================================================================\n" +#: src/wx-console/console_thread.cpp:413 +msgid "Connected\n" msgstr "" -#: src/baconfig.h:59 -#, c-format -msgid "Failed ASSERT: %s\n" +#: src/wx-console/console_thread.cpp:470 +msgid "<< Unexpected signal received : " msgstr "" -#: src/baconfig.h:66 -msgid "*None*" +#: src/wx-console/console_thread.cpp:490 +msgid "Connection terminated\n" msgstr "" #: src/wx-console/main.cpp:101 @@ -14289,6 +13868,10 @@ msgstr "" msgid "Error while saving" msgstr "" +#: src/wx-console/wxbconfigpanel.cpp:184 +msgid "Apply" +msgstr "" + #: src/wx-console/wxbhistorytextctrl.cpp:61 #: src/wx-console/wxbhistorytextctrl.cpp:132 #: src/wx-console/wxbmainframe.cpp:272 @@ -14303,10 +13886,6 @@ msgstr "" msgid "Possible completions: " msgstr "" -#: src/wx-console/wxbconfigpanel.cpp:184 -msgid "Apply" -msgstr "" - #: src/wx-console/wxbmainframe.cpp:227 msgid "&About...\tF1" msgstr "" @@ -14424,161 +14003,79 @@ msgid "Configuration file read successfully" msgstr "" #: src/wx-console/wxbmainframe.cpp:454 -#, c-format -msgid "Using this configuration file: %s\n" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:459 -msgid "Connecting to the director..." -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:474 -msgid "Failed to unregister a data parser !" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:482 -msgid "Quitting.\n" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:497 -msgid "" -"Welcome to Bacula wx-console.\n" -"Written by Nicolas Boichat \n" -"(C) 2005 Kern Sibbald\n" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:499 -msgid "About Bacula wx-console" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:505 -msgid "Please choose your default configuration file" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:509 -msgid "Use this configuration file as default?" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:510 -msgid "Configuration file" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:581 -msgid "Console thread terminated." -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:589 -msgid "Connection to the director lost. Quit program?" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:590 -msgid "Connection lost" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:606 -msgid "Connected to the director." -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:629 -msgid "Reconnect" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:630 -msgid "Reconnect to the director" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:644 -msgid "Disconnected of the director." -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:663 src/wx-console/wxbrestorepanel.cpp:689 -msgid "Unexpected question has been received.\n" -msgstr "" - -#: src/wx-console/wxbmainframe.cpp:686 src/wx-console/wxbmainframe.cpp:703 -msgid "wx-console: unexpected director's question." -msgstr "" - -#: src/wx-console/console_thread.cpp:101 -#, 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" +#, c-format +msgid "Using this configuration file: %s\n" msgstr "" -#: src/wx-console/console_thread.cpp:108 -msgid "" -"No Director resource defined in config file.\n" -"Without that I don't how to speak to the Director :-(\n" +#: src/wx-console/wxbmainframe.cpp:459 +msgid "Connecting to the director..." msgstr "" -#: src/wx-console/console_thread.cpp:127 -#, c-format -msgid "" -"Neither \"TLS CA Certificate\" or \"TLS CA Certificate Dir\" are defined for " -"Console \"%s\" in config file.\n" +#: src/wx-console/wxbmainframe.cpp:474 +msgid "Failed to unregister a data parser !" msgstr "" -#: src/wx-console/console_thread.cpp:148 -msgid "Error while initializing windows sockets...\n" +#: src/wx-console/wxbmainframe.cpp:482 +msgid "Quitting.\n" msgstr "" -#: src/wx-console/console_thread.cpp:163 -msgid "Error while cleaning up windows sockets...\n" +#: src/wx-console/wxbmainframe.cpp:497 +msgid "" +"Welcome to Bacula wx-console.\n" +"Written by Nicolas Boichat \n" +"(C) 2005 Kern Sibbald\n" msgstr "" -#: src/wx-console/console_thread.cpp:201 -msgid "Error while initializing library." +#: src/wx-console/wxbmainframe.cpp:499 +msgid "About Bacula wx-console" msgstr "" -#: src/wx-console/console_thread.cpp:227 -msgid "Cryptographic library initialization failed.\n" +#: src/wx-console/wxbmainframe.cpp:505 +msgid "Please choose your default configuration file" msgstr "" -#: src/wx-console/console_thread.cpp:231 -msgid "Please correct configuration file.\n" +#: src/wx-console/wxbmainframe.cpp:509 +msgid "Use this configuration file as default?" msgstr "" -#: src/wx-console/console_thread.cpp:273 -msgid "Error : Library not initialized\n" +#: src/wx-console/wxbmainframe.cpp:510 +msgid "Configuration file" msgstr "" -#: src/wx-console/console_thread.cpp:284 -msgid "Error : No configuration file loaded\n" +#: src/wx-console/wxbmainframe.cpp:581 +msgid "Console thread terminated." msgstr "" -#: src/wx-console/console_thread.cpp:294 -msgid "Connecting...\n" +#: src/wx-console/wxbmainframe.cpp:589 +msgid "Connection to the director lost. Quit program?" msgstr "" -#: src/wx-console/console_thread.cpp:310 -msgid "Error : No director defined in config file.\n" +#: src/wx-console/wxbmainframe.cpp:590 +msgid "Connection lost" msgstr "" -#: src/wx-console/console_thread.cpp:322 -msgid "Multiple directors found in your config file.\n" +#: src/wx-console/wxbmainframe.cpp:606 +msgid "Connected to the director." msgstr "" -#: src/wx-console/console_thread.cpp:331 -#, c-format -msgid "Please choose a director (1-%d): " +#: src/wx-console/wxbmainframe.cpp:629 +msgid "Reconnect" msgstr "" -#: src/wx-console/console_thread.cpp:403 -msgid "Failed to connect to the director\n" +#: src/wx-console/wxbmainframe.cpp:630 +msgid "Reconnect to the director" msgstr "" -#: src/wx-console/console_thread.cpp:413 -msgid "Connected\n" +#: src/wx-console/wxbmainframe.cpp:644 +msgid "Disconnected of the director." msgstr "" -#: src/wx-console/console_thread.cpp:470 -msgid "<< Unexpected signal received : " +#: src/wx-console/wxbmainframe.cpp:663 src/wx-console/wxbrestorepanel.cpp:689 +msgid "Unexpected question has been received.\n" msgstr "" -#: src/wx-console/console_thread.cpp:490 -msgid "Connection terminated\n" +#: src/wx-console/wxbmainframe.cpp:686 src/wx-console/wxbmainframe.cpp:703 +msgid "wx-console: unexpected director's question." msgstr "" #: src/wx-console/wxbrestorepanel.cpp:216 @@ -14591,6 +14088,11 @@ msgstr "" msgid "Cancel restore" msgstr "" +#: src/wx-console/wxbrestorepanel.cpp:245 +#: src/wx-console/wxbrestorepanel.cpp:299 +msgid "Add" +msgstr "" + #: src/wx-console/wxbrestorepanel.cpp:247 #: src/wx-console/wxbrestorepanel.cpp:301 msgid "Remove" @@ -14960,176 +14462,3 @@ msgstr "" #: src/wx-console/wxbrestorepanel.cpp:1976 msgid "Restoring..." msgstr "" - -#: src/filed/win32/winservice.cpp:131 src/filed/win32/winservice.cpp:145 -msgid "No existing instance of Bacula could be contacted" -msgstr "" - -#: src/filed/win32/winservice.cpp:218 -msgid "KERNEL32.DLL not found: Bacula service not started" -msgstr "" - -#: src/filed/win32/winservice.cpp:228 -msgid "Registry service not found: Bacula service not started" -msgstr "" - -#: src/filed/win32/winservice.cpp:230 -msgid "Registry service not found" -msgstr "" - -#: src/filed/win32/winservice.cpp:260 -msgid "StartServiceCtrlDispatcher failed." -msgstr "" - -#: src/filed/win32/winservice.cpp:278 -msgid "RegisterServiceCtlHandler failed" -msgstr "" - -#: src/filed/win32/winservice.cpp:279 -msgid "Contact Register Service Handler failure" -msgstr "" - -#: src/filed/win32/winservice.cpp:295 -msgid "ReportStatus STOPPED failed 1" -msgstr "" - -#: src/filed/win32/winservice.cpp:318 -msgid "Report Service failure" -msgstr "" - -#: src/filed/win32/winservice.cpp:355 -msgid "Unable to install Bacula service" -msgstr "" - -#: src/filed/win32/winservice.cpp:373 -msgid "Service command length too long" -msgstr "" - -#: src/filed/win32/winservice.cpp:374 -msgid "Service command length too long. Service not registered." -msgstr "" - -#: src/filed/win32/winservice.cpp:389 -msgid "Cannot write System Registry" -msgstr "" - -#: src/filed/win32/winservice.cpp:390 -msgid "" -"The System Registry could not be updated - the Bacula service was not " -"installed" -msgstr "" - -#: src/filed/win32/winservice.cpp:397 -msgid "Cannot add Bacula key to System Registry" -msgstr "" - -#: src/filed/win32/winservice.cpp:398 src/filed/win32/winservice.cpp:449 -msgid "The Bacula service could not be installed" -msgstr "" - -#: src/filed/win32/winservice.cpp:406 -msgid "" -"The Bacula File service was successfully installed.\n" -"The service may be started by double clicking on the\n" -"Bacula \"Start\" icon and will be automatically\n" -"be run the next time this machine is rebooted. " -msgstr "" - -#: src/filed/win32/winservice.cpp:424 -msgid "" -"The Service Control Manager could not be contacted - the Bacula service was " -"not installed" -msgstr "" - -#: src/filed/win32/winservice.cpp:455 -msgid "" -"Provides file backup and restore services. Bacula -- the network backup " -"solution." -msgstr "" - -#: src/filed/win32/winservice.cpp:462 -msgid "" -"The Bacula File service was successfully installed.\n" -"The service may be started from the Control Panel and will\n" -"automatically be run the next time this machine is rebooted." -msgstr "" - -#: src/filed/win32/winservice.cpp:471 -msgid "" -"Unknown Windows operating system.\n" -"Cannot install Bacula service.\n" -msgstr "" - -#: src/filed/win32/winservice.cpp:496 -msgid "" -"Could not find registry entry.\n" -"Service probably not registerd - the Bacula service was not removed" -msgstr "" - -#: src/filed/win32/winservice.cpp:501 -msgid "" -"Could not delete Registry key.\n" -"The Bacula service could not be removed" -msgstr "" - -#: src/filed/win32/winservice.cpp:511 -msgid "Bacula could not be contacted, probably not running" -msgstr "" - -#: src/filed/win32/winservice.cpp:517 src/filed/win32/winservice.cpp:553 -msgid "The Bacula service has been removed" -msgstr "" - -#: src/filed/win32/winservice.cpp:547 -msgid "The Bacula service could not be stopped" -msgstr "" - -#: src/filed/win32/winservice.cpp:555 -msgid "The Bacula service could not be removed" -msgstr "" - -#: src/filed/win32/winservice.cpp:560 -msgid "The Bacula service could not be found" -msgstr "" - -#: src/filed/win32/winservice.cpp:565 -msgid "The SCM could not be contacted - the Bacula service was not removed" -msgstr "" - -#: src/filed/win32/winservice.cpp:629 -msgid "SetServiceStatus failed" -msgstr "" - -#: src/filed/win32/winservice.cpp:657 -#, c-format -msgid "" -"\n" -"\n" -"%s error: %ld at %s:%d" -msgstr "" - -#: src/filed/win32/winservice.cpp:732 -#, c-format -msgid "Locked by: %s, duration: %ld seconds\n" -msgstr "" - -#: src/filed/win32/winservice.cpp:736 -#, c-format -msgid "No longer locked\n" -msgstr "" - -#: src/filed/win32/winservice.cpp:740 -msgid "Could not lock database" -msgstr "" - -#: src/filed/win32/winmain.cpp:228 src/filed/win32/winmain.cpp:236 -msgid "Bacula Usage" -msgstr "" - -#: src/filed/win32/winmain.cpp:233 -msgid "Bad Command Line Options" -msgstr "" - -#: src/filed/win32/winmain.cpp:326 -msgid "Another instance of Bacula is already running" -msgstr "" diff --git a/bacula/scripts/.cvsignore b/bacula/scripts/.cvsignore index e39d44a262..fc317cd451 100644 --- a/bacula/scripts/.cvsignore +++ b/bacula/scripts/.cvsignore @@ -24,3 +24,6 @@ bacula.desktop.gnome2.xsu bacula.desktop.gnome2.consolehelper bacula.desktop.gnome1.xsu bacula.desktop.gnome1.consolehelper +bacula-ctl-sd +bacula-ctl-fd +bacula-ctl-dir diff --git a/bacula/scripts/Makefile.in b/bacula/scripts/Makefile.in index 1bf17739fc..19aa7e3f96 100755 --- a/bacula/scripts/Makefile.in +++ b/bacula/scripts/Makefile.in @@ -38,6 +38,9 @@ install: installdirs $(INSTALL_SCRIPT) bconsole $(DESTDIR)$(scriptdir)/bconsole $(INSTALL_SCRIPT) gconsole $(DESTDIR)$(scriptdir)/gconsole $(INSTALL_SCRIPT) bacula $(DESTDIR)$(scriptdir)/bacula + $(INSTALL_SCRIPT) bacula-ctl-dir $(DESTDIR)$(scriptdir)/bacula-ctl-dir + $(INSTALL_SCRIPT) bacula-ctl-fd $(DESTDIR)$(scriptdir)/bacula-ctl-fd + $(INSTALL_SCRIPT) bacula-ctl-sd $(DESTDIR)$(scriptdir)/bacula-ctl-sd @if test -f ${DESTDIR}${scriptdir}/mtx-changer; then \ echo " ==> Saving existing mtx-changer to mtx-changer.old"; \ $(MV) -f ${DESTDIR}${scriptdir}/mtx-changer ${DESTDIR}${scriptdir}/mtx-changer.old; \ @@ -69,6 +72,9 @@ uninstall: (cd $(DESTDIR)$(scriptdir); $(RMF) bconsole) (cd $(DESTDIR)$(scriptdir); $(RMF) gconsole) (cd $(DESTDIR)$(scriptdir); $(RMF) bacula) + (cd $(DESTDIR)$(scriptdir); $(RMF) bacula-ctl-dir) + (cd $(DESTDIR)$(scriptdir); $(RMF) bacula-ctl-fd) + (cd $(DESTDIR)$(scriptdir); $(RMF) bacula-ctl-sd) (cd $(DESTDIR)$(scriptdir); $(RMF) fd) (cd $(DESTDIR)$(scriptdir); $(RMF) mtx-changer) (cd $(DESTDIR)$(scriptdir); $(RMF) disk-changer) @@ -82,11 +88,13 @@ Makefile: Makefile.in cd $(topdir) \ && CONFIG_FILES=$(thisdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status chmod 755 startmysql stopmysql bacula startit stopit btraceback + chmod 755 bacula-ctl-dir bacula-ctl-fd bacula-ctl-sd chmod 755 disk-changer mtx-changer dvd-handler bconsole gconsole Makefiles: $(SHELL) config.status chmod 755 startmysql stopmysql bacula startit stopit btraceback + chmod 755 bacula-ctl-dir bacula-ctl-fd bacula-ctl-sd chmod 755 mtx-changer dvd-handler bconsole gconsole clean: @@ -95,6 +103,7 @@ clean: # clean for distribution distclean: clean @$(RMF) startmysql stopmysql bacula fd startit stopit btraceback + @$(RMF) bacula-ctl-dir bacula-ctl-fd bacula-ctl-sd @$(RMF) bconsole gconsole logrotate bacula.desktop @$(RMF) bacula.desktop.gnome1 bacula.desktop.gnome2 mtx-changer dvd-handler @$(RMF) gnome-console.console_apps bacula.desktop.gnome2.xsu diff --git a/bacula/scripts/bacula-ctl-dir.in b/bacula/scripts/bacula-ctl-dir.in new file mode 100644 index 0000000000..37d22aff86 --- /dev/null +++ b/bacula/scripts/bacula-ctl-dir.in @@ -0,0 +1,237 @@ +#! /bin/sh +# +# bacula-ctl-dir This shell script takes care of starting and stopping +# the bacula Director daemon +# +# This is pretty much watered down version of the RedHat script +# that works on Solaris as well as Linux, but it won't work everywhere. +# +# description: It comes by night and sucks the vital essence from your computers. +# + +PSCMD="@PSCMD@" +PS="ps" + +# +# On Solaris, you may need to use nawk, or alternatively, +# add the GNU binaries to your path, such as /usr/xpg4/bin +# +AWK=@AWK@ + +# All these are not *really* needed but it makes it +# easier to "steal" this code for the development +# environment where they are different. +# +BACDIRBIN=@sbindir@ +BACDIRCFG=@sysconfdir@ +PIDDIR=@piddir@ +SUBSYSDIR=@subsysdir@ + +DIR_PORT=@dir_port@ + +DIR_USER=@dir_user@ +DIR_GROUP=@dir_group@ + +PIDOF=@PIDOF@ + +# A function to stop a program. +killproc() { + RC=0 + # Test syntax. + if [ $# = 0 ]; then + echo "Usage: killproc {program} {port} [signal]" + return 1 + fi + + notset=0 + # check for third arg to be kill level + if [ "$3" != "" ] ; then + killlevel=$3 + else + notset=1 + killlevel="-9" + fi + + # Get base program name + base=`basename $1` + + # Find pid. + pid=`pidofproc $base $2` + + # Kill it. + if [ "$pid" != "" ] ; then + if [ "$notset" = "1" ] ; then + if ${PS} -p "$pid">/dev/null 2>&1; then + # TERM first, then KILL if not dead + kill -TERM $pid 2>/dev/null + sleep 1 + if ${PS} -p "$pid" >/dev/null 2>&1 ; then + sleep 1 + if ${PS} -p "$pid" >/dev/null 2>&1 ; then + sleep 3 + if ${PS} -p "$pid" >/dev/null 2>&1 ; then + kill -KILL $pid 2>/dev/null + fi + fi + fi + fi + ${PS} -p "$pid" >/dev/null 2>&1 + RC=$? + [ $RC -eq 0 ] && failure "$base shutdown" || success "$base shutdown" + # RC=$((! $RC)) + # use specified level only + else + if ${PS} -p "$pid" >/dev/null 2>&1; then + kill $killlevel $pid 2>/dev/null + RC=$? + [ $RC -eq 0 ] && success "$base $killlevel" || failure "$base $killlevel" + fi + fi + else + failure "$base shutdown" + fi + # Remove pid file if any. + if [ "$notset" = "1" ]; then + rm -f ${PIDDIR}/$base.$2.pid + fi + return $RC +} + +# A function to find the pid of a program. +pidofproc() { + pid="" + # Test syntax. + if [ $# = 0 ] ; then + echo "Usage: pidofproc {program}" + return 1 + fi + + # Get base program name + base=`basename $1` + + # First try PID file + if [ -f ${PIDDIR}/$base.$2.pid ] ; then + pid=`head -n 1 ${PIDDIR}/$base.$2.pid` + if [ "$pid" != "" ] ; then + echo $pid + return 0 + fi + fi + + # Next try "pidof" + if [ -x ${PIDOF} ] ; then + pid=`${PIDOF} $1` + fi + if [ "$pid" != "" ] ; then + echo $pid + return 0 + fi + + # Finally try to extract it from ps + ${PSCMD} | grep $1 | ${AWK} '{ print $1 }' | tr '\n' ' ' + return 0 +} + +status() { + pid="" + # Test syntax. + if [ $# = 0 ] ; then + echo "Usage: status {program} {port}" + return 1 + fi + + # Get base program name + base=`basename $1` + + # First try "pidof" + if [ -x ${PIDOF} ] ; then + pid=`${PIDOF} $1` + fi + if [ "$pid" != "" ] ; then + echo "$base (pid $pid) is running..." + return 0 + else + pid=`${PSCMD} | ${AWK} 'BEGIN { prog=ARGV[1]; ARGC=1 } + { if ((prog == $2) || (("(" prog ")") == $2) || + (("[" prog "]") == $2) || + ((prog ":") == $2)) { print $1 ; exit 0 } }' $1` + if [ "$pid" != "" ] ; then + echo "$base (pid $pid) is running..." + return 0 + fi + fi + + # Next try the PID files + if [ -f ${PIDDIR}/$base.$2.pid ] ; then + pid=`head -n 1 ${PIDDIR}/$base.$2.pid` + if [ "$pid" != "" ] ; then + echo "$base dead but pid file exists" + return 1 + fi + fi + # See if the subsys lock exists + if [ -f ${SUBSYSDIR}/$base ] ; then + echo "$base dead but subsys locked" + return 2 + fi + echo "$base is stopped" + return 3 +} + +success() { + return 0 +} + +failure() { + rc=$? + return $rc +} + +OS=`uname -s` + +# if /lib/tls exists, force Bacula to use the glibc pthreads instead +if [ -d "/lib/tls" -a $OS = "Linux" -a `uname -r | cut -c1-3` = "2.4" ] ; then + export LD_ASSUME_KERNEL=2.4.19 +fi + +case "$1" in + start) + [ -x ${BACDIRBIN}/bacula-dir ] && { + sleep 2 + echo "Starting the Bacula Director daemon" + OPTIONS='' + if [ "${DIR_USER}" != '' ]; then + OPTIONS="${OPTIONS} -u ${DIR_USER}" + fi + + if [ "${DIR_GROUP}" != '' ]; then + OPTIONS="${OPTIONS} -g ${DIR_GROUP}" + fi + + ${BACDIRBIN}/bacula-dir $2 ${OPTIONS} -v -c ${BACDIRCFG}/bacula-dir.conf + } + ;; + + stop) + [ -x ${BACDIRBIN}/bacula-dir ] && { + echo "Stopping the Bacula Director daemon" + killproc ${BACDIRBIN}/bacula-dir ${DIR_PORT} + } + ;; + + restart) + $0 stop + sleep 5 + $0 start + ;; + + status) + [ -x ${BACDIRBIN}/bacula-dir ] && status ${BACDIRBIN}/bacula-dir ${DIR_PORT} + ;; + + *) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 + ;; +esac +exit 0 diff --git a/bacula/scripts/bacula-ctl-fd.in b/bacula/scripts/bacula-ctl-fd.in new file mode 100644 index 0000000000..f3552c32d1 --- /dev/null +++ b/bacula/scripts/bacula-ctl-fd.in @@ -0,0 +1,237 @@ +#! /bin/sh +# +# bacula-ctl-fd This shell script takes care of starting and stopping +# the bacula File daemon. +# +# This is pretty much watered down version of the RedHat script +# that works on Solaris as well as Linux, but it won't work everywhere. +# +# description: It comes by night and sucks the vital essence from your computers. +# + +PSCMD="@PSCMD@" +PS="ps" + +# +# On Solaris, you may need to use nawk, or alternatively, +# add the GNU binaries to your path, such as /usr/xpg4/bin +# +AWK=@AWK@ + +# All these are not *really* needed but it makes it +# easier to "steal" this code for the development +# environment where they are different. +# +BACFDBIN=@sbindir@ +BACFDCFG=@sysconfdir@ +PIDDIR=@piddir@ +SUBSYSDIR=@subsysdir@ + +FD_PORT=@fd_port@ + +FD_USER=@fd_user@ +FD_GROUP=@fd_group@ + +PIDOF=@PIDOF@ + +# A function to stop a program. +killproc() { + RC=0 + # Test syntax. + if [ $# = 0 ]; then + echo "Usage: killproc {program} {port} [signal]" + return 1 + fi + + notset=0 + # check for third arg to be kill level + if [ "$3" != "" ] ; then + killlevel=$3 + else + notset=1 + killlevel="-9" + fi + + # Get base program name + base=`basename $1` + + # Find pid. + pid=`pidofproc $base $2` + + # Kill it. + if [ "$pid" != "" ] ; then + if [ "$notset" = "1" ] ; then + if ${PS} -p "$pid">/dev/null 2>&1; then + # TERM first, then KILL if not dead + kill -TERM $pid 2>/dev/null + sleep 1 + if ${PS} -p "$pid" >/dev/null 2>&1 ; then + sleep 1 + if ${PS} -p "$pid" >/dev/null 2>&1 ; then + sleep 3 + if ${PS} -p "$pid" >/dev/null 2>&1 ; then + kill -KILL $pid 2>/dev/null + fi + fi + fi + fi + ${PS} -p "$pid" >/dev/null 2>&1 + RC=$? + [ $RC -eq 0 ] && failure "$base shutdown" || success "$base shutdown" + # RC=$((! $RC)) + # use specified level only + else + if ${PS} -p "$pid" >/dev/null 2>&1; then + kill $killlevel $pid 2>/dev/null + RC=$? + [ $RC -eq 0 ] && success "$base $killlevel" || failure "$base $killlevel" + fi + fi + else + failure "$base shutdown" + fi + # Remove pid file if any. + if [ "$notset" = "1" ]; then + rm -f ${PIDDIR}/$base.$2.pid + fi + return $RC +} + +# A function to find the pid of a program. +pidofproc() { + pid="" + # Test syntax. + if [ $# = 0 ] ; then + echo "Usage: pidofproc {program}" + return 1 + fi + + # Get base program name + base=`basename $1` + + # First try PID file + if [ -f ${PIDDIR}/$base.$2.pid ] ; then + pid=`head -n 1 ${PIDDIR}/$base.$2.pid` + if [ "$pid" != "" ] ; then + echo $pid + return 0 + fi + fi + + # Next try "pidof" + if [ -x ${PIDOF} ] ; then + pid=`${PIDOF} $1` + fi + if [ "$pid" != "" ] ; then + echo $pid + return 0 + fi + + # Finally try to extract it from ps + ${PSCMD} | grep $1 | ${AWK} '{ print $1 }' | tr '\n' ' ' + return 0 +} + +status() { + pid="" + # Test syntax. + if [ $# = 0 ] ; then + echo "Usage: status {program} {port}" + return 1 + fi + + # Get base program name + base=`basename $1` + + # First try "pidof" + if [ -x ${PIDOF} ] ; then + pid=`${PIDOF} $1` + fi + if [ "$pid" != "" ] ; then + echo "$base (pid $pid) is running..." + return 0 + else + pid=`${PSCMD} | ${AWK} 'BEGIN { prog=ARGV[1]; ARGC=1 } + { if ((prog == $2) || (("(" prog ")") == $2) || + (("[" prog "]") == $2) || + ((prog ":") == $2)) { print $1 ; exit 0 } }' $1` + if [ "$pid" != "" ] ; then + echo "$base (pid $pid) is running..." + return 0 + fi + fi + + # Next try the PID files + if [ -f ${PIDDIR}/$base.$2.pid ] ; then + pid=`head -n 1 ${PIDDIR}/$base.$2.pid` + if [ "$pid" != "" ] ; then + echo "$base dead but pid file exists" + return 1 + fi + fi + # See if the subsys lock exists + if [ -f ${SUBSYSDIR}/$base ] ; then + echo "$base dead but subsys locked" + return 2 + fi + echo "$base is stopped" + return 3 +} + +success() { + return 0 +} + +failure() { + rc=$? + return $rc +} + +OS=`uname -s` + +# if /lib/tls exists, force Bacula to use the glibc pthreads instead +if [ -d "/lib/tls" -a $OS = "Linux" -a `uname -r | cut -c1-3` = "2.4" ] ; then + export LD_ASSUME_KERNEL=2.4.19 +fi + +case "$1" in + start) + [ -x ${BACFDBIN}/bacula-fd ] && { + echo "Starting the Bacula File daemon" + OPTIONS='' + if [ "${FD_USER}" != '' ]; then + OPTIONS="${OPTIONS} -u ${FD_USER}" + fi + + if [ "${FD_GROUP}" != '' ]; then + OPTIONS="${OPTIONS} -g ${FD_GROUP}" + fi + + ${BACFDBIN}/bacula-fd $2 ${OPTIONS} -v -c ${BACFDCFG}/bacula-fd.conf + } + ;; + + stop) + # Stop the FD first so that SD will fail jobs and update catalog + [ -x ${BACFDBIN}/bacula-fd ] && { + echo "Stopping the Bacula File daemon" + killproc ${BACFDBIN}/bacula-fd ${FD_PORT} + } + ;; + + restart) + $0 stop + sleep 5 + $0 start + ;; + + status) + [ -x ${BACFDBIN}/bacula-fd ] && status ${BACFDBIN}/bacula-fd ${FD_PORT} + ;; + + *) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 + ;; +esac +exit 0 diff --git a/bacula/scripts/bacula-ctl-sd.in b/bacula/scripts/bacula-ctl-sd.in new file mode 100644 index 0000000000..9586bfc84c --- /dev/null +++ b/bacula/scripts/bacula-ctl-sd.in @@ -0,0 +1,237 @@ +#! /bin/sh +# +# bacula-ctl-sd This shell script takes care of starting and stopping +# the bacula Storage daemon +# +# This is pretty much watered down version of the RedHat script +# that works on Solaris as well as Linux, but it won't work everywhere. +# +# description: It comes by night and sucks the vital essence from your computers. +# + +PSCMD="@PSCMD@" +PS="ps" + +# +# On Solaris, you may need to use nawk, or alternatively, +# add the GNU binaries to your path, such as /usr/xpg4/bin +# +AWK=@AWK@ + +# All these are not *really* needed but it makes it +# easier to "steal" this code for the development +# environment where they are different. +# +BACSDBIN=@sbindir@ +BACSDCFG=@sysconfdir@ +PIDDIR=@piddir@ +SUBSYSDIR=@subsysdir@ + +SD_PORT=@sd_port@ + +SD_USER=@sd_user@ +SD_GROUP=@sd_group@ + +PIDOF=@PIDOF@ + +# A function to stop a program. +killproc() { + RC=0 + # Test syntax. + if [ $# = 0 ]; then + echo "Usage: killproc {program} {port} [signal]" + return 1 + fi + + notset=0 + # check for third arg to be kill level + if [ "$3" != "" ] ; then + killlevel=$3 + else + notset=1 + killlevel="-9" + fi + + # Get base program name + base=`basename $1` + + # Find pid. + pid=`pidofproc $base $2` + + # Kill it. + if [ "$pid" != "" ] ; then + if [ "$notset" = "1" ] ; then + if ${PS} -p "$pid">/dev/null 2>&1; then + # TERM first, then KILL if not dead + kill -TERM $pid 2>/dev/null + sleep 1 + if ${PS} -p "$pid" >/dev/null 2>&1 ; then + sleep 1 + if ${PS} -p "$pid" >/dev/null 2>&1 ; then + sleep 3 + if ${PS} -p "$pid" >/dev/null 2>&1 ; then + kill -KILL $pid 2>/dev/null + fi + fi + fi + fi + ${PS} -p "$pid" >/dev/null 2>&1 + RC=$? + [ $RC -eq 0 ] && failure "$base shutdown" || success "$base shutdown" + # RC=$((! $RC)) + # use specified level only + else + if ${PS} -p "$pid" >/dev/null 2>&1; then + kill $killlevel $pid 2>/dev/null + RC=$? + [ $RC -eq 0 ] && success "$base $killlevel" || failure "$base $killlevel" + fi + fi + else + failure "$base shutdown" + fi + # Remove pid file if any. + if [ "$notset" = "1" ]; then + rm -f ${PIDDIR}/$base.$2.pid + fi + return $RC +} + +# A function to find the pid of a program. +pidofproc() { + pid="" + # Test syntax. + if [ $# = 0 ] ; then + echo "Usage: pidofproc {program}" + return 1 + fi + + # Get base program name + base=`basename $1` + + # First try PID file + if [ -f ${PIDDIR}/$base.$2.pid ] ; then + pid=`head -n 1 ${PIDDIR}/$base.$2.pid` + if [ "$pid" != "" ] ; then + echo $pid + return 0 + fi + fi + + # Next try "pidof" + if [ -x ${PIDOF} ] ; then + pid=`${PIDOF} $1` + fi + if [ "$pid" != "" ] ; then + echo $pid + return 0 + fi + + # Finally try to extract it from ps + ${PSCMD} | grep $1 | ${AWK} '{ print $1 }' | tr '\n' ' ' + return 0 +} + +status() { + pid="" + # Test syntax. + if [ $# = 0 ] ; then + echo "Usage: status {program} {port}" + return 1 + fi + + # Get base program name + base=`basename $1` + + # First try "pidof" + if [ -x ${PIDOF} ] ; then + pid=`${PIDOF} $1` + fi + if [ "$pid" != "" ] ; then + echo "$base (pid $pid) is running..." + return 0 + else + pid=`${PSCMD} | ${AWK} 'BEGIN { prog=ARGV[1]; ARGC=1 } + { if ((prog == $2) || (("(" prog ")") == $2) || + (("[" prog "]") == $2) || + ((prog ":") == $2)) { print $1 ; exit 0 } }' $1` + if [ "$pid" != "" ] ; then + echo "$base (pid $pid) is running..." + return 0 + fi + fi + + # Next try the PID files + if [ -f ${PIDDIR}/$base.$2.pid ] ; then + pid=`head -n 1 ${PIDDIR}/$base.$2.pid` + if [ "$pid" != "" ] ; then + echo "$base dead but pid file exists" + return 1 + fi + fi + # See if the subsys lock exists + if [ -f ${SUBSYSDIR}/$base ] ; then + echo "$base dead but subsys locked" + return 2 + fi + echo "$base is stopped" + return 3 +} + +success() { + return 0 +} + +failure() { + rc=$? + return $rc +} + +OS=`uname -s` + +# if /lib/tls exists, force Bacula to use the glibc pthreads instead +if [ -d "/lib/tls" -a $OS = "Linux" -a `uname -r | cut -c1-3` = "2.4" ] ; then + export LD_ASSUME_KERNEL=2.4.19 +fi + +case "$1" in + start) + [ -x ${BACSDBIN}/bacula-sd ] && { + echo "Starting the Bacula Storage daemon" + OPTIONS='' + if [ "${SD_USER}" != '' ]; then + OPTIONS="${OPTIONS} -u ${SD_USER}" + fi + + if [ "${SD_GROUP}" != '' ]; then + OPTIONS="${OPTIONS} -g ${SD_GROUP}" + fi + + ${BACSDBIN}/bacula-sd $2 ${OPTIONS} -v -c ${BACSDCFG}/bacula-sd.conf + } + ;; + + + stop) + [ -x ${BACSDBIN}/bacula-sd ] && { + echo "Stopping the Bacula Storage daemon" + killproc ${BACSDBIN}/bacula-sd ${SD_PORT} + } + ;; + + restart) + $0 stop + sleep 5 + $0 start + ;; + + status) + [ -x ${BACSDBIN}/bacula-sd ] && status ${BACSDBIN}/bacula-sd ${SD_PORT} + ;; + + *) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 + ;; +esac +exit 0 diff --git a/bacula/scripts/bacula.in b/bacula/scripts/bacula.in index 8aa6b5c5d8..967f58ef3d 100755 --- a/bacula/scripts/bacula.in +++ b/bacula/scripts/bacula.in @@ -9,15 +9,6 @@ # description: It comes by night and sucks the vital essence from your computers. # -PSCMD="@PSCMD@" -PS="ps" - -# -# On Solaris, you may need to use nawk, or alternatively, -# add the GNU binaries to your path, such as /usr/xpg4/bin -# -AWK=@AWK@ - # All these are not *really* needed but it makes it # easier to "steal" this code for the development # environment where they are different. @@ -28,257 +19,32 @@ BACSDBIN=@sbindir@ BACSDCFG=@sysconfdir@ BACDIRBIN=@sbindir@ BACDIRCFG=@sysconfdir@ -PIDDIR=@piddir@ -SUBSYSDIR=@subsysdir@ - -DIR_PORT=@dir_port@ -FD_PORT=@fd_port@ -SD_PORT=@sd_port@ - -DIR_USER=@dir_user@ -DIR_GROUP=@dir_group@ -FD_USER=@fd_user@ -FD_GROUP=@fd_group@ -SD_USER=@sd_user@ -SD_GROUP=@sd_group@ - -PIDOF=@PIDOF@ - -# A function to stop a program. -killproc() { - RC=0 - # Test syntax. - if [ $# = 0 ]; then - echo "Usage: killproc {program} {port} [signal]" - return 1 - fi - - notset=0 - # check for third arg to be kill level - if [ "$3" != "" ] ; then - killlevel=$3 - else - notset=1 - killlevel="-9" - fi - - # Get base program name - base=`basename $1` - - # Find pid. - pid=`pidofproc $base $2` - - # Kill it. - if [ "$pid" != "" ] ; then - if [ "$notset" = "1" ] ; then - if ${PS} -p $pid>/dev/null 2>&1; then - # TERM first, then KILL if not dead - kill -TERM $pid 2>/dev/null - sleep 1 - if ${PS} -p $pid >/dev/null 2>&1 ; then - sleep 1 - if ${PS} -p $pid >/dev/null 2>&1 ; then - sleep 3 - if ${PS} -p $pid >/dev/null 2>&1 ; then - kill -KILL $pid 2>/dev/null - fi - fi - fi - fi - ${PS} -p $pid >/dev/null 2>&1 - RC=$? - [ $RC -eq 0 ] && failure "$base shutdown" || success "$base shutdown" - # RC=$((! $RC)) - # use specified level only - else - if ${PS} -p $pid >/dev/null 2>&1; then - kill $killlevel $pid 2>/dev/null - RC=$? - [ $RC -eq 0 ] && success "$base $killlevel" || failure "$base $killlevel" - fi - fi - else - failure "$base shutdown" - fi - # Remove pid file if any. - if [ "$notset" = "1" ]; then - rm -f ${PIDDIR}/$base.$2.pid - fi - return $RC -} - -# A function to find the pid of a program. -pidofproc() { - pid="" - # Test syntax. - if [ $# = 0 ] ; then - echo "Usage: pidofproc {program}" - return 1 - fi - - # Get base program name - base=`basename $1` - - # First try PID file - if [ -f ${PIDDIR}/$base.$2.pid ] ; then - pid=`head -n 1 ${PIDDIR}/$base.$2.pid` - if [ "$pid" != "" ] ; then - echo $pid - return 0 - fi - fi - - # Next try "pidof" - if [ -x ${PIDOF} ] ; then - pid=`${PIDOF} $1` - fi - if [ "$pid" != "" ] ; then - echo $pid - return 0 - fi - - # Finally try to extract it from ps - ${PSCMD} | grep $1 | ${AWK} '{ print $1 }' | tr '\n' ' ' - return 0 -} - -status() { - pid="" - # Test syntax. - if [ $# = 0 ] ; then - echo "Usage: status {program} {port}" - return 1 - fi - - # Get base program name - base=`basename $1` - - # First try "pidof" - if [ -x ${PIDOF} ] ; then - pid=`${PIDOF} $1` - fi - if [ "$pid" != "" ] ; then - echo "$base (pid $pid) is running..." - return 0 - else - pid=`${PSCMD} | ${AWK} 'BEGIN { prog=ARGV[1]; ARGC=1 } - { if ((prog == $2) || (("(" prog ")") == $2) || - (("[" prog "]") == $2) || - ((prog ":") == $2)) { print $1 ; exit 0 } }' $1` - if [ "$pid" != "" ] ; then - echo "$base (pid $pid) is running..." - return 0 - fi - fi - - # Next try the PID files - if [ -f ${PIDDIR}/$base.$2.pid ] ; then - pid=`head -n 1 ${PIDDIR}/$base.$2.pid` - if [ "$pid" != "" ] ; then - echo "$base dead but pid file exists" - return 1 - fi - fi - # See if the subsys lock exists - if [ -f ${SUBSYSDIR}/$base ] ; then - echo "$base dead but subsys locked" - return 2 - fi - echo "$base is stopped" - return 3 -} - -success() { - return 0 -} - -failure() { - rc=$? - return $rc -} - -OS=`uname -s` - -# if /lib/tls exists, force Bacula to use the glibc pthreads instead -if [ -d "/lib/tls" -a $OS = "Linux" -a `uname -r | cut -c1-3` = "2.4" ] ; then - export LD_ASSUME_KERNEL=2.4.19 -fi case "$1" in start) - [ -x ${BACSDBIN}/bacula-sd ] && { - echo "Starting the Bacula Storage daemon" - OPTIONS='' - if [ "${SD_USER}" != '' ]; then - OPTIONS="${OPTIONS} -u ${SD_USER}" - fi - - if [ "${SD_GROUP}" != '' ]; then - OPTIONS="${OPTIONS} -g ${SD_GROUP}" - fi - - ${BACSDBIN}/bacula-sd $2 ${OPTIONS} -v -c ${BACSDCFG}/bacula-sd.conf - } - - [ -x ${BACFDBIN}/bacula-fd ] && { - echo "Starting the Bacula File daemon" - OPTIONS='' - if [ "${FD_USER}" != '' ]; then - OPTIONS="${OPTIONS} -u ${FD_USER}" - fi - - if [ "${FD_GROUP}" != '' ]; then - OPTIONS="${OPTIONS} -g ${FD_GROUP}" - fi - - ${BACFDBIN}/bacula-fd $2 ${OPTIONS} -v -c ${BACFDCFG}/bacula-fd.conf - } - - [ -x ${BACDIRBIN}/bacula-dir ] && { - sleep 2 - echo "Starting the Bacula Director daemon" - OPTIONS='' - if [ "${DIR_USER}" != '' ]; then - OPTIONS="${OPTIONS} -u ${DIR_USER}" - fi - - if [ "${DIR_GROUP}" != '' ]; then - OPTIONS="${OPTIONS} -g ${DIR_GROUP}" - fi - - ${BACDIRBIN}/bacula-dir $2 ${OPTIONS} -v -c ${BACDIRCFG}/bacula-dir.conf - } + [ -x ${BACSDBIN}/bacula-ctl-sd ] && ${BACSDBIN}/bacula-ctl-sd $1 $2 + [ -x ${BACFDBIN}/bacula-ctl-fd ] && ${BACFDBIN}/bacula-ctl-fd $1 $2 + [ -x ${BACDIRBIN}/bacula-ctl-dir ] && ${BACDIRBIN}/bacula-ctl-dir $1 $2 ;; stop) # Stop the FD first so that SD will fail jobs and update catalog - [ -x ${BACFDBIN}/bacula-fd ] && { - echo "Stopping the Bacula File daemon" - killproc ${BACFDBIN}/bacula-fd ${FD_PORT} - } - - [ -x ${BACSDBIN}/bacula-sd ] && { - echo "Stopping the Bacula Storage daemon" - killproc ${BACSDBIN}/bacula-sd ${SD_PORT} - } - - [ -x ${BACDIRBIN}/bacula-dir ] && { - echo "Stopping the Bacula Director daemon" - killproc ${BACDIRBIN}/bacula-dir ${DIR_PORT} - } + [ -x ${BACFDBIN}/bacula-ctl-fd ] && ${BACFDBIN}/bacula-ctl-fd $1 $2 + [ -x ${BACSDBIN}/bacula-ctl-sd ] && ${BACSDBIN}/bacula-ctl-sd $1 $2 + [ -x ${BACDIRBIN}/bacula-ctl-dir ] && ${BACDIRBIN}/bacula-ctl-dir $1 $2 echo + sleep 6 ;; restart) $0 stop - sleep 5 $0 start ;; status) - [ -x ${BACSDBIN}/bacula-sd ] && status ${BACSDBIN}/bacula-sd ${SD_PORT} - [ -x ${BACFDBIN}/bacula-fd ] && status ${BACFDBIN}/bacula-fd ${FD_PORT} - [ -x ${BACDIRBIN}/bacula-dir ] && status ${BACDIRBIN}/bacula-dir ${DIR_PORT} + [ -x ${BACSDBIN}/bacula-ctl-sd ] && ${BACSDBIN}/bacula-ctl-sd status + [ -x ${BACFDBIN}/bacula-ctl-fd ] && ${BACFDBIN}/bacula-ctl-fd status + [ -x ${BACDIRBIN}/bacula-ctl-dir ] && ${BACDIRBIN}/bacula-ctl-dir status ;; *) diff --git a/bacula/src/baconfig.h b/bacula/src/baconfig.h index 0e1ce65627..1114e0e94d 100644 --- a/bacula/src/baconfig.h +++ b/bacula/src/baconfig.h @@ -30,18 +30,14 @@ #define TRUE 1 #define FALSE 0 -#ifndef MAX -#define MAX(a, b) ((a) > (b) ? (a) : (b)) -#endif -#ifndef MIN -#define MIN(a, b) ((a) < (b) ? (a) : (b)) -#endif - #ifdef HAVE_TLS #define have_tls 1 #else #define have_tls 0 #endif +/* For compatibility with 1.39 */ +#define cleanup_crypto cleanup_tls +#define init_crypto init_tls #ifndef ETIME #define ETIME ETIMEDOUT @@ -151,7 +147,6 @@ * STREAM_SHA256_DIGEST * STREAM_SHA512_DIGEST */ -#define STREAM_NONE 0 /* Reserved Non-Stream */ #define STREAM_UNIX_ATTRIBUTES 1 /* Generic Unix attributes */ #define STREAM_FILE_DATA 2 /* Standard uncompressed data */ #define STREAM_MD5_SIGNATURE 3 /* deprecated */ @@ -173,15 +168,11 @@ #define STREAM_UNIX_ATTRIBUTES_ACCESS_ACL 15 /* Standard ACL attributes on UNIX */ #define STREAM_UNIX_ATTRIBUTES_DEFAULT_ACL 16 /* Default ACL attributes on UNIX */ /*** FIXME ***/ -#define STREAM_SHA256_DIGEST 17 /* SHA-256 digest for the file */ -#define STREAM_SHA512_DIGEST 18 /* SHA-512 digest for the file */ -#define STREAM_SIGNED_DIGEST 19 /* Signed File Digest, ASN.1, DER Encoded */ -#define STREAM_ENCRYPTED_FILE_DATA 20 /* Encrypted, uncompressed data */ -#define STREAM_ENCRYPTED_WIN32_DATA 21 /* Encrypted, uncompressed Win32 BackupRead data */ -#define STREAM_ENCRYPTED_SESSION_DATA 22 /* Encrypted Session Data, ASN.1, DER Encoded */ -#define STREAM_ENCRYPTED_FILE_GZIP_DATA 23 /* Encrypted, compressed data */ -#define STREAM_ENCRYPTED_WIN32_GZIP_DATA 24 /* Encrypted, compressed Win32 BackupRead data */ -#define STREAM_ENCRYPTED_MACOS_FORK_DATA 25 /* Encrypted, uncompressed Mac resource fork */ +#define STREAM_SHA256_DIGEST 17 /* SHA-256 digest for the file */ +#define STREAM_SHA512_DIGEST 18 /* SHA-512 digest for the file */ +#define STREAM_SIGNED_DIGEST 19 /* Signed File Digest, ASN.1 Encoded */ +#define STREAM_ENCRYPTED_FILE_DATA 20 /* Encrypted, uncompressed data */ +#define STREAM_ENCRYPTED_WIN32_DATA 21 /* Encrypted, uncompressed Win32 BackupRead data */ /* @@ -220,6 +211,13 @@ /* Definitions for upper part of type word (see above). */ #define AR_DATA_STREAM (1<<16) /* Data stream id present */ +/* + * Internal code for Signature types + */ +#define NO_SIG 0 +#define MD5_SIG 1 +#define SHA1_SIG 2 + /* * Tape label types -- stored in catalog */ diff --git a/bacula/src/bacula.h b/bacula/src/bacula.h index 6225d44e11..e820a93c0e 100644 --- a/bacula/src/bacula.h +++ b/bacula/src/bacula.h @@ -113,8 +113,6 @@ #include #include #include -#include -#include #undef STORE #endif diff --git a/bacula/src/cats/bdb_update.c b/bacula/src/cats/bdb_update.c index 7b1f054f8d..bea9cc8bec 100755 --- a/bacula/src/cats/bdb_update.c +++ b/bacula/src/cats/bdb_update.c @@ -197,7 +197,7 @@ int db_update_pool_record(JCR *jcr, B_DB *mdb, POOL_DBR *pr) return stat; } -int db_add_digest_to_file_record(JCR *jcr, B_DB *mdb, FileId_t FileId, char *digest, int type) +int db_add_SIG_to_file_record(JCR *jcr, B_DB *mdb, FileId_t FileId, char *SIG, int type) { return 1; } diff --git a/bacula/src/cats/cats.h b/bacula/src/cats/cats.h index 25d5b53ea4..00097ccaed 100644 --- a/bacula/src/cats/cats.h +++ b/bacula/src/cats/cats.h @@ -14,7 +14,7 @@ * Version $Id$ */ /* - Copyright (C) 2000-2006 Kern Sibbald + Copyright (C) 2000-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -546,8 +546,6 @@ struct JOB_DBR { uint32_t JobErrors; uint32_t JobMissingFiles; uint64_t JobBytes; - int PurgedFiles; - int HasBase; /* Note, FirstIndex, LastIndex, Start/End File and Block * are only used in the JobMedia record. @@ -567,33 +565,6 @@ struct JOB_DBR { faddr_t rec_addr; }; -/* - * Suplementary record for Migration, archive, copy jobs - */ -/* MAC record */ -struct MAC_DBR { - JobId_t JobId; /* Id of this job */ - JobId_t OriginalJobId; /* Id of job migrated, copied or archived */ - /* - * The following are the actual values for this job. This - * is needed because the values in the corresponding Job - * record were set to the values of the original backup job. - */ - int JobType; /* Actual job type */ - int JobLevel; /* Actual job level */ - time_t SchedTime; /* Actual time job scheduled */ - time_t StartTime; /* Actual Job start time */ - time_t EndTime; /* Actual Job termination time */ - utime_t JobTDate; /* Actual Backup time/date in seconds */ - - char cSchedTime[MAX_TIME_LENGTH]; - char cStartTime[MAX_TIME_LENGTH]; - char cEndTime[MAX_TIME_LENGTH]; - -}; - - - /* Job Media information used to create the media records * for each Volume used for the job. */ @@ -617,7 +588,6 @@ struct JOBMEDIA_DBR { struct VOL_PARAMS { char VolumeName[MAX_NAME_LENGTH]; /* Volume name */ char MediaType[MAX_NAME_LENGTH]; /* Media Type */ - char Storage[MAX_NAME_LENGTH]; /* Storage name */ uint32_t VolIndex; /* Volume seqence no. */ uint32_t FirstIndex; /* First index this Volume */ uint32_t LastIndex; /* Last index this Volume */ @@ -625,7 +595,6 @@ struct VOL_PARAMS { uint32_t EndFile; /* End file on Volume */ uint32_t StartBlock; /* start block on tape */ uint32_t EndBlock; /* last block */ - int32_t Slot; /* Slot */ // uint32_t Copy; /* identical copy */ // uint32_t Stripe; /* RAIT strip number */ }; @@ -646,8 +615,8 @@ struct ATTR_DBR { DBId_t PathId; DBId_t FilenameId; FileId_t FileId; - char *Digest; - int DigestType; + char *Sig; + int SigType; }; @@ -660,8 +629,8 @@ struct FILE_DBR { DBId_t PathId; JobId_t MarkId; char LStat[256]; - char Digest[BASE64_SIZE(CRYPTO_DIGEST_MAX_SIZE)]; - int DigestType; /* NO_SIG/MD5_SIG/SHA1_SIG */ + char SIG[50]; + int SigType; /* NO_SIG/MD5_SIG/SHA1_SIG */ }; /* Pool record -- same format as database */ diff --git a/bacula/src/cats/create_postgresql_database.in b/bacula/src/cats/create_postgresql_database.in index 1cbe61e9e6..8ee437d85f 100644 --- a/bacula/src/cats/create_postgresql_database.in +++ b/bacula/src/cats/create_postgresql_database.in @@ -5,8 +5,18 @@ bindir=@SQL_BINDIR@ +# 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 consoles work correctly *only* with UTF8. +#ENCODING="ENCODING 'UTF8'" + + if $bindir/psql -f - -d template1 $* <result = sql_use_result(mdb)) != NULL) { - int num_fields = sql_num_fields(mdb); + int num_fields = 0; + /* We *must* fetch all rows */ while ((row = sql_fetch_row(mdb)) != NULL) { - if (result_handler(ctx, num_fields, row)) - break; + if (send) { + /* the result handler returns 1 when it has + * seen all the data it wants. However, we + * loop to the end of the data. + */ + num_fields++; + if (result_handler(ctx, num_fields, row)) { + send = false; + } + } } sql_free_result(mdb); diff --git a/bacula/src/cats/postgresql.c b/bacula/src/cats/postgresql.c index 43a43bd2fe..ddcd2cda32 100644 --- a/bacula/src/cats/postgresql.c +++ b/bacula/src/cats/postgresql.c @@ -8,7 +8,7 @@ * Version $Id$ */ /* - Copyright (C) 2003-2005 Kern Sibbald + Copyright (C) 2003-2006 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -175,6 +175,8 @@ db_open_database(JCR *jcr, B_DB *mdb) return 0; } + sql_query(mdb, "SET datestyle TO 'ISO, YMD'"); + mdb->connected = true; V(mutex); return 1; diff --git a/bacula/src/cats/protos.h b/bacula/src/cats/protos.h index 464af82d1b..aae4d38cf1 100644 --- a/bacula/src/cats/protos.h +++ b/bacula/src/cats/protos.h @@ -6,17 +6,22 @@ * Version $Id$ */ /* - Copyright (C) 2000-2006 Kern Sibbald + Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as amended with additional clauses defined in the - file LICENSE in the main source directory. + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - the file LICENSE for additional details. + MERCHANTABILITY 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., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. */ @@ -43,8 +48,7 @@ void db_end_transaction(JCR *jcr, B_DB *mdb); /* create.c */ int db_create_file_attributes_record(JCR *jcr, B_DB *mdb, ATTR_DBR *ar); -bool db_create_job_record(JCR *jcr, B_DB *db, JOB_DBR *jr); -bool db_create_mac_record(JCR *jcr, B_DB *db, MAC_DBR *mr); +int db_create_job_record(JCR *jcr, B_DB *db, JOB_DBR *jr); int db_create_media_record(JCR *jcr, B_DB *db, MEDIA_DBR *media_dbr); int db_create_client_record(JCR *jcr, B_DB *db, CLIENT_DBR *cr); bool db_create_fileset_record(JCR *jcr, B_DB *db, FILESET_DBR *fsr); @@ -68,8 +72,7 @@ bool db_find_failed_job_since(JCR *jcr, B_DB *mdb, JOB_DBR *jr, POOLMEM *stime, /* get.c */ bool db_get_pool_record(JCR *jcr, B_DB *db, 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); -bool db_get_mac_record(JCR *jcr, B_DB *mdb, MAC_DBR *mr); +int 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); int db_get_file_attributes_record(JCR *jcr, B_DB *mdb, char *fname, JOB_DBR *jr, FILE_DBR *fdbr); int db_get_fileset_record(JCR *jcr, B_DB *mdb, FILESET_DBR *fsr); @@ -107,7 +110,7 @@ bool db_update_storage_record(JCR *jcr, B_DB *mdb, STORAGE_DBR *sr); int db_update_media_record(JCR *jcr, B_DB *db, MEDIA_DBR *mr); int db_update_media_defaults(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr); int db_update_counter_record(JCR *jcr, B_DB *mdb, COUNTER_DBR *cr); -int db_add_digest_to_file_record(JCR *jcr, B_DB *mdb, FileId_t FileId, char *digest, int type); +int db_add_SIG_to_file_record(JCR *jcr, B_DB *mdb, FileId_t FileId, char *SIG, int type); int db_mark_file_record(JCR *jcr, B_DB *mdb, FileId_t FileId, JobId_t JobId); void db_make_inchanger_unique(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr); diff --git a/bacula/src/cats/sql_create.c b/bacula/src/cats/sql_create.c index a3a877da10..fb46704122 100644 --- a/bacula/src/cats/sql_create.c +++ b/bacula/src/cats/sql_create.c @@ -53,16 +53,16 @@ extern void split_path_and_file(JCR *jcr, B_DB *mdb, const char *fname); /* Create a new record for the Job - * Returns: false on failure - * true on success + * Returns: 0 on failure + * 1 on success */ -bool +int db_create_job_record(JCR *jcr, B_DB *mdb, JOB_DBR *jr) { char dt[MAX_TIME_LENGTH]; time_t stime; struct tm tm; - bool ok; + int stat; utime_t JobTDate; char ed1[30]; @@ -86,65 +86,15 @@ db_create_job_record(JCR *jcr, B_DB *mdb, JOB_DBR *jr) Mmsg2(&mdb->errmsg, _("Create DB Job record %s failed. ERR=%s\n"), mdb->cmd, sql_strerror(mdb)); jr->JobId = 0; - ok = false; + stat = 0; } else { jr->JobId = sql_insert_id(mdb, N_("Job")); - ok = true; - } - db_unlock(mdb); - return ok; -} - -/* Create a new migration, archive, copy - * Returns: false on failure - * true on success - */ -bool -db_create_mac_record(JCR *jcr, B_DB *mdb, MAC_DBR *mr) -{ - char schedt[MAX_TIME_LENGTH], sdt[MAX_TIME_LENGTH], edt[MAX_TIME_LENGTH]; - time_t stime; - struct tm tm; - bool ok; - utime_t JobTDate; - char ed1[30], ed2[30]; - - db_lock(mdb); - - stime = mr->SchedTime; - ASSERT(stime != 0); - - localtime_r(&stime, &tm); - strftime(schedt, sizeof(schedt), "%Y-%m-%d %T", &tm); - JobTDate = (utime_t)stime; - localtime_r(&mr->StartTime, &tm); - strftime(sdt, sizeof(sdt), "%Y-%m-%d %T", &tm); - localtime_r(&mr->EndTime, &tm); - strftime(edt, sizeof(edt), "%Y-%m-%d %T", &tm); - - /* Must create it */ - Mmsg(mdb->cmd, -"INSERT INTO MAC (OriginaJobId,JobType,JobLevel,SchedTime," -"StartTime,EndTime,JobTDate) VALUES " -"('%s','%c','%c','%s','%s','%s',%s)", - edit_int64(mr->OriginalJobId, ed1), - (char)(mr->JobType), (char)(mr->JobLevel), - schedt, sdt, edt, edit_uint64(JobTDate, ed2)); - - if (!INSERT_DB(jcr, mdb, mdb->cmd)) { - Mmsg2(&mdb->errmsg, _("Create DB MAC record %s failed. ERR=%s\n"), - mdb->cmd, sql_strerror(mdb)); - mr->JobId = 0; - ok = false; - } else { - mr->JobId = sql_insert_id(mdb, N_("Job")); - ok = true; + stat = 1; } db_unlock(mdb); - return ok; + return stat; } - /* Create a JobMedia record for medium used this job * Returns: false on failure * true on success @@ -441,11 +391,11 @@ db_create_media_record(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr) /* Must create it */ Mmsg(mdb->cmd, -"INSERT INTO Media (VolumeName,MediaType,MediaTypeId,PoolId,MaxVolBytes," -"VolCapacityBytes,Recycle,VolRetention,VolUseDuration,MaxVolJobs,MaxVolFiles," +"INSERT INTO Media (VolumeName,MediaType,PoolId,MaxVolBytes,VolCapacityBytes," +"Recycle,VolRetention,VolUseDuration,MaxVolJobs,MaxVolFiles," "VolStatus,Slot,VolBytes,InChanger,VolReadTime,VolWriteTime,VolParts," -"EndFile,EndBlock,LabelType,StorageId,DeviceId,LocationId) " -"VALUES ('%s','%s',0,%u,%s,%s,%d,%s,%s,%u,%u,'%s',%d,%s,%d,%s,%s,%d,0,0,%d,%s,0,0)", +"EndFile,EndBlock,LabelType,StorageId) " +"VALUES ('%s','%s',%u,%s,%s,%d,%s,%s,%u,%u,'%s',%d,%s,%d,%s,%s,%d,0,0,%d,%s)", mr->VolumeName, mr->MediaType, mr->PoolId, edit_uint64(mr->MaxVolBytes,ed1), @@ -759,17 +709,17 @@ bail_out: static int db_create_file_record(JCR *jcr, B_DB *mdb, ATTR_DBR *ar) { int stat; - static char *no_digest = "0"; - char *digest; + static char *no_sig = "0"; + char *sig; ASSERT(ar->JobId); ASSERT(ar->PathId); ASSERT(ar->FilenameId); - if (ar->Digest == NULL) { - digest = no_digest; + if (ar->Sig == NULL) { + sig = no_sig; } else { - digest = ar->Digest; + sig = ar->Sig; } /* Must create it */ @@ -777,7 +727,7 @@ static int db_create_file_record(JCR *jcr, B_DB *mdb, ATTR_DBR *ar) "INSERT INTO File (FileIndex,JobId,PathId,FilenameId," "LStat,MD5) VALUES (%u,%u,%u,%u,'%s','%s')", ar->FileIndex, ar->JobId, ar->PathId, ar->FilenameId, - ar->attr, digest); + ar->attr, sig); if (!INSERT_DB(jcr, mdb, mdb->cmd)) { Mmsg2(&mdb->errmsg, _("Create db File record %s failed. ERR=%s"), diff --git a/bacula/src/cats/sql_find.c b/bacula/src/cats/sql_find.c index 641a1e7700..19c95eee71 100644 --- a/bacula/src/cats/sql_find.c +++ b/bacula/src/cats/sql_find.c @@ -10,7 +10,7 @@ * Version $Id$ */ /* - Copyright (C) 2000-2006 Kern Sibbald + Copyright (C) 2000-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -262,7 +262,7 @@ db_find_last_jobid(JCR *jcr, B_DB *mdb, const char *Name, JOB_DBR *jr) int db_find_next_volume(JCR *jcr, B_DB *mdb, int item, bool InChanger, MEDIA_DBR *mr) { - SQL_ROW row; + SQL_ROW row = NULL; int numrows; const char *order; @@ -313,23 +313,26 @@ db_find_next_volume(JCR *jcr, B_DB *mdb, int item, bool InChanger, MEDIA_DBR *mr } numrows = sql_num_rows(mdb); - if (item > numrows) { - Mmsg2(&mdb->errmsg, _("Request for Volume item %d greater than max %d\n"), + if (item > numrows || item < 1) { + Mmsg2(&mdb->errmsg, _("Request for Volume item %d greater than max %d or less than 1.\n"), item, numrows); db_unlock(mdb); return 0; } - /* Seek to desired item - * Note, we use base 1; SQL uses base 0 + /* Note, we previously seeked to the row using: + * sql_data_seek(mdb, item-1); + * but this failed on PostgreSQL, so now we loop + * over all the records. This should not be too horrible since + * the maximum Volumes we look at in any case is 20. */ - sql_data_seek(mdb, item-1); - - if ((row = sql_fetch_row(mdb)) == NULL) { - Mmsg1(&mdb->errmsg, _("No Volume record found for item %d.\n"), item); - sql_free_result(mdb); - db_unlock(mdb); - return 0; + while (item-- > 0) { + if ((row = sql_fetch_row(mdb)) == NULL) { + Mmsg1(&mdb->errmsg, _("No Volume record found for item %d.\n"), item); + sql_free_result(mdb); + db_unlock(mdb); + return 0; + } } /* Return fields in Media Record */ diff --git a/bacula/src/cats/sql_get.c b/bacula/src/cats/sql_get.c index f2bd3d9dd9..701332e2d5 100644 --- a/bacula/src/cats/sql_get.c +++ b/bacula/src/cats/sql_get.c @@ -10,7 +10,7 @@ */ /* - Copyright (C) 2000-2006 Kern Sibbald + Copyright (C) 2000-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -136,7 +136,7 @@ int db_get_file_record(JCR *jcr, B_DB *mdb, JOB_DBR *jr, FILE_DBR *fdbr) } else { fdbr->FileId = (FileId_t)str_to_int64(row[0]); bstrncpy(fdbr->LStat, row[1], sizeof(fdbr->LStat)); - bstrncpy(fdbr->Digest, row[2], sizeof(fdbr->Digest)); + bstrncpy(fdbr->SIG, row[2], sizeof(fdbr->SIG)); stat = 1; } } else { @@ -257,10 +257,10 @@ static int db_get_path_record(JCR *jcr, B_DB *mdb) /* * Get Job record for given JobId or Job name - * Returns: false on failure - * true on success + * Returns: 0 on failure + * 1 on success */ -bool db_get_job_record(JCR *jcr, B_DB *mdb, JOB_DBR *jr) +int db_get_job_record(JCR *jcr, B_DB *mdb, JOB_DBR *jr) { SQL_ROW row; char ed1[50]; @@ -281,13 +281,13 @@ bool db_get_job_record(JCR *jcr, B_DB *mdb, JOB_DBR *jr) if (!QUERY_DB(jcr, mdb, mdb->cmd)) { db_unlock(mdb); - return false; /* failed */ + return 0; /* failed */ } if ((row = sql_fetch_row(mdb)) == NULL) { Mmsg1(mdb->errmsg, _("No Job found for JobId %s\n"), edit_int64(jr->JobId, ed1)); sql_free_result(mdb); db_unlock(mdb); - return false; /* failed */ + return 0; /* failed */ } jr->VolSessionId = str_to_uint64(row[0]); @@ -306,51 +306,10 @@ bool db_get_job_record(JCR *jcr, B_DB *mdb, JOB_DBR *jr) bstrncpy(jr->Name, row[13]!=NULL?row[13]:"", sizeof(jr->Name)); sql_free_result(mdb); - db_unlock(mdb); - return true; -} - -/* - * Get MAC record for given JobId - * Returns: false on failure - * true on success - */ -bool db_get_mac_record(JCR *jcr, B_DB *mdb, MAC_DBR *mr) -{ - SQL_ROW row; - char ed1[50]; - - db_lock(mdb); - Mmsg(mdb->cmd, "SELECT OriginalJobId,JobType,JobLevel," -"SchedTime,StartTime,EndTime,JobTDate" -"FROM MAC WHERE JobId=%s", - edit_int64(mr->JobId, ed1)); - - if (!QUERY_DB(jcr, mdb, mdb->cmd)) { - db_unlock(mdb); - return 0; /* failed */ - } - if ((row = sql_fetch_row(mdb)) == NULL) { - Mmsg1(mdb->errmsg, _("No MAC record found for JobId %s\n"), ed1); - sql_free_result(mdb); - db_unlock(mdb); - return false; /* failed */ - } - - mr->OriginalJobId = str_to_int64(row[0]); - mr->JobType = (int)*row[1]; - mr->JobLevel = (int)*row[2]; - bstrncpy(mr->cSchedTime, row[3]!=NULL?row[3]:"", sizeof(mr->cSchedTime)); - bstrncpy(mr->cStartTime, row[4]!=NULL?row[4]:"", sizeof(mr->cStartTime)); - bstrncpy(mr->cEndTime, row[5]!=NULL?row[5]:"", sizeof(mr->cEndTime)); - mr->JobTDate = str_to_int64(row[6]); - sql_free_result(mdb); - db_unlock(mdb); return 1; } - /* * Find VolumeNames for a given JobId * Returns: 0 on error or no Volumes found @@ -427,8 +386,7 @@ int db_get_job_volume_parameters(JCR *jcr, B_DB *mdb, JobId_t JobId, VOL_PARAMS db_lock(mdb); Mmsg(mdb->cmd, "SELECT VolumeName,MediaType,FirstIndex,LastIndex,StartFile," -"JobMedia.EndFile,StartBlock,JobMedia.EndBlock,Copy,Stripe," -"Slot,StorageId" +"JobMedia.EndFile,StartBlock,JobMedia.EndBlock,Copy,Stripe" " FROM JobMedia,Media WHERE JobMedia.JobId=%s" " AND JobMedia.MediaId=Media.MediaId ORDER BY VolIndex,JobMediaId", edit_int64(JobId, ed1)); @@ -436,16 +394,14 @@ int db_get_job_volume_parameters(JCR *jcr, B_DB *mdb, JobId_t JobId, VOL_PARAMS Dmsg1(130, "VolNam=%s\n", mdb->cmd); if (QUERY_DB(jcr, mdb, mdb->cmd)) { mdb->num_rows = sql_num_rows(mdb); - Dmsg1(200, "Num rows=%d\n", mdb->num_rows); + Dmsg1(130, "Num rows=%d\n", mdb->num_rows); if (mdb->num_rows <= 0) { Mmsg1(mdb->errmsg, _("No volumes found for JobId=%d\n"), JobId); stat = 0; } else { stat = mdb->num_rows; - DBId_t *SId; if (stat > 0) { *VolParams = Vols = (VOL_PARAMS *)malloc(stat * sizeof(VOL_PARAMS)); - SId = (DBId_t *)malloc(stat * sizeof(DBId_t)); } for (i=0; i < stat; i++) { if ((row = sql_fetch_row(mdb)) == NULL) { @@ -454,7 +410,6 @@ int db_get_job_volume_parameters(JCR *jcr, B_DB *mdb, JobId_t JobId, VOL_PARAMS stat = 0; break; } else { - DBId_t StorageId; bstrncpy(Vols[i].VolumeName, row[0], MAX_NAME_LENGTH); bstrncpy(Vols[i].MediaType, row[1], MAX_NAME_LENGTH); Vols[i].FirstIndex = str_to_uint64(row[2]); @@ -465,21 +420,6 @@ int db_get_job_volume_parameters(JCR *jcr, B_DB *mdb, JobId_t JobId, VOL_PARAMS Vols[i].EndBlock = str_to_uint64(row[7]); // Vols[i].Copy = str_to_uint64(row[8]); // Vols[i].Stripe = str_to_uint64(row[9]); - Vols[i].Slot = str_to_uint64(row[10]); - StorageId = str_to_uint64(row[11]); - Vols[i].Storage[0] = 0; - SId[i] = StorageId; - } - } - for (i=0; i < stat; i++) { - if (SId[i] != 0) { - Mmsg(mdb->cmd, "SELECT Name from Storage WHERE StorageId=%s", - edit_int64(SId[i], ed1)); - if (QUERY_DB(jcr, mdb, mdb->cmd)) { - if ((row = sql_fetch_row(mdb)) != NULL) { - bstrncpy(Vols[i].Storage, row[0], MAX_NAME_LENGTH); - } - } } } } diff --git a/bacula/src/cats/sql_update.c b/bacula/src/cats/sql_update.c index 7cd3dedf5b..1906261e30 100644 --- a/bacula/src/cats/sql_update.c +++ b/bacula/src/cats/sql_update.c @@ -49,7 +49,7 @@ extern int UpdateDB(const char *file, int line, JCR *jcr, B_DB *db, char *update */ /* Update the attributes record by adding the file digest */ int -db_add_digest_to_file_record(JCR *jcr, B_DB *mdb, FileId_t FileId, char *digest, +db_add_SIG_to_file_record(JCR *jcr, B_DB *mdb, FileId_t FileId, char *digest, int type) { int stat; diff --git a/bacula/src/cats/update_mysql_tables.in b/bacula/src/cats/update_mysql_tables.in index b43dd28aed..6fcafa766d 100755 --- a/bacula/src/cats/update_mysql_tables.in +++ b/bacula/src/cats/update_mysql_tables.in @@ -1,9 +1,9 @@ #!/bin/sh # -# Shell script to update MySQL tables from version 1.38 to 1.39 +# Shell script to update MySQL tables from version 1.36 to 1.38 # echo " " -echo "This script will update a Bacula MySQL database from version 9 to 9" +echo "This script will update a Bacula MySQL database from version 8 to 9" echo "Depending on the size of your database," echo "this script may take several minutes to run." echo " " @@ -12,33 +12,80 @@ bindir=@SQL_BINDIR@ if $bindir/mysql $* -f < Makefile @$(ECHO) "# DO NOT DELETE: nice dependency list follows" >> Makefile - @$(CXX) -S -M $(CPPFLAGS) $(CONS_INC) -I$(srcdir) -I$(basedir) *.c >> Makefile + @$(CXX) -S -M $(CPPFLAGS) $(CONS_INC) $(OPENSSL_INC) -I$(srcdir) -I$(basedir) *.c >> Makefile @if test -f Makefile ; then \ $(RMF) Makefile.bak; \ else \ diff --git a/bacula/src/console/conio.c b/bacula/src/console/conio.c index 3a9dfe14aa..9fc5c4955b 100755 --- a/bacula/src/console/conio.c +++ b/bacula/src/console/conio.c @@ -9,7 +9,7 @@ */ /* - Copyright (C) 1981-2005 Kern Sibbald + Copyright (C) 1981-2006 Kern Sibbald Yes, that is 1981 no error. This program is free software; you can redistribute it and/or @@ -961,12 +961,8 @@ static void rawmode(FILE *input) /* Defaults, the main program can override these */ signal(SIGQUIT, SIG_IGN); signal(SIGHUP, SIG_IGN); -// signal(SIGSTOP, SIG_IGN); signal(SIGINT, sigintcatcher); signal(SIGWINCH, SIG_IGN); - signal(SIGQUIT, SIG_IGN); -// signal(SIGCHLD, SIG_IGN); -// signal(SIGTSTP, SIG_IGN); if (!termtype) { printf("Cannot get terminal type.\n"); diff --git a/bacula/src/console/console.c b/bacula/src/console/console.c index 7611e9008e..9bea604bd5 100644 --- a/bacula/src/console/console.c +++ b/bacula/src/console/console.c @@ -396,8 +396,8 @@ int main(int argc, char *argv[]) parse_config(configfile); - if (init_crypto() != 0) { - Emsg0(M_ERROR_TERM, 0, _("Cryptography library initialization failed.\n")); + if (init_tls() != 0) { + Emsg0(M_ERROR_TERM, 0, _("TLS library initialization failed.\n")); } if (!check_resources()) { @@ -549,7 +549,7 @@ static void terminate_console(int sig) exit(1); } already_here = true; - cleanup_crypto(); + cleanup_tls(); free_pool_memory(args); con_term(); (void)WSACleanup(); /* Cleanup Windows sockets */ diff --git a/bacula/src/console/console_conf.c b/bacula/src/console/console_conf.c index 10dae2d305..0ef206407a 100644 --- a/bacula/src/console/console_conf.c +++ b/bacula/src/console/console_conf.c @@ -76,8 +76,8 @@ static RES_ITEM cons_items[] = { {"rcfile", store_dir, ITEM(res_cons.rc_file), 0, 0, 0}, {"historyfile", store_dir, ITEM(res_cons.hist_file), 0, 0, 0}, {"password", store_password, ITEM(res_cons.password), 0, ITEM_REQUIRED, 0}, - {"tlsenable", store_bit, ITEM(res_cons.tls_enable), 1, 0, 0}, - {"tlsrequire", store_bit, ITEM(res_cons.tls_require), 1, 0, 0}, + {"tlsenable", store_yesno, ITEM(res_cons.tls_enable), 1, 0, 0}, + {"tlsrequire", store_yesno, ITEM(res_cons.tls_require), 1, 0, 0}, {"tlscacertificatefile", store_dir, ITEM(res_cons.tls_ca_certfile), 0, 0, 0}, {"tlscacertificatedir", store_dir, ITEM(res_cons.tls_ca_certdir), 0, 0, 0}, {"tlscertificate", store_dir, ITEM(res_cons.tls_certfile), 0, 0, 0}, @@ -93,8 +93,8 @@ static RES_ITEM dir_items[] = { {"dirport", store_int, ITEM(res_dir.DIRport), 0, ITEM_DEFAULT, 9101}, {"address", store_str, ITEM(res_dir.address), 0, 0, 0}, {"password", store_password, ITEM(res_dir.password), 0, ITEM_REQUIRED, 0}, - {"tlsenable", store_bit, ITEM(res_dir.tls_enable), 1, 0, 0}, - {"tlsrequire", store_bit, ITEM(res_dir.tls_require), 1, 0, 0}, + {"tlsenable", store_yesno, ITEM(res_dir.tls_enable), 1, 0, 0}, + {"tlsrequire", store_yesno, ITEM(res_dir.tls_require), 1, 0, 0}, {"tlscacertificatefile", store_dir, ITEM(res_dir.tls_ca_certfile), 0, 0, 0}, {"tlscacertificatedir", store_dir, ITEM(res_dir.tls_ca_certdir), 0, 0, 0}, {"tlscertificate", store_dir, ITEM(res_dir.tls_certfile), 0, 0, 0}, diff --git a/bacula/src/dird/autoprune.c b/bacula/src/dird/autoprune.c index e0214080d9..bf054db8eb 100644 --- a/bacula/src/dird/autoprune.c +++ b/bacula/src/dird/autoprune.c @@ -101,7 +101,7 @@ int prune_volumes(JCR *jcr) db_lock(jcr->db); /* Get the List of all media ids in the current Pool */ - if (!db_get_media_ids(jcr, jcr->db, jcr->jr.PoolId, &num_ids, &ids)) { + if (!db_get_media_ids(jcr, jcr->db, jcr->PoolId, &num_ids, &ids)) { Jmsg(jcr, M_ERROR, 0, "%s", db_strerror(jcr->db)); goto bail_out; } @@ -114,7 +114,7 @@ int prune_volumes(JCR *jcr) continue; } /* Prune only Volumes from current Pool */ - if (jcr->jr.PoolId != mr.PoolId) { + if (jcr->PoolId != mr.PoolId) { continue; } /* Prune only Volumes with status "Full", or "Used" */ diff --git a/bacula/src/dird/backup.c b/bacula/src/dird/backup.c index 496e14d6d8..8568c37388 100644 --- a/bacula/src/dird/backup.c +++ b/bacula/src/dird/backup.c @@ -97,18 +97,35 @@ bool do_backup_init(JCR *jcr) } } } + jcr->PoolId = pr.PoolId; jcr->jr.PoolId = pr.PoolId; - /* If pool storage specified, use it instead of job storage */ - copy_storage(jcr, jcr->pool->storage); - - if (!jcr->storage) { - Jmsg(jcr, M_FATAL, 0, _("No Storage specification found in Job or Pool.\n")); - return false; + /* + * Fire off any clone jobs (run directives) + */ + Dmsg2(900, "cloned=%d run_cmds=%p\n", jcr->cloned, jcr->job->run_cmds); + if (!jcr->cloned && jcr->job->run_cmds) { + char *runcmd; + JOB *job = jcr->job; + POOLMEM *cmd = get_pool_memory(PM_FNAME); + UAContext *ua = new_ua_context(jcr); + ua->batch = true; + foreach_alist(runcmd, job->run_cmds) { + cmd = edit_job_codes(jcr, cmd, runcmd, ""); + Mmsg(ua->cmd, "run %s cloned=yes", cmd); + Dmsg1(900, "=============== Clone cmd=%s\n", ua->cmd); + parse_ua_args(ua); /* parse command */ + int stat = run_cmd(ua, ua->cmd); + if (stat == 0) { + Jmsg(jcr, M_ERROR, 0, _("Could not start clone job.\n")); + } else { + Jmsg(jcr, M_INFO, 0, _("Clone JobId %d started.\n"), stat); + } + } + free_ua_context(ua); + free_pool_memory(cmd); } - create_clones(jcr); /* run any clone jobs */ - return true; } @@ -170,27 +187,27 @@ bool do_backup(JCR *jcr) Dmsg0(150, "Storage daemon connection OK\n"); if (!bnet_fsend(jcr->store_bsock, "run")) { - return false; + goto bail_out; } set_jcr_job_status(jcr, JS_WaitFD); if (!connect_to_file_daemon(jcr, 10, FDConnectTimeout, 1)) { - return false; + goto bail_out; } set_jcr_job_status(jcr, JS_Running); fd = jcr->file_bsock; if (!send_include_list(jcr)) { - return false; + goto bail_out; } if (!send_exclude_list(jcr)) { - return false; + goto bail_out; } if (!send_level_command(jcr)) { - return false; + goto bail_out; } /* @@ -210,20 +227,21 @@ bool do_backup(JCR *jcr) } } - bnet_fsend(fd, storaddr, store->address, store->SDDport, tls_need); + bnet_fsend(fd, storaddr, store->address, store->SDDport, + tls_need); if (!response(jcr, fd, OKstore, "Storage", DISPLAY_ERROR)) { - return false; + goto bail_out; } if (!send_run_before_and_after_commands(jcr)) { - return false; + goto bail_out; } /* Send backup command */ bnet_fsend(fd, backupcmd); if (!response(jcr, fd, OKbackup, "backup", DISPLAY_ERROR)) { - return false; + goto bail_out; } /* Pickup Job termination data */ @@ -233,6 +251,14 @@ bool do_backup(JCR *jcr) return true; } return false; + +/* Come here only after starting SD thread */ +bail_out: + set_jcr_job_status(jcr, JS_ErrorTerminated); + Dmsg1(400, "wait for sd. use=%d\n", jcr->use_count()); + wait_for_storage_daemon_termination(jcr); + Dmsg1(400, "after wait for sd. use=%d\n", jcr->use_count()); + return false; } @@ -309,7 +335,7 @@ 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 ec6[30], ec7[30], elapsed[50]; + char ec6[30], ec7[30], ec8[30], elapsed[50]; char term_code[100], fd_term_msg[100], sd_term_msg[100]; const char *term_msg; int msg_type; @@ -347,7 +373,6 @@ void backup_cleanup(JCR *jcr, int TermCode) update_bootstrap_file(jcr); - msg_type = M_INFO; /* by default INFO message */ switch (jcr->JobStatus) { case JS_Terminated: @@ -441,7 +466,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\n" +" Last Volume Bytes: %s (%sB)\n" " Non-fatal FD errors: %d\n" " SD Errors: %d\n" " FD termination status: %s\n" @@ -474,6 +499,7 @@ void backup_cleanup(JCR *jcr, int TermCode) jcr->VolSessionId, jcr->VolSessionTime, edit_uint64_with_commas(mr.VolBytes, ec7), + edit_uint64_with_suffix(mr.VolBytes, ec8), jcr->Errors, jcr->SDErrors, fd_term_msg, diff --git a/bacula/src/dird/bsr.c b/bacula/src/dird/bsr.c index 2321580aa2..4d26e22c0c 100644 --- a/bacula/src/dird/bsr.c +++ b/bacula/src/dird/bsr.c @@ -11,7 +11,7 @@ */ /* - Copyright (C) 2002-2006 Kern Sibbald + Copyright (C) 2002-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -53,27 +53,6 @@ static void free_findex(RBSR_FINDEX *fi) } } -/* - * Get storage device name from Storage resource - */ -static bool get_storage_device(char *device, char *storage) -{ - STORE *store; - if (storage[0] == 0) { - return false; - } - store = (STORE *)GetResWithName(R_STORAGE, storage); - if (!store) { - return false; - } - DEVICE *dev = (DEVICE *)(store->device->first()); - if (!dev) { - return false; - } - bstrncpy(device, dev->hdr.name, MAX_NAME_LENGTH); - return true; -} - /* * Our data structures were not designed completely * correctly, so the file indexes cover the full @@ -191,6 +170,9 @@ bool complete_bsr(UAContext *ua, RBSR *bsr) return true; } +static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; +static uint32_t uniq = 0; + void make_unique_restore_filename(UAContext *ua, POOLMEM **fname) { JCR *jcr = ua->jcr; @@ -199,10 +181,16 @@ void make_unique_restore_filename(UAContext *ua, POOLMEM **fname) Mmsg(fname, "%s", ua->argv[i]); jcr->unlink_bsr = false; } else { - Mmsg(fname, "%s/%s.restore.%s.bsr", working_directory, my_name, - jcr->Job); + P(mutex); + uniq++; + V(mutex); + Mmsg(fname, "%s/%s.%u.restore.bsr", working_directory, my_name, uniq); jcr->unlink_bsr = true; } + if (jcr->RestoreBootstrap) { + free(jcr->RestoreBootstrap); + } + jcr->RestoreBootstrap = bstrdup(*fname); } /* @@ -299,7 +287,6 @@ static uint32_t write_bsr(UAContext *ua, RESTORE_CTX &rx, FILE *fd) bool first = true; char *p; JobId_t JobId; - char device[MAX_NAME_LENGTH]; RBSR *bsr; if (*rx.JobIds == 0) { for (bsr=rx.bsr; bsr; bsr=bsr->next) { @@ -315,12 +302,6 @@ static uint32_t write_bsr(UAContext *ua, RESTORE_CTX &rx, FILE *fd) } fprintf(fd, "Volume=\"%s\"\n", bsr->VolParams[i].VolumeName); fprintf(fd, "MediaType=\"%s\"\n", bsr->VolParams[i].MediaType); - if (get_storage_device(device, bsr->VolParams[i].Storage)) { - fprintf(fd, "Device=\"%s\"\n", device); - } - if (bsr->VolParams[i].Slot > 0) { - fprintf(fd, "Slot=%d\n", bsr->VolParams[i].Slot); - } fprintf(fd, "VolSessionId=%u\n", bsr->VolSessionId); fprintf(fd, "VolSessionTime=%u\n", bsr->VolSessionTime); if (bsr->VolParams[i].StartFile == bsr->VolParams[i].EndFile) { @@ -374,12 +355,6 @@ static uint32_t write_bsr(UAContext *ua, RESTORE_CTX &rx, FILE *fd) } fprintf(fd, "Volume=\"%s\"\n", bsr->VolParams[i].VolumeName); fprintf(fd, "MediaType=\"%s\"\n", bsr->VolParams[i].MediaType); - if (get_storage_device(device, bsr->VolParams[i].Storage)) { - fprintf(fd, "Device=\"%s\"\n", device); - } - if (bsr->VolParams[i].Slot > 0) { - fprintf(fd, "Slot=%d\n", bsr->VolParams[i].Slot); - } fprintf(fd, "VolSessionId=%u\n", bsr->VolSessionId); fprintf(fd, "VolSessionTime=%u\n", bsr->VolSessionTime); if (bsr->VolParams[i].StartFile == bsr->VolParams[i].EndFile) { diff --git a/bacula/src/dird/catreq.c b/bacula/src/dird/catreq.c index e599bd95f2..7cfa64ba05 100644 --- a/bacula/src/dird/catreq.c +++ b/bacula/src/dird/catreq.c @@ -13,7 +13,7 @@ * Version $Id$ */ /* - Copyright (C) 2001-2006 Kern Sibbald + Copyright (C) 2001-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -29,7 +29,6 @@ #include "bacula.h" #include "dird.h" -#include "findlib/find.h" /* * Handle catalog request @@ -122,9 +121,7 @@ void catalog_request(JCR *jcr, BSOCK *bs) ok = db_get_pool_record(jcr, jcr->db, &pr); if (ok) { mr.PoolId = pr.PoolId; - if (jcr->store->StorageId) { - mr.StorageId = jcr->store->StorageId; - } + mr.StorageId = jcr->store->StorageId; ok = find_next_volume_for_append(jcr, &mr, index, true /*permit create new vol*/); } /* @@ -160,7 +157,7 @@ void catalog_request(JCR *jcr, BSOCK *bs) * Pool matches, and it is either Append or Recycle * and Media Type matches and Pool allows any volume. */ - if (mr.PoolId != jcr->jr.PoolId) { + if (mr.PoolId != jcr->PoolId) { reason = _("not in Pool"); } else if (strcmp(mr.MediaType, jcr->store->media_type) != 0) { reason = _("not correct MediaType"); @@ -279,13 +276,8 @@ void catalog_request(JCR *jcr, BSOCK *bs) &jm.FirstIndex, &jm.LastIndex, &jm.StartFile, &jm.EndFile, &jm.StartBlock, &jm.EndBlock, &jm.Copy, &jm.Stripe) == 9) { - if (jcr->target_jcr) { - jm.JobId = jcr->target_jcr->JobId; - jm.MediaId = jcr->MediaId; - } else { - jm.JobId = jcr->JobId; - jm.MediaId = jcr->MediaId; - } + jm.JobId = jcr->JobId; + jm.MediaId = jcr->MediaId; Dmsg6(400, "create_jobmedia JobId=%d MediaId=%d SF=%d EF=%d FI=%d LI=%d\n", jm.JobId, jm.MediaId, jm.StartFile, jm.EndFile, jm.FirstIndex, jm.LastIndex); if (!db_create_jobmedia_record(jcr, jcr->db, &jm)) { @@ -394,64 +386,47 @@ void catalog_update(JCR *jcr, BSOCK *bs) ar->FileIndex = FileIndex; ar->Stream = Stream; ar->link = NULL; - if (jcr->target_jcr) { - ar->JobId = jcr->target_jcr->JobId; - } else { - ar->JobId = jcr->JobId; - } - ar->Digest = NULL; - ar->DigestType = CRYPTO_DIGEST_NONE; + ar->JobId = jcr->JobId; + ar->Sig = NULL; + ar->SigType = 0; jcr->cached_attribute = true; Dmsg2(400, "dirddb, ar)) { + Jmsg1(jcr, M_FATAL, 0, _("Attribute create error. %s"), db_strerror(jcr->db)); + } +#endif + } else if (Stream == STREAM_MD5_SIGNATURE || Stream == STREAM_SHA1_SIGNATURE) { fname = p; if (ar->FileIndex != FileIndex) { - Jmsg(jcr, M_WARNING, 0, _("Got %s but not same File as attributes\n"), stream_to_ascii(Stream)); + Jmsg(jcr, M_WARNING, 0, _("Got MD5/SHA1 but not same File as attributes\n")); } else { - /* Update digest in catalog */ - char digestbuf[CRYPTO_DIGEST_MAX_SIZE]; - int len = 0; - int type = CRYPTO_DIGEST_NONE; - - switch(Stream) { - case STREAM_MD5_DIGEST: - len = CRYPTO_DIGEST_MD5_SIZE; - type = CRYPTO_DIGEST_MD5; - break; - case STREAM_SHA1_DIGEST: - len = CRYPTO_DIGEST_SHA1_SIZE; - type = CRYPTO_DIGEST_SHA1; - break; - case STREAM_SHA256_DIGEST: - len = CRYPTO_DIGEST_SHA256_SIZE; - type = CRYPTO_DIGEST_SHA256; - break; - case STREAM_SHA512_DIGEST: - len = CRYPTO_DIGEST_SHA512_SIZE; - type = CRYPTO_DIGEST_SHA512; - break; - default: - /* Never reached ... */ - Jmsg(jcr, M_ERROR, 0, _("Catalog error updating file digest. Unsupported digest stream type: %d"), - Stream); + /* Update signature in catalog */ + char SIGbuf[50]; /* 24 bytes should be enough */ + int len, type; + if (Stream == STREAM_MD5_SIGNATURE) { + len = 16; + type = MD5_SIG; + } else { + len = 20; + type = SHA1_SIG; } - - bin_to_base64(digestbuf, fname, len); - Dmsg3(400, "DigestLen=%d Digest=%s type=%d\n", strlen(digestbuf), digestbuf, Stream); + bin_to_base64(SIGbuf, fname, len); + Dmsg3(400, "SIGlen=%d SIG=%s type=%d\n", strlen(SIGbuf), SIGbuf, Stream); if (jcr->cached_attribute) { - ar->Digest = digestbuf; - ar->DigestType = type; - Dmsg2(400, "Cached attr with digest. Stream=%d fname=%s\n", ar->Stream, ar->fname); + ar->Sig = SIGbuf; + ar->SigType = type; + Dmsg2(400, "Cached attr with SIG. Stream=%d fname=%s\n", ar->Stream, ar->fname); 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; } 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"), + if (!db_add_SIG_to_file_record(jcr, jcr->db, ar->FileId, SIGbuf, type)) { + Jmsg(jcr, M_ERROR, 0, _("Catalog error updating MD5/SHA1. %s"), db_strerror(jcr->db)); } } diff --git a/bacula/src/dird/dird.c b/bacula/src/dird/dird.c index 617400c8a2..63a3b1ea8a 100644 --- a/bacula/src/dird/dird.c +++ b/bacula/src/dird/dird.c @@ -559,7 +559,6 @@ static int check_resources() for (i=0; job_items[i].name; i++) { char **def_svalue, **svalue; /* string value */ int *def_ivalue, *ivalue; /* integer value */ - bool *def_bvalue, *bvalue; /* bool value */ int64_t *def_lvalue, *lvalue; /* 64 bit values */ uint32_t offset; @@ -609,9 +608,9 @@ static int check_resources() } /* * Handle integer fields - * Note, our store_bit does not handle bitmaped fields + * Note, our store_yesno does not handle bitmaped fields */ - } else if (job_items[i].handler == store_bit || + } else if (job_items[i].handler == store_yesno || job_items[i].handler == store_pint || job_items[i].handler == store_jobtype || job_items[i].handler == store_level || @@ -635,16 +634,6 @@ static int check_resources() lvalue = (int64_t *)((char *)job + offset); *lvalue = *def_lvalue; set_bit(i, job->hdr.item_present); - /* - * Handle bool fields - */ - } else if (job_items[i].handler == store_bool) { - def_bvalue = (bool *)((char *)(job->jobdefs) + offset); - Dmsg5(400, "Job \"%s\", field \"%s\" def_bvalue=%d item %d offset=%u\n", - job->hdr.name, job_items[i].name, *def_bvalue, i, offset); - bvalue = (bool *)((char *)job + offset); - *bvalue = *def_bvalue; - set_bit(i, job->hdr.item_present); } } } diff --git a/bacula/src/dird/dird_conf.c b/bacula/src/dird/dird_conf.c index 0ebace8e60..59ad1cbfb1 100644 --- a/bacula/src/dird/dird_conf.c +++ b/bacula/src/dird/dird_conf.c @@ -97,9 +97,9 @@ static RES_ITEM dir_items[] = { {"password", store_password, ITEM(res_dir.password), 0, ITEM_REQUIRED, 0}, {"fdconnecttimeout", store_time,ITEM(res_dir.FDConnectTimeout), 0, ITEM_DEFAULT, 60 * 30}, {"sdconnecttimeout", store_time,ITEM(res_dir.SDConnectTimeout), 0, ITEM_DEFAULT, 60 * 30}, - {"tlsenable", store_bool, ITEM(res_dir.tls_enable), 0, 0, 0}, - {"tlsrequire", store_bool, ITEM(res_dir.tls_require), 0, 0, 0}, - {"tlsverifypeer", store_bool, ITEM(res_dir.tls_verify_peer), 0, ITEM_DEFAULT, true}, + {"tlsenable", store_yesno, ITEM(res_dir.tls_enable), 1, 0, 0}, + {"tlsrequire", store_yesno, ITEM(res_dir.tls_require), 1, 0, 0}, + {"tlsverifypeer", store_yesno, ITEM(res_dir.tls_verify_peer), 1, ITEM_DEFAULT, 1}, {"tlscacertificatefile", store_dir, ITEM(res_dir.tls_ca_certfile), 0, 0, 0}, {"tlscacertificatedir", store_dir, ITEM(res_dir.tls_ca_certdir), 0, 0, 0}, {"tlscertificate", store_dir, ITEM(res_dir.tls_certfile), 0, 0, 0}, @@ -127,9 +127,9 @@ static RES_ITEM con_items[] = { {"commandacl", store_acl, ITEM(res_con.ACL_lists), Command_ACL, 0, 0}, {"filesetacl", store_acl, ITEM(res_con.ACL_lists), FileSet_ACL, 0, 0}, {"catalogacl", store_acl, ITEM(res_con.ACL_lists), Catalog_ACL, 0, 0}, - {"tlsenable", store_bool, ITEM(res_con.tls_enable), 0, 0, 0}, - {"tlsrequire", store_bool, ITEM(res_con.tls_require), 0, 0, 0}, - {"tlsverifypeer", store_bool, ITEM(res_con.tls_verify_peer), 0, ITEM_DEFAULT, true}, + {"tlsenable", store_yesno, ITEM(res_con.tls_enable), 1, 0, 0}, + {"tlsrequire", store_yesno, ITEM(res_con.tls_require), 1, 0, 0}, + {"tlsverifypeer", store_yesno, ITEM(res_con.tls_verify_peer), 1, ITEM_DEFAULT, 1}, {"tlscacertificatefile", store_dir, ITEM(res_con.tls_ca_certfile), 0, 0, 0}, {"tlscacertificatedir", store_dir, ITEM(res_con.tls_ca_certdir), 0, 0, 0}, {"tlscertificate", store_dir, ITEM(res_con.tls_certfile), 0, 0, 0}, @@ -157,10 +157,10 @@ static RES_ITEM cli_items[] = { {"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}, - {"autoprune", store_bool, ITEM(res_client.AutoPrune), 0, ITEM_DEFAULT, true}, + {"autoprune", store_yesno, ITEM(res_client.AutoPrune), 1, ITEM_DEFAULT, 1}, {"maximumconcurrentjobs", store_pint, ITEM(res_client.MaxConcurrentJobs), 0, ITEM_DEFAULT, 1}, - {"tlsenable", store_bool, ITEM(res_client.tls_enable), 0, 0, 0}, - {"tlsrequire", store_bool, ITEM(res_client.tls_require), 0, 0, 0}, + {"tlsenable", store_yesno, ITEM(res_client.tls_enable), 1, 0, 0}, + {"tlsrequire", store_yesno, ITEM(res_client.tls_require), 1, 0, 0}, {"tlscacertificatefile", store_dir, ITEM(res_client.tls_ca_certfile), 0, 0, 0}, {"tlscacertificatedir", store_dir, ITEM(res_client.tls_ca_certdir), 0, 0, 0}, {"tlscertificate", store_dir, ITEM(res_client.tls_certfile), 0, 0, 0}, @@ -182,12 +182,12 @@ static RES_ITEM store_items[] = { {"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}, - {"autochanger", store_bool, ITEM(res_store.autochanger), 0, ITEM_DEFAULT, 0}, - {"enabled", store_bool, ITEM(res_store.enabled), 0, ITEM_DEFAULT, true}, + {"autochanger", store_yesno, ITEM(res_store.autochanger), 1, ITEM_DEFAULT, 0}, + {"enabled", store_yesno, ITEM(res_store.enabled), 1, ITEM_DEFAULT, 1}, {"maximumconcurrentjobs", store_pint, ITEM(res_store.MaxConcurrentJobs), 0, ITEM_DEFAULT, 1}, {"sddport", store_pint, ITEM(res_store.SDDport), 0, 0, 0}, /* deprecated */ - {"tlsenable", store_bool, ITEM(res_store.tls_enable), 0, 0, 0}, - {"tlsrequire", store_bool, ITEM(res_store.tls_require), 0, 0, 0}, + {"tlsenable", store_yesno, ITEM(res_store.tls_enable), 1, 0, 0}, + {"tlsrequire", store_yesno, ITEM(res_store.tls_require), 1, 0, 0}, {"tlscacertificatefile", store_dir, ITEM(res_store.tls_ca_certfile), 0, 0, 0}, {"tlscacertificatedir", store_dir, ITEM(res_store.tls_ca_certdir), 0, 0, 0}, {"tlscertificate", store_dir, ITEM(res_store.tls_certfile), 0, 0, 0}, @@ -213,7 +213,7 @@ static RES_ITEM cat_items[] = { {"dbname", store_str, ITEM(res_cat.db_name), 0, ITEM_REQUIRED, 0}, {"dbsocket", store_str, ITEM(res_cat.db_socket), 0, 0, 0}, /* Turned off for the moment */ - {"multipleconnections", store_bit, ITEM(res_cat.mult_db_connections), 0, 0, 0}, + {"multipleconnections", store_yesno, ITEM(res_cat.mult_db_connections), 0, 0, 0}, {NULL, NULL, NULL, 0, 0, 0} }; @@ -228,7 +228,7 @@ RES_ITEM job_items[] = { {"type", store_jobtype, ITEM(res_job.JobType), 0, ITEM_REQUIRED, 0}, {"level", store_level, ITEM(res_job.JobLevel), 0, 0, 0}, {"messages", store_res, ITEM(res_job.messages), R_MSGS, ITEM_REQUIRED, 0}, - {"storage", store_alist_res, ITEM(res_job.storage), R_STORAGE, 0, 0}, + {"storage", store_alist_res, ITEM(res_job.storage), R_STORAGE, ITEM_REQUIRED, 0}, {"pool", store_res, ITEM(res_job.pool), R_POOL, ITEM_REQUIRED, 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}, @@ -237,16 +237,11 @@ RES_ITEM job_items[] = { {"fileset", store_res, ITEM(res_job.fileset), R_FILESET, ITEM_REQUIRED, 0}, {"schedule", store_res, ITEM(res_job.schedule), R_SCHEDULE, 0, 0}, {"verifyjob", store_res, ITEM(res_job.verify_job), R_JOB, 0, 0}, - {"migrationjob", store_res, ITEM(res_job.migration_job), R_JOB, 0, 0}, {"jobdefs", store_res, ITEM(res_job.jobdefs), R_JOBDEFS, 0, 0}, {"run", store_alist_str, ITEM(res_job.run_cmds), 0, 0, 0}, - /* Root of where to restore files */ {"where", store_dir, ITEM(res_job.RestoreWhere), 0, 0, 0}, - /* Where to find bootstrap during restore */ {"bootstrap",store_dir, ITEM(res_job.RestoreBootstrap), 0, 0, 0}, - /* Where to write bootstrap file during backup */ {"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}, {"maxruntime", store_time, ITEM(res_job.MaxRunTime), 0, 0, 0}, {"fullmaxwaittime", store_time, ITEM(res_job.FullMaxWaitTime), 0, 0, 0}, @@ -255,26 +250,26 @@ RES_ITEM job_items[] = { {"maxwaittime", store_time, ITEM(res_job.MaxWaitTime), 0, 0, 0}, {"maxstartdelay",store_time, ITEM(res_job.MaxStartDelay), 0, 0, 0}, {"jobretention", store_time, ITEM(res_job.JobRetention), 0, 0, 0}, - {"prefixlinks", store_bool, ITEM(res_job.PrefixLinks), 0, ITEM_DEFAULT, false}, - {"prunejobs", store_bool, ITEM(res_job.PruneJobs), 0, ITEM_DEFAULT, false}, - {"prunefiles", store_bool, ITEM(res_job.PruneFiles), 0, ITEM_DEFAULT, false}, - {"prunevolumes",store_bool, ITEM(res_job.PruneVolumes), 0, ITEM_DEFAULT, false}, - {"enabled", store_bool, ITEM(res_job.enabled), 0, ITEM_DEFAULT, true}, - {"spoolattributes",store_bool, ITEM(res_job.SpoolAttributes), 0, ITEM_DEFAULT, false}, - {"spooldata", store_bit, ITEM(res_job.spool_data), 0, ITEM_DEFAULT, false}, - {"rerunfailedlevels", store_bool, ITEM(res_job.rerun_failed_levels), 0, ITEM_DEFAULT, false}, - {"prefermountedvolumes", store_bool, ITEM(res_job.PreferMountedVolumes), 0, ITEM_DEFAULT, true}, + {"prefixlinks", store_yesno, ITEM(res_job.PrefixLinks), 1, ITEM_DEFAULT, 0}, + {"prunejobs", store_yesno, ITEM(res_job.PruneJobs), 1, ITEM_DEFAULT, 0}, + {"prunefiles", store_yesno, ITEM(res_job.PruneFiles), 1, ITEM_DEFAULT, 0}, + {"prunevolumes",store_yesno, ITEM(res_job.PruneVolumes), 1, ITEM_DEFAULT, 0}, + {"enabled", store_yesno, ITEM(res_job.enabled), 1, ITEM_DEFAULT, 1}, + {"spoolattributes",store_yesno, ITEM(res_job.SpoolAttributes), 1, ITEM_DEFAULT, 0}, + {"spooldata", store_yesno, ITEM(res_job.spool_data), 1, ITEM_DEFAULT, 0}, + {"rerunfailedlevels", store_yesno, ITEM(res_job.rerun_failed_levels), 1, ITEM_DEFAULT, 0}, + {"prefermountedvolumes", store_yesno, ITEM(res_job.PreferMountedVolumes), 1, ITEM_DEFAULT, 1}, {"runbeforejob", store_str, ITEM(res_job.RunBeforeJob), 0, 0, 0}, {"runafterjob", store_str, ITEM(res_job.RunAfterJob), 0, 0, 0}, {"runafterfailedjob", store_str, ITEM(res_job.RunAfterFailedJob), 0, 0, 0}, {"clientrunbeforejob", store_str, ITEM(res_job.ClientRunBeforeJob), 0, 0, 0}, {"clientrunafterjob", store_str, ITEM(res_job.ClientRunAfterJob), 0, 0, 0}, {"maximumconcurrentjobs", store_pint, ITEM(res_job.MaxConcurrentJobs), 0, ITEM_DEFAULT, 1}, - {"rescheduleonerror", store_bool, ITEM(res_job.RescheduleOnError), 0, ITEM_DEFAULT, false}, + {"rescheduleonerror", store_yesno, ITEM(res_job.RescheduleOnError), 1, ITEM_DEFAULT, 0}, {"rescheduleinterval", store_time, ITEM(res_job.RescheduleInterval), 0, ITEM_DEFAULT, 60 * 30}, {"rescheduletimes", store_pint, ITEM(res_job.RescheduleTimes), 0, 0, 0}, {"priority", store_pint, ITEM(res_job.Priority), 0, ITEM_DEFAULT, 10}, - {"writepartafterjob", store_bool, ITEM(res_job.write_part_after_job), 0, ITEM_DEFAULT, false}, + {"writepartafterjob", store_yesno, ITEM(res_job.write_part_after_job), 1, ITEM_DEFAULT, 0}, {NULL, NULL, NULL, 0, 0, 0} }; @@ -287,8 +282,8 @@ static RES_ITEM fs_items[] = { {"description", store_str, ITEM(res_fs.hdr.desc), 0, 0, 0}, {"include", store_inc, NULL, 0, ITEM_NO_EQUALS, 0}, {"exclude", store_inc, NULL, 1, ITEM_NO_EQUALS, 0}, - {"ignorefilesetchanges", store_bool, ITEM(res_fs.ignore_fs_changes), 0, ITEM_DEFAULT, false}, - {"enablevss", store_bool, ITEM(res_fs.enable_vss), 0, ITEM_DEFAULT, false}, + {"ignorefilesetchanges", store_yesno, ITEM(res_fs.ignore_fs_changes), 1, ITEM_DEFAULT, 0}, + {"enablevss", store_yesno, ITEM(res_fs.enable_vss), 1, ITEM_DEFAULT, 0}, {NULL, NULL, NULL, 0, 0, 0} }; @@ -314,27 +309,22 @@ static RES_ITEM pool_items[] = { {"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}, - {"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}, - {"purgeoldestvolume", store_bool, ITEM(res_pool.purge_oldest_volume), 0, 0, 0}, - {"recycleoldestvolume", store_bool, ITEM(res_pool.recycle_oldest_volume), 0, 0, 0}, - {"recyclecurrentvolume", store_bool, ITEM(res_pool.recycle_current_volume), 0, 0, 0}, + {"cleaningprefix", store_strname, ITEM(res_pool.cleaning_prefix), 0, 0, 0}, + {"usecatalog", store_yesno, ITEM(res_pool.use_catalog), 1, ITEM_DEFAULT, 1}, + {"usevolumeonce", store_yesno, ITEM(res_pool.use_volume_once),1, 0, 0}, + {"purgeoldestvolume", store_yesno, ITEM(res_pool.purge_oldest_volume), 1, 0, 0}, + {"recycleoldestvolume", store_yesno, ITEM(res_pool.recycle_oldest_volume), 1, 0, 0}, + {"recyclecurrentvolume", store_yesno, ITEM(res_pool.recycle_current_volume), 1, 0, 0}, {"maximumvolumes", store_pint, ITEM(res_pool.max_volumes), 0, 0, 0}, {"maximumvolumejobs", store_pint, ITEM(res_pool.MaxVolJobs), 0, 0, 0}, {"maximumvolumefiles", store_pint, ITEM(res_pool.MaxVolFiles), 0, 0, 0}, {"maximumvolumebytes", store_size, ITEM(res_pool.MaxVolBytes), 0, 0, 0}, - {"acceptanyvolume", store_bool, ITEM(res_pool.accept_any_volume), 0, ITEM_DEFAULT, true}, - {"catalogfiles", store_bool, ITEM(res_pool.catalog_files), 0, ITEM_DEFAULT, true}, + {"acceptanyvolume", store_yesno, ITEM(res_pool.accept_any_volume), 1, ITEM_DEFAULT, 1}, + {"catalogfiles", store_yesno, ITEM(res_pool.catalog_files), 1, ITEM_DEFAULT, 1}, {"volumeretention", store_time, ITEM(res_pool.VolRetention), 0, ITEM_DEFAULT, 60*60*24*365}, {"volumeuseduration", store_time, ITEM(res_pool.VolUseDuration), 0, 0, 0}, - {"migrationtime", store_time, ITEM(res_pool.MigrationTime), 0, 0, 0}, - {"migrationhighbytes", store_size, ITEM(res_pool.MigrationHighBytes), 0, 0, 0}, - {"migrationlowbytes", store_size, ITEM(res_pool.MigrationLowBytes), 0, 0, 0}, - {"nextpool", store_res, ITEM(res_pool.NextPool), R_POOL, 0, 0}, - {"storage", store_alist_res, ITEM(res_pool.storage), R_STORAGE, 0, 0}, - {"autoprune", store_bool, ITEM(res_pool.AutoPrune), 0, ITEM_DEFAULT, true}, - {"recycle", store_bool, ITEM(res_pool.Recycle), 0, ITEM_DEFAULT, true}, + {"autoprune", store_yesno, ITEM(res_pool.AutoPrune), 1, ITEM_DEFAULT, 1}, + {"recycle", store_yesno, ITEM(res_pool.Recycle), 1, ITEM_DEFAULT, 1}, {NULL, NULL, NULL, 0, 0, 0} }; @@ -412,8 +402,6 @@ struct s_jt jobtypes[] = { {"admin", JT_ADMIN}, {"verify", JT_VERIFY}, {"restore", JT_RESTORE}, - {"copy", JT_COPY}, - {"migrate", JT_MIGRATE}, {NULL, 0} }; @@ -448,7 +436,7 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm { URES *res = (URES *)reshdr; bool recurse = true; - char ed1[100], ed2[100], ed3[100]; + char ed1[100], ed2[100]; DEVICE *dev; if (res == NULL) { @@ -474,8 +462,13 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm } break; case R_CONSOLE: +#ifdef HAVE_TLS sendit(sock, _("Console: name=%s SSL=%d\n"), res->res_con.hdr.name, res->res_con.tls_enable); +#else + sendit(sock, _("Console: name=%s SSL=%d\n"), + res->res_con.hdr.name, BNET_TLS_NONE); +#endif break; case R_COUNTER: if (res->res_counter.WrapCounter) { @@ -781,21 +774,6 @@ next_run: res->res_pool.recycle_oldest_volume, res->res_pool.purge_oldest_volume, res->res_pool.MaxVolJobs, res->res_pool.MaxVolFiles); - sendit(sock, _(" MigTime=%s MigHiBytes=%s MigLoBytes=%s\n"), - edit_utime(res->res_pool.MigrationTime, ed1, sizeof(ed1)), - edit_uint64(res->res_pool.MigrationHighBytes, ed2), - edit_uint64(res->res_pool.MigrationLowBytes, ed3)); - if (res->res_pool.NextPool) { - sendit(sock, _(" --> ")); - dump_resource(-R_POOL, (RES *)res->res_pool.NextPool, sendit, sock); - } - if (res->res_pool.storage) { - STORE *store; - foreach_alist(store, res->res_pool.storage) { - sendit(sock, _(" --> ")); - dump_resource(-R_STORAGE, (RES *)store, sendit, sock); - } - } break; case R_MSGS: sendit(sock, _("Messages: name=%s\n"), res->res_msgs.hdr.name); @@ -1043,9 +1021,6 @@ void free_resource(RES *sres, int type) if (res->res_pool.cleaning_prefix) { free(res->res_pool.cleaning_prefix); } - if (res->res_pool.storage) { - delete res->res_pool.storage; - } break; case R_SCHEDULE: if (res->res_sch.run) { @@ -1165,27 +1140,13 @@ void save_resource(int type, RES_ITEM *items, int pass) switch (type) { /* Resources not containing a resource */ case R_CATALOG: + case R_POOL: case R_MSGS: case R_FILESET: case R_DEVICE: break; - /* - * Resources containing another resource or alist. First - * look up the resource which contains another resource. It - * was written during pass 1. Then stuff in the pointers to - * the resources it contains, which were inserted this pass. - * Finally, it will all be stored back. - */ - case R_POOL: - /* Find resource saved in pass 1 */ - if ((res = (URES *)GetResWithName(R_POOL, res_all.res_con.hdr.name)) == NULL) { - Emsg1(M_ERROR_TERM, 0, _("Cannot find Pool resource %s\n"), res_all.res_con.hdr.name); - } - /* Explicitly copy resource pointers from this pass (res_all) */ - res->res_pool.NextPool = res_all.res_pool.NextPool; - res->res_pool.storage = res_all.res_pool.storage; - break; + /* Resources containing another resource or alist */ case R_CONSOLE: if ((res = (URES *)GetResWithName(R_CONSOLE, res_all.res_con.hdr.name)) == NULL) { Emsg1(M_ERROR_TERM, 0, _("Cannot find Console resource %s\n"), res_all.res_con.hdr.name); diff --git a/bacula/src/dird/dird_conf.h b/bacula/src/dird/dird_conf.h index 6886983ee4..2204d70bfe 100644 --- a/bacula/src/dird/dird_conf.h +++ b/bacula/src/dird/dird_conf.h @@ -102,6 +102,9 @@ public: uint32_t MaxConcurrentJobs; /* Max concurrent jobs for whole director */ utime_t FDConnectTimeout; /* timeout for connect in seconds */ utime_t SDConnectTimeout; /* timeout in seconds */ + int tls_enable; /* Enable TLS */ + int tls_require; /* Require TLS */ + int tls_verify_peer; /* TLS Verify Client Certificate */ char *tls_ca_certfile; /* TLS CA Certificate File */ char *tls_ca_certdir; /* TLS CA Certificate Directory */ char *tls_certfile; /* TLS Server Certificate File */ @@ -109,9 +112,6 @@ public: char *tls_dhfile; /* TLS Diffie-Hellman Parameters */ alist *tls_allowed_cns; /* TLS Allowed Clients */ TLS_CONTEXT *tls_ctx; /* Shared TLS Context */ - bool tls_enable; /* Enable TLS */ - bool tls_require; /* Require TLS */ - bool tls_verify_peer; /* TLS Verify Client Certificate */ }; /* @@ -168,6 +168,9 @@ public: RES hdr; char *password; /* UA server password */ alist *ACL_lists[Num_ACL]; /* pointers to ACLs */ + int tls_enable; /* Enable TLS */ + int tls_require; /* Require TLS */ + int tls_verify_peer; /* TLS Verify Client Certificate */ char *tls_ca_certfile; /* TLS CA Certificate File */ char *tls_ca_certdir; /* TLS CA Certificate Directory */ char *tls_certfile; /* TLS Server Certificate File */ @@ -175,9 +178,6 @@ public: char *tls_dhfile; /* TLS Diffie-Hellman Parameters */ alist *tls_allowed_cns; /* TLS Allowed Clients */ TLS_CONTEXT *tls_ctx; /* Shared TLS Context */ - bool tls_enable; /* Enable TLS */ - bool tls_require; /* Require TLS */ - bool tls_verify_peer; /* TLS Verify Client Certificate */ }; @@ -189,7 +189,7 @@ class CAT { public: RES hdr; - int db_port; /* Port */ + int db_port; /* Port -- not yet implemented */ char *db_address; /* host name for remote access */ char *db_socket; /* Socket for local access */ char *db_password; @@ -208,6 +208,7 @@ public: RES hdr; int FDport; /* Where File daemon listens */ + int AutoPrune; /* Do automatic pruning? */ utime_t FileRetention; /* file retention period in seconds */ utime_t JobRetention; /* job retention period in seconds */ char *address; @@ -215,14 +216,13 @@ public: CAT *catalog; /* Catalog resource */ uint32_t MaxConcurrentJobs; /* Maximume concurrent jobs */ uint32_t NumConcurrentJobs; /* number of concurrent jobs running */ + int tls_enable; /* Enable TLS */ + int tls_require; /* Require TLS */ char *tls_ca_certfile; /* TLS CA Certificate File */ char *tls_ca_certdir; /* TLS CA Certificate Directory */ char *tls_certfile; /* TLS Client Certificate File */ char *tls_keyfile; /* TLS Client Key File */ TLS_CONTEXT *tls_ctx; /* Shared TLS Context */ - bool tls_enable; /* Enable TLS */ - bool tls_require; /* Require TLS */ - bool AutoPrune; /* Do automatic pruning? */ }; /* @@ -239,19 +239,19 @@ public: char *password; char *media_type; alist *device; /* Alternate devices for this Storage */ + int autochanger; /* set if autochanger */ + int drives; /* number of drives in autochanger */ uint32_t MaxConcurrentJobs; /* Maximume concurrent jobs */ uint32_t NumConcurrentJobs; /* number of concurrent jobs running */ + int tls_enable; /* Enable TLS */ + int tls_require; /* Require TLS */ char *tls_ca_certfile; /* TLS CA Certificate File */ char *tls_ca_certdir; /* TLS CA Certificate Directory */ char *tls_certfile; /* TLS Client Certificate File */ char *tls_keyfile; /* TLS Client Key File */ TLS_CONTEXT *tls_ctx; /* Shared TLS Context */ - bool tls_enable; /* Enable TLS */ - bool tls_require; /* Require TLS */ - bool enabled; /* Set if device is enabled */ - bool autochanger; /* set if autochanger */ int64_t StorageId; /* Set from Storage DB record */ - int drives; /* number of drives in autochanger */ + int enabled; /* Set if device is enabled */ /* Methods */ char *dev_name() const; @@ -285,10 +285,7 @@ public: char *RunAfterFailedJob; /* Run program after Job that errs */ char *ClientRunBeforeJob; /* Run client program before Job */ char *ClientRunAfterJob; /* Run client program after Job */ - union { - char *WriteBootstrap; /* Where to write bootstrap Job updates */ - char *WriteVerifyList; /* List of changed files */ - }; + char *WriteBootstrap; /* Where to write bootstrap Job updates */ int replace; /* How (overwrite, ..) */ utime_t MaxRunTime; /* max run time in seconds */ utime_t MaxWaitTime; /* max blocking time in seconds */ @@ -296,21 +293,21 @@ public: utime_t DiffMaxWaitTime; /* Max Differential job wait time */ utime_t IncMaxWaitTime; /* Max Incremental job wait time */ utime_t MaxStartDelay; /* max start delay in seconds */ - utime_t RescheduleInterval; /* Reschedule interval */ - utime_t JobRetention; /* job retention period in seconds */ + int PrefixLinks; /* prefix soft links with Where path */ + int PruneJobs; /* Force pruning of Jobs */ + int PruneFiles; /* Force pruning of Files */ + int PruneVolumes; /* Force pruning of Volumes */ + int SpoolAttributes; /* Set to spool attributes in SD */ + int spool_data; /* Set to spool data in SD */ + int rerun_failed_levels; /* Upgrade to rerun failed levels */ + int PreferMountedVolumes; /* Prefer vols mounted rather than new one */ uint32_t MaxConcurrentJobs; /* Maximume concurrent jobs */ + int RescheduleOnError; /* Set to reschedule on error */ int RescheduleTimes; /* Number of times to reschedule job */ - bool RescheduleOnError; /* Set to reschedule on error */ - bool PrefixLinks; /* prefix soft links with Where path */ - bool PruneJobs; /* Force pruning of Jobs */ - bool PruneFiles; /* Force pruning of Files */ - bool PruneVolumes; /* Force pruning of Volumes */ - bool SpoolAttributes; /* Set to spool attributes in SD */ - bool spool_data; /* Set to spool data in SD */ - bool rerun_failed_levels; /* Upgrade to rerun failed levels */ - bool PreferMountedVolumes; /* Prefer vols mounted rather than new one */ - bool write_part_after_job; /* Set to write part after job in SD */ - bool enabled; /* Set if job enabled */ + utime_t RescheduleInterval; /* Reschedule interval */ + utime_t JobRetention; /* job retention period in seconds */ + int write_part_after_job; /* Set to write part after job in SD */ + int enabled; /* Set if device is enabled */ MSGS *messages; /* How and where to send messages */ SCHED *schedule; /* When -- Automatic schedule */ @@ -373,8 +370,8 @@ public: bool have_MD5; /* set if MD5 initialized */ struct MD5Context md5c; /* MD5 of include/exclude */ char MD5[30]; /* base 64 representation of MD5 */ - bool ignore_fs_changes; /* Don't force Full if FS changed */ - bool enable_vss; /* Enable Volume Shadow Copy */ + int ignore_fs_changes; /* Don't force Full if FS changed */ + int enable_vss; /* Enable Volume Shadow Copy */ }; @@ -416,6 +413,13 @@ public: char *label_format; /* Label format string */ char *cleaning_prefix; /* Cleaning label prefix */ int LabelType; /* Bacula/ANSI/IBM label type */ + int use_catalog; /* maintain catalog for media */ + int catalog_files; /* maintain file entries in catalog */ + int use_volume_once; /* write on volume only once */ + int accept_any_volume; /* accept any volume */ + int purge_oldest_volume; /* purge oldest volume */ + int recycle_oldest_volume; /* attempt to recycle oldest volume */ + int recycle_current_volume; /* attempt recycle of current volume */ uint32_t max_volumes; /* max number of volumes */ utime_t VolRetention; /* volume retention period in seconds */ utime_t VolUseDuration; /* duration volume can be used */ @@ -426,16 +430,8 @@ public: uint32_t MigrationHighBytes; /* When migration starts */ uint32_t MigrationLowBytes; /* When migration stops */ POOL *NextPool; /* Next pool for migration */ - alist *storage; /* Where is device -- list of Storage to be used */ - bool use_catalog; /* maintain catalog for media */ - bool catalog_files; /* maintain file entries in catalog */ - bool use_volume_once; /* write on volume only once */ - bool accept_any_volume; /* accept any volume */ - bool purge_oldest_volume; /* purge oldest volume */ - bool recycle_oldest_volume; /* attempt to recycle oldest volume */ - bool recycle_current_volume; /* attempt recycle of current volume */ - bool AutoPrune; /* default for pool auto prune */ - bool Recycle; /* default for media recycle yes/no */ + int AutoPrune; /* default for pool auto prune */ + int Recycle; /* default for media recycle yes/no */ }; diff --git a/bacula/src/dird/fd_cmds.c b/bacula/src/dird/fd_cmds.c index dfc4cc11db..8733828561 100644 --- a/bacula/src/dird/fd_cmds.c +++ b/bacula/src/dird/fd_cmds.c @@ -13,7 +13,7 @@ * Version $Id$ */ /* - Copyright (C) 2000-2006 Kern Sibbald + Copyright (C) 2000-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -29,11 +29,10 @@ #include "bacula.h" #include "dird.h" -#include "findlib/find.h" /* Commands sent to File daemon */ static char filesetcmd[] = "fileset%s\n"; /* set full fileset */ -static char jobcmd[] = "JobId=%d Job=%s SDid=%u SDtime=%u Authorization=%s\n"; +static char jobcmd[] = "JobId=%s Job=%s SDid=%u SDtime=%u Authorization=%s\n"; /* Note, mtime_only is not used here -- implemented as file option */ static char levelcmd[] = "level = %s%s mtime_only=%d\n"; static char runbefore[] = "RunBeforeJob %s\n"; @@ -43,6 +42,7 @@ static char runafter[] = "RunAfterJob %s\n"; /* Responses received from File daemon */ static char OKinc[] = "2000 OK include\n"; static char OKjob[] = "2000 OK Job"; +static char OKbootstrap[] = "2000 OK bootstrap\n"; static char OKlevel[] = "2000 OK level\n"; static char OKRunBefore[] = "2000 OK RunBefore\n"; static char OKRunAfter[] = "2000 OK RunAfter\n"; @@ -67,6 +67,7 @@ int connect_to_file_daemon(JCR *jcr, int retry_interval, int max_retry_time, int verbose) { BSOCK *fd; + char ed1[30]; if (!jcr->file_bsock) { fd = bnet_connect(jcr, retry_interval, max_retry_time, @@ -92,7 +93,7 @@ int connect_to_file_daemon(JCR *jcr, int retry_interval, int max_retry_time, /* * Now send JobId and authorization key */ - bnet_fsend(fd, jobcmd, jcr->JobId, jcr->Job, jcr->VolSessionId, + bnet_fsend(fd, jobcmd, edit_int64(jcr->JobId, ed1), jcr->Job, jcr->VolSessionId, jcr->VolSessionTime, jcr->sd_auth_key); if (strcmp(jcr->sd_auth_key, "dummy") != 0) { memset(jcr->sd_auth_key, 0, strlen(jcr->sd_auth_key)); @@ -421,19 +422,19 @@ bool send_exclude_list(JCR *jcr) /* - * Send bootstrap file if any to the socket given (FD or SD). - * This is used for restore, verify VolumeToCatalog, and - * for migration. + * Send bootstrap file if any to the File daemon. + * This is used for restore and verify VolumeToCatalog */ -bool send_bootstrap_file(JCR *jcr, BSOCK *sock) +bool send_bootstrap_file(JCR *jcr) { FILE *bs; char buf[1000]; + BSOCK *fd = jcr->file_bsock; const char *bootstrap = "bootstrap\n"; Dmsg1(400, "send_bootstrap_file: %s\n", jcr->RestoreBootstrap); if (!jcr->RestoreBootstrap) { - return true; + return 1; } bs = fopen(jcr->RestoreBootstrap, "r"); if (!bs) { @@ -441,19 +442,23 @@ bool send_bootstrap_file(JCR *jcr, BSOCK *sock) Jmsg(jcr, M_FATAL, 0, _("Could not open bootstrap file %s: ERR=%s\n"), jcr->RestoreBootstrap, be.strerror()); set_jcr_job_status(jcr, JS_ErrorTerminated); - return false; + return 0; } - bnet_fsend(sock, bootstrap); + bnet_fsend(fd, bootstrap); while (fgets(buf, sizeof(buf), bs)) { - bnet_fsend(sock, "%s", buf); + bnet_fsend(fd, "%s", buf); } - bnet_sig(sock, BNET_EOD); + bnet_sig(fd, BNET_EOD); fclose(bs); if (jcr->unlink_bsr) { unlink(jcr->RestoreBootstrap); jcr->unlink_bsr = false; } - return true; + if (!response(jcr, fd, OKbootstrap, "Bootstrap", DISPLAY_ERROR)) { + set_jcr_job_status(jcr, JS_ErrorTerminated); + return 0; + } + return 1; } /* @@ -504,7 +509,7 @@ int get_attributes_and_put_in_catalog(JCR *jcr) jcr->FileIndex = 0; Dmsg0(120, "bdird: waiting to receive file attributes\n"); - /* Pickup file attributes and digest */ + /* Pickup file attributes and signature */ while (!fd->errors && (n = bget_dirmsg(fd)) > 0) { /*****FIXME****** improve error handling to stop only on @@ -514,11 +519,11 @@ int get_attributes_and_put_in_catalog(JCR *jcr) long file_index; int stream, len; char *attr, *p, *fn; - char Opts_Digest[MAXSTRING]; /* either Verify opts or MD5/SHA1 digest */ - char digest[CRYPTO_DIGEST_MAX_SIZE]; + char Opts_SIG[MAXSTRING]; /* either Verify opts or MD5/SHA1 signature */ + char SIG[MAXSTRING]; jcr->fname = check_pool_memory_size(jcr->fname, fd->msglen); - if ((len = sscanf(fd->msg, "%ld %d %s", &file_index, &stream, Opts_Digest)) != 3) { + if ((len = sscanf(fd->msg, "%ld %d %s", &file_index, &stream, Opts_SIG)) != 3) { Jmsg(jcr, M_FATAL, 0, _("msglen, fd->msg); set_jcr_job_status(jcr, JS_ErrorTerminated); @@ -550,8 +555,8 @@ int get_attributes_and_put_in_catalog(JCR *jcr) ar.ClientId = jcr->ClientId; ar.PathId = 0; ar.FilenameId = 0; - ar.Digest = NULL; - ar.DigestType = CRYPTO_DIGEST_NONE; + ar.Sig = NULL; + ar.SigType = 0; Dmsg2(111, "dirdfname); Dmsg1(120, "dirdFileId = ar.FileId; - } else if (crypto_digest_stream_type(stream) != CRYPTO_DIGEST_NONE) { + } else if (stream == STREAM_MD5_SIGNATURE || stream == STREAM_SHA1_SIGNATURE) { if (jcr->FileIndex != (uint32_t)file_index) { - Jmsg3(jcr, M_ERROR, 0, _("%s index %d not same as attributes %d\n"), - stream_to_ascii(stream), file_index, jcr->FileIndex); + Jmsg2(jcr, M_ERROR, 0, _("MD5/SHA1 index %d not same as attributes %d\n"), + file_index, jcr->FileIndex); set_jcr_job_status(jcr, JS_Error); continue; } - db_escape_string(digest, Opts_Digest, strlen(Opts_Digest)); - Dmsg2(120, "DigestLen=%d Digest=%s\n", strlen(digest), digest); - if (!db_add_digest_to_file_record(jcr, jcr->db, jcr->FileId, digest, - crypto_digest_stream_type(stream))) { + db_escape_string(SIG, Opts_SIG, strlen(Opts_SIG)); + Dmsg2(120, "SIGlen=%d SIG=%s\n", strlen(SIG), SIG); + if (!db_add_SIG_to_file_record(jcr, jcr->db, jcr->FileId, SIG, + stream==STREAM_MD5_SIGNATURE?MD5_SIG:SHA1_SIG)) { Jmsg1(jcr, M_ERROR, 0, "%s", db_strerror(jcr->db)); set_jcr_job_status(jcr, JS_Error); } diff --git a/bacula/src/dird/getmsg.c b/bacula/src/dird/getmsg.c index bd5dea6157..8150cb8972 100644 --- a/bacula/src/dird/getmsg.c +++ b/bacula/src/dird/getmsg.c @@ -21,7 +21,7 @@ * Version $Id$ */ /* - Copyright (C) 2000-2006 Kern Sibbald + Copyright (C) 2000-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -304,9 +304,11 @@ bool response(JCR *jcr, BSOCK *bs, char *resp, const char *cmd, e_prtmsg prtmsg) return false; } if ((n = bget_dirmsg(bs)) >= 0) { + Dmsg0(900, bs->msg); if (strcmp(bs->msg, resp) == 0) { return true; } + Dmsg1(900, "Bad response: ERR=%s", bs->msg); if (prtmsg == DISPLAY_ERROR) { Jmsg(jcr, M_FATAL, 0, _("Bad response to %s command: wanted %s, got %s\n"), cmd, resp, bs->msg); diff --git a/bacula/src/dird/inc_conf.c b/bacula/src/dird/inc_conf.c index 67ebde2ac8..0ca26731ab 100644 --- a/bacula/src/dird/inc_conf.c +++ b/bacula/src/dird/inc_conf.c @@ -103,7 +103,7 @@ static RES_ITEM options_items[] = { enum { INC_KW_NONE, INC_KW_COMPRESSION, - INC_KW_DIGEST, + INC_KW_SIGNATURE, INC_KW_ENCRYPTION, INC_KW_VERIFY, INC_KW_ONEFS, @@ -129,7 +129,7 @@ enum { */ static struct s_kw FS_option_kw[] = { {"compression", INC_KW_COMPRESSION}, - {"signature", INC_KW_DIGEST}, + {"signature", INC_KW_SIGNATURE}, {"encryption", INC_KW_ENCRYPTION}, {"verify", INC_KW_VERIFY}, {"onefs", INC_KW_ONEFS}, @@ -163,10 +163,8 @@ struct s_fs_opt { * included files. */ static struct s_fs_opt FS_options[] = { - {"md5", INC_KW_DIGEST, "M"}, - {"sha1", INC_KW_DIGEST, "S"}, - {"sha256", INC_KW_DIGEST, "S2"}, - {"sha512", INC_KW_DIGEST, "S3"}, + {"md5", INC_KW_SIGNATURE, "M"}, + {"sha1", INC_KW_SIGNATURE, "S"}, {"gzip", INC_KW_COMPRESSION, "Z6"}, {"gzip1", INC_KW_COMPRESSION, "Z1"}, {"gzip2", INC_KW_COMPRESSION, "Z2"}, diff --git a/bacula/src/dird/job.c b/bacula/src/dird/job.c index f23976861c..10716cd43d 100644 --- a/bacula/src/dird/job.c +++ b/bacula/src/dird/job.c @@ -73,24 +73,10 @@ void term_job_server() */ JobId_t run_job(JCR *jcr) { - int stat; - if (setup_job(jcr)) { - /* Queue the job to be run */ - if ((stat = jobq_add(&job_queue, jcr)) != 0) { - berrno be; - Jmsg(jcr, M_FATAL, 0, _("Could not add job queue: ERR=%s\n"), be.strerror(stat)); - return 0; - } - return jcr->JobId; - } - return 0; -} + int stat, errstat; + JobId_t JobId = 0; -bool setup_job(JCR *jcr) -{ - int errstat; - - P(jcr->mutex); + jcr->lock(); sm_check(__FILE__, __LINE__, true); init_msg(jcr, jcr->messages); @@ -102,6 +88,9 @@ bool setup_job(JCR *jcr) } jcr->term_wait_inited = true; + create_unique_job_name(jcr, jcr->job->hdr.name); + set_jcr_job_status(jcr, JS_Created); + jcr->unlock(); /* * Open database @@ -124,14 +113,12 @@ bool setup_job(JCR *jcr) /* * Create Job record */ - create_unique_job_name(jcr, jcr->job->hdr.name); - set_jcr_job_status(jcr, JS_Created); init_jcr_job_record(jcr); if (!db_create_job_record(jcr, jcr->db, &jcr->jr)) { Jmsg(jcr, M_FATAL, 0, "%s", db_strerror(jcr->db)); goto bail_out; } - jcr->JobId = jcr->jr.JobId; + JobId = jcr->JobId = jcr->jr.JobId; Dmsg4(100, "Created job record JobId=%d Name=%s Type=%c Level=%c\n", jcr->JobId, jcr->Job, jcr->jr.JobType, jcr->jr.JobLevel); @@ -147,17 +134,23 @@ bool setup_job(JCR *jcr) Dmsg0(200, "Add jrc to work queue\n"); + /* Queue the job to be run */ + if ((stat = jobq_add(&job_queue, jcr)) != 0) { + berrno be; + Jmsg(jcr, M_FATAL, 0, _("Could not add job queue: ERR=%s\n"), be.strerror(stat)); + JobId = 0; + goto bail_out; + } + Dmsg0(100, "Done run_job()\n"); - V(jcr->mutex); - return true; + return JobId; bail_out: if (jcr->fname) { free_memory(jcr->fname); jcr->fname = NULL; } - V(jcr->mutex); - return false; + return JobId; } @@ -385,6 +378,7 @@ bool cancel_job(UAContext *ua, JCR *jcr) return true; default: + /* Cancel File daemon */ if (jcr->file_bsock) { ua->jcr->client = jcr->client; @@ -406,7 +400,7 @@ bool cancel_job(UAContext *ua, JCR *jcr) /* Cancel Storage daemon */ if (jcr->store_bsock) { if (!ua->jcr->storage) { - copy_storage(ua->jcr, jcr->storage); + copy_storage(ua->jcr, jcr); } else { set_storage(ua->jcr, jcr->store); } @@ -647,13 +641,13 @@ bool get_or_create_fileset_record(JCR *jcr) bstrncpy(fsr.FileSet, jcr->fileset->hdr.name, sizeof(fsr.FileSet)); if (jcr->fileset->have_MD5) { struct MD5Context md5c; - unsigned char digest[MD5HashSize]; + unsigned char signature[16]; memcpy(&md5c, &jcr->fileset->md5c, sizeof(md5c)); - MD5Final(digest, &md5c); - bin_to_base64(fsr.MD5, (char *)digest, MD5HashSize); + MD5Final(signature, &md5c); + bin_to_base64(fsr.MD5, (char *)signature, 16); /* encode 16 bytes */ bstrncpy(jcr->fileset->MD5, fsr.MD5, sizeof(jcr->fileset->MD5)); } else { - Jmsg(jcr, M_WARNING, 0, _("FileSet MD5 digest not found.\n")); + Jmsg(jcr, M_WARNING, 0, _("FileSet MD5 signature not found.\n")); } if (!jcr->fileset->ignore_fs_changes || !db_get_fileset_record(jcr, jcr->db, &fsr)) { @@ -828,6 +822,7 @@ void dird_free_jcr(JCR *jcr) */ void set_jcr_defaults(JCR *jcr, JOB *job) { + STORE *st; jcr->job = job; jcr->JobType = job->JobType; switch (jcr->JobType) { @@ -841,7 +836,18 @@ void set_jcr_defaults(JCR *jcr, JOB *job) } jcr->JobPriority = job->Priority; /* Copy storage definitions -- deleted in dir_free_jcr above */ - copy_storage(jcr, job->storage); + if (job->storage) { + if (jcr->storage) { + delete jcr->storage; + } + jcr->storage = New(alist(10, not_owned_by_alist)); + foreach_alist(st, job->storage) { + jcr->storage->append(st); + } + } + if (jcr->storage) { + jcr->store = (STORE *)jcr->storage->first(); + } jcr->client = job->client; if (!jcr->client_name) { jcr->client_name = get_pool_memory(PM_NAME); @@ -885,28 +891,28 @@ void set_jcr_defaults(JCR *jcr, JOB *job) } } - -/* - * Copy the storage definitions from an alist to the JCR +/* + * copy the storage definitions from an old JCR to a new one */ -void copy_storage(JCR *jcr, alist *storage) +void copy_storage(JCR *new_jcr, JCR *old_jcr) { - if (storage) { + if (old_jcr->storage) { STORE *st; - if (jcr->storage) { - delete jcr->storage; + if (new_jcr->storage) { + delete new_jcr->storage; } - jcr->storage = New(alist(10, not_owned_by_alist)); - foreach_alist(st, storage) { - jcr->storage->append(st); + new_jcr->storage = New(alist(10, not_owned_by_alist)); + foreach_alist(st, old_jcr->storage) { + new_jcr->storage->append(st); } - } - if (jcr->storage) { - jcr->store = (STORE *)jcr->storage->first(); + } + if (old_jcr->store) { + new_jcr->store = old_jcr->store; + } else if (new_jcr->storage) { + new_jcr->store = (STORE *)new_jcr->storage->first(); } } - /* Set storage override */ void set_storage(JCR *jcr, STORE *store) { @@ -921,64 +927,3 @@ void set_storage(JCR *jcr, STORE *store) /* Store not in list, so add it */ jcr->storage->prepend(store); } - -void create_clones(JCR *jcr) -{ - /* - * Fire off any clone jobs (run directives) - */ - Dmsg2(900, "cloned=%d run_cmds=%p\n", jcr->cloned, jcr->job->run_cmds); - if (!jcr->cloned && jcr->job->run_cmds) { - char *runcmd; - JOB *job = jcr->job; - POOLMEM *cmd = get_pool_memory(PM_FNAME); - UAContext *ua = new_ua_context(jcr); - ua->batch = true; - foreach_alist(runcmd, job->run_cmds) { - cmd = edit_job_codes(jcr, cmd, runcmd, ""); - Mmsg(ua->cmd, "run %s cloned=yes", cmd); - Dmsg1(900, "=============== Clone cmd=%s\n", ua->cmd); - parse_ua_args(ua); /* parse command */ - int stat = run_cmd(ua, ua->cmd); - if (stat == 0) { - Jmsg(jcr, M_ERROR, 0, _("Could not start clone job.\n")); - } else { - Jmsg(jcr, M_INFO, 0, _("Clone JobId %d started.\n"), stat); - } - } - free_ua_context(ua); - free_pool_memory(cmd); - } -} - -bool create_restore_bootstrap_file(JCR *jcr) -{ - RESTORE_CTX rx; - UAContext *ua; - memset(&rx, 0, sizeof(rx)); - rx.bsr = new_bsr(); - rx.JobIds = ""; - rx.bsr->JobId = jcr->target_jr.JobId; - ua = new_ua_context(jcr); - complete_bsr(ua, rx.bsr); - rx.bsr->fi = new_findex(); - rx.bsr->fi->findex = 1; - rx.bsr->fi->findex2 = jcr->target_jr.JobFiles; - jcr->ExpectedFiles = write_bsr_file(ua, rx); - if (jcr->ExpectedFiles == 0) { - free_ua_context(ua); - free_bsr(rx.bsr); - return false; - } - if (jcr->RestoreBootstrap) { - free(jcr->RestoreBootstrap); - } - POOLMEM *fname = get_pool_memory(PM_MESSAGE); - make_unique_restore_filename(ua, &fname); - jcr->RestoreBootstrap = bstrdup(fname); - free_ua_context(ua); - free_bsr(rx.bsr); - free_pool_memory(fname); - jcr->needs_sd = true; - return true; -} diff --git a/bacula/src/dird/jobq.c b/bacula/src/dird/jobq.c index 6ec9a5de51..b83098d862 100755 --- a/bacula/src/dird/jobq.c +++ b/bacula/src/dird/jobq.c @@ -18,22 +18,17 @@ * */ /* - Copyright (C) 2003-2005 Kern Sibbald + Copyright (C) 2003-2006 Kern Sibbald This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of - the License, or (at your option) any later version. + modify it under the terms of the GNU General Public License + version 2 as amended with additional clauses defined in the + file LICENSE in the main source directory. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY 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., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + the file LICENSE for additional details. */ @@ -182,7 +177,8 @@ void *sched_wait(void *arg) } /* Check every 30 seconds if canceled */ while (wtime > 0) { - Dmsg2(2300, "Waiting on sched time, jobid=%d secs=%d\n", jcr->JobId, wtime); + Dmsg3(2300, "Waiting on sched time, jobid=%d secs=%d use=%d\n", + jcr->JobId, wtime, jcr->use_count()); if (wtime > 30) { wtime = 30; } @@ -192,9 +188,8 @@ void *sched_wait(void *arg) } wtime = jcr->sched_time - time(NULL); } - P(jcr->mutex); /* lock jcr */ + Dmsg1(200, "resched use=%d\n", jcr->use_count()); jobq_add(jq, jcr); - V(jcr->mutex); free_jcr(jcr); /* we are done with jcr */ Dmsg0(2300, "Exit sched_wait\n"); return NULL; @@ -203,9 +198,6 @@ void *sched_wait(void *arg) /* * Add a job to the queue * jq is a queue that was created with jobq_init - * - * On entry jcr->mutex must be locked. - * */ int jobq_add(jobq_t *jq, JCR *jcr) { @@ -216,14 +208,14 @@ int jobq_add(jobq_t *jq, JCR *jcr) pthread_t id; wait_pkt *sched_pkt; - Dmsg3(2300, "jobq_add jobid=%d jcr=0x%x use_count=%d\n", jcr->JobId, jcr, jcr->use_count); + 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"); return EINVAL; } - jcr->use_count++; /* mark jcr in use by us */ - Dmsg3(2300, "jobq_add jobid=%d jcr=0x%x use_count=%d\n", jcr->JobId, jcr, jcr->use_count); + jcr->inc_use_count(); /* mark jcr in use by us */ + Dmsg3(2300, "jobq_add jobid=%d jcr=0x%x use_count=%d\n", jcr->JobId, jcr, jcr->use_count()); if (!job_canceled(jcr) && wtime > 0) { set_thread_concurrency(jq->max_workers + 2); sched_pkt = (wait_pkt *)malloc(sizeof(wait_pkt)); @@ -240,12 +232,12 @@ int jobq_add(jobq_t *jq, JCR *jcr) if ((stat = pthread_mutex_lock(&jq->mutex)) != 0) { berrno be; Jmsg1(jcr, M_ERROR, 0, _("pthread_mutex_lock: ERR=%s\n"), be.strerror(stat)); - jcr->use_count--; /* release jcr */ + free_jcr(jcr); /* release jcr */ return stat; } if ((item = (jobq_item_t *)malloc(sizeof(jobq_item_t))) == NULL) { - jcr->use_count--; /* release jcr */ + free_jcr(jcr); /* release jcr */ return ENOMEM; } item->jcr = jcr; @@ -444,10 +436,12 @@ void *jobq_server(void *arg) V(jq->mutex); /* Call user's routine here */ - Dmsg1(2300, "Calling user engine for jobid=%d\n", jcr->JobId); + Dmsg2(2300, "Calling user engine for jobid=%d use=%d\n", jcr->JobId, + jcr->use_count()); jq->engine(je->jcr); - Dmsg1(2300, "Back from user engine jobid=%d.\n", jcr->JobId); + Dmsg2(2300, "Back from user engine jobid=%d use=%d.\n", jcr->JobId, + jcr->use_count()); /* Reacquire job queue lock */ P(jq->mutex); @@ -490,11 +484,12 @@ void *jobq_server(void *arg) jcr->JobStatus = JS_WaitStartTime; jcr->SDJobStatus = 0; if (jcr->JobBytes == 0) { - Dmsg1(2300, "Requeue job=%d\n", jcr->JobId); + Dmsg2(2300, "Requeue job=%d use=%d\n", jcr->JobId, jcr->use_count()); jcr->JobStatus = JS_WaitStartTime; V(jq->mutex); jobq_add(jq, jcr); /* queue the job to run again */ P(jq->mutex); + free_jcr(jcr); /* release jcr */ free(je); /* free the job entry */ continue; /* look for another job to run */ } @@ -509,7 +504,7 @@ void *jobq_server(void *arg) njcr->reschedule_count = jcr->reschedule_count; njcr->JobLevel = jcr->JobLevel; njcr->JobStatus = jcr->JobStatus; - copy_storage(njcr, jcr->storage); + copy_storage(njcr, jcr); njcr->messages = jcr->messages; Dmsg0(2300, "Call to run new job\n"); V(jq->mutex); @@ -523,7 +518,7 @@ void *jobq_server(void *arg) db_close_database(jcr, jcr->db); jcr->db = NULL; } - Dmsg2(2300, "====== Termination job=%d use_cnt=%d\n", jcr->JobId, jcr->use_count); + Dmsg2(2300, "====== Termination job=%d use_cnt=%d\n", jcr->JobId, jcr->use_count()); jcr->SDJobStatus = 0; V(jq->mutex); /* release internal lock */ free_jcr(jcr); diff --git a/bacula/src/dird/mac.c b/bacula/src/dird/mac.c index d042552377..163304779f 100644 --- a/bacula/src/dird/mac.c +++ b/bacula/src/dird/mac.c @@ -8,14 +8,14 @@ * 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 + * Open connection with File daemon and pass him commands * to do the backup. - * When the Storage daemon finishes the job, update the DB. + * When the File daemon finishes the job, update the DB. * * Version $Id$ */ /* - Copyright (C) 2004-2006 Kern Sibbald + Copyright (C) 2004-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -33,8 +33,6 @@ #include "dird.h" #include "ua.h" -static char OKbootstrap[] = "3000 OK bootstrap\n"; - /* * Called here before the job is run to do the job * specific setup. @@ -42,7 +40,11 @@ static char OKbootstrap[] = "3000 OK bootstrap\n"; bool do_mac_init(JCR *jcr) { POOL_DBR pr; + JOB_DBR jr; + JobId_t input_jobid; char *Name; + RESTORE_CTX rx; + UAContext *ua; const char *Type; switch(jcr->JobType) { @@ -67,35 +69,36 @@ bool do_mac_init(JCR *jcr) /* * Find JobId of last job that ran. */ + memcpy(&jr, &jcr->jr, sizeof(jr)); Name = jcr->job->migration_job->hdr.name; Dmsg1(100, "find last jobid for: %s\n", NPRT(Name)); - jcr->target_jr.JobType = JT_BACKUP; - if (!db_find_last_jobid(jcr, jcr->db, Name, &jcr->target_jr)) { - Jmsg(jcr, M_FATAL, 0, - _("Previous job \"%s\" not found. ERR=%s\n"), Name, - db_strerror(jcr->db)); + if (!db_find_last_jobid(jcr, jcr->db, Name, &jr)) { + Jmsg(jcr, M_FATAL, 0, _( + _("Unable to find JobId of previous Job for this client.\n"))); return false; } - Dmsg1(100, "Last jobid=%d\n", jcr->target_jr.JobId); + input_jobid = jr.JobId; + Dmsg1(100, "Last jobid=%d\n", input_jobid); - if (!db_get_job_record(jcr, jcr->db, &jcr->target_jr)) { + jcr->previous_jr.JobId = input_jobid; + if (!db_get_job_record(jcr, jcr->db, &jcr->previous_jr)) { Jmsg(jcr, M_FATAL, 0, _("Could not get job record for previous Job. ERR=%s"), db_strerror(jcr->db)); return false; } - if (jcr->target_jr.JobStatus != 'T') { + if (jcr->previous_jr.JobStatus != 'T') { Jmsg(jcr, M_FATAL, 0, _("Last Job %d did not terminate normally. JobStatus=%c\n"), - jcr->target_jr.JobId, jcr->target_jr.JobStatus); + input_jobid, jcr->previous_jr.JobStatus); return false; } Jmsg(jcr, M_INFO, 0, _("%s using JobId=%d Job=%s\n"), - Type, jcr->target_jr.JobId, jcr->target_jr.Job); + Type, jcr->previous_jr.JobId, jcr->previous_jr.Job); /* * Get the Pool record -- first apply any level defined pools */ - switch (jcr->target_jr.JobLevel) { + switch (jcr->JobLevel) { case L_FULL: if (jcr->full_pool) { jcr->pool = jcr->full_pool; @@ -125,19 +128,28 @@ bool do_mac_init(JCR *jcr) Jmsg(jcr, M_INFO, 0, _("Pool %s created in database.\n"), pr.Name); } } + jcr->PoolId = pr.PoolId; /****FIXME**** this can go away */ jcr->jr.PoolId = pr.PoolId; - /* If pool storage specified, use it instead of job storage */ - copy_storage(jcr, jcr->pool->storage); - - if (!jcr->storage) { - Jmsg(jcr, M_FATAL, 0, _("No Storage specification found in Job or Pool.\n")); + memset(&rx, 0, sizeof(rx)); + rx.bsr = new_bsr(); + rx.JobIds = ""; + rx.bsr->JobId = jcr->previous_jr.JobId; + ua = new_ua_context(jcr); + complete_bsr(ua, rx.bsr); + rx.bsr->fi = new_findex(); + rx.bsr->fi->findex = 1; + rx.bsr->fi->findex2 = jcr->previous_jr.JobFiles; + jcr->ExpectedFiles = write_bsr_file(ua, rx); + if (jcr->ExpectedFiles == 0) { + free_ua_context(ua); + free_bsr(rx.bsr); return false; } + free_ua_context(ua); + free_bsr(rx.bsr); - if (!create_restore_bootstrap_file(jcr)) { - return false; - } + jcr->needs_sd = true; return true; } @@ -149,13 +161,9 @@ bool do_mac_init(JCR *jcr) */ bool do_mac(JCR *jcr) { - POOL_DBR pr; - POOL *pool; + int stat; const char *Type; char ed1[100]; - BSOCK *sd; - JOB *job, *tjob; - JCR *tjcr; switch(jcr->JobType) { case JT_MIGRATE: @@ -173,99 +181,10 @@ bool do_mac(JCR *jcr) } - Dmsg4(100, "Target: Name=%s JobId=%d Type=%c Level=%c\n", - jcr->target_jr.Name, jcr->target_jr.JobId, - jcr->target_jr.JobType, jcr->target_jr.JobLevel); - - Dmsg4(100, "Current: Name=%s JobId=%d Type=%c Level=%c\n", - jcr->jr.Name, jcr->jr.JobId, - jcr->jr.JobType, jcr->jr.JobLevel); - - LockRes(); - job = (JOB *)GetResWithName(R_JOB, jcr->jr.Name); - tjob = (JOB *)GetResWithName(R_JOB, jcr->target_jr.Name); - UnlockRes(); - if (!job || !tjob) { - return false; - } - - /* - * Target jcr is the new Job that corresponds to the original - * target job. It "runs" at the same time as the current - * migration job and becomes a new backup job that replaces - * the original backup job. Most operations on the current - * migration jcr are also done on the target jcr. - */ - tjcr = jcr->target_jcr = new_jcr(sizeof(JCR), dird_free_jcr); - memcpy(&tjcr->target_jr, &jcr->target_jr, sizeof(tjcr->target_jr)); - - /* Turn the tjcr into a "real" job */ - set_jcr_defaults(tjcr, tjob); - if (!setup_job(tjcr)) { - return false; - } - /* Set output PoolId and FileSetId. */ - tjcr->jr.PoolId = jcr->jr.PoolId; - tjcr->jr.FileSetId = jcr->jr.FileSetId; - - /* - * Get the PoolId used with the original job. Then - * find the pool name from the database record. - */ - memset(&pr, 0, sizeof(pr)); - pr.PoolId = tjcr->target_jr.PoolId; - if (!db_get_pool_record(jcr, jcr->db, &pr)) { - char ed1[50]; - 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); - if (!pool) { - Jmsg(jcr, M_FATAL, 0, _("Pool resource \"%s\" not found.\n"), pr.Name); - return false; - } - - /* Check Migration time and High/Low water marks */ - /* ***FIXME*** */ - - /* If pool storage specified, use it for restore */ - copy_storage(tjcr, pool->storage); - - /* If the original backup pool has a NextPool, make sure a - * record exists in the database. - */ - if (pool->NextPool) { - memset(&pr, 0, sizeof(pr)); - bstrncpy(pr.Name, pool->NextPool->hdr.name, sizeof(pr.Name)); - - while (!db_get_pool_record(jcr, jcr->db, &pr)) { /* get by Name */ - /* Try to create the pool */ - if (create_pool(jcr, jcr->db, pool->NextPool, POOL_OP_CREATE) < 0) { - Jmsg(jcr, M_FATAL, 0, _("Pool \"%s\" not in database. %s"), pr.Name, - db_strerror(jcr->db)); - return false; - } else { - Jmsg(jcr, M_INFO, 0, _("Pool \"%s\" created in database.\n"), pr.Name); - } - } - /* - * put the "NextPool" resource pointer in our jcr so that we - * can pull the Storage reference from it. - */ - tjcr->pool = jcr->pool = pool->NextPool; - tjcr->jr.PoolId = jcr->jr.PoolId = pr.PoolId; - } - - /* If pool storage specified, use it instead of job storage for backup */ - copy_storage(jcr, jcr->pool->storage); - /* Print Job Start message */ Jmsg(jcr, M_INFO, 0, _("Start %s JobId %s, Job=%s\n"), Type, edit_uint64(jcr->JobId, ed1), jcr->Job); - set_jcr_job_status(jcr, JS_Running); set_jcr_job_status(jcr, JS_Running); Dmsg2(100, "JobId=%d JobLevel=%c\n", jcr->jr.JobId, jcr->jr.JobLevel); if (!db_update_job_start_record(jcr, jcr->db, &jcr->jr)) { @@ -273,12 +192,6 @@ bool do_mac(JCR *jcr) return false; } - if (!db_update_job_start_record(tjcr, tjcr->db, &tjcr->jr)) { - Jmsg(jcr, M_FATAL, 0, "%s", db_strerror(tjcr->db)); - return false; - } - - /* * Open a message channel connection with the Storage * daemon. This is to let him know that our client @@ -287,52 +200,39 @@ bool do_mac(JCR *jcr) */ Dmsg0(110, "Open connection with storage daemon\n"); set_jcr_job_status(jcr, JS_WaitSD); - set_jcr_job_status(tjcr, 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(000, "Read store=%s, write store=%s\n", - ((STORE *)tjcr->storage->first())->hdr.name, - ((STORE *)jcr->storage->first())->hdr.name); - if (!start_storage_daemon_job(jcr, tjcr->storage, jcr->storage)) { - return false; - } - Dmsg0(150, "Storage daemon connection OK\n"); - - if (!send_bootstrap_file(jcr, sd) || - !response(jcr, sd, OKbootstrap, "Bootstrap", DISPLAY_ERROR)) { + if (!start_storage_daemon_job(jcr, jcr->storage, jcr->storage)) { return false; } - - /* * Now start a Storage daemon message thread */ if (!start_storage_daemon_message_thread(jcr)) { return false; } + Dmsg0(150, "Storage daemon connection OK\n"); - if (!bnet_fsend(sd, "run")) { - return false; - } - + /* Pickup Job termination data */ set_jcr_job_status(jcr, JS_Running); - set_jcr_job_status(tjcr, JS_Running); - /* Pickup Job termination data */ /* Note, the SD stores in jcr->JobFiles/ReadBytes/JobBytes/Errors */ wait_for_storage_daemon_termination(jcr); - jcr->JobStatus = jcr->SDJobStatus; - if (jcr->JobStatus == JS_Terminated) { - mac_cleanup(jcr, jcr->JobStatus); + if (jcr->JobStatus != JS_Terminated) { + stat = jcr->JobStatus; + } else { + stat = jcr->SDJobStatus; + } + if (stat == JS_Terminated) { + mac_cleanup(jcr, stat); return true; } return false; @@ -344,17 +244,15 @@ bool do_mac(JCR *jcr) */ void mac_cleanup(JCR *jcr, int TermCode) { - char sdt[MAX_TIME_LENGTH], edt[MAX_TIME_LENGTH]; - char ec1[30], ec2[30], ec3[30], ec4[30], elapsed[50]; - char term_code[100], sd_term_msg[100]; + char sdt[50], edt[50]; + char ec1[30], ec2[30], ec3[30], ec4[30], ec5[30], compress[50]; + char term_code[100], fd_term_msg[100], sd_term_msg[100]; const char *term_msg; int msg_type; MEDIA_DBR mr; - double kbps; + double kbps, compression; utime_t RunTime; const char *Type; - JCR *tjcr = jcr->target_jcr; - POOL_MEM query(PM_MESSAGE); switch(jcr->JobType) { case JT_MIGRATE: @@ -371,31 +269,12 @@ void mac_cleanup(JCR *jcr, int TermCode) break; } - /* Ensure target is defined to avoid a lot of testing */ - if (!tjcr) { - tjcr = jcr; - } - tjcr->JobFiles = jcr->JobFiles = jcr->SDJobFiles; - tjcr->JobBytes = jcr->JobBytes = jcr->SDJobBytes; - tjcr->VolSessionId = jcr->VolSessionId; - tjcr->VolSessionTime = jcr->VolSessionTime; - Dmsg2(100, "Enter mac_cleanup %d %c\n", TermCode, TermCode); dequeue_messages(jcr); /* display any queued messages */ memset(&mr, 0, sizeof(mr)); set_jcr_job_status(jcr, TermCode); - set_jcr_job_status(tjcr, TermCode); - update_job_end_record(jcr); /* update database */ - update_job_end_record(tjcr); - - Mmsg(query, "UPDATE Job SET StartTime='%s',EndTime='%s'," - "JobTDate=%s WHERE JobId=%s", - jcr->target_jr.cStartTime, jcr->target_jr.cEndTime, - edit_uint64(jcr->target_jr.JobTDate, ec1), - edit_uint64(tjcr->jr.JobId, ec2)); - db_sql_query(tjcr->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 stats: %s"), @@ -410,20 +289,77 @@ void mac_cleanup(JCR *jcr, int TermCode) set_jcr_job_status(jcr, JS_ErrorTerminated); } - update_bootstrap_file(tjcr); + /* Now update the bootstrap file if any */ + if (jcr->JobStatus == JS_Terminated && jcr->jr.JobBytes && + jcr->job->WriteBootstrap) { + FILE *fd; + BPIPE *bpipe = NULL; + int got_pipe = 0; + char *fname = jcr->job->WriteBootstrap; + VOL_PARAMS *VolParams = NULL; + int VolCount; + + if (*fname == '|') { + fname++; + got_pipe = 1; + bpipe = open_bpipe(fname, 0, "w"); + fd = bpipe ? bpipe->wfd : NULL; + } else { + /* ***FIXME*** handle BASE */ + fd = fopen(fname, jcr->JobLevel==L_FULL?"w+":"a+"); + } + if (fd) { + VolCount = db_get_job_volume_parameters(jcr, jcr->db, jcr->JobId, + &VolParams); + if (VolCount == 0) { + Jmsg(jcr, M_ERROR, 0, _("Could not get Job Volume Parameters to " + "update Bootstrap file. ERR=%s\n"), db_strerror(jcr->db)); + if (jcr->SDJobFiles != 0) { + set_jcr_job_status(jcr, JS_ErrorTerminated); + } + + } + for (int i=0; i < VolCount; i++) { + /* Write the record */ + fprintf(fd, "Volume=\"%s\"\n", VolParams[i].VolumeName); + fprintf(fd, "MediaType=\"%s\"\n", VolParams[i].MediaType); + fprintf(fd, "VolSessionId=%u\n", jcr->VolSessionId); + fprintf(fd, "VolSessionTime=%u\n", jcr->VolSessionTime); + fprintf(fd, "VolFile=%u-%u\n", VolParams[i].StartFile, + VolParams[i].EndFile); + fprintf(fd, "VolBlock=%u-%u\n", VolParams[i].StartBlock, + VolParams[i].EndBlock); + fprintf(fd, "FileIndex=%d-%d\n", VolParams[i].FirstIndex, + VolParams[i].LastIndex); + } + if (VolParams) { + free(VolParams); + } + if (got_pipe) { + close_bpipe(bpipe); + } else { + fclose(fd); + } + } else { + berrno be; + Jmsg(jcr, M_ERROR, 0, _("Could not open WriteBootstrap file:\n" + "%s: ERR=%s\n"), fname, be.strerror()); + set_jcr_job_status(jcr, JS_ErrorTerminated); + } + } msg_type = M_INFO; /* by default INFO message */ switch (jcr->JobStatus) { case JS_Terminated: if (jcr->Errors || jcr->SDErrors) { - term_msg = _("%s OK -- with warnings"); + term_msg = _("Backup OK -- with warnings"); } else { - term_msg = _("%s OK"); + term_msg = _("Backup OK"); } break; case JS_FatalError: case JS_ErrorTerminated: - term_msg = _("*** %s Error ***"); + term_msg = _("*** Backup Error ***"); msg_type = M_ERROR; /* Generate error message */ if (jcr->store_bsock) { bnet_sig(jcr->store_bsock, BNET_TERMINATE); @@ -433,7 +369,7 @@ void mac_cleanup(JCR *jcr, int TermCode) } break; case JS_Canceled: - term_msg = _("%s Canceled"); + term_msg = _("Backup Canceled"); if (jcr->store_bsock) { bnet_sig(jcr->store_bsock, BNET_TERMINATE); if (jcr->SD_msg_chan) { @@ -442,10 +378,10 @@ void mac_cleanup(JCR *jcr, int TermCode) } break; default: - term_msg = _("Inappropriate %s term code"); + term_msg = term_code; + sprintf(term_code, _("Inappropriate term code: %c\n"), jcr->JobStatus); break; } - bsnprintf(term_code, sizeof(term_code), term_msg, Type); bstrftimes(sdt, sizeof(sdt), jcr->jr.StartTime); bstrftimes(edt, sizeof(edt), jcr->jr.EndTime); RunTime = jcr->jr.EndTime - jcr->jr.StartTime; @@ -454,7 +390,7 @@ void mac_cleanup(JCR *jcr, int TermCode) } else { kbps = (double)jcr->jr.JobBytes / (1000 * RunTime); } - if (!db_get_job_volume_names(tjcr, tjcr->db, tjcr->jr.JobId, &tjcr->VolumeName)) { + if (!db_get_job_volume_names(jcr, jcr->db, jcr->jr.JobId, &jcr->VolumeName)) { /* * Note, if the job has erred, most likely it did not write any * tape, so suppress this "error" message since in that case @@ -462,19 +398,28 @@ void mac_cleanup(JCR *jcr, int TermCode) * normal exit should we complain about this error. */ if (jcr->JobStatus == JS_Terminated && jcr->jr.JobBytes) { - Jmsg(jcr, M_ERROR, 0, "%s", db_strerror(tjcr->db)); + Jmsg(jcr, M_ERROR, 0, "%s", db_strerror(jcr->db)); } - tjcr->VolumeName[0] = 0; /* none */ + jcr->VolumeName[0] = 0; /* none */ } + if (jcr->ReadBytes == 0) { + bstrncpy(compress, "None", sizeof(compress)); + } else { + compression = (double)100 - 100.0 * ((double)jcr->JobBytes / (double)jcr->ReadBytes); + if (compression < 0.5) { + bstrncpy(compress, "None", sizeof(compress)); + } else { + bsnprintf(compress, sizeof(compress), "%.1f %%", (float)compression); + } + } + jobstatus_to_ascii(jcr->FDJobStatus, fd_term_msg, sizeof(fd_term_msg)); jobstatus_to_ascii(jcr->SDJobStatus, sd_term_msg, sizeof(sd_term_msg)); // bmicrosleep(15, 0); /* for debugging SIGHUP */ Jmsg(jcr, msg_type, 0, _("Bacula %s (%s): %s\n" -" Old Backup JobId: %u\n" -" New Backup JobId: %u\n" -" JobId: %u\n" +" JobId: %d\n" " Job: %s\n" " Backup Level: %s%s\n" " Client: %s\n" @@ -482,23 +427,24 @@ void mac_cleanup(JCR *jcr, int TermCode) " Pool: \"%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" -" SD Bytes Written: %s (%sB)\n" +" FD Bytes Written: %s\n" +" SD Bytes Written: %s\n" " Rate: %.1f KB/s\n" +" Software Compression: %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"), VERSION, LSMDATE, - edt, - jcr->target_jr.JobId, - tjcr->jr.JobId, + edt, jcr->jr.JobId, jcr->jr.Job, level_to_str(jcr->JobLevel), jcr->since, @@ -507,22 +453,21 @@ void mac_cleanup(JCR *jcr, int TermCode) jcr->pool->hdr.name, sdt, edt, - edit_utime(RunTime, elapsed, sizeof(elapsed)), - jcr->JobPriority, - edit_uint64_with_commas(jcr->SDJobFiles, ec2), - edit_uint64_with_commas(jcr->SDJobBytes, ec3), - edit_uint64_with_suffix(jcr->jr.JobBytes, ec4), + edit_uint64_with_commas(jcr->jr.JobFiles, ec1), + edit_uint64_with_commas(jcr->SDJobFiles, ec4), + edit_uint64_with_commas(jcr->jr.JobBytes, ec2), + edit_uint64_with_commas(jcr->SDJobBytes, ec5), (float)kbps, - tjcr->VolumeName, + compress, + jcr->VolumeName, jcr->VolSessionId, jcr->VolSessionTime, - edit_uint64_with_commas(mr.VolBytes, ec1), + edit_uint64_with_commas(mr.VolBytes, ec3), + jcr->Errors, jcr->SDErrors, + fd_term_msg, sd_term_msg, - term_code); + term_msg); - Dmsg1(100, "Leave mac_cleanup() target_jcr=0x%x\n", jcr->target_jcr); - if (jcr->target_jcr) { - free_jcr(jcr->target_jcr); - } + Dmsg0(100, "Leave mac_cleanup()\n"); } diff --git a/bacula/src/dird/msgchan.c b/bacula/src/dird/msgchan.c index faaaceb3e7..3ed70c6777 100644 --- a/bacula/src/dird/msgchan.c +++ b/bacula/src/dird/msgchan.c @@ -33,8 +33,10 @@ #include "bacula.h" #include "dird.h" +static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; + /* Commands sent to Storage daemon */ -static char jobcmd[] = "JobId=%d 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\n"; static char use_storage[] = "use storage=%s media_type=%s pool_name=%s " @@ -49,7 +51,7 @@ static char OK_device[] = "3000 OK use device device=%s\n"; /* Storage Daemon requests */ static char Job_start[] = "3010 Job %127s start\n"; static char Job_end[] = - "3099 Job %127s end JobStatus=%d JobFiles=%d JobBytes=%lld\n"; + "3099 Job %127s end JobStatus=%d JobFiles=%d JobBytes=%" lld "\n"; /* Forward referenced functions */ extern "C" void *msg_thread(void *arg); @@ -126,28 +128,41 @@ bool start_storage_daemon_job(JCR *jcr, alist *rstore, alist *wstore) BSOCK *sd; char 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]; sd = jcr->store_bsock; /* * Now send JobId and permissions, and get back the authorization key. */ - bash_spaces(jcr->job->hdr.name); - bash_spaces(jcr->client->hdr.name); - bash_spaces(jcr->fileset->hdr.name); + pm_strcpy(job_name, jcr->job->hdr.name); + bash_spaces(job_name); + pm_strcpy(client_name, jcr->client->hdr.name); + bash_spaces(client_name); + pm_strcpy(fileset_name, jcr->fileset->hdr.name); + bash_spaces(fileset_name); if (jcr->fileset->MD5[0] == 0) { bstrncpy(jcr->fileset->MD5, "**Dummy**", sizeof(jcr->fileset->MD5)); } - bnet_fsend(sd, jobcmd, jcr->JobId, jcr->Job, jcr->job->hdr.name, - jcr->client->hdr.name, jcr->JobType, jcr->JobLevel, - jcr->fileset->hdr.name, !jcr->pool->catalog_files, + /* If rescheduling, cancel the previous incarnation of this job + * with the SD, which might be waiting on the FD connection. + * If we do not cancel it the SD will not accept a new connection + * for the same jobid. + */ + if (jcr->reschedule_count) { + bnet_fsend(sd, "cancel Job=%s\n", jcr->Job); + while (bnet_recv(sd) >= 0) + { } + } + bnet_fsend(sd, jobcmd, edit_int64(jcr->JobId, ed1), jcr->Job, + job_name.c_str(), client_name.c_str(), + jcr->JobType, jcr->JobLevel, + fileset_name.c_str(), !jcr->pool->catalog_files, jcr->job->SpoolAttributes, jcr->fileset->MD5, jcr->spool_data, jcr->write_part_after_job, jcr->job->PreferMountedVolumes); Dmsg1(100, ">stored: %s\n", sd->msg); - unbash_spaces(jcr->job->hdr.name); - unbash_spaces(jcr->client->hdr.name); - unbash_spaces(jcr->fileset->hdr.name); if (bget_dirmsg(sd) > 0) { Dmsg1(100, "msg); if (sscanf(sd->msg, OKjob, &jcr->VolSessionId, @@ -198,19 +213,15 @@ bool start_storage_daemon_job(JCR *jcr, alist *rstore, alist *wstore) Dmsg1(100, ">stored: %s", sd->msg); } bnet_sig(sd, BNET_EOD); /* end of Devices */ - } - bnet_sig(sd, BNET_EOD); /* end of Storages */ - if (bget_dirmsg(sd) > 0) { - Dmsg1(100, "msg); - /* ****FIXME**** save actual device name */ - ok = sscanf(sd->msg, OK_device, device_name.c_str()) == 1; - } else { - POOL_MEM err_msg; - pm_strcpy(err_msg, sd->msg); /* save message */ - 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 */); - ok = false; + bnet_sig(sd, BNET_EOD); /* end of Storages */ + if (bget_dirmsg(sd) > 0) { + Dmsg1(100, "msg); + /* ****FIXME**** save actual device name */ + ok = sscanf(sd->msg, OK_device, device_name.c_str()) == 1; + } else { + ok = false; + } + break; } } @@ -233,19 +244,28 @@ bool start_storage_daemon_job(JCR *jcr, alist *rstore, alist *wstore) Dmsg1(100, ">stored: %s", sd->msg); } bnet_sig(sd, BNET_EOD); /* end of Devices */ + bnet_sig(sd, BNET_EOD); /* end of Storages */ + if (bget_dirmsg(sd) > 0) { + Dmsg1(100, "msg); + /* ****FIXME**** save actual device name */ + ok = sscanf(sd->msg, OK_device, device_name.c_str()) == 1; + } else { + ok = false; + } + break; } - bnet_sig(sd, BNET_EOD); /* end of Storages */ - if (bget_dirmsg(sd) > 0) { - Dmsg1(100, "msg); - /* ****FIXME**** save actual device name */ - ok = sscanf(sd->msg, OK_device, device_name.c_str()) == 1; - } else { - POOL_MEM err_msg; + } + if (!ok) { + POOL_MEM err_msg; + if (sd->msg[0]) { pm_strcpy(err_msg, sd->msg); /* save message */ 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 */); - ok = false; + " Storage daemon didn't accept Device \"%s\" because:\n %s"), + device_name.c_str(), err_msg.c_str()/* sd->msg */); + } else { + Jmsg(jcr, M_FATAL, 0, _("\n" + " Storage daemon didn't accept Device \"%s\" command.\n"), + device_name.c_str()); } } return ok; @@ -260,34 +280,30 @@ int start_storage_daemon_message_thread(JCR *jcr) int status; pthread_t thid; - P(jcr->mutex); - jcr->use_count++; /* mark in use by msg thread */ + jcr->inc_use_count(); /* mark in use by msg thread */ jcr->sd_msg_thread_done = false; jcr->SD_msg_chan = 0; - V(jcr->mutex); Dmsg0(100, "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.strerror(status)); } - Dmsg0(100, "SD msg_thread started.\n"); /* Wait for thread to start */ while (jcr->SD_msg_chan == 0) { bmicrosleep(0, 50); } + Dmsg1(100, "SD msg_thread started. use=%d\n", jcr->use_count()); return 1; } extern "C" void msg_thread_cleanup(void *arg) { JCR *jcr = (JCR *)arg; - Dmsg0(200, "End msg_thread\n"); db_end_transaction(jcr, jcr->db); /* terminate any open transaction */ - P(jcr->mutex); jcr->sd_msg_thread_done = true; - pthread_cond_broadcast(&jcr->term_wait); /* wakeup any waiting threads */ jcr->SD_msg_chan = 0; - V(jcr->mutex); + pthread_cond_broadcast(&jcr->term_wait); /* wakeup any waiting threads */ + Dmsg1(100, "=== End msg_thread. use=%d\n", jcr->use_count()); free_jcr(jcr); /* release jcr */ } @@ -314,9 +330,8 @@ extern "C" void *msg_thread(void *arg) /* Read the Storage daemon's output. */ Dmsg0(100, "Start msg_thread loop\n"); - while ((stat=bget_dirmsg(sd)) >= 0) { - int stat; - Dmsg1(3400, "msg); + while (!job_canceled(jcr) && bget_dirmsg(sd) >= 0) { + Dmsg1(400, "msg); if (sscanf(sd->msg, Job_start, Job) == 1) { continue; } @@ -327,6 +342,7 @@ extern "C" void *msg_thread(void *arg) jcr->SDJobBytes = JobBytes; break; } + Dmsg2(400, "end loop stat=%d use=%d\n", stat, jcr->use_count()); } if (is_bnet_error(sd)) { jcr->SDJobStatus = JS_ErrorTerminated; @@ -339,8 +355,6 @@ void wait_for_storage_daemon_termination(JCR *jcr) { int cancel_count = 0; /* Now wait for Storage daemon to terminate our message thread */ - set_jcr_job_status(jcr, JS_WaitSD); - P(jcr->mutex); while (!jcr->sd_msg_thread_done) { struct timeval tv; struct timezone tz; @@ -348,18 +362,25 @@ void wait_for_storage_daemon_termination(JCR *jcr) gettimeofday(&tv, &tz); timeout.tv_nsec = 0; - timeout.tv_sec = tv.tv_sec + 10; /* wait 10 seconds */ - Dmsg0(300, "I'm waiting for message thread termination.\n"); - pthread_cond_timedwait(&jcr->term_wait, &jcr->mutex, &timeout); + timeout.tv_sec = tv.tv_sec + 5; /* wait 5 seconds */ + Dmsg0(400, "I'm waiting for message thread termination.\n"); + P(mutex); + pthread_cond_timedwait(&jcr->term_wait, &mutex, &timeout); + V(mutex); if (job_canceled(jcr)) { + if (jcr->SD_msg_chan) { + jcr->store_bsock->timed_out = 1; + jcr->store_bsock->terminated = 1; + Dmsg2(400, "kill jobid=%d use=%d\n", (int)jcr->JobId, jcr->use_count()); + pthread_kill(jcr->SD_msg_chan, TIMEOUT_SIGNAL); + } cancel_count++; } /* Give SD 30 seconds to clean up after cancel */ - if (cancel_count == 3) { + if (cancel_count == 6) { break; } } - V(jcr->mutex); set_jcr_job_status(jcr, JS_Terminated); } @@ -377,7 +398,7 @@ extern "C" void *device_thread(void *arg) jcr = new_control_jcr("*DeviceInit*", JT_SYSTEM); for (i=0; i < MAX_TRIES; i++) { if (!connect_to_storage_daemon(jcr, 10, 30, 1)) { - Dmsg0(000, "Failed connecting to SD.\n"); + Dmsg0(900, "Failed connecting to SD.\n"); continue; } LockRes(); diff --git a/bacula/src/dird/newvol.c b/bacula/src/dird/newvol.c index 354c5ddec2..b10447272d 100644 --- a/bacula/src/dird/newvol.c +++ b/bacula/src/dird/newvol.c @@ -13,7 +13,7 @@ * Version $Id$ */ /* - Copyright (C) 2000-2006 Kern Sibbald + Copyright (C) 2000-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff --git a/bacula/src/dird/protos.h b/bacula/src/dird/protos.h index 83e8817cae..ea52e9b673 100644 --- a/bacula/src/dird/protos.h +++ b/bacula/src/dird/protos.h @@ -4,7 +4,7 @@ * Version $Id$ */ /* - Copyright (C) 2000-2005 Kern Sibbald + Copyright (C) 2000-2006 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -72,7 +72,7 @@ extern int connect_to_file_daemon(JCR *jcr, int retry_interval, int max_retry_time, int verbose); extern bool send_include_list(JCR *jcr); extern bool send_exclude_list(JCR *jcr); -extern bool send_bootstrap_file(JCR *jcr, BSOCK *sock); +extern bool send_bootstrap_file(JCR *jcr); extern bool send_level_command(JCR *jcr); extern int get_attributes_and_put_in_catalog(JCR *jcr); extern int get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId); @@ -97,11 +97,8 @@ extern bool get_or_create_fileset_record(JCR *jcr); extern JobId_t run_job(JCR *jcr); extern bool cancel_job(UAContext *ua, JCR *jcr); extern void init_jcr_job_record(JCR *jcr); -extern void copy_storage(JCR *jcr, alist *storage); +extern void copy_storage(JCR *new_jcr, JCR *old_jcr); extern void set_storage(JCR *jcr, STORE *store); -extern bool setup_job(JCR *jcr); -extern void create_clones(JCR *jcr); -extern bool create_restore_bootstrap_file(JCR *jcr); /* mac.c */ extern bool do_mac(JCR *jcr); diff --git a/bacula/src/dird/restore.c b/bacula/src/dird/restore.c index ff7b18c99c..928f183b0d 100644 --- a/bacula/src/dird/restore.c +++ b/bacula/src/dird/restore.c @@ -43,7 +43,6 @@ static char storaddr[] = "storage address=%s port=%d ssl=0\n"; /* Responses received from File daemon */ static char OKrestore[] = "2000 OK restore\n"; static char OKstore[] = "2000 OK storage\n"; -static char OKbootstrap[] = "2000 OK bootstrap\n"; /* * Do a restore of the specified files @@ -142,8 +141,7 @@ bool do_restore(JCR *jcr) /* * Send the bootstrap file -- what Volumes/files to restore */ - if (!send_bootstrap_file(jcr, fd) || - !response(jcr, fd, OKbootstrap, "Bootstrap", DISPLAY_ERROR)) { + if (!send_bootstrap_file(jcr)) { restore_cleanup(jcr, JS_ErrorTerminated); return false; } diff --git a/bacula/src/dird/sql_cmds.c b/bacula/src/dird/sql_cmds.c index 065aeba85b..bb5f31ee57 100644 --- a/bacula/src/dird/sql_cmds.c +++ b/bacula/src/dird/sql_cmds.c @@ -68,7 +68,7 @@ const char *drop_deltabs[] = { /* List of SQL commands to create temp table and indicies */ const char *create_deltabs[] = { - "CREATE TABLE DelCandidates (" + "CREATE TEMPORARY TABLE DelCandidates (" #ifdef HAVE_MYSQL "JobId INTEGER UNSIGNED NOT NULL, " "PurgedFiles TINYINT, " @@ -211,7 +211,7 @@ const char *uar_del_temp = "DROP TABLE temp"; const char *uar_del_temp1 = "DROP TABLE temp1"; const char *uar_create_temp = - "CREATE TABLE temp (" + "CREATE TEMPORARY TABLE temp (" #ifdef HAVE_POSTGRESQL "JobId INTEGER NOT NULL," "JobTDate BIGINT," @@ -239,7 +239,7 @@ const char *uar_create_temp = #endif const char *uar_create_temp1 = - "CREATE TABLE temp1 (" + "CREATE TEMPORARY TABLE temp1 (" #ifdef HAVE_POSTGRESQL "JobId INTEGER NOT NULL," "JobTDate BIGINT)"; diff --git a/bacula/src/dird/ua_cmds.c b/bacula/src/dird/ua_cmds.c index a5d48084ed..7c5911ebd6 100644 --- a/bacula/src/dird/ua_cmds.c +++ b/bacula/src/dird/ua_cmds.c @@ -127,7 +127,7 @@ static struct cmdstruct commands[] = { { N_("use"), use_cmd, _("use catalog xxx")}, { N_("var"), var_cmd, _("does variable expansion")}, { N_("version"), version_cmd, _("print Director version")}, - { N_("wait"), wait_cmd, _("wait until no jobs are running [ | | ]")}, + { N_("wait"), wait_cmd, _("wait until no jobs are running [ | | ]")}, }; #define comsize (sizeof(commands)/sizeof(struct cmdstruct)) @@ -396,7 +396,7 @@ static int cancel_cmd(UAContext *ua, const char *cmd) bstrncpy(jcr->Job, ua->argv[i], sizeof(jcr->Job)); } break; - } else if (strcasecmp(ua->argk[i], _("jobuid")) == 0) { + } else if (strcasecmp(ua->argk[i], _("ujobid")) == 0) { if (!ua->argv[i]) { break; } @@ -1247,8 +1247,6 @@ static void do_job_delete(UAContext *ua, JobId_t JobId) Mmsg(query, "DELETE FROM Job WHERE JobId=%s", edit_int64(JobId, ed1)); db_sql_query(ua->db, query, NULL, (void *)NULL); - Mmsg(query, "DELETE FROM MAC WHERE JobId=%s", ed1); - db_sql_query(ua->db, query, NULL, (void *)NULL); Mmsg(query, "DELETE FROM File WHERE JobId=%s", ed1); db_sql_query(ua->db, query, NULL, (void *)NULL); Mmsg(query, "DELETE FROM JobMedia WHERE JobId=%s", ed1); @@ -1444,7 +1442,7 @@ int wait_cmd(UAContext *ua, const char *cmd) return 1; } - /* we have jobid, jobname or jobuid argument */ + /* we have jobid, jobname or ujobid argument */ uint32_t jobid = 0 ; @@ -1471,7 +1469,7 @@ int wait_cmd(UAContext *ua, const char *cmd) free_jcr(jcr); } break; - } else if (strcasecmp(ua->argk[i], "jobuid") == 0) { + } else if (strcasecmp(ua->argk[i], "ujobid") == 0) { if (!ua->argv[i]) { break; } diff --git a/bacula/src/dird/ua_dotcmds.c b/bacula/src/dird/ua_dotcmds.c index e426ed8969..60f9c62e09 100644 --- a/bacula/src/dird/ua_dotcmds.c +++ b/bacula/src/dird/ua_dotcmds.c @@ -37,7 +37,7 @@ extern const char *client_backups; extern int console_msg_pending; /* Imported functions */ -extern int do_messages(UAContext *ua, const char *cmd); +extern void do_messages(UAContext *ua, const char *cmd); extern int quit_cmd(UAContext *ua, const char *cmd); extern int qhelp_cmd(UAContext *ua, const char *cmd); extern int qstatus_cmd(UAContext *ua, const char *cmd); @@ -139,7 +139,9 @@ static int jobscmd(UAContext *ua, const char *cmd) JOB *job = NULL; LockRes(); while ( (job = (JOB *)GetNextRes(R_JOB, (RES *)job)) ) { - bsendmsg(ua, "%s\n", job->hdr.name); + if (acl_access_ok(ua, Job_ACL, job->hdr.name)) { + bsendmsg(ua, "%s\n", job->hdr.name); + } } UnlockRes(); return 1; @@ -150,7 +152,9 @@ static int filesetscmd(UAContext *ua, const char *cmd) FILESET *fs = NULL; LockRes(); while ( (fs = (FILESET *)GetNextRes(R_FILESET, (RES *)fs)) ) { - bsendmsg(ua, "%s\n", fs->hdr.name); + if (acl_access_ok(ua, FileSet_ACL, fs->hdr.name)) { + bsendmsg(ua, "%s\n", fs->hdr.name); + } } UnlockRes(); return 1; @@ -161,7 +165,9 @@ static int clientscmd(UAContext *ua, const char *cmd) CLIENT *client = NULL; LockRes(); while ( (client = (CLIENT *)GetNextRes(R_CLIENT, (RES *)client)) ) { - bsendmsg(ua, "%s\n", client->hdr.name); + if (acl_access_ok(ua, Client_ACL, client->hdr.name)) { + bsendmsg(ua, "%s\n", client->hdr.name); + } } UnlockRes(); return 1; @@ -183,7 +189,9 @@ static int poolscmd(UAContext *ua, const char *cmd) POOL *pool = NULL; LockRes(); while ( (pool = (POOL *)GetNextRes(R_POOL, (RES *)pool)) ) { - bsendmsg(ua, "%s\n", pool->hdr.name); + if (acl_access_ok(ua, Pool_ACL, pool->hdr.name)) { + bsendmsg(ua, "%s\n", pool->hdr.name); + } } UnlockRes(); return 1; @@ -194,7 +202,9 @@ static int storagecmd(UAContext *ua, const char *cmd) STORE *store = NULL; LockRes(); while ( (store = (STORE *)GetNextRes(R_STORAGE, (RES *)store)) ) { - bsendmsg(ua, "%s\n", store->hdr.name); + if (acl_access_ok(ua, Storage_ACL, store->hdr.name)) { + bsendmsg(ua, "%s\n", store->hdr.name); + } } UnlockRes(); return 1; @@ -226,6 +236,10 @@ static int backupscmd(UAContext *ua, const char *cmd) if (ua->argc != 3 || strcmp(ua->argk[1], "client") != 0 || strcmp(ua->argk[2], "fileset") != 0) { return 1; } + if (!acl_access_ok(ua, Client_ACL, ua->argv[1]) || + !acl_access_ok(ua, FileSet_ACL, ua->argv[2])) { + return 1; + } Mmsg(ua->cmd, client_backups, ua->argv[1], ua->argv[2]); if (!db_sql_query(ua->db, ua->cmd, client_backups_handler, (void *)ua)) { bsendmsg(ua, _("Query failed: %s. ERR=%s\n"), ua->cmd, db_strerror(ua->db)); @@ -246,8 +260,6 @@ static int levelscmd(UAContext *ua, const char *cmd) return 1; } - - /* * Return default values for a job */ @@ -264,6 +276,9 @@ static int defaultscmd(UAContext *ua, const char *cmd) /* Job defaults */ if (strcmp(ua->argk[1], "job") == 0) { + if (!acl_access_ok(ua, Job_ACL, ua->argv[1])) { + return 1; + } job = (JOB *)GetResWithName(R_JOB, ua->argv[1]); if (job) { STORE *store; @@ -282,6 +297,9 @@ static int defaultscmd(UAContext *ua, const char *cmd) } /* Client defaults */ else if (strcmp(ua->argk[1], "client") == 0) { + if (!acl_access_ok(ua, Client_ACL, ua->argv[1])) { + return 1; + } client = (CLIENT *)GetResWithName(R_CLIENT, ua->argv[1]); if (client) { bsendmsg(ua, "client=%s", client->hdr.name); @@ -294,6 +312,9 @@ static int defaultscmd(UAContext *ua, const char *cmd) } /* Storage defaults */ else if (strcmp(ua->argk[1], "storage") == 0) { + if (!acl_access_ok(ua, Storage_ACL, ua->argv[1])) { + return 1; + } storage = (STORE *)GetResWithName(R_STORAGE, ua->argv[1]); DEVICE *device; if (storage) { @@ -312,6 +333,9 @@ static int defaultscmd(UAContext *ua, const char *cmd) } /* Pool defaults */ else if (strcmp(ua->argk[1], "pool") == 0) { + if (!acl_access_ok(ua, Pool_ACL, ua->argv[1])) { + return 1; + } pool = (POOL *)GetResWithName(R_POOL, ua->argv[1]); if (pool) { bsendmsg(ua, "pool=%s", pool->hdr.name); diff --git a/bacula/src/dird/ua_output.c b/bacula/src/dird/ua_output.c index 039a1db9c0..e4a4c07bd2 100644 --- a/bacula/src/dird/ua_output.c +++ b/bacula/src/dird/ua_output.c @@ -202,7 +202,7 @@ bail_out: * * list jobs - lists all jobs run * list jobid=nnn - list job data for jobid - * list jobuid=uname - list job data for unique 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 jobmedia jobid= @@ -285,8 +285,8 @@ static int do_list_cmd(UAContext *ua, const char *cmd, e_list_type llist) jr.JobId = 0; db_list_job_records(ua->jcr, ua->db, &jr, prtit, ua, llist); - /* List JOBUID=xxx */ - } else if (strcasecmp(ua->argk[i], N_("jobuid")) == 0 && ua->argv[i]) { + /* List UJOBID=xxx */ + } else if (strcasecmp(ua->argk[i], N_("ujobid")) == 0 && ua->argv[i]) { bstrncpy(jr.Job, ua->argv[i], MAX_NAME_LENGTH); jr.JobId = 0; db_list_job_records(ua->jcr, ua->db, &jr, prtit, ua, llist); @@ -295,7 +295,7 @@ static int do_list_cmd(UAContext *ua, const char *cmd, e_list_type llist) } else if (strcasecmp(ua->argk[i], N_("files")) == 0) { for (j=i+1; jargc; j++) { - if (strcasecmp(ua->argk[j], N_("jobuid")) == 0 && ua->argv[j]) { + if (strcasecmp(ua->argk[j], N_("ujobid")) == 0 && ua->argv[j]) { bstrncpy(jr.Job, ua->argv[j], MAX_NAME_LENGTH); jr.JobId = 0; db_get_job_record(ua->jcr, ua->db, &jr); @@ -314,7 +314,7 @@ static int do_list_cmd(UAContext *ua, const char *cmd, e_list_type llist) } else if (strcasecmp(ua->argk[i], N_("jobmedia")) == 0) { int done = FALSE; for (j=i+1; jargc; j++) { - if (strcasecmp(ua->argk[j], N_("jobuid")) == 0 && ua->argv[j]) { + if (strcasecmp(ua->argk[j], N_("ujobid")) == 0 && ua->argv[j]) { bstrncpy(jr.Job, ua->argv[j], MAX_NAME_LENGTH); jr.JobId = 0; db_get_job_record(ua->jcr, ua->db, &jr); @@ -352,7 +352,7 @@ static int do_list_cmd(UAContext *ua, const char *cmd, e_list_type llist) strcasecmp(ua->argk[i], N_("volumes")) == 0) { bool done = false; for (j=i+1; jargc; j++) { - if (strcasecmp(ua->argk[j], N_("jobuid")) == 0 && ua->argv[j]) { + if (strcasecmp(ua->argk[j], N_("ujobid")) == 0 && ua->argv[j]) { bstrncpy(jr.Job, ua->argv[j], MAX_NAME_LENGTH); jr.JobId = 0; db_get_job_record(ua->jcr, ua->db, &jr); @@ -465,15 +465,18 @@ static bool list_nextvol(UAContext *ua, int ndays) if (!complete_jcr_for_job(jcr, job, pool)) { return false; } - mr.PoolId = jcr->jr.PoolId; - if (run->storage) { - jcr->store = run->storage; - } memset(&pr, 0, sizeof(pr)); - pr.PoolId = jcr->jr.PoolId; + pr.PoolId = jcr->PoolId; if (! db_get_pool_record(ua->jcr, ua->db, &pr)) { strcpy(pr.Name, "*UnknownPool*"); } + mr.PoolId = jcr->PoolId; + if (run->storage) { + jcr->store = run->storage; + } else { + jcr->store = (STORE *)job->storage->first(); + } + mr.StorageId = jcr->store->StorageId; if (!find_next_volume_for_append(jcr, &mr, 1, false/*no create*/)) { bsendmsg(ua, _("Could not find next Volume for Job %s (%s, %s).\n"), job->hdr.name, pr.Name, level_to_str(run->level)); @@ -628,6 +631,7 @@ int complete_jcr_for_job(JCR *jcr, JOB *job, POOL *pool) Jmsg(jcr, M_INFO, 0, _("Pool %s created in database.\n"), pr.Name); } } + jcr->PoolId = pr.PoolId; jcr->jr.PoolId = pr.PoolId; return 1; } diff --git a/bacula/src/dird/ua_prune.c b/bacula/src/dird/ua_prune.c index 137462ddb0..f7a40c166b 100644 --- a/bacula/src/dird/ua_prune.c +++ b/bacula/src/dird/ua_prune.c @@ -163,7 +163,7 @@ int prunecmd(UAContext *ua, const char *cmd) NULL}; if (!open_db(ua)) { - return false; + return 0; } /* First search args */ @@ -177,32 +177,32 @@ int prunecmd(UAContext *ua, const char *cmd) case 0: /* prune files */ client = get_client_resource(ua); if (!client || !confirm_retention(ua, &client->FileRetention, "File")) { - return false; + return 0; } prune_files(ua, client); - return true; + return 1; case 1: /* prune jobs */ client = get_client_resource(ua); if (!client || !confirm_retention(ua, &client->JobRetention, "Job")) { - return false; + return 0; } /* ****FIXME**** allow user to select JobType */ prune_jobs(ua, client, JT_BACKUP); return 1; case 2: /* prune volume */ if (!select_pool_and_media_dbr(ua, &pr, &mr)) { - return false; + return 0; } if (!confirm_retention(ua, &mr.VolRetention, "Volume")) { - return false; + return 0; } prune_volume(ua, &mr); - return true; + return 1; default: break; } - return true; + return 1; } /* @@ -240,7 +240,7 @@ int prune_files(UAContext *ua, CLIENT *client) /* Select Jobs -- for counting */ Mmsg(query, select_job, edit_uint64(now - period, ed1), edit_int64(cr.ClientId, ed2)); - Dmsg3(050, "select now=%u period=%u sql=%s\n", (uint32_t)now, (uint32_t)period, query); + Dmsg1(050, "select sql=%s\n", query); if (!db_sql_query(ua->db, query, file_count_handler, (void *)&del)) { if (ua->verbose) { bsendmsg(ua, "%s", db_strerror(ua->db)); @@ -270,7 +270,7 @@ int prune_files(UAContext *ua, CLIENT *client) for (i=0; i < del.num_ids; i++) { Mmsg(query, del_File, edit_int64(del.JobId[i], ed1)); - Dmsg1(000, "Delete Files JobId=%s\n", ed1); + Dmsg1(050, "Delete JobId=%s\n", ed1); db_sql_query(ua->db, query, NULL, (void *)NULL); /* * Now mark Job as having files purged. This is necessary to @@ -280,7 +280,7 @@ int prune_files(UAContext *ua, CLIENT *client) */ Mmsg(query, upd_Purged, edit_int64(del.JobId[i], ed1)); db_sql_query(ua->db, query, NULL, (void *)NULL); - Dmsg1(000, "Update Purged sql=%s\n", query); + Dmsg1(050, "Del sql=%s\n", query); } edit_uint64_with_commas(del.num_ids, ed1); bsendmsg(ua, _("Pruned Files from %s Jobs for client %s from catalog.\n"), @@ -304,7 +304,7 @@ static void drop_temp_tables(UAContext *ua) } } -static bool create_temp_tables(UAContext *ua) +static int create_temp_tables(UAContext *ua) { int i; /* Create temp tables and indicies */ @@ -312,10 +312,10 @@ static bool create_temp_tables(UAContext *ua) if (!db_sql_query(ua->db, create_deltabs[i], NULL, (void *)NULL)) { bsendmsg(ua, "%s", db_strerror(ua->db)); Dmsg0(050, "create DelTables table failed\n"); - return false; + return 0; } } - return true; + return 1; } diff --git a/bacula/src/dird/ua_purge.c b/bacula/src/dird/ua_purge.c index 5661d1db72..fb1874695c 100644 --- a/bacula/src/dird/ua_purge.c +++ b/bacula/src/dird/ua_purge.c @@ -11,7 +11,7 @@ * Version $Id$ */ /* - Copyright (C) 2002-2006 Kern Sibbald + Copyright (C) 2002-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -267,7 +267,7 @@ int purgecmd(UAContext *ua, const char *cmd) static int purge_files_from_client(UAContext *ua, CLIENT *client) { struct s_file_del_ctx del; - POOLMEM *query = get_pool_memory(PM_MESSAGE); + char *query = (char *)get_pool_memory(PM_MESSAGE); int i; CLIENT_DBR cr; char ed1[50]; @@ -309,7 +309,7 @@ static int purge_files_from_client(UAContext *ua, CLIENT *client) for (i=0; i < del.num_ids; i++) { edit_int64(del.JobId[i], ed1); - Dmsg1(050, "Delete Files JobId=%s\n", ed1); + Dmsg1(050, "Delete JobId=%s\n", ed1); Mmsg(query, "DELETE FROM File WHERE JobId=%s", ed1); db_sql_query(ua->db, query, NULL, (void *)NULL); /* @@ -320,7 +320,7 @@ static int purge_files_from_client(UAContext *ua, CLIENT *client) */ Mmsg(query, "UPDATE Job Set PurgedFiles=1 WHERE JobId=%s", ed1); db_sql_query(ua->db, query, NULL, (void *)NULL); - Dmsg1(050, "Update Purged sql=%s\n", query); + Dmsg1(050, "Del sql=%s\n", query); } bsendmsg(ua, _("%d Files for client \"%s\" purged from %s catalog.\n"), del.num_ids, client->hdr.name, client->catalog->hdr.name); @@ -340,12 +340,13 @@ bail_out: * is older than the retention period, we unconditionally delete * it and all File records for that Job. This is simple enough that no * temporary tables are needed. We simply make an in memory list of - * the JobIds then delete the Job, Files, and JobMedia records in that list. + * the JobIds meeting the prune conditions, then delete the Job, + * Files, and JobMedia records in that list. */ static int purge_jobs_from_client(UAContext *ua, CLIENT *client) { struct s_job_del_ctx del; - POOLMEM *query = get_pool_memory(PM_MESSAGE); + char *query = (char *)get_pool_memory(PM_MESSAGE); int i; CLIENT_DBR cr; char ed1[50]; @@ -394,7 +395,7 @@ static int purge_jobs_from_client(UAContext *ua, CLIENT *client) */ for (i=0; i < del.num_ids; i++) { edit_int64(del.JobId[i], ed1); - Dmsg1(050, "Delete Files JobId=%s\n", ed1); + Dmsg1(050, "Delete JobId=%s\n", ed1); if (!del.PurgedFiles[i]) { Mmsg(query, "DELETE FROM File WHERE JobId=%s", ed1); db_sql_query(ua->db, query, NULL, (void *)NULL); @@ -403,15 +404,11 @@ static int purge_jobs_from_client(UAContext *ua, CLIENT *client) Mmsg(query, "DELETE FROM Job WHERE JobId=%s", ed1); db_sql_query(ua->db, query, NULL, (void *)NULL); - Dmsg1(050, "Delete Job sql=%s\n", query); - - Mmsg(query, "DELETE FROM MAC WHERE JobId=%s", ed1); - db_sql_query(ua->db, query, NULL, (void *)NULL); - Dmsg1(050, "Delete MAC sql=%s\n", query); + Dmsg1(050, "Del sql=%s\n", query); Mmsg(query, "DELETE FROM JobMedia WHERE JobId=%s", ed1); db_sql_query(ua->db, query, NULL, (void *)NULL); - Dmsg1(050, "Delete JobMedia sql=%s\n", query); + Dmsg1(050, "Del sql=%s\n", query); } bsendmsg(ua, _("%d Jobs for client %s purged from %s catalog.\n"), del.num_ids, client->hdr.name, client->catalog->hdr.name); @@ -429,10 +426,10 @@ bail_out: void purge_files_from_job(UAContext *ua, JOB_DBR *jr) { - POOLMEM *query = get_pool_memory(PM_MESSAGE); + char *query = (char *)get_pool_memory(PM_MESSAGE); char ed1[50]; - edit_int64(jr->JobId, ed1); + edit_int64(jr->JobId,ed1); Mmsg(query, "DELETE FROM File WHERE JobId=%s", ed1); db_sql_query(ua->db, query, NULL, (void *)NULL); @@ -451,7 +448,7 @@ void purge_files_from_volume(UAContext *ua, MEDIA_DBR *mr ) */ int purge_jobs_from_volume(UAContext *ua, MEDIA_DBR *mr) { - POOLMEM *query = get_pool_memory(PM_MESSAGE); + char *query = (char *)get_pool_memory(PM_MESSAGE); struct s_count_ctx cnt; struct s_file_del_ctx del; int i, stat = 0; @@ -527,8 +524,6 @@ int purge_jobs_from_volume(UAContext *ua, MEDIA_DBR *mr) db_sql_query(ua->db, query, NULL, (void *)NULL); Mmsg(query, "DELETE FROM Job WHERE JobId=%s", ed1); db_sql_query(ua->db, query, NULL, (void *)NULL); - Mmsg(query, "DELETE FROM MAC WHERE JobId=%s", ed1); - db_sql_query(ua->db, query, NULL, (void *)NULL); Mmsg(query, "DELETE FROM JobMedia WHERE JobId=%s", ed1); db_sql_query(ua->db, query, NULL, (void *)NULL); Dmsg1(050, "Del sql=%s\n", query); @@ -585,5 +580,5 @@ bool mark_media_purged(UAContext *ua, MEDIA_DBR *mr) } else { bsendmsg(ua, _("Cannot purge Volume with VolStatus=%s\n"), mr->VolStatus); } - return strcmp(mr->VolStatus, "Purged") == 0; + return strcpy(mr->VolStatus, "Purged") == 0; } diff --git a/bacula/src/dird/ua_restore.c b/bacula/src/dird/ua_restore.c index 9fd21a4e72..1ba9dab5e6 100644 --- a/bacula/src/dird/ua_restore.c +++ b/bacula/src/dird/ua_restore.c @@ -13,7 +13,7 @@ * Version $Id$ */ /* - Copyright (C) 2002-2005 Kern Sibbald + Copyright (C) 2002-2006 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -81,7 +81,7 @@ int restore_cmd(UAContext *ua, const char *cmd) RESTORE_CTX rx; /* restore context */ JOB *job; int i; - POOLMEM *fname; + JCR *jcr = ua->jcr; memset(&rx, 0, sizeof(rx)); rx.path = get_pool_memory(PM_FNAME); @@ -177,22 +177,19 @@ int restore_cmd(UAContext *ua, const char *cmd) } /* Build run command */ - fname = get_pool_memory(PM_MESSAGE); - make_unique_restore_filename(ua, &fname); if (rx.where) { Mmsg(ua->cmd, "run job=\"%s\" client=\"%s\" storage=\"%s\" bootstrap=\"%s\"" " where=\"%s\" files=%d catalog=\"%s\"", job->hdr.name, rx.ClientName, rx.store?rx.store->hdr.name:"", - fname, rx.where, rx.selected_files, ua->catalog->hdr.name); + jcr->RestoreBootstrap, rx.where, rx.selected_files, ua->catalog->hdr.name); } else { Mmsg(ua->cmd, "run job=\"%s\" client=\"%s\" storage=\"%s\" bootstrap=\"%s\"" " files=%d catalog=\"%s\"", job->hdr.name, rx.ClientName, rx.store?rx.store->hdr.name:"", - fname, rx.selected_files, ua->catalog->hdr.name); + jcr->RestoreBootstrap, rx.selected_files, ua->catalog->hdr.name); } - free_pool_memory(fname); if (find_arg(ua, N_("yes")) > 0) { pm_strcat(ua->cmd, " yes"); /* pass it on to the run command */ } @@ -1153,7 +1150,14 @@ bail_out: } -/* Return next JobId from comma separated list */ +/* + * Return next JobId from comma separated list + * + * Returns: + * 1 if next JobId returned + * 0 if no more JobIds are in list + * -1 there is an error + */ int get_next_jobid_from_list(char **p, JobId_t *JobId) { char jobid[30]; diff --git a/bacula/src/dird/ua_run.c b/bacula/src/dird/ua_run.c index 470cd5bd96..189bb48c34 100644 --- a/bacula/src/dird/ua_run.c +++ b/bacula/src/dird/ua_run.c @@ -34,7 +34,7 @@ extern struct s_kw ReplaceOptions[]; * run [job=] level= * * For Restore Jobs - * run + * run jobid=nn * * Returns: 0 on error * JobId if OK @@ -47,16 +47,13 @@ int run_cmd(UAContext *ua, const char *cmd) char *where, *fileset_name, *client_name, *bootstrap; const char *replace; char *when, *verify_job_name, *catalog_name; - char *migration_job_name; char *since = NULL; - char *verify_list; bool cloned = false; int Priority = 0; int i, j, opt, files = 0; bool kw_ok; JOB *job = NULL; JOB *verify_job = NULL; - JOB *migration_job = NULL; STORE *store = NULL; CLIENT *client = NULL; FILESET *fileset = NULL; @@ -82,8 +79,6 @@ int run_cmd(UAContext *ua, const char *cmd) "catalog", /* 17 override catalog */ "since", /* 18 since */ "cloned", /* 19 cloned */ - "verifylist", /* 20 verify output list */ - "migrationjob", /* 21 migration job name */ NULL}; #define YES_POS 14 @@ -104,9 +99,7 @@ int run_cmd(UAContext *ua, const char *cmd) bootstrap = NULL; replace = NULL; verify_job_name = NULL; - migration_job_name = NULL; catalog_name = NULL; - verify_list = NULL; for (i=1; iargc; i++) { Dmsg2(800, "Doing arg %d = %s\n", i, ua->argk[i]); @@ -254,20 +247,6 @@ int run_cmd(UAContext *ua, const char *cmd) kw_ok = true; break; - case 20: /* write verify list output */ - verify_list = ua->argv[i]; - kw_ok = true; - break; - case 21: /* Migration Job */ - if (migration_job_name) { - bsendmsg(ua, _("Migration Job specified twice.\n")); - return 0; - } - migration_job_name = ua->argv[i]; - kw_ok = true; - break; - - default: break; } @@ -414,17 +393,6 @@ int run_cmd(UAContext *ua, const char *cmd) verify_job = job->verify_job; } - if (migration_job_name) { - migration_job = (JOB *)GetResWithName(R_JOB, migration_job_name); - if (!migration_job) { - bsendmsg(ua, _("Migration Job \"%s\" not found.\n"), migration_job_name); - migration_job = select_job_resource(ua); - } - } else { - migration_job = job->verify_job; - } - - /* * Create JCR to run job. NOTE!!! after this point, free_jcr() * before returning. @@ -433,7 +401,6 @@ int run_cmd(UAContext *ua, const char *cmd) set_jcr_defaults(jcr, job); jcr->verify_job = verify_job; - jcr->migration_job = migration_job; set_storage(jcr, store); jcr->client = client; jcr->fileset = fileset; @@ -574,12 +541,6 @@ try_again: } else { Name = ""; } - if (!verify_list) { - verify_list = job->WriteVerifyList; - } - if (!verify_list) { - verify_list = ""; - } bsendmsg(ua, _("Run %s job\n" "JobName: %s\n" "FileSet: %s\n" @@ -588,7 +549,6 @@ try_again: "Storage: %s\n" "Pool: %s\n" "Verify Job: %s\n" -"Verify List: %s\n" "When: %s\n" "Priority: %d\n"), _("Verify"), @@ -599,7 +559,6 @@ try_again: jcr->store->hdr.name, NPRT(jcr->pool->hdr.name), Name, - verify_list, bstrutime(dt, sizeof(dt), jcr->sched_time), jcr->JobPriority); } @@ -663,37 +622,12 @@ try_again: jcr->JobPriority); } break; - case JT_MIGRATE: - jcr->JobLevel = L_FULL; /* default level */ - bsendmsg(ua, _("Run Restore job\n" - "JobName: %s\n" - "Bootstrap: %s\n" - "Where: %s\n" - "Replace: %s\n" - "FileSet: %s\n" - "Client: %s\n" - "Storage: %s\n" - "Migration Job: %s\n" - "When: %s\n" - "Catalog: %s\n" - "Priority: %d\n"), - job->hdr.name, - NPRT(jcr->RestoreBootstrap), - jcr->where?jcr->where:NPRT(job->RestoreWhere), - replace, - jcr->fileset->hdr.name, - jcr->client->hdr.name, - jcr->store->hdr.name, - jcr->migration_job->hdr.name, - bstrutime(dt, sizeof(dt), jcr->sched_time), - jcr->catalog->hdr.name, - jcr->JobPriority); - break; default: bsendmsg(ua, _("Unknown Job Type=%d\n"), jcr->JobType); goto bail_out; } + if (!get_cmd(ua, _("OK to run? (yes/mod/no): "))) { goto bail_out; } diff --git a/bacula/src/dird/ua_select.c b/bacula/src/dird/ua_select.c index 29c9efd997..451e9ec8c3 100644 --- a/bacula/src/dird/ua_select.c +++ b/bacula/src/dird/ua_select.c @@ -626,7 +626,7 @@ int get_job_dbr(UAContext *ua, JOB_DBR *jr) int i; for (i=1; iargc; i++) { - if (strcasecmp(ua->argk[i], N_("jobuid")) == 0 && ua->argv[i]) { + if (strcasecmp(ua->argk[i], N_("ujobid")) == 0 && ua->argv[i]) { jr->JobId = 0; bstrncpy(jr->Job, ua->argv[i], sizeof(jr->Job)); } else if (strcasecmp(ua->argk[i], N_("jobid")) == 0 && ua->argv[i]) { @@ -845,9 +845,9 @@ STORE *get_storage_resource(UAContext *ua, bool use_default) store = jcr->store; free_jcr(jcr); break; - } else if (strcasecmp(ua->argk[i], N_("jobuid")) == 0) { + } else if (strcasecmp(ua->argk[i], N_("ujobid")) == 0) { if (!ua->argv[i]) { - bsendmsg(ua, _("Expecting jobuid=xxx, got: %s.\n"), ua->argk[i]); + bsendmsg(ua, _("Expecting ujobid=xxx, got: %s.\n"), ua->argk[i]); return NULL; } if (!(jcr=get_jcr_by_full_name(ua->argv[i]))) { diff --git a/bacula/src/dird/ua_status.c b/bacula/src/dird/ua_status.c index 84138f31b0..16b9581cf6 100644 --- a/bacula/src/dird/ua_status.c +++ b/bacula/src/dird/ua_status.c @@ -360,6 +360,7 @@ struct sched_pkt { int priority; time_t runtime; POOL *pool; + STORE *store; }; static void prt_runtime(UAContext *ua, sched_pkt *sp) @@ -379,7 +380,8 @@ static void prt_runtime(UAContext *ua, sched_pkt *sp) close_db = true; /* new db opened, remember to close it */ } if (ok) { - mr.PoolId = jcr->jr.PoolId; + mr.PoolId = jcr->PoolId; + mr.StorageId = sp->store->StorageId; ok = find_next_volume_for_append(jcr, &mr, 1, false/*no create*/); } if (!ok) { @@ -435,6 +437,7 @@ static void list_scheduled_jobs(UAContext *ua) time_t runtime; RUN *run; JOB *job; + STORE* store; int level, num_jobs = 0; int priority; bool hdr_printed = false; @@ -469,6 +472,11 @@ static void list_scheduled_jobs(UAContext *ua) if (run->Priority) { priority = run->Priority; } + if (run->storage) { + store = run->storage; + } else { + store = (STORE *)job->storage->first(); + } if (!hdr_printed) { prt_runhdr(ua); hdr_printed = true; @@ -479,6 +487,7 @@ static void list_scheduled_jobs(UAContext *ua) sp->priority = priority; sp->runtime = runtime; sp->pool = run->pool; + sp->store = store; sched.binary_insert_multiple(sp, my_compare); num_jobs++; } diff --git a/bacula/src/dird/verify.c b/bacula/src/dird/verify.c index 45b0246a58..7d2867343d 100644 --- a/bacula/src/dird/verify.c +++ b/bacula/src/dird/verify.c @@ -43,7 +43,6 @@ static char storaddr[] = "storage address=%s port=%d ssl=0\n"; /* Responses received from File daemon */ static char OKverify[] = "2000 OK verify\n"; static char OKstore[] = "2000 OK storage\n"; -static char OKbootstrap[] = "2000 OK bootstrap\n"; /* Forward referenced functions */ static void prt_fname(JCR *jcr); @@ -60,7 +59,7 @@ bool do_verify_init(JCR *jcr) JobId_t verify_jobid = 0; const char *Name; - memset(&jcr->target_jr, 0, sizeof(jcr->target_jr)); + memset(&jcr->previous_jr, 0, sizeof(jcr->previous_jr)); Dmsg1(9, "bdird: created client %s record\n", jcr->client->hdr.name); @@ -104,19 +103,19 @@ bool do_verify_init(JCR *jcr) if (jcr->JobLevel == L_VERIFY_CATALOG || jcr->JobLevel == L_VERIFY_VOLUME_TO_CATALOG || jcr->JobLevel == L_VERIFY_DISK_TO_CATALOG) { - jcr->target_jr.JobId = verify_jobid; - if (!db_get_job_record(jcr, jcr->db, &jcr->target_jr)) { + jcr->previous_jr.JobId = verify_jobid; + if (!db_get_job_record(jcr, jcr->db, &jcr->previous_jr)) { Jmsg(jcr, M_FATAL, 0, _("Could not get job record for previous Job. ERR=%s"), db_strerror(jcr->db)); return false; } - if (jcr->target_jr.JobStatus != 'T') { + if (jcr->previous_jr.JobStatus != 'T') { Jmsg(jcr, M_FATAL, 0, _("Last Job %d did not terminate normally. JobStatus=%c\n"), - verify_jobid, jcr->target_jr.JobStatus); + verify_jobid, jcr->previous_jr.JobStatus); return false; } Jmsg(jcr, M_INFO, 0, _("Verifying against JobId=%d Job=%s\n"), - jcr->target_jr.JobId, jcr->target_jr.Job); + jcr->previous_jr.JobId, jcr->previous_jr.Job); } /* @@ -126,9 +125,27 @@ bool do_verify_init(JCR *jcr) * File daemon but not used). */ if (jcr->JobLevel == L_VERIFY_VOLUME_TO_CATALOG) { - if (!create_restore_bootstrap_file(jcr)) { + RESTORE_CTX rx; + UAContext *ua; + memset(&rx, 0, sizeof(rx)); + rx.bsr = new_bsr(); + rx.JobIds = ""; + rx.bsr->JobId = jcr->previous_jr.JobId; + ua = new_ua_context(jcr); + complete_bsr(ua, rx.bsr); + rx.bsr->fi = new_findex(); + rx.bsr->fi->findex = 1; + rx.bsr->fi->findex2 = jcr->previous_jr.JobFiles; + jcr->ExpectedFiles = write_bsr_file(ua, rx); + if (jcr->ExpectedFiles == 0) { + free_ua_context(ua); + free_bsr(rx.bsr); return false; } + free_ua_context(ua); + free_bsr(rx.bsr); + jcr->needs_sd = true; + } else { jcr->sd_auth_key = bstrdup("dummy"); /* dummy Storage daemon key */ } @@ -136,7 +153,7 @@ bool do_verify_init(JCR *jcr) if (jcr->JobLevel == L_VERIFY_DISK_TO_CATALOG && jcr->verify_job) { jcr->fileset = jcr->verify_job->fileset; } - Dmsg2(100, "ClientId=%u JobLevel=%c\n", jcr->target_jr.ClientId, jcr->JobLevel); + Dmsg2(100, "ClientId=%u JobLevel=%c\n", jcr->previous_jr.ClientId, jcr->JobLevel); return true; } @@ -238,8 +255,7 @@ bool do_verify(JCR *jcr) /* * Send the bootstrap file -- what Volumes/files to restore */ - if (!send_bootstrap_file(jcr, fd) || - !response(jcr, fd, OKbootstrap, "Bootstrap", DISPLAY_ERROR)) { + if (!send_bootstrap_file(jcr)) { return false; } @@ -285,19 +301,19 @@ bool do_verify(JCR *jcr) Dmsg0(10, "Verify level=catalog\n"); jcr->sd_msg_thread_done = true; /* no SD msg thread, so it is done */ jcr->SDJobStatus = JS_Terminated; - get_attributes_and_compare_to_catalog(jcr, jcr->target_jr.JobId); + get_attributes_and_compare_to_catalog(jcr, jcr->previous_jr.JobId); break; case L_VERIFY_VOLUME_TO_CATALOG: Dmsg0(10, "Verify level=volume\n"); - get_attributes_and_compare_to_catalog(jcr, jcr->target_jr.JobId); + get_attributes_and_compare_to_catalog(jcr, jcr->previous_jr.JobId); break; case L_VERIFY_DISK_TO_CATALOG: Dmsg0(10, "Verify level=disk_to_catalog\n"); jcr->sd_msg_thread_done = true; /* no SD msg thread, so it is done */ jcr->SDJobStatus = JS_Terminated; - get_attributes_and_compare_to_catalog(jcr, jcr->target_jr.JobId); + get_attributes_and_compare_to_catalog(jcr, jcr->previous_jr.JobId); break; case L_VERIFY_INIT: @@ -421,7 +437,7 @@ void verify_cleanup(JCR *jcr, int TermCode) jcr->fileset->hdr.name, level_to_str(jcr->JobLevel), jcr->client->hdr.name, - jcr->target_jr.JobId, + jcr->previous_jr.JobId, Name, sdt, edt, @@ -454,7 +470,7 @@ void verify_cleanup(JCR *jcr, int TermCode) jcr->fileset->hdr.name, level_to_str(jcr->JobLevel), jcr->client->hdr.name, - jcr->target_jr.JobId, + jcr->previous_jr.JobId, Name, sdt, edt, @@ -479,7 +495,7 @@ int get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId) int stat = JS_Terminated; char buf[MAXSTRING]; POOLMEM *fname = get_pool_memory(PM_MESSAGE); - int do_Digest = CRYPTO_DIGEST_NONE; + int do_SIG = NO_SIG; int32_t file_index = 0; memset(&fdbr, 0, sizeof(FILE_DBR)); @@ -493,7 +509,7 @@ int get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId) * We expect: * FileIndex * Stream - * Options or Digest (MD5/SHA1) + * Options or SIG (MD5/SHA1) * Filename * Attributes * Link name ??? @@ -501,11 +517,11 @@ int get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId) while ((n=bget_dirmsg(fd)) >= 0 && !job_canceled(jcr)) { int stream; char *attr, *p, *fn; - char Opts_Digest[MAXSTRING]; /* Verify Opts or MD5/SHA1 digest */ + char Opts_SIG[MAXSTRING]; /* Verify Opts or MD5/SHA1 signature */ fname = check_pool_memory_size(fname, fd->msglen); jcr->fname = check_pool_memory_size(jcr->fname, fd->msglen); - Dmsg1(200, "Atts+Digest=%s\n", fd->msg); + Dmsg1(200, "Atts+SIG=%s\n", fd->msg); if ((len = sscanf(fd->msg, "%ld %d %100s", &file_index, &stream, fname)) != 3) { Jmsg3(jcr, M_FATAL, 0, _("birdmsg; skip_nonspaces(&p); /* skip FileIndex */ skip_spaces(&p); skip_nonspaces(&p); /* skip Stream */ skip_spaces(&p); - skip_nonspaces(&p); /* skip Opts_Digest */ + skip_nonspaces(&p); /* skip Opts_SIG */ p++; /* skip space */ fn = fname; while (*p != 0) { @@ -539,7 +555,7 @@ int get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId) jcr->JobFiles++; jcr->FileIndex = file_index; /* remember attribute file_index */ decode_stat(attr, &statf, &LinkFIf); /* decode file stat packet */ - do_Digest = CRYPTO_DIGEST_NONE; + do_SIG = NO_SIG; jcr->fn_printed = false; pm_strcpy(jcr->fname, fname); /* move filename into JCR */ @@ -551,7 +567,7 @@ int get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId) */ fdbr.FileId = 0; if (!db_get_file_attributes_record(jcr, jcr->db, jcr->fname, - &jcr->target_jr, &fdbr)) { + &jcr->previous_jr, &fdbr)) { Jmsg(jcr, M_INFO, 0, _("New file: %s\n"), jcr->fname); Dmsg1(020, _("File not in catalog: %s\n"), jcr->fname); stat = JS_Differences; @@ -565,13 +581,13 @@ int get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId) } Dmsg3(400, "Found %s in catalog. inx=%d Opts=%s\n", jcr->fname, - file_index, Opts_Digest); + file_index, Opts_SIG); decode_stat(fdbr.LStat, &statc, &LinkFIc); /* decode catalog stat */ /* * Loop over options supplied by user and verify the * fields he requests. */ - for (p=Opts_Digest; *p; p++) { + for (p=Opts_SIG; *p; p++) { char ed1[30], ed2[30]; switch (*p) { case 'i': /* compare INODEs */ @@ -656,10 +672,10 @@ int get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId) break; case '5': /* compare MD5 */ Dmsg1(500, "set Do_MD5 for %s\n", jcr->fname); - do_Digest = CRYPTO_DIGEST_MD5; + do_SIG = MD5_SIG; break; case '1': /* compare SHA1 */ - do_Digest = CRYPTO_DIGEST_SHA1; + do_SIG = SHA1_SIG; break; case ':': case 'V': @@ -668,13 +684,13 @@ int get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId) } } /* - * Got Digest Signature from Storage daemon - * It came across in the Opts_Digest field. + * Got SIG Signature from Storage daemon + * It came across in the Opts_SIG field. */ - } else if (crypto_digest_stream_type(stream) != CRYPTO_DIGEST_NONE) { - Dmsg2(400, "stream=Digest inx=%d Digest=%s\n", file_index, Opts_Digest); + } else if (stream == STREAM_MD5_SIGNATURE || stream == STREAM_SHA1_SIGNATURE) { + Dmsg2(400, "stream=SIG inx=%d SIG=%s\n", file_index, Opts_SIG); /* - * When ever we get a digest is MUST have been + * When ever we get a signature is MUST have been * preceded by an attributes record, which sets attr_file_index */ if (jcr->FileIndex != (uint32_t)file_index) { @@ -682,20 +698,20 @@ int get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId) file_index, jcr->FileIndex); return false; } - if (do_Digest != CRYPTO_DIGEST_NONE) { - db_escape_string(buf, Opts_Digest, strlen(Opts_Digest)); - if (strcmp(buf, fdbr.Digest) != 0) { + if (do_SIG) { + db_escape_string(buf, Opts_SIG, strlen(Opts_SIG)); + if (strcmp(buf, fdbr.SIG) != 0) { prt_fname(jcr); if (debug_level >= 10) { Jmsg(jcr, M_INFO, 0, _(" %s not same. File=%s Cat=%s\n"), - stream_to_ascii(stream), buf, fdbr.Digest); + stream==STREAM_MD5_SIGNATURE?"MD5":"SHA1", buf, fdbr.SIG); } else { Jmsg(jcr, M_INFO, 0, _(" %s differs.\n"), - stream_to_ascii(stream)); + stream==STREAM_MD5_SIGNATURE?"MD5":"SHA1"); } stat = JS_Differences; } - do_Digest = CRYPTO_DIGEST_NONE; + do_SIG = FALSE; } } jcr->JobFiles = file_index; diff --git a/bacula/src/filed/Makefile.in b/bacula/src/filed/Makefile.in index c0e86adb7f..ff1dde0cd8 100755 --- a/bacula/src/filed/Makefile.in +++ b/bacula/src/filed/Makefile.in @@ -31,10 +31,10 @@ first_rule: all dummy: # -SVRSRCS = filed.c authenticate.c acl.c backup.c estimate.c \ +SVRSRCS = filed.c authenticate.c acl.c backup.c chksum.c estimate.c \ filed_conf.c heartbeat.c job.c pythonfd.c \ restore.c status.c verify.c verify_vol.c -SVROBJS = filed.o authenticate.o acl.o backup.o estimate.o \ +SVROBJS = filed.o authenticate.o acl.o backup.o chksum.o estimate.o \ filed_conf.o heartbeat.o job.o pythonfd.o \ restore.o status.o verify.o verify_vol.o diff --git a/bacula/src/filed/backup.c b/bacula/src/filed/backup.c index 3af54fcb8f..2174427d86 100644 --- a/bacula/src/filed/backup.c +++ b/bacula/src/filed/backup.c @@ -27,7 +27,7 @@ /* Forward referenced functions */ static int save_file(FF_PKT *ff_pkt, void *pkt, bool top_level); -static int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, DIGEST *signature_digest); +static int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, struct CHKSUM *chksum); static bool encode_and_send_attributes(JCR *jcr, FF_PKT *ff_pkt, int &data_stream); static bool read_and_send_acl(JCR *jcr, int acltype, int stream); @@ -47,8 +47,6 @@ bool blast_data_to_storage_daemon(JCR *jcr, char *addr) { BSOCK *sd; bool ok = true; - // TODO landonf: Allow user to specify encryption algorithm - crypto_cipher_t cipher = CRYPTO_CIPHER_AES_128_CBC; sd = jcr->store_bsock; @@ -81,40 +79,6 @@ 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); - /* Create encryption session data and a cached, DER-encoded session data - * structure. We use a single session key for each backup, so we'll encode - * the session data only once. */ - if (jcr->pki_encrypt) { - size_t size = 0; - - /* Create per-job session encryption context */ - jcr->pki_session = crypto_session_new(cipher, jcr->pki_recipients); - - /* Get the session data size */ - if (crypto_session_encode(jcr->pki_session, NULL, &size) == false) { - Jmsg(jcr, M_FATAL, 0, _("An error occured while encrypting the stream.\n")); - return 0; - } - - /* Allocate buffer */ - jcr->pki_session_encoded = malloc(size); - if (!jcr->pki_session_encoded) { - return 0; - } - - /* Encode session data */ - if (crypto_session_encode(jcr->pki_session, jcr->pki_session_encoded, &size) == false) { - Jmsg(jcr, M_FATAL, 0, _("An error occured while encrypting the stream.\n")); - return 0; - } - - /* ... and store the encoded size */ - jcr->pki_session_encoded_size = size; - - /* Allocate the encryption/decryption buffer */ - jcr->crypto_buf = get_memory(CRYPTO_CIPHER_MAX_BLOCK_SIZE); - } - Dmsg1(300, "set_find_options ff=%p\n", jcr->ff); set_find_options((FF_PKT *)jcr->ff, jcr->incremental, jcr->mtime); Dmsg0(300, "start find files\n"); @@ -144,18 +108,6 @@ bool blast_data_to_storage_daemon(JCR *jcr, char *addr) free_pool_memory(jcr->compress_buf); jcr->compress_buf = NULL; } - if (jcr->crypto_buf) { - free_pool_memory(jcr->crypto_buf); - jcr->crypto_buf = NULL; - } - - if (jcr->pki_session) { - crypto_session_free(jcr->pki_session); - } - if (jcr->pki_session_encoded) { - free(jcr->pki_session_encoded); - } - Dmsg1(100, "end blast_data ok=%d\n", ok); return ok; } @@ -173,15 +125,7 @@ bool blast_data_to_storage_daemon(JCR *jcr, char *addr) static int save_file(FF_PKT *ff_pkt, void *vjcr, bool top_level) { int stat, data_stream; - DIGEST *digest = NULL; - DIGEST *signing_digest = NULL; - int digest_stream = STREAM_NONE; - // 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 + struct CHKSUM chksum; BSOCK *sd; JCR *jcr = (JCR *)vjcr; @@ -280,55 +224,13 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr, bool top_level) Dmsg1(130, "bfiled: sending %s to stored\n", ff_pkt->fname); - /* - * Setup for digest handling. If this fails, the digest will be set to NULL - * and not used. - */ - if (ff_pkt->flags & FO_MD5) { - digest = crypto_digest_new(CRYPTO_DIGEST_MD5); - digest_stream = STREAM_MD5_DIGEST; - - } else if (ff_pkt->flags & FO_SHA1) { - digest = crypto_digest_new(CRYPTO_DIGEST_SHA1); - digest_stream = STREAM_SHA1_DIGEST; - - } else if (ff_pkt->flags & FO_SHA256) { - digest = crypto_digest_new(CRYPTO_DIGEST_SHA256); - digest_stream = STREAM_SHA256_DIGEST; - - } else if (ff_pkt->flags & FO_SHA512) { - digest = crypto_digest_new(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"), - stream_to_ascii(digest_stream)); - } /* - * Set up signature digest handling. If this fails, the signature digest will be set to - * NULL and not used. + * Setup for signature handling. + * Then initialise the file descriptor we use for data and other streams. */ - // TODO landonf: We should really only calculate the digest once, for both verification and signing. - if (jcr->pki_sign) { - signing_digest = crypto_digest_new(signing_algorithm); - } - /* Full-stop if a failure occured initializing the signature digest */ - if (jcr->pki_sign && signing_digest == NULL) { - Jmsg(jcr, M_NOTSAVED, 0, _("%s signature digest initialization failed\n"), - stream_to_ascii(signing_algorithm)); - jcr->Errors++; - return 1; - } + chksum_init(&chksum, ff_pkt->flags); - /* Enable encryption */ - if (jcr->pki_encrypt) { - ff_pkt->flags |= FO_ENCRYPT; - } - - /* Initialise the file descriptor we use for data and other streams. */ binit(&ff_pkt->bfd); if (ff_pkt->flags & FO_PORTABLE) { set_portable_backup(&ff_pkt->bfd); /* disable Win32 BackupRead() */ @@ -341,7 +243,6 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr, bool top_level) } } - /* Send attributes -- must be done after binit() */ if (!encode_and_send_attributes(jcr, ff_pkt, data_stream)) { return 0; } @@ -378,27 +279,7 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr, bool top_level) stop_thread_timer(tid); tid = NULL; } - - /* Set up the encryption context, send the session data to the SD */ - if (jcr->pki_encrypt) { - /* Send our header */ - bnet_fsend(sd, "%ld %d 0", jcr->JobFiles, STREAM_ENCRYPTED_SESSION_DATA); - - /* Grow the bsock buffer to fit our message if necessary */ - if ((size_t) sizeof_pool_memory(sd->msg) < jcr->pki_session_encoded_size) { - sd->msg = realloc_pool_memory(sd->msg, jcr->pki_session_encoded_size); - } - - /* Copy our message over and send it */ - memcpy(sd->msg, jcr->pki_session_encoded, jcr->pki_session_encoded_size); - sd->msglen = jcr->pki_session_encoded_size; - jcr->JobBytes += sd->msglen; - - bnet_send(sd); - bnet_sig(sd, BNET_EOD); - } - - stat = send_data(jcr, data_stream, ff_pkt, digest, signing_digest); + stat = send_data(jcr, data_stream, ff_pkt, &chksum); bclose(&ff_pkt->bfd); if (!stat) { return 0; @@ -424,7 +305,7 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr, bool top_level) } flags = ff_pkt->flags; ff_pkt->flags &= ~(FO_GZIP|FO_SPARSE); - stat = send_data(jcr, STREAM_MACOS_FORK_DATA, ff_pkt, digest, signing_digest); + stat = send_data(jcr, STREAM_MACOS_FORK_DATA, ff_pkt, &chksum); ff_pkt->flags = flags; bclose(&ff_pkt->bfd); if (!stat) { @@ -437,12 +318,7 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr, bool top_level) Dmsg1(300, "bfiled>stored:header %s\n", sd->msg); memcpy(sd->msg, ff_pkt->hfsinfo.fndrinfo, 32); sd->msglen = 32; - if (digest) { - crypto_digest_update(digest, sd->msg, sd->msglen); - } - if (signing_digest) { - crypto_digest_update(signing_digest, sd->msg, sd->msglen); - } + chksum_update(&chksum, (unsigned char *)sd->msg, sd->msglen); bnet_send(sd); bnet_sig(sd, BNET_EOD); } @@ -461,78 +337,25 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr, bool top_level) } } - /* Terminate the signing digest and send it to the Storage daemon */ - if (signing_digest) { - SIGNATURE *sig; - size_t size = 0; - void *buf; - - if ((sig = crypto_sign_new()) == NULL) { - Jmsg(jcr, M_FATAL, 0, _("Failed to allocate memory for stream signature.\n")); - return 0; - } - - if (crypto_sign_add_signer(sig, signing_digest, jcr->pki_keypair) == false) { - Jmsg(jcr, M_FATAL, 0, _("An error occured while signing the stream.\n")); - return 0; - } - - /* Get signature size */ - if (crypto_sign_encode(sig, NULL, &size) == false) { - Jmsg(jcr, M_FATAL, 0, _("An error occured while signing the stream.\n")); - return 0; - } - - /* Allocate signature data buffer */ - buf = malloc(size); - if (!buf) { - crypto_sign_free(sig); - return 0; - } - - /* Encode signature data */ - if (crypto_sign_encode(sig, buf, &size) == false) { - Jmsg(jcr, M_FATAL, 0, _("An error occured while signing the stream.\n")); - return 0; - } - - /* Send our header */ - bnet_fsend(sd, "%ld %d 0", jcr->JobFiles, STREAM_SIGNED_DIGEST); - Dmsg1(300, "bfiled>stored:header %s\n", sd->msg); - - /* Grow the bsock buffer to fit our message if necessary */ - if ((size_t) sizeof_pool_memory(sd->msg) < size) { - sd->msg = realloc_pool_memory(sd->msg, size); + /* Terminate any signature and send it to Storage daemon and the Director */ + if (chksum.updated) { + int stream = 0; + chksum_final(&chksum); + if (chksum.type == CHKSUM_MD5) { + stream = STREAM_MD5_SIGNATURE; + } else if (chksum.type == CHKSUM_SHA1) { + stream = STREAM_SHA1_SIGNATURE; + } else { + Jmsg1(jcr, M_WARNING, 0, _("Unknown signature type %i.\n"), chksum.type); } - - /* Copy our message over and send it */ - memcpy(sd->msg, buf, size); - sd->msglen = size; - bnet_send(sd); - bnet_sig(sd, BNET_EOD); /* end of checksum */ - - crypto_digest_free(signing_digest); - crypto_sign_free(sig); - free(buf); - } - - /* Terminate any digest and send it to Storage daemon and the Director */ - if (digest) { - char md[CRYPTO_DIGEST_MAX_SIZE]; - size_t size; - - size = sizeof(md); - - if (crypto_digest_finalize(digest, &md, &size)) { - bnet_fsend(sd, "%ld %d 0", jcr->JobFiles, digest_stream); + if (stream != 0) { + bnet_fsend(sd, "%ld %d 0", jcr->JobFiles, stream); Dmsg1(300, "bfiled>stored:header %s\n", sd->msg); - memcpy(sd->msg, md, size); - sd->msglen = size; + memcpy(sd->msg, chksum.signature, chksum.length); + sd->msglen = chksum.length; bnet_send(sd); bnet_sig(sd, BNET_EOD); /* end of checksum */ } - - crypto_digest_free(digest); } return 1; @@ -548,18 +371,13 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr, bool top_level) * Currently this is not a problem as the only other stream, resource forks, * are not handled as sparse files. */ -int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, DIGEST *signing_digest) +static int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, struct CHKSUM *chksum) { BSOCK *sd = jcr->store_bsock; uint64_t fileAddr = 0; /* file address */ char *rbuf, *wbuf; int rsize = jcr->buf_size; /* read buffer size */ POOLMEM *msgsave; - CIPHER_CONTEXT *cipher_ctx = NULL; /* Quell bogus uninitialized warnings */ - const void *cipher_input; - size_t cipher_input_len; - size_t cipher_block_size; - size_t encrypted_len; #ifdef FD_NO_SEND_TEST return 1; #endif @@ -567,11 +385,11 @@ int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, DIGEST *sign msgsave = sd->msg; rbuf = sd->msg; /* read buffer */ wbuf = sd->msg; /* write buffer */ - cipher_input = rbuf; /* encrypt uncompressed data */ Dmsg1(300, "Saving data, type=%d\n", ff_pkt->type); + #ifdef HAVE_LIBZ uLong compress_len, max_compress_len = 0; const Bytef *cbuf = NULL; @@ -585,30 +403,9 @@ int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, DIGEST *sign max_compress_len = jcr->compress_buf_size; /* set max length */ } wbuf = jcr->compress_buf; /* compressed output here */ - cipher_input = jcr->compress_buf; /* encrypt compressed data */ } #endif - if (ff_pkt->flags & FO_ENCRYPT) { - /* Allocate the cipher context */ - if ((cipher_ctx = crypto_cipher_new(jcr->pki_session, true, &cipher_block_size)) == NULL) { - /* Shouldn't happen! */ - Jmsg0(jcr, M_FATAL, 0, _("Failed to initialize encryption context\n")); - goto err; - } - - /* - * Grow the crypto buffer, if necessary. - * crypto_cipher_update() will buffer up to (cipher_block_size - 1). - * We grow crypto_buf to the maximum number of blocks that - * could be returned for the given read buffer size. - * (Using the larger of either rsize or max_compress_len) - */ - jcr->crypto_buf = check_pool_memory_size(jcr->crypto_buf, (MAX((size_t) rsize, max_compress_len) + cipher_block_size - 1) / cipher_block_size * cipher_block_size); - - wbuf = jcr->crypto_buf; /* Encrypted, possibly compressed output here. */ - } - /* * Send Data header to Storage daemon * @@ -616,7 +413,7 @@ int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, DIGEST *sign if (!bnet_fsend(sd, "%ld %d 0", jcr->JobFiles, stream)) { Jmsg1(jcr, M_FATAL, 0, _("Network send error to SD. ERR=%s\n"), bnet_strerror(sd)); - goto err; + return 0; } Dmsg1(300, ">stored: datahdr %s\n", sd->msg); @@ -665,18 +462,8 @@ int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, DIGEST *sign jcr->ReadBytes += sd->msglen; /* count bytes read */ fileAddr += sd->msglen; - /* Uncompressed cipher input length */ - cipher_input_len = sd->msglen; - /* Update checksum if requested */ - if (digest) { - crypto_digest_update(digest, rbuf, sd->msglen); - } - - /* Update signing digest if requested */ - if (signing_digest) { - crypto_digest_update(signing_digest, rbuf, sd->msglen); - } + chksum_update(chksum, (unsigned char *)rbuf, sd->msglen); #ifdef HAVE_LIBZ /* Do compression if turned on */ @@ -690,34 +477,18 @@ int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, DIGEST *sign (const Bytef *)rbuf, (uLong)sd->msglen, ff_pkt->GZIP_level)) != Z_OK) { Jmsg(jcr, M_FATAL, 0, _("Compression error: %d\n"), zstat); + sd->msg = msgsave; + sd->msglen = 0; set_jcr_job_status(jcr, JS_ErrorTerminated); - goto err; + return 0; } Dmsg2(400, "compressed len=%d uncompressed len=%d\n", compress_len, sd->msglen); sd->msglen = compress_len; /* set compressed length */ - cipher_input_len = compress_len; } #endif - if (ff_pkt->flags & FO_ENCRYPT) { - /* Encrypt the input block */ - if (crypto_cipher_update(cipher_ctx, cipher_input, cipher_input_len, jcr->crypto_buf, &encrypted_len)) { - if (encrypted_len == 0) { - /* No full block of data available, read more data */ - continue; - } - Dmsg2(400, "encrypted len=%d unencrypted len=%d\n", - encrypted_len, sd->msglen); - sd->msglen = encrypted_len; /* set encrypted length */ - } else { - /* Encryption failed. Shouldn't happen. */ - Jmsg(jcr, M_FATAL, 0, _("Encryption error\n")); - goto err; - } - } - /* Send the buffer to the Storage daemon */ if (!sparseBlock) { if (ff_pkt->flags & FO_SPARSE) { @@ -727,42 +498,18 @@ int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, DIGEST *sign if (!bnet_send(sd)) { Jmsg1(jcr, M_FATAL, 0, _("Network send error to SD. ERR=%s\n"), bnet_strerror(sd)); - goto err; + sd->msg = msgsave; /* restore bnet buffer */ + sd->msglen = 0; + return 0; } } Dmsg1(130, "Send data to SD len=%d\n", sd->msglen); /* #endif */ - jcr->JobBytes += sd->msglen; /* count bytes saved possibly compressed/encrypted */ + jcr->JobBytes += sd->msglen; /* count bytes saved possibly compressed */ sd->msg = msgsave; /* restore read buffer */ } /* end while read file data */ - /* Send any remaining encrypted data + padding */ - if (ff_pkt->flags & FO_ENCRYPT) { - if (!crypto_cipher_finalize(cipher_ctx, jcr->crypto_buf, &encrypted_len)) { - /* Padding failed. Shouldn't happen. */ - Jmsg(jcr, M_FATAL, 0, _("Encryption padding error\n")); - goto err; - } - - if (encrypted_len > 0) { - sd->msglen = encrypted_len; /* set encrypted length */ - - /* Send remaining encrypted data to the SD */ - if (ff_pkt->flags & FO_SPARSE) { - sd->msglen += SPARSE_FADDR_SIZE; /* include fileAddr in size */ - } - sd->msg = wbuf; /* set correct write buffer */ - if (!bnet_send(sd)) { - Jmsg1(jcr, M_FATAL, 0, _("Network send error to SD. ERR=%s\n"), - bnet_strerror(sd)); - goto err; - } - Dmsg1(130, "Send data to SD len=%d\n", sd->msglen); - jcr->JobBytes += sd->msglen; /* count bytes saved possibly compressed/encrypted */ - sd->msg = msgsave; /* restore bnet buffer */ - } - } if (sd->msglen < 0) { berrno be; @@ -777,23 +524,10 @@ int send_data(JCR *jcr, int stream, FF_PKT *ff_pkt, DIGEST *digest, DIGEST *sign if (!bnet_sig(sd, BNET_EOD)) { /* indicate end of file data */ Jmsg1(jcr, M_FATAL, 0, _("Network send error to SD. ERR=%s\n"), bnet_strerror(sd)); - goto err; - } - - /* Free the cipher context */ - if (cipher_ctx) { - crypto_cipher_free(cipher_ctx); + return 0; } return 1; - -err: - if (cipher_ctx) { - crypto_cipher_free(cipher_ctx); - } - sd->msg = msgsave; /* restore bnet buffer */ - sd->msglen = 0; - return 0; } /* @@ -863,11 +597,7 @@ static bool encode_and_send_attributes(JCR *jcr, FF_PKT *ff_pkt, int &data_strea #endif /* Find what data stream we will use, then encode the attributes */ - if ((data_stream = select_data_stream(ff_pkt)) == STREAM_NONE) { - /* This should not happen */ - Jmsg0(jcr, M_FATAL, 0, _("Invalid file flags, no supported data stream type.\n")); - return false; - } + data_stream = select_data_stream(ff_pkt); encode_stat(attribs, ff_pkt, data_stream); /* Now possibly extend the attributes */ @@ -875,11 +605,11 @@ static bool encode_and_send_attributes(JCR *jcr, FF_PKT *ff_pkt, int &data_strea Dmsg3(300, "File %s\nattribs=%s\nattribsEx=%s\n", ff_pkt->fname, attribs, attribsEx); - P(jcr->mutex); + jcr->lock(); jcr->JobFiles++; /* increment number of files sent */ ff_pkt->FileIndex = jcr->JobFiles; /* return FileIndex */ pm_strcpy(jcr->last_fname, ff_pkt->fname); - V(jcr->mutex); + jcr->unlock(); /* * Send Attributes header to Storage daemon diff --git a/bacula/src/filed/bacula-fd.conf.in b/bacula/src/filed/bacula-fd.conf.in index dd71f4c660..1ca546d4bb 100644 --- a/bacula/src/filed/bacula-fd.conf.in +++ b/bacula/src/filed/bacula-fd.conf.in @@ -39,5 +39,5 @@ FileDaemon { # this is me # Send all messages except skipped files back to Director Messages { Name = Standard - director = @hostname@-dir = all, !skipped + director = @hostname@-dir = all, !skipped, !restored } diff --git a/bacula/src/filed/chksum.c b/bacula/src/filed/chksum.c new file mode 100644 index 0000000000..721d7609da --- /dev/null +++ b/bacula/src/filed/chksum.c @@ -0,0 +1,84 @@ +/* + * General routines for handling the various checksum supported. + * + * Written by Preben 'Peppe' Guldberg, December MMIV + */ +/* + Copyright (C) 2004-2005 Kern Sibbald + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + version 2 as amended with additional clauses defined in the + file LICENSE in the main source directory. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + the file LICENSE for additional details. + + */ + +#include "bacula.h" +#include "filed.h" + +/* return 0 on success, otherwise some handler specific error code. */ +int chksum_init(CHKSUM *chksum, int flags) +{ + int status = 0; + + chksum->type = CHKSUM_NONE; + bstrncpy(chksum->name, "NONE", sizeof(chksum->name)); + chksum->updated = false; + if (flags & CHKSUM_MD5) { + chksum->length = 16; + MD5Init(&chksum->context.md5); + chksum->type = CHKSUM_MD5; + bstrncpy(chksum->name, "MD5", sizeof(chksum->name)); + } else if (flags & CHKSUM_SHA1) { + chksum->length = 20; + status = SHA1Init(&chksum->context.sha1); + if (status == 0) { + chksum->type = CHKSUM_SHA1; + bstrncpy(chksum->name, "SHA1", sizeof(chksum->name)); + } + } + return status; +} + +/* return 0 on success, otherwise some handler specific error code. */ +int chksum_update(CHKSUM *chksum, void *buf, unsigned len) +{ + int status; + switch (chksum->type) { + case CHKSUM_NONE: + return 0; + case CHKSUM_MD5: + MD5Update(&chksum->context.md5, (unsigned char *)buf, len); + chksum->updated = true; + return 0; + case CHKSUM_SHA1: + status = SHA1Update(&chksum->context.sha1, (uint8_t *)buf, len); + if (status == 0) { + chksum->updated = true; + } + return status; + default: + return -1; + } +} + +/* return 0 on success, otherwise some handler specific error code. */ +int chksum_final(CHKSUM *chksum) +{ + switch (chksum->type) { + case CHKSUM_NONE: + return 0; + case CHKSUM_MD5: + MD5Final(chksum->signature, &chksum->context.md5); + return 0; + case CHKSUM_SHA1: + return SHA1Final(&chksum->context.sha1, chksum->signature); + default: + return -1; + } +} diff --git a/bacula/src/filed/chksum.h b/bacula/src/filed/chksum.h new file mode 100644 index 0000000000..7be26339d2 --- /dev/null +++ b/bacula/src/filed/chksum.h @@ -0,0 +1,52 @@ +/* + * General routines for handling the various checksum supported. + */ +/* + Copyright (C) 2000-2005 Kern Sibbald + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + version 2 as amended with additional clauses defined in the + file LICENSE in the main source directory. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + the file LICENSE for additional details. + + */ + +#ifndef _CHKSUM_H_ +#define _CHKSUM_H_ + +#include "bacula.h" + +/* + * Link these to findlib options. Doing so allows for simpler handling of + * signatures in the callers. + * If multiple signatures are specified, the order in chksum_init() matters. + * Still, spell out our own names in case we want to change the approach. + */ +#define CHKSUM_NONE 0 +#define CHKSUM_MD5 FO_MD5 +#define CHKSUM_SHA1 FO_SHA1 + +union chksumContext { + MD5Context md5; + SHA1Context sha1; +}; + +struct CHKSUM { + int type; /* One of CHKSUM_* above */ + char name[5]; /* Big enough for NONE, MD5, SHA1, etc. */ + bool updated; /* True if updated by chksum_update() */ + chksumContext context; /* Context for the algorithm at hand */ + int length; /* Length of signature */ + unsigned char signature[30]; /* Large enough for either signature */ +}; + +int chksum_init(CHKSUM *chksum, int flags); +int chksum_update(CHKSUM *chksum, void *buf, unsigned len); +int chksum_final(CHKSUM *chksum); + +#endif diff --git a/bacula/src/filed/filed.c b/bacula/src/filed/filed.c index f274444fe6..f399706146 100644 --- a/bacula/src/filed/filed.c +++ b/bacula/src/filed/filed.c @@ -179,8 +179,8 @@ int main (int argc, char *argv[]) parse_config(configfile); - if (init_crypto() != 0) { - Emsg0(M_ERROR, 0, _("Cryptography library initialization failed.\n")); + if (init_tls() != 0) { + Emsg0(M_ERROR, 0, _("TLS library initialization failed.\n")); terminate_filed(1); } @@ -260,7 +260,7 @@ void terminate_filed(int sig) free_config_resources(); term_msg(); stop_watchdog(); - cleanup_crypto(); + cleanup_tls(); close_memory_pool(); /* release free memory in pool */ sm_dump(false); /* dump orphaned buffers */ exit(sig); @@ -328,128 +328,6 @@ static int check_resources() OK = false; } } - - if (me->pki_encrypt || me->pki_sign) { -#ifndef HAVE_CRYPTO - Jmsg(NULL, M_FATAL, 0, _("PKI encryption/signing enabled but not compiled into Bacula.\n")); - OK = false; -#endif - } - - /* pki_encrypt implies pki_sign */ - if (me->pki_encrypt) { - me->pki_sign = true; - } - - if ((me->pki_encrypt || me->pki_sign) && !me->pki_keypair_file) { - Emsg2(M_FATAL, 0, _("\"PKI Key Pair\" must be defined for File" - " daemon \"%s\" in %s if either \"PKI Sign\" or" - " \"PKI Encrypt\" are enabled.\n"), me->hdr.name, configfile); - OK = false; - } - - /* If everything is well, attempt to initialize our public/private keys */ - if (OK && (me->pki_encrypt || me->pki_sign)) { - char *filepath; - /* Load our keypair */ - me->pki_keypair = crypto_keypair_new(); - if (!me->pki_keypair) { - Emsg0(M_FATAL, 0, _("Failed to allocate a new keypair object.\n")); - OK = false; - } else { - if (!crypto_keypair_load_cert(me->pki_keypair, me->pki_keypair_file)) { - Emsg2(M_FATAL, 0, _("Failed to load public certificate for File" - " daemon \"%s\" in %s.\n"), me->hdr.name, configfile); - OK = false; - } - - if (!crypto_keypair_load_key(me->pki_keypair, me->pki_keypair_file, NULL, NULL)) { - Emsg2(M_FATAL, 0, _("Failed to load private key for File" - " daemon \"%s\" in %s.\n"), me->hdr.name, configfile); - OK = false; - } - } - - /* - * Trusted Signers. We're always trusted. - */ - me->pki_signers = New(alist(10, not_owned_by_alist)); - if (me->pki_keypair) { - me->pki_signers->append(crypto_keypair_dup(me->pki_keypair)); - } - - /* If additional signing public keys have been specified, load them up */ - if (me->pki_signing_key_files) { - foreach_alist(filepath, me->pki_signing_key_files) { - X509_KEYPAIR *keypair; - - keypair = crypto_keypair_new(); - if (!keypair) { - Emsg0(M_FATAL, 0, _("Failed to allocate a new keypair object.\n")); - OK = false; - } else { - if (crypto_keypair_load_cert(keypair, filepath)) { - me->pki_signers->append(keypair); - - /* Attempt to load a private key, if available */ - if (crypto_keypair_has_key(filepath)) { - if (!crypto_keypair_load_key(keypair, filepath, NULL, NULL)) { - Emsg3(M_FATAL, 0, _("Failed to load private key from file %s for File" - " daemon \"%s\" in %s.\n"), filepath, me->hdr.name, configfile); - OK = false; - } - } - - } else { - Emsg3(M_FATAL, 0, _("Failed to load trusted signer certificate" - " from file %s for File daemon \"%s\" in %s.\n"), filepath, me->hdr.name, configfile); - OK = false; - } - } - } - } - - /* - * Crypto recipients. We're always included as a recipient. - * The symmetric session key will be encrypted for each of these readers. - */ - me->pki_recipients = New(alist(10, not_owned_by_alist)); - if (me->pki_keypair) { - me->pki_recipients->append(crypto_keypair_dup(me->pki_keypair)); - } - - - /* If additional keys have been specified, load them up */ - if (me->pki_master_key_files) { - foreach_alist(filepath, me->pki_master_key_files) { - X509_KEYPAIR *keypair; - - keypair = crypto_keypair_new(); - if (!keypair) { - Emsg0(M_FATAL, 0, _("Failed to allocate a new keypair object.\n")); - OK = false; - } else { - if (crypto_keypair_load_cert(keypair, filepath)) { - me->pki_recipients->append(keypair); - - /* Attempt to load a private key, if available */ - if (crypto_keypair_has_key(filepath)) { - if (!crypto_keypair_load_key(keypair, filepath, NULL, NULL)) { - Emsg3(M_FATAL, 0, _("Failed to load private key from file %s for File" - " daemon \"%s\" in %s.\n"), filepath, me->hdr.name, configfile); - OK = false; - } - } - - } else { - Emsg3(M_FATAL, 0, _("Failed to load master key certificate" - " from file %s for File daemon \"%s\" in %s.\n"), filepath, me->hdr.name, configfile); - OK = false; - } - } - } - } - } } diff --git a/bacula/src/filed/filed.h b/bacula/src/filed/filed.h index 43a8e3fa92..4137317ee9 100644 --- a/bacula/src/filed/filed.h +++ b/bacula/src/filed/filed.h @@ -27,6 +27,7 @@ #define FILE_DAEMON 1 #include "filed_conf.h" +#include "chksum.h" #include "findlib/find.h" #include "jcr.h" #include "acl.h" diff --git a/bacula/src/filed/filed_conf.c b/bacula/src/filed/filed_conf.c index f01b862d24..1739ce7484 100644 --- a/bacula/src/filed/filed_conf.c +++ b/bacula/src/filed/filed_conf.c @@ -89,17 +89,12 @@ static RES_ITEM cli_items[] = { {"heartbeatinterval", store_time, ITEM(res_client.heartbeat_interval), 0, ITEM_DEFAULT, 0}, {"sdconnecttimeout", store_time,ITEM(res_client.SDConnectTimeout), 0, ITEM_DEFAULT, 60 * 30}, {"maximumnetworkbuffersize", store_pint, ITEM(res_client.max_network_buffer_size), 0, 0, 0}, - {"pkisignatures", store_bit, ITEM(res_client.pki_sign), 1, ITEM_DEFAULT, 0}, - {"pkiencryption", store_bit, ITEM(res_client.pki_encrypt), 1, ITEM_DEFAULT, 0}, - {"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}, - {"tlsenable", store_bit, ITEM(res_client.tls_enable), 1, 0, 0}, - {"tlsrequire", store_bit, ITEM(res_client.tls_require), 1, 0, 0}, - {"tlscacertificatefile", store_dir, ITEM(res_client.tls_ca_certfile), 0, 0, 0}, - {"tlscacertificatedir", store_dir, ITEM(res_client.tls_ca_certdir), 0, 0, 0}, - {"tlscertificate", store_dir, ITEM(res_client.tls_certfile), 0, 0, 0}, - {"tlskey", store_dir, ITEM(res_client.tls_keyfile), 0, 0, 0}, + {"tlsenable", store_yesno, ITEM(res_client.tls_enable), 1, 0, 0}, + {"tlsrequire", store_yesno, ITEM(res_client.tls_require), 1, 0, 0}, + {"tlscacertificatefile", store_dir, ITEM(res_client.tls_ca_certfile), 0, 0, 0}, + {"tlscacertificatedir", store_dir, ITEM(res_client.tls_ca_certdir), 0, 0, 0}, + {"tlscertificate", store_dir, ITEM(res_client.tls_certfile), 0, 0, 0}, + {"tlskey", store_dir, ITEM(res_client.tls_keyfile), 0, 0, 0}, {NULL, NULL, NULL, 0, 0, 0} }; @@ -109,10 +104,10 @@ static RES_ITEM dir_items[] = { {"description", store_str, ITEM(res_dir.hdr.desc), 0, 0, 0}, {"password", store_password, ITEM(res_dir.password), 0, ITEM_REQUIRED, 0}, {"address", store_str, ITEM(res_dir.address), 0, 0, 0}, - {"monitor", store_bit, ITEM(res_dir.monitor), 1, ITEM_DEFAULT, 0}, - {"tlsenable", store_bit, ITEM(res_dir.tls_enable), 1, 0, 0}, - {"tlsrequire", store_bit, ITEM(res_dir.tls_require), 1, 0, 0}, - {"tlsverifypeer", store_bit, ITEM(res_dir.tls_verify_peer), 1, ITEM_DEFAULT, 1}, + {"monitor", store_yesno, ITEM(res_dir.monitor), 1, ITEM_DEFAULT, 0}, + {"tlsenable", store_yesno, ITEM(res_dir.tls_enable), 1, 0, 0}, + {"tlsrequire", store_yesno, ITEM(res_dir.tls_require), 1, 0, 0}, + {"tlsverifypeer", store_yesno, ITEM(res_dir.tls_verify_peer), 1, ITEM_DEFAULT, 1}, {"tlscacertificatefile", store_dir, ITEM(res_dir.tls_ca_certfile), 0, 0, 0}, {"tlscacertificatedir", store_dir, ITEM(res_dir.tls_ca_certdir), 0, 0, 0}, {"tlscertificate", store_dir, ITEM(res_dir.tls_certfile), 0, 0, 0}, @@ -245,37 +240,6 @@ void free_resource(RES *sres, int type) if (res->res_client.FDaddrs) { free_addresses(res->res_client.FDaddrs); } - - if (res->res_client.pki_keypair_file) { - free(res->res_client.pki_keypair_file); - } - if (res->res_client.pki_keypair) { - crypto_keypair_free(res->res_client.pki_keypair); - } - - if (res->res_client.pki_signing_key_files) { - delete res->res_client.pki_signing_key_files; - } - if (res->res_client.pki_signers) { - X509_KEYPAIR *keypair; - foreach_alist(keypair, res->res_client.pki_signers) { - crypto_keypair_free(keypair); - } - delete res->res_client.pki_signers; - } - - if (res->res_client.pki_master_key_files) { - delete res->res_client.pki_master_key_files; - } - - if (res->res_client.pki_recipients) { - X509_KEYPAIR *keypair; - foreach_alist(keypair, res->res_client.pki_recipients) { - crypto_keypair_free(keypair); - } - delete res->res_client.pki_recipients; - } - if (res->res_client.tls_ctx) { free_tls_context(res->res_client.tls_ctx); } @@ -357,12 +321,6 @@ void save_resource(int type, RES_ITEM *items, int pass) if ((res = (URES *)GetResWithName(R_CLIENT, res_all.res_dir.hdr.name)) == NULL) { Emsg1(M_ABORT, 0, _("Cannot find Client resource %s\n"), res_all.res_dir.hdr.name); } - res->res_client.pki_signing_key_files = res_all.res_client.pki_signing_key_files; - res->res_client.pki_master_key_files = res_all.res_client.pki_master_key_files; - - res->res_client.pki_signers = res_all.res_client.pki_signers; - res->res_client.pki_recipients = res_all.res_client.pki_recipients; - res->res_client.messages = res_all.res_client.messages; break; default: diff --git a/bacula/src/filed/filed_conf.h b/bacula/src/filed/filed_conf.h index e8ea53b27b..8594228f94 100644 --- a/bacula/src/filed/filed_conf.h +++ b/bacula/src/filed/filed_conf.h @@ -71,11 +71,6 @@ struct CLIENT { utime_t heartbeat_interval; /* Interval to send heartbeats to Dir */ utime_t SDConnectTimeout; /* timeout in seconds */ uint32_t max_network_buffer_size; /* max network buf size */ - int pki_sign; /* Enable Data Integrity Verification via Digital Signatures */ - int pki_encrypt; /* Enable Data Encryption */ - 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 */ int tls_enable; /* Enable TLS */ int tls_require; /* Require TLS */ char *tls_ca_certfile; /* TLS CA Certificate File */ @@ -83,9 +78,6 @@ struct CLIENT { char *tls_certfile; /* TLS Client Certificate File */ char *tls_keyfile; /* TLS Client Key File */ - X509_KEYPAIR *pki_keypair; /* Shared PKI Public/Private Keypair */ - alist *pki_signers; /* Shared PKI Trusted Signers */ - alist *pki_recipients; /* Shared PKI Recipients */ TLS_CONTEXT *tls_ctx; /* Shared TLS Context */ }; diff --git a/bacula/src/filed/job.c b/bacula/src/filed/job.c index 56e43efcbf..41276c2b2b 100644 --- a/bacula/src/filed/job.c +++ b/bacula/src/filed/job.c @@ -25,6 +25,7 @@ #include "filed.h" #ifdef WIN32_VSS #include "vss.h" +static pthread_mutex_t vss_mutex = PTHREAD_MUTEX_INITIALIZER; #endif extern char my_name[]; @@ -173,11 +174,6 @@ void *handle_client_request(void *dirp) jcr->last_fname[0] = 0; jcr->client_name = get_memory(strlen(my_name) + 1); pm_strcpy(jcr->client_name, my_name); - jcr->pki_sign = me->pki_sign; - jcr->pki_encrypt = me->pki_encrypt; - jcr->pki_keypair = me->pki_keypair; - jcr->pki_signers = me->pki_signers; - jcr->pki_recipients = me->pki_recipients; dir->jcr = jcr; enable_backup_privileges(NULL, 1 /* ignore_errors */); @@ -328,16 +324,9 @@ static int cancel_cmd(JCR *jcr) bnet_fsend(dir, _("2901 Job %s not found.\n"), Job); } else { if (cjcr->store_bsock) { - P(cjcr->mutex); cjcr->store_bsock->timed_out = 1; cjcr->store_bsock->terminated = 1; -/* - * #if !defined(HAVE_CYGWIN) && !defined(HAVE_WIN32) - */ -#if !defined(HAVE_CYGWIN) pthread_kill(cjcr->my_thread_id, TIMEOUT_SIGNAL); -#endif - V(cjcr->mutex); } set_jcr_job_status(cjcr, JS_Canceled); free_jcr(cjcr); @@ -870,32 +859,7 @@ static void set_options(findFOPTS *fo, const char *opts) fo->flags |= FO_READFIFO; break; case 'S': - switch(*(p + 1)) { - case ' ': - /* Old director did not specify SHA variant */ - fo->flags |= FO_SHA1; - break; - case '1': - fo->flags |= FO_SHA1; - p++; - break; -#ifdef HAVE_SHA2 - case '2': - fo->flags |= FO_SHA256; - p++; - break; - case '3': - fo->flags |= FO_SHA512; - p++; - break; -#endif - default: - /* Automatically downgrade to SHA-1 if an unsupported - * SHA variant is specified */ - fo->flags |= FO_SHA1; - p++; - break; - } + fo->flags |= FO_SHA1; break; case 's': fo->flags |= FO_SPARSE; @@ -1242,6 +1206,8 @@ static int backup_cmd(JCR *jcr) #ifdef WIN32_VSS /* START VSS ON WIN 32 */ if (g_pVSSClient && enable_vss) { + /* Run only one at a time */ + P(vss_mutex); if (g_pVSSClient->InitializeForBackup()) { /* tell vss which drives to snapshot */ char szWinDriveLetters[27]; @@ -1334,8 +1300,10 @@ cleanup: #ifdef WIN32_VSS /* STOP VSS ON WIN 32 */ /* tell vss to close the backup session */ - if (g_pVSSClient && enable_vss == 1) + if (g_pVSSClient && enable_vss) { g_pVSSClient->CloseBackup(); + V(vss_mutex); + } #endif bnet_fsend(dir, EndJob, jcr->JobStatus, jcr->JobFiles, @@ -1538,7 +1506,7 @@ static int open_sd_read_session(JCR *jcr) /* * Open Read Session with Storage daemon */ - bnet_fsend(sd, read_open, "DummyVolume", + bnet_fsend(sd, read_open, jcr->VolumeName, jcr->VolSessionId, jcr->VolSessionTime, jcr->StartFile, jcr->EndFile, jcr->StartBlock, jcr->EndBlock); Dmsg1(110, ">stored: %s", sd->msg); diff --git a/bacula/src/filed/protos.h b/bacula/src/filed/protos.h index 92d0a3c83c..952f56ff11 100644 --- a/bacula/src/filed/protos.h +++ b/bacula/src/filed/protos.h @@ -23,16 +23,13 @@ */ extern bool blast_data_to_storage_daemon(JCR *jcr, char *addr); +extern void do_verify(JCR *jcr); extern void do_verify_volume(JCR *jcr); extern void do_restore(JCR *jcr); extern int authenticate_director(JCR *jcr); extern int authenticate_storagedaemon(JCR *jcr); extern int make_estimate(JCR *jcr); -/* From verify.c */ -int digest_file(JCR *jcr, FF_PKT *ff_pkt, DIGEST *digest); -void do_verify(JCR *jcr); - /* From heartbeat.c */ void start_heartbeat_monitor(JCR *jcr); void stop_heartbeat_monitor(JCR *jcr); diff --git a/bacula/src/filed/restore.c b/bacula/src/filed/restore.c index 4aed75c9b6..3b41655ff9 100644 --- a/bacula/src/filed/restore.c +++ b/bacula/src/filed/restore.c @@ -35,11 +35,8 @@ static char rec_header[] = "rechdr %ld %ld %ld %ld %ld"; #ifdef HAVE_LIBZ static const char *zlib_strerror(int stat); #endif - -int verify_signature(JCR *jcr, SIGNATURE *sig); int32_t extract_data(JCR *jcr, BFILE *bfd, POOLMEM *buf, int32_t buflen, - uint64_t *addr, int flags, CIPHER_CONTEXT *cipher, size_t cipher_block_size); -bool flush_cipher(JCR *jcr, BFILE *bfd, int flags, CIPHER_CONTEXT *cipher, size_t cipher_block_size); + uint64_t *addr, int flags); #define RETRY 10 /* retry wait time */ @@ -83,11 +80,7 @@ void do_restore(JCR *jcr) BFILE altbfd; /* Alternative data stream */ uint64_t alt_addr = 0; /* Write address for alternative stream */ intmax_t alt_size = 0; /* Size of alternate stream */ - SIGNATURE *sig = NULL; /* Cryptographic signature (if any) for file */ - CRYPTO_SESSION *cs = NULL; /* Cryptographic session data (if any) for file */ - CIPHER_CONTEXT *cipher_ctx = NULL; /* Cryptographic cipher context (if any) for file */ - size_t cipher_block_size = 0; /* Cryptographic algorithm block size for file */ - int flags = 0; /* Options for extract_data() */ + int flags; /* Options for extract_data() */ int stat; ATTR *attr; @@ -133,23 +126,17 @@ void do_restore(JCR *jcr) jcr->compress_buf_size = compress_buf_size; #endif -#ifdef HAVE_CRYPTO - jcr->crypto_buf = get_memory(CRYPTO_CIPHER_MAX_BLOCK_SIZE); -#endif - /* * Get a record from the Storage daemon. We are guaranteed to * receive records in the following order: * 1. Stream record header * 2. Stream data * a. Attributes (Unix or Win32) - * b. Possibly stream encryption session data (e.g., symmetric session key) - * or c. File data for the file - * or d. Alternate data stream (e.g. Resource Fork) - * or e. Finder info - * or f. ACLs - * or g. Possibly a cryptographic signature - * or h. Possibly MD5 or SHA1 record + * or b. File data for the file + * or c. Alternate data stream (e.g. Resource Fork) + * or d. Finder info + * or e. ACLs + * or f. Possibly MD5 or SHA1 record * 3. Repeat step 1 * * NOTE: We keep track of two bacula file descriptors: @@ -207,39 +194,14 @@ void do_restore(JCR *jcr) Dmsg1(30, "Stream=Unix Attributes. extract=%d\n", extract); /* * If extracting, it was from previous stream, so - * close the output file and validate the signature. + * close the output file. */ if (extract) { if (size > 0 && !is_bopen(&bfd)) { Jmsg0(jcr, M_ERROR, 0, _("Logic error: output file should be open\n")); } - /* Flush and deallocate previous stream's cipher context */ - if (cipher_ctx && prev_stream != STREAM_ENCRYPTED_SESSION_DATA) { - flush_cipher(jcr, &bfd, flags, cipher_ctx, cipher_block_size); - crypto_cipher_free(cipher_ctx); - cipher_ctx = NULL; - } set_attributes(jcr, attr, &bfd); extract = false; - - /* Verify the cryptographic signature, if any */ - if (jcr->pki_sign) { - if (sig) { - // Failure is reported in verify_signature() ... - verify_signature(jcr, sig); - } else { - Jmsg1(jcr, M_ERROR, 0, _("Missing cryptographic signature for %s\n"), jcr->last_fname); - } - } - /* Free Signature */ - if (sig) { - crypto_sign_free(sig); - sig = NULL; - } - if (cs) { - crypto_session_free(cs); - cs = NULL; - } Dmsg0(30, "Stop extracting.\n"); } else if (is_bopen(&bfd)) { Jmsg0(jcr, M_ERROR, 0, _("Logic error: output file should not be open\n")); @@ -289,9 +251,9 @@ void do_restore(JCR *jcr) extract = true; /* FALLTHROUGH */ case CF_CREATED: /* File created, but there is no content */ - P(jcr->mutex); + jcr->lock(); pm_strcpy(jcr->last_fname, attr->ofname); - V(jcr->mutex); + jcr->unlock(); jcr->JobFiles++; fileAddr = 0; print_ls_output(jcr, attr); @@ -311,85 +273,24 @@ void do_restore(JCR *jcr) break; /* Data stream */ - case STREAM_ENCRYPTED_SESSION_DATA: - crypto_error_t cryptoerr; - - Dmsg1(30, "Stream=Encrypted Session Data, size: %d\n", sd->msglen); - - /* Decode and save session keys. */ - cryptoerr = crypto_session_decode(sd->msg, (size_t) sd->msglen, jcr->pki_recipients, &cs); - switch(cryptoerr) { - case CRYPTO_ERROR_NONE: - /* Success */ - break; - case CRYPTO_ERROR_NORECIPIENT: - Jmsg(jcr, M_ERROR, 0, _("Missing private key required to decrypt encrypted backup data.")); - break; - case CRYPTO_ERROR_DECRYPTION: - Jmsg(jcr, M_ERROR, 0, _("Decrypt of the session key failed.")); - break; - default: - /* Shouldn't happen */ - Jmsg1(jcr, M_ERROR, 0, _("An error occured while decoding encrypted session data stream: %s"), crypto_strerror(cryptoerr)); - break; - } - - if (cryptoerr != CRYPTO_ERROR_NONE) { - extract = false; - bclose(&bfd); - continue; - } - - /* Set up a decryption context */ - if ((cipher_ctx = crypto_cipher_new(cs, false, &cipher_block_size)) == NULL) { - Jmsg1(jcr, M_ERROR, 0, _("Failed to initialize decryption context for %s\n"), jcr->last_fname); - crypto_session_free(cs); - cs = NULL; - extract = false; - bclose(&bfd); - continue; - } - break; - case STREAM_FILE_DATA: case STREAM_SPARSE_DATA: case STREAM_WIN32_DATA: case STREAM_GZIP_DATA: case STREAM_SPARSE_GZIP_DATA: case STREAM_WIN32_GZIP_DATA: - case STREAM_ENCRYPTED_FILE_DATA: - case STREAM_ENCRYPTED_WIN32_DATA: - case STREAM_ENCRYPTED_FILE_GZIP_DATA: - case STREAM_ENCRYPTED_WIN32_GZIP_DATA: /* Force an expected, consistent stream type here */ if (extract && (prev_stream == stream || prev_stream == STREAM_UNIX_ATTRIBUTES - || prev_stream == STREAM_UNIX_ATTRIBUTES_EX - || prev_stream == STREAM_ENCRYPTED_SESSION_DATA)) { + || prev_stream == STREAM_UNIX_ATTRIBUTES_EX)) { flags = 0; - if (stream == STREAM_SPARSE_DATA || stream == STREAM_SPARSE_GZIP_DATA) { flags |= FO_SPARSE; } - if (stream == STREAM_GZIP_DATA || stream == STREAM_SPARSE_GZIP_DATA - || stream == STREAM_WIN32_GZIP_DATA || stream == STREAM_ENCRYPTED_FILE_GZIP_DATA - || stream == STREAM_ENCRYPTED_WIN32_GZIP_DATA) { + || stream == STREAM_WIN32_GZIP_DATA) { flags |= FO_GZIP; } - - if (stream == STREAM_ENCRYPTED_FILE_DATA - || stream == STREAM_ENCRYPTED_FILE_GZIP_DATA - || stream == STREAM_ENCRYPTED_WIN32_DATA - || stream == STREAM_ENCRYPTED_WIN32_GZIP_DATA) { - flags |= FO_ENCRYPT; - } - - if (is_win32_stream(stream) && !have_win32_api()) { - set_portable_backup(&bfd); - flags |= FO_WIN32DECOMP; /* "decompose" BackupWrite data */ - } - - if (extract_data(jcr, &bfd, sd->msg, sd->msglen, &fileAddr, flags, cipher_ctx, cipher_block_size) < 0) { + if (extract_data(jcr, &bfd, sd->msg, sd->msglen, &fileAddr, flags) < 0) { extract = false; bclose(&bfd); continue; @@ -399,8 +300,6 @@ void do_restore(JCR *jcr) /* Resource fork stream - only recorded after a file to be restored */ /* Silently ignore if we cannot write - we already reported that */ - case STREAM_ENCRYPTED_MACOS_FORK_DATA: - flags |= FO_ENCRYPT; case STREAM_MACOS_FORK_DATA: #ifdef HAVE_DARWIN_OS if (extract) { @@ -414,7 +313,7 @@ void do_restore(JCR *jcr) Dmsg0(30, "Restoring resource fork\n"); } flags = 0; - if (extract_data(jcr, &altbfd, sd->msg, sd->msglen, &alt_addr, flags, cipher_ctx, cipher_block_size) < 0) { + if (extract_data(jcr, &altbfd, sd->msg, sd->msglen, &alt_addr, flags) < 0) { extract = false; bclose(&altbfd); continue; @@ -445,7 +344,7 @@ void do_restore(JCR *jcr) pm_strcpy(jcr->acl_text, sd->msg); Dmsg2(400, "Restoring ACL type 0x%2x <%s>\n", BACL_TYPE_ACCESS, jcr->acl_text); if (bacl_set(jcr, BACL_TYPE_ACCESS) != 0) { - Qmsg1(jcr, M_WARNING, 0, _("Can't restore ACL of %s\n"), jcr->last_fname); + Jmsg1(jcr, M_WARNING, 0, _("Can't restore ACL of %s\n"), jcr->last_fname); } #else non_support_acl++; @@ -457,24 +356,15 @@ void do_restore(JCR *jcr) pm_strcpy(jcr->acl_text, sd->msg); Dmsg2(400, "Restoring ACL type 0x%2x <%s>\n", BACL_TYPE_DEFAULT, jcr->acl_text); if (bacl_set(jcr, BACL_TYPE_DEFAULT) != 0) { - Qmsg1(jcr, M_WARNING, 0, _("Can't restore default ACL of %s\n"), jcr->last_fname); + Jmsg1(jcr, M_WARNING, 0, _("Can't restore default ACL of %s\n"), jcr->last_fname); } #else non_support_acl++; #endif break; - case STREAM_SIGNED_DIGEST: - /* Save signature. */ - if ((sig = crypto_sign_decode(sd->msg, (size_t) sd->msglen)) == NULL) { - Jmsg1(jcr, M_ERROR, 0, _("Failed to decode message signature for %s\n"), jcr->last_fname); - } - break; - - case STREAM_MD5_DIGEST: - case STREAM_SHA1_DIGEST: - case STREAM_SHA256_DIGEST: - case STREAM_SHA512_DIGEST: + case STREAM_MD5_SIGNATURE: + case STREAM_SHA1_SIGNATURE: break; case STREAM_PROGRAM_NAMES: @@ -492,24 +382,7 @@ void do_restore(JCR *jcr) if (size > 0 && !is_bopen(&bfd)) { Jmsg0(jcr, M_ERROR, 0, _("Logic error: output file should be open\n")); } - /* Flush and deallocate cipher context */ - if (cipher_ctx) { - flush_cipher(jcr, &bfd, flags, cipher_ctx, cipher_block_size); - crypto_cipher_free(cipher_ctx); - cipher_ctx = NULL; - } set_attributes(jcr, attr, &bfd); - - /* Verify the cryptographic signature if any */ - if (jcr->pki_sign) { - if (sig) { - // Failure is reported in verify_signature() ... - verify_signature(jcr, sig); - } else { - Jmsg1(jcr, M_ERROR, 0, _("Missing cryptographic signature for %s\n"), jcr->last_fname); - } - } - extract = false; } else if (is_bopen(&bfd)) { Jmsg0(jcr, M_ERROR, 0, _("Logic error: output file should not be open\n")); @@ -529,58 +402,22 @@ void do_restore(JCR *jcr) bclose_chksize(jcr, &altbfd, alt_size); } if (extract) { - /* Flush and deallocate cipher context */ - if (cipher_ctx) { - flush_cipher(jcr, &bfd, flags, cipher_ctx, cipher_block_size); - crypto_cipher_free(cipher_ctx); - cipher_ctx = NULL; - } set_attributes(jcr, attr, &bfd); - - /* Verify the cryptographic signature on the last file, if any */ - if (jcr->pki_sign) { - if (sig) { - // Failure is reported in verify_signature() ... - verify_signature(jcr, sig); - } else { - Jmsg1(jcr, M_ERROR, 0, _("Missing cryptographic signature for %s\n"), jcr->last_fname); - } - } } - if (is_bopen(&bfd)) { bclose(&bfd); } - set_jcr_job_status(jcr, JS_Terminated); goto ok_out; bail_out: set_jcr_job_status(jcr, JS_ErrorTerminated); ok_out: - - /* Free Signature & Crypto Data */ - if (sig) { - crypto_sign_free(sig); - sig = NULL; - } - if (cs) { - crypto_session_free(cs); - cs = NULL; - } - if (cipher_ctx) { - crypto_cipher_free(cipher_ctx); - cipher_ctx = NULL; - } if (jcr->compress_buf) { free(jcr->compress_buf); jcr->compress_buf = NULL; jcr->compress_buf_size = 0; } - if (jcr->crypto_buf) { - free_pool_memory(jcr->crypto_buf); - jcr->crypto_buf = NULL; - } bclose(&altbfd); bclose(&bfd); free_attr(attr); @@ -631,70 +468,6 @@ static const char *zlib_strerror(int stat) } #endif -static int do_file_digest(FF_PKT *ff_pkt, void *pkt, bool top_level) { - JCR *jcr = (JCR *) pkt; - return (digest_file(jcr, ff_pkt, jcr->digest)); -} - -/* - * Verify the signature for the last restored file - * Return value is either true (signature correct) - * or false (signature could not be verified). - * TODO landonf: Better signature failure handling. - */ -int verify_signature(JCR *jcr, SIGNATURE *sig) -{ - X509_KEYPAIR *keypair; - DIGEST *digest = NULL; - crypto_error_t err; - - /* Iterate through the trusted signers */ - foreach_alist(keypair, jcr->pki_signers) { - err = crypto_sign_get_digest(sig, jcr->pki_keypair, &digest); - - switch (err) { - case CRYPTO_ERROR_NONE: - /* Signature found, digest allocated */ - jcr->digest = digest; - - /* Checksum the entire file */ - if (find_one_file(jcr, jcr->ff, do_file_digest, jcr, jcr->last_fname, (dev_t)-1, 1) != 0) { - Qmsg(jcr, M_ERROR, 0, _("Signature validation failed for %s: \n"), jcr->last_fname); - return false; - } - - /* Verify the signature */ - if ((err = crypto_sign_verify(sig, keypair, digest)) != CRYPTO_ERROR_NONE) { - Dmsg1(100, "Bad signature on %s\n", jcr->last_fname); - Qmsg2(jcr, M_ERROR, 0, _("Signature validation failed for %s: %s\n"), jcr->last_fname, crypto_strerror(err)); - crypto_digest_free(digest); - return false; - } - - /* Valid signature */ - Dmsg1(100, "Signature good on %s\n", jcr->last_fname); - crypto_digest_free(digest); - return true; - - case CRYPTO_ERROR_NOSIGNER: - /* Signature not found, try again */ - continue; - default: - /* Something strange happened (that shouldn't happen!)... */ - Qmsg2(jcr, M_ERROR, 0, _("Signature validation failed for %s: %s\n"), jcr->last_fname, crypto_strerror(err)); - if (digest) { - crypto_digest_free(digest); - } - return false; - } - } - - /* No signer */ - Dmsg1(100, "Could not find a valid public key for signature on %s\n", jcr->last_fname); - crypto_digest_free(digest); - return false; -} - /* * In the context of jcr, write data to bfd. * We write buflen bytes in buf at addr. addr is updated in place. @@ -702,16 +475,13 @@ int verify_signature(JCR *jcr, SIGNATURE *sig) * Return value is the number of bytes written, or -1 on errors. */ int32_t extract_data(JCR *jcr, BFILE *bfd, POOLMEM *buf, int32_t buflen, - uint64_t *addr, int flags, CIPHER_CONTEXT *cipher, size_t cipher_block_size) + uint64_t *addr, int flags) { int stat; char *wbuf; /* write buffer */ uint32_t wsize; /* write size */ uint32_t rsize; /* read size */ char ec1[50]; /* Buffer printing huge values */ - const void *cipher_input; /* Decryption input */ - size_t cipher_input_len; /* Decryption input length */ - size_t decrypted_len = 0; /* Decryption output length */ if (flags & FO_SPARSE) { ser_declare; @@ -736,8 +506,6 @@ int32_t extract_data(JCR *jcr, BFILE *bfd, POOLMEM *buf, int32_t buflen, rsize = buflen; } wsize = rsize; - cipher_input = wbuf; - cipher_input_len = wsize; if (flags & FO_GZIP) { #ifdef HAVE_LIBZ @@ -751,111 +519,31 @@ int32_t extract_data(JCR *jcr, BFILE *bfd, POOLMEM *buf, int32_t buflen, Dmsg2(100, "Comp_len=%d msglen=%d\n", compress_len, wsize); if ((stat=uncompress((Byte *)jcr->compress_buf, &compress_len, (const Byte *)wbuf, (uLong)rsize)) != Z_OK) { - Qmsg(jcr, M_ERROR, 0, _("Uncompression error on file %s. ERR=%s\n"), + Jmsg(jcr, M_ERROR, 0, _("Uncompression error on file %s. ERR=%s\n"), jcr->last_fname, zlib_strerror(stat)); return -1; } wbuf = jcr->compress_buf; wsize = compress_len; - cipher_input = jcr->compress_buf; /* decrypt decompressed data */ - cipher_input_len = compress_len; Dmsg2(100, "Write uncompressed %d bytes, total before write=%s\n", compress_len, edit_uint64(jcr->JobBytes, ec1)); #else - Qmsg(jcr, M_ERROR, 0, _("GZIP data stream found, but GZIP not configured!\n")); + Jmsg(jcr, M_ERROR, 0, _("GZIP data stream found, but GZIP not configured!\n")); return -1; #endif } else { Dmsg2(30, "Write %u bytes, total before write=%s\n", wsize, edit_uint64(jcr->JobBytes, ec1)); } - if (flags & FO_ENCRYPT) { - ASSERT(cipher); - - /* - * Grow the crypto buffer, if necessary. - * crypto_cipher_update() will process only whole blocks, - * buffering the remaining input. - */ - jcr->crypto_buf = check_pool_memory_size(jcr->crypto_buf, cipher_input_len + cipher_block_size); - - - /* Encrypt the input block */ - if (!crypto_cipher_update(cipher, cipher_input, cipher_input_len, jcr->crypto_buf, &decrypted_len)) { - /* Decryption failed. Shouldn't happen. */ - Jmsg(jcr, M_FATAL, 0, _("Decryption error\n")); - return -1; - } - - if (decrypted_len == 0) { - /* No full block of data available, write more data */ - goto ok; - } - - Dmsg2(400, "decrypted len=%d undecrypted len=%d\n", - decrypted_len, cipher_input_len); - wsize = decrypted_len; - wbuf = jcr->crypto_buf; /* Decrypted, possibly decompressed output here. */ - } - - - if (flags & FO_WIN32DECOMP) { - if (!processWin32BackupAPIBlock(bfd, wbuf, wsize)) { - berrno be; - Jmsg2(jcr, M_ERROR, 0, _("Write error in Win32 Block Decomposition on %s: %s\n"), - jcr->last_fname, be.strerror(bfd->berrno)); - return -1; - } - } else if (bwrite(bfd, wbuf, wsize) != (ssize_t)wsize) { + if (bwrite(bfd, wbuf, wsize) != (ssize_t)wsize) { berrno be; Jmsg2(jcr, M_ERROR, 0, _("Write error on %s: %s\n"), jcr->last_fname, be.strerror(bfd->berrno)); return -1; } - if (decrypted_len && decrypted_len > wsize) { - /* If more than wsize is output, it was previously buffered - * and reported, and should not be reported again */ - wsize = wsize - decrypted_len; - } - -ok: jcr->JobBytes += wsize; jcr->ReadBytes += rsize; *addr += wsize; return wsize; } - -/* - * In the context of jcr, flush any remaining data from the cipher context, - * writing it to bfd. - * Return value is true on success, false on failure. - */ -bool flush_cipher(JCR *jcr, BFILE *bfd, int flags, CIPHER_CONTEXT *cipher, size_t cipher_block_size) -{ - size_t decrypted_len; - - /* Write out the remaining block and free the cipher context */ - jcr->crypto_buf = check_pool_memory_size(jcr->crypto_buf, cipher_block_size); - - if (!crypto_cipher_finalize(cipher, jcr->crypto_buf, &decrypted_len)) { - /* Writing out the final, buffered block failed. Shouldn't happen. */ - Jmsg1(jcr, M_FATAL, 0, _("Decryption error for %s\n"), jcr->last_fname); - } - - if (flags & FO_WIN32DECOMP) { - if (!processWin32BackupAPIBlock(bfd, jcr->crypto_buf, decrypted_len)) { - berrno be; - Jmsg2(jcr, M_ERROR, 0, _("Write error in Win32 Block Decomposition on %s: %s\n"), - jcr->last_fname, be.strerror(bfd->berrno)); - return false; - } - } else if (bwrite(bfd, jcr->crypto_buf, decrypted_len) != (ssize_t)decrypted_len) { - berrno be; - Jmsg2(jcr, M_ERROR, 0, _("Write error on %s: %s\n"), - jcr->last_fname, be.strerror(bfd->berrno)); - return false; - } - - return true; -} diff --git a/bacula/src/filed/status.c b/bacula/src/filed/status.c index ede4e6d987..4962da52e5 100755 --- a/bacula/src/filed/status.c +++ b/bacula/src/filed/status.c @@ -172,9 +172,9 @@ static void do_status(void sendit(const char *msg, int len, void *sarg), void *a edit_uint64_with_commas(njcr->num_files_examined, b1)); sendit(msg, len, arg); if (njcr->JobFiles > 0) { - P(njcr->mutex); + njcr->lock(); len = Mmsg(msg, _(" Processing file: %s\n"), njcr->last_fname); - V(njcr->mutex); + njcr->unlock(); sendit(msg, len, arg); } diff --git a/bacula/src/filed/verify.c b/bacula/src/filed/verify.c index 8312b7006f..313825d864 100644 --- a/bacula/src/filed/verify.c +++ b/bacula/src/filed/verify.c @@ -1,5 +1,5 @@ /* - * Bacula File Daemon verify.c Verify files. + * Bacula File Daemon verify.c Verify files. * * Kern Sibbald, October MM * @@ -30,7 +30,7 @@ #include "filed.h" static int verify_file(FF_PKT *ff_pkt, void *my_pkt, bool); -static int read_digest(BFILE *bfd, DIGEST *digest, JCR *jcr); +static int read_chksum(BFILE *bfd, CHKSUM *chksum, JCR *jcr); /* * Find all the requested files and send attributes @@ -43,7 +43,7 @@ void do_verify(JCR *jcr) jcr->buf_size = DEFAULT_NETWORK_BUFFER_SIZE; if ((jcr->big_buf = (char *) malloc(jcr->buf_size)) == NULL) { Jmsg1(jcr, M_ABORT, 0, _("Cannot malloc %d network read buffer\n"), - DEFAULT_NETWORK_BUFFER_SIZE); + DEFAULT_NETWORK_BUFFER_SIZE); } set_find_options((FF_PKT *)jcr->ff, jcr->incremental, jcr->mtime); Dmsg0(10, "Start find files\n"); @@ -67,9 +67,9 @@ static int verify_file(FF_PKT *ff_pkt, void *pkt, bool top_level) { char attribs[MAXSTRING]; char attribsEx[MAXSTRING]; - int digest_stream = STREAM_NONE; int stat; - DIGEST *digest = NULL; + BFILE bfd; + struct CHKSUM chksum; BSOCK *dir; JCR *jcr = (JCR *)pkt; @@ -78,10 +78,10 @@ static int verify_file(FF_PKT *ff_pkt, void *pkt, bool top_level) } dir = jcr->dir_bsock; - jcr->num_files_examined++; /* bump total file count */ + jcr->num_files_examined++; /* bump total file count */ switch (ff_pkt->type) { - case FT_LNKSAVED: /* Hard linked, file already saved */ + case FT_LNKSAVED: /* Hard linked, file already saved */ Dmsg2(30, "FT_LNKSAVED saving: %s => %s\n", ff_pkt->fname, ff_pkt->link); break; case FT_REGE: @@ -94,7 +94,7 @@ static int verify_file(FF_PKT *ff_pkt, void *pkt, bool top_level) Dmsg2(30, "FT_LNK saving: %s -> %s\n", ff_pkt->fname, ff_pkt->link); break; case FT_DIRBEGIN: - return 1; /* ignored */ + return 1; /* ignored */ case FT_DIREND: Dmsg1(30, "FT_DIR saving: %s\n", ff_pkt->fname); break; @@ -158,19 +158,19 @@ static int verify_file(FF_PKT *ff_pkt, void *pkt, bool top_level) encode_stat(attribs, ff_pkt, 0); encode_attribsEx(jcr, attribsEx, ff_pkt); - P(jcr->mutex); - jcr->JobFiles++; /* increment number of files sent */ + jcr->lock(); + jcr->JobFiles++; /* increment number of files sent */ pm_strcpy(jcr->last_fname, ff_pkt->fname); - V(jcr->mutex); + jcr->unlock(); /* * Send file attributes to Director - * File_index - * Stream - * Verify Options - * Filename (full path) - * Encoded attributes - * Link name (if type==FT_LNK) + * File_index + * Stream + * Verify Options + * Filename (full path) + * Encoded attributes + * Link name (if type==FT_LNK) * For a directory, link is the same as fname, but with trailing * slash. For a linked file, link is the link. */ @@ -178,17 +178,17 @@ static int verify_file(FF_PKT *ff_pkt, void *pkt, bool top_level) Dmsg2(400, "send ATTR inx=%d fname=%s\n", jcr->JobFiles, ff_pkt->fname); if (ff_pkt->type == FT_LNK || ff_pkt->type == FT_LNKSAVED) { stat = bnet_fsend(dir, "%d %d %s %s%c%s%c%s%c", jcr->JobFiles, - STREAM_UNIX_ATTRIBUTES, ff_pkt->VerifyOpts, ff_pkt->fname, - 0, attribs, 0, ff_pkt->link, 0); + STREAM_UNIX_ATTRIBUTES, ff_pkt->VerifyOpts, ff_pkt->fname, + 0, attribs, 0, ff_pkt->link, 0); } else if (ff_pkt->type == FT_DIREND) { - /* Here link is the canonical filename (i.e. with trailing slash) */ + /* Here link is the canonical filename (i.e. with trailing slash) */ stat = bnet_fsend(dir,"%d %d %s %s%c%s%c%c", jcr->JobFiles, - STREAM_UNIX_ATTRIBUTES, ff_pkt->VerifyOpts, ff_pkt->link, - 0, attribs, 0, 0); + STREAM_UNIX_ATTRIBUTES, ff_pkt->VerifyOpts, ff_pkt->link, + 0, attribs, 0, 0); } else { stat = bnet_fsend(dir,"%d %d %s %s%c%s%c%c", jcr->JobFiles, - STREAM_UNIX_ATTRIBUTES, ff_pkt->VerifyOpts, ff_pkt->fname, - 0, attribs, 0, 0); + STREAM_UNIX_ATTRIBUTES, ff_pkt->VerifyOpts, ff_pkt->fname, + 0, attribs, 0, 0); } Dmsg2(20, "bfiled>bdird: attribs len=%d: msg=%s\n", dir->msglen, dir->msg); if (!stat) { @@ -201,64 +201,64 @@ static int verify_file(FF_PKT *ff_pkt, void *pkt, bool top_level) * First we initialise, then we read files, other streams and Finder Info. */ if (ff_pkt->type != FT_LNKSAVED && (S_ISREG(ff_pkt->statp.st_mode) && - ff_pkt->flags & (FO_MD5|FO_SHA1|FO_SHA256|FO_SHA512))) { - /* - * Create our digest context. If this fails, the digest will be set to NULL - * and not used. - */ - if (ff_pkt->flags & FO_MD5) { - digest = crypto_digest_new(CRYPTO_DIGEST_MD5); - digest_stream = STREAM_MD5_DIGEST; - - } else if (ff_pkt->flags & FO_SHA1) { - digest = crypto_digest_new(CRYPTO_DIGEST_SHA1); - digest_stream = STREAM_SHA1_DIGEST; - - } else if (ff_pkt->flags & FO_SHA256) { - digest = crypto_digest_new(CRYPTO_DIGEST_SHA256); - digest_stream = STREAM_SHA256_DIGEST; - - } else if (ff_pkt->flags & FO_SHA512) { - digest = crypto_digest_new(CRYPTO_DIGEST_SHA512); - digest_stream = STREAM_SHA512_DIGEST; + ff_pkt->flags & (FO_MD5|FO_SHA1))) { + chksum_init(&chksum, ff_pkt->flags); + binit(&bfd); + + if (ff_pkt->statp.st_size > 0 || ff_pkt->type == FT_RAW + || ff_pkt->type == FT_FIFO) { + if ((bopen(&bfd, ff_pkt->fname, O_RDONLY | O_BINARY, 0)) < 0) { + ff_pkt->ff_errno = errno; + berrno be; + be.set_errno(bfd.berrno); + Jmsg(jcr, M_NOTSAVED, 1, _(" Cannot open %s: ERR=%s.\n"), + ff_pkt->fname, be.strerror()); + jcr->Errors++; + return 1; + } + read_chksum(&bfd, &chksum, jcr); + bclose(&bfd); } - /* Did digest initialization fail? */ - if (digest_stream != STREAM_NONE && digest == NULL) { - Jmsg(jcr, M_WARNING, 0, _("%s digest initialization failed\n"), - stream_to_ascii(digest_stream)); +#ifdef HAVE_DARWIN_OS + /* Open resource fork if necessary */ + if (ff_pkt->flags & FO_HFSPLUS && ff_pkt->hfsinfo.rsrclength > 0) { + if (bopen_rsrc(&bfd, ff_pkt->fname, O_RDONLY | O_BINARY, 0) < 0) { + ff_pkt->ff_errno = errno; + berrno be; + Jmsg(jcr, M_NOTSAVED, -1, _(" Cannot open resource fork for %s: ERR=%s.\n"), + ff_pkt->fname, be.strerror()); + jcr->Errors++; + if (is_bopen(&ff_pkt->bfd)) { + bclose(&ff_pkt->bfd); + } + return 1; + } + read_chksum(&bfd, &chksum, jcr); + bclose(&bfd); + } + if (ff_pkt->flags & FO_HFSPLUS) { + chksum_update(&chksum, ((unsigned char *)ff_pkt->hfsinfo.fndrinfo), 32); } +#endif /* compute MD5 or SHA1 hash */ - if (digest) { - char md[CRYPTO_DIGEST_MAX_SIZE]; - size_t size; - - size = sizeof(md); - - if (digest_file(jcr, ff_pkt, digest) != 0) { - jcr->Errors++; - return 1; - } - - if (crypto_digest_finalize(digest, &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, (char *) md, size); - Dmsg3(400, "send inx=%d %s=%s\n", jcr->JobFiles, digest_name, digest_buf); - bnet_fsend(dir, "%d %d %s *%s-%d*", jcr->JobFiles, digest_stream, digest_buf, - digest_name, jcr->JobFiles); - Dmsg3(20, "bfiled>bdird: %s len=%d: msg=%s\n", digest_name, - dir->msglen, dir->msg); - - free(digest_buf); - } - - crypto_digest_free(digest); + if (chksum.updated) { + char chksumbuf[40]; /* 24 should do */ + int stream = 0; + + chksum_final(&chksum); + if (chksum.type == CHKSUM_MD5) { + stream = STREAM_MD5_SIGNATURE; + } else if (chksum.type == CHKSUM_SHA1) { + stream = STREAM_SHA1_SIGNATURE; + } + bin_to_base64(chksumbuf, (char *)chksum.signature, chksum.length); + Dmsg3(400, "send inx=%d %s=%s\n", jcr->JobFiles, chksum.name, chksumbuf); + bnet_fsend(dir, "%d %d %s *%s-%d*", jcr->JobFiles, stream, chksumbuf, + chksum.name, jcr->JobFiles); + Dmsg3(20, "bfiled>bdird: %s len=%d: msg=%s\n", chksum.name, + dir->msglen, dir->msg); } } @@ -266,65 +266,15 @@ static int verify_file(FF_PKT *ff_pkt, void *pkt, bool top_level) } /* - * Compute message digest for the file specified by ff_pkt. - * In case of errors we need the job control record and file name. - */ -int digest_file(JCR *jcr, FF_PKT *ff_pkt, DIGEST *digest) -{ - BFILE bfd; - - binit(&bfd); - - if (ff_pkt->statp.st_size > 0 || ff_pkt->type == FT_RAW - || ff_pkt->type == FT_FIFO) { - if ((bopen(&bfd, ff_pkt->fname, O_RDONLY | O_BINARY, 0)) < 0) { - ff_pkt->ff_errno = errno; - berrno be; - be.set_errno(bfd.berrno); - Jmsg(jcr, M_NOTSAVED, 1, _(" Cannot open %s: ERR=%s.\n"), - ff_pkt->fname, be.strerror()); - return 1; - } - read_digest(&bfd, digest, jcr); - bclose(&bfd); - } - -#ifdef HAVE_DARWIN_OS - /* Open resource fork if necessary */ - if (ff_pkt->flags & FO_HFSPLUS && ff_pkt->hfsinfo.rsrclength > 0) { - if (bopen_rsrc(&bfd, ff_pkt->fname, O_RDONLY | O_BINARY, 0) < 0) { - ff_pkt->ff_errno = errno; - berrno be; - Jmsg(jcr, M_NOTSAVED, -1, _(" Cannot open resource fork for %s: ERR=%s.\n"), - ff_pkt->fname, be.strerror()); - if (is_bopen(&ff_pkt->bfd)) { - bclose(&ff_pkt->bfd); - } - return 1; - } - read_digest(&bfd, digest, jcr); - bclose(&bfd); - } - - if (digest && ff_pkt->flags & FO_HFSPLUS) { - crypto_digest_update(digest, ff_pkt->hfsinfo.fndrinfo, 32); - } -#endif - - return 0; -} - -/* - * Read message digest of bfd, updating digest + * Read checksum of bfd, updating chksum * In case of errors we need the job control record and file name. */ -int read_digest(BFILE *bfd, DIGEST *digest, JCR *jcr) +int read_chksum(BFILE *bfd, CHKSUM *chksum, JCR *jcr) { - char buf[DEFAULT_NETWORK_BUFFER_SIZE]; int64_t n; - while ((n=bread(bfd, &buf, sizeof(buf))) > 0) { - crypto_digest_update(digest, &buf, n); + while ((n=bread(bfd, jcr->big_buf, jcr->buf_size)) > 0) { + chksum_update(chksum, ((unsigned char *)jcr->big_buf), (int)n); jcr->JobBytes += n; jcr->ReadBytes += n; } @@ -332,7 +282,7 @@ int read_digest(BFILE *bfd, DIGEST *digest, JCR *jcr) berrno be; be.set_errno(bfd->berrno); Jmsg(jcr, M_ERROR, 1, _("Error reading file %s: ERR=%s\n"), - jcr->last_fname, be.strerror()); + jcr->last_fname, be.strerror()); jcr->Errors++; return -1; } diff --git a/bacula/src/filed/verify_vol.c b/bacula/src/filed/verify_vol.c index abcf922500..cc764402a3 100644 --- a/bacula/src/filed/verify_vol.c +++ b/bacula/src/filed/verify_vol.c @@ -1,5 +1,5 @@ /* - * Bacula File Daemon verify-vol.c Verify files on a Volume + * Bacula File Daemon verify-vol.c Verify files on a Volume * versus attributes in Catalog * * Kern Sibbald, July MMII @@ -43,13 +43,12 @@ static char rec_header[] = "rechdr %ld %ld %ld %ld %ld"; void do_verify_volume(JCR *jcr) { BSOCK *sd, *dir; - POOLMEM *fname; /* original file name */ - POOLMEM *lname; /* link name */ + POOLMEM *fname; /* original file name */ + POOLMEM *lname; /* link name */ int32_t stream; uint32_t size; uint32_t VolSessionId, VolSessionTime, file_index; uint32_t record_file_index; - char digest[BASE64_SIZE(CRYPTO_DIGEST_MAX_SIZE)]; int type, stat; sd = jcr->store_bsock; @@ -68,7 +67,7 @@ void do_verify_volume(JCR *jcr) if (client) { buf_size = client->max_network_buffer_size; } else { - buf_size = 0; /* use default */ + buf_size = 0; /* use default */ } if (!bnet_set_buffer_size(sd, buf_size, BNET_SETBUF_WRITE)) { set_jcr_job_status(jcr, JS_FatalError); @@ -87,9 +86,9 @@ void do_verify_volume(JCR *jcr) * First we expect a Stream Record Header */ if (sscanf(sd->msg, rec_header, &VolSessionId, &VolSessionTime, &file_index, - &stream, &size) != 5) { + &stream, &size) != 5) { Jmsg1(jcr, M_FATAL, 0, _("Record header scan error: %s\n"), sd->msg); - goto bail_out; + goto bail_out; } Dmsg2(30, "Got hdr: FilInx=%d Stream=%d.\n", file_index, stream); @@ -98,11 +97,11 @@ void do_verify_volume(JCR *jcr) */ if (bget_msg(sd) < 0) { Jmsg1(jcr, M_FATAL, 0, _("Data record error. ERR=%s\n"), bnet_strerror(sd)); - goto bail_out; + 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; + goto bail_out; } Dmsg1(30, "Got stream data, len=%d\n", sd->msglen); @@ -110,147 +109,131 @@ void do_verify_volume(JCR *jcr) switch (stream) { case STREAM_UNIX_ATTRIBUTES: case STREAM_UNIX_ATTRIBUTES_EX: - char *ap, *lp, *fp; + char *ap, *lp, *fp; Dmsg0(400, "Stream=Unix Attributes.\n"); - if ((int)sizeof_pool_memory(fname) < sd->msglen) { - fname = realloc_pool_memory(fname, sd->msglen + 1); - } - - if ((int)sizeof_pool_memory(lname) < sd->msglen) { - lname = realloc_pool_memory(lname, sd->msglen + 1); - } - *fname = 0; - *lname = 0; - - /* - * An Attributes record consists of: - * File_index - * Type (FT_types) - * Filename - * Attributes - * Link name (if file linked i.e. FT_LNK) - * Extended Attributes (if Win32) - */ + if ((int)sizeof_pool_memory(fname) < sd->msglen) { + fname = realloc_pool_memory(fname, sd->msglen + 1); + } + + if ((int)sizeof_pool_memory(lname) < sd->msglen) { + lname = realloc_pool_memory(lname, sd->msglen + 1); + } + *fname = 0; + *lname = 0; + + /* + * An Attributes record consists of: + * File_index + * Type (FT_types) + * Filename + * Attributes + * Link name (if file linked i.e. FT_LNK) + * Extended Attributes (if Win32) + */ if (sscanf(sd->msg, "%d %d", &record_file_index, &type) != 2) { Jmsg(jcr, M_FATAL, 0, _("Error scanning record header: %s\n"), sd->msg); Dmsg0(0, "\nError scanning header\n"); - goto bail_out; - } + goto bail_out; + } Dmsg2(30, "Got Attr: FilInx=%d type=%d\n", record_file_index, type); - if (record_file_index != file_index) { + if (record_file_index != file_index) { Jmsg(jcr, M_FATAL, 0, _("Record header file index %ld not equal record index %ld\n"), - file_index, record_file_index); + file_index, record_file_index); Dmsg0(0, "File index error\n"); - goto bail_out; - } - ap = sd->msg; + goto bail_out; + } + ap = sd->msg; while (*ap++ != ' ') /* skip record file index */ - ; + ; while (*ap++ != ' ') /* skip type */ - ; - /* Save filename and position to attributes */ - fp = fname; - while (*ap != 0) { - *fp++ = *ap++; /* copy filename to fname */ - } - *fp = *ap++; /* terminate filename & point to attribs */ + ; + /* Save filename and position to attributes */ + fp = fname; + while (*ap != 0) { + *fp++ = *ap++; /* copy filename to fname */ + } + *fp = *ap++; /* terminate filename & point to attribs */ Dmsg1(200, "Attr=%s\n", ap); - /* Skip to Link name */ - if (type == FT_LNK || type == FT_LNKSAVED) { - lp = ap; - while (*lp++ != 0) { - ; - } + /* Skip to Link name */ + if (type == FT_LNK || type == FT_LNKSAVED) { + lp = ap; + while (*lp++ != 0) { + ; + } pm_strcat(lname, lp); /* "save" link name */ - } else { - *lname = 0; - } - P(jcr->mutex); - jcr->JobFiles++; - jcr->num_files_examined++; - pm_strcpy(jcr->last_fname, fname); /* last file examined */ - V(jcr->mutex); - - /* - * Send file attributes to Director - * File_index - * Stream - * Verify Options - * Filename (full path) - * Encoded attributes - * Link name (if type==FT_LNK) - * For a directory, link is the same as fname, but with trailing - * slash. For a linked file, link is the link. - */ - /* Send file attributes to Director */ + } else { + *lname = 0; + } + jcr->lock(); + jcr->JobFiles++; + jcr->num_files_examined++; + pm_strcpy(jcr->last_fname, fname); /* last file examined */ + jcr->unlock(); + + /* + * Send file attributes to Director + * File_index + * Stream + * Verify Options + * Filename (full path) + * Encoded attributes + * Link name (if type==FT_LNK) + * For a directory, link is the same as fname, but with trailing + * slash. For a linked file, link is the link. + */ + /* Send file attributes to Director */ Dmsg2(200, "send ATTR inx=%d fname=%s\n", jcr->JobFiles, fname); - if (type == FT_LNK || type == FT_LNKSAVED) { + if (type == FT_LNK || type == FT_LNKSAVED) { stat = bnet_fsend(dir, "%d %d %s %s%c%s%c%s%c", jcr->JobFiles, STREAM_UNIX_ATTRIBUTES, "pinsug5", fname, - 0, ap, 0, lname, 0); - } else { + 0, ap, 0, lname, 0); + } else { stat = bnet_fsend(dir,"%d %d %s %s%c%s%c%c", jcr->JobFiles, STREAM_UNIX_ATTRIBUTES, "pinsug5", fname, - 0, ap, 0, 0); - } + 0, ap, 0, 0); + } Dmsg2(200, "bfiled>bdird: attribs len=%d: msg=%s\n", dir->msglen, dir->msg); - if (!stat) { + if (!stat) { Jmsg(jcr, M_FATAL, 0, _("Network error in send to Director: ERR=%s\n"), bnet_strerror(dir)); - goto bail_out; - } - break; + goto bail_out; + } + break; /* Data streams to ignore */ - case STREAM_ENCRYPTED_SESSION_DATA: case STREAM_FILE_DATA: case STREAM_SPARSE_DATA: case STREAM_WIN32_DATA: case STREAM_WIN32_GZIP_DATA: case STREAM_GZIP_DATA: case STREAM_SPARSE_GZIP_DATA: - case STREAM_SIGNED_DIGEST: - /* Do nothing */ - break; + /* Do nothing */ + break; - case STREAM_MD5_DIGEST: - bin_to_base64(digest, (char *)sd->msg, CRYPTO_DIGEST_MD5_SIZE); - 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, - jcr->JobFiles); + case STREAM_MD5_SIGNATURE: + char MD5buf[30]; + bin_to_base64(MD5buf, (char *)sd->msg, 16); /* encode 16 bytes */ + Dmsg2(400, "send inx=%d MD5=%s\n", jcr->JobFiles, MD5buf); + bnet_fsend(dir, "%d %d %s *MD5-%d*", jcr->JobFiles, STREAM_MD5_SIGNATURE, MD5buf, + jcr->JobFiles); Dmsg2(20, "bfiled>bdird: MD5 len=%d: msg=%s\n", dir->msglen, dir->msg); break; - case STREAM_SHA1_DIGEST: - bin_to_base64(digest, (char *)sd->msg, CRYPTO_DIGEST_SHA1_SIZE); - Dmsg2(400, "send inx=%d SHA1=%s\n", jcr->JobFiles, digest); - bnet_fsend(dir, "%d %d %s *SHA1-%d*", jcr->JobFiles, STREAM_SHA1_DIGEST, - digest, jcr->JobFiles); + case STREAM_SHA1_SIGNATURE: + char SHA1buf[30]; + bin_to_base64(SHA1buf, (char *)sd->msg, 20); /* encode 20 bytes */ + Dmsg2(400, "send inx=%d SHA1=%s\n", jcr->JobFiles, SHA1buf); + bnet_fsend(dir, "%d %d %s *SHA1-%d*", jcr->JobFiles, STREAM_SHA1_SIGNATURE, + SHA1buf, jcr->JobFiles); Dmsg2(20, "bfiled>bdird: SHA1 len=%d: msg=%s\n", dir->msglen, dir->msg); break; - case STREAM_SHA256_DIGEST: - bin_to_base64(digest, (char *)sd->msg, CRYPTO_DIGEST_SHA256_SIZE); - Dmsg2(400, "send inx=%d SHA256=%s\n", jcr->JobFiles, digest); - bnet_fsend(dir, "%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; - - case STREAM_SHA512_DIGEST: - bin_to_base64(digest, (char *)sd->msg, CRYPTO_DIGEST_SHA512_SIZE); - Dmsg2(400, "send inx=%d SHA512=%s\n", jcr->JobFiles, digest); - bnet_fsend(dir, "%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; - default: Pmsg2(0, "None of above!!! stream=%d data=%s\n", stream,sd->msg); - break; + break; } /* end switch */ } /* end while bnet_get */ set_jcr_job_status(jcr, JS_Terminated); diff --git a/bacula/src/filed/win32/winbacula.h b/bacula/src/filed/win32/winbacula.h index f56b9ed92b..ea33d26a50 100755 --- a/bacula/src/filed/win32/winbacula.h +++ b/bacula/src/filed/win32/winbacula.h @@ -56,7 +56,7 @@ extern HINSTANCE hAppInstance; extern const char *szAppName; extern DWORD mainthreadId; -// Main Bacula server routine +// Main UPS server routine extern int BaculaAppMain(); extern void LogErrorMsg(char *msg); diff --git a/bacula/src/findlib/attribs.c b/bacula/src/findlib/attribs.c index fecbddb67d..678aa9c71a 100755 --- a/bacula/src/findlib/attribs.c +++ b/bacula/src/findlib/attribs.c @@ -56,15 +56,6 @@ int select_data_stream(FF_PKT *ff_pkt) { int stream; - /* - * 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; @@ -74,65 +65,17 @@ int select_data_stream(FF_PKT *ff_pkt) } else { stream = STREAM_FILE_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_GZIP; - } - - /* - * Handle compression and encryption options - */ #ifdef HAVE_LIBZ if (ff_pkt->flags & FO_GZIP) { - switch (stream) { - case STREAM_WIN32_DATA: + if (stream == STREAM_WIN32_DATA) { stream = STREAM_WIN32_GZIP_DATA; - break; - case STREAM_SPARSE_DATA: - stream = STREAM_SPARSE_GZIP_DATA; - break; - case STREAM_FILE_DATA: + } else if (stream == STREAM_FILE_DATA) { stream = STREAM_GZIP_DATA; - break; - default: - /* All stream types that do not support gzip should clear out - * FO_GZIP above, and this code block should be unreachable. */ - ASSERT(!ff_pkt->flags & FO_GZIP); - return STREAM_NONE; - } - } -#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_FILE_DATA: - stream = STREAM_ENCRYPTED_FILE_DATA; - break; - case STREAM_GZIP_DATA: - stream = STREAM_ENCRYPTED_FILE_GZIP_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; + } else { + stream = STREAM_SPARSE_GZIP_DATA; } } #endif - return stream; } @@ -512,12 +455,12 @@ int encode_attribsEx(JCR *jcr, char *attribsEx, FF_PKT *ff_pkt) attribsEx[0] = 0; /* no extended attributes */ - unix_name_to_win32(&ff_pkt->sys_fname, ff_pkt->fname); - // try unicode version if (p_GetFileAttributesExW) { + unix_name_to_win32(&ff_pkt->sys_fname, ff_pkt->fname); + POOLMEM* pwszBuf = get_pool_memory (PM_FNAME); - make_win32_path_UTF8_2_wchar(&pwszBuf, ff_pkt->fname); + UTF8_2_wchar(&pwszBuf, ff_pkt->sys_fname); BOOL b=p_GetFileAttributesExW((LPCWSTR) pwszBuf, GetFileExInfoStandard, (LPVOID)&atts); free_pool_memory(pwszBuf); @@ -529,7 +472,9 @@ int encode_attribsEx(JCR *jcr, char *attribsEx, FF_PKT *ff_pkt) } else { if (!p_GetFileAttributesExA) - return STREAM_UNIX_ATTRIBUTES; + return STREAM_UNIX_ATTRIBUTES; + + unix_name_to_win32(&ff_pkt->sys_fname, ff_pkt->fname); if (!p_GetFileAttributesExA(ff_pkt->sys_fname, GetFileExInfoStandard, (LPVOID)&atts)) { @@ -630,6 +575,8 @@ static bool set_win32_attributes(JCR *jcr, ATTR *attr, BFILE *ofd) 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)) { @@ -653,7 +600,7 @@ static bool set_win32_attributes(JCR *jcr, ATTR *attr, BFILE *ofd) { if (p_SetFileAttributesW) { POOLMEM* pwszBuf = get_pool_memory (PM_FNAME); - make_win32_path_UTF8_2_wchar(&pwszBuf, attr->ofname); + UTF8_2_wchar(&pwszBuf, win32_ofile); BOOL b=p_SetFileAttributesW((LPCWSTR)pwszBuf, atts.dwFileAttributes & SET_ATTRS); free_pool_memory(pwszBuf); diff --git a/bacula/src/findlib/bfile.c b/bacula/src/findlib/bfile.c index 8f1321727a..dc09ace024 100644 --- a/bacula/src/findlib/bfile.c +++ b/bacula/src/findlib/bfile.c @@ -12,14 +12,19 @@ Copyright (C) 2003-2005 Kern Sibbald This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as amended with additional clauses defined in the - file LICENSE in the main source directory. + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - the file LICENSE for additional details. + MERCHANTABILITY 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., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. */ @@ -48,8 +53,6 @@ bool is_win32_stream(int stream) switch (stream) { case STREAM_WIN32_DATA: case STREAM_WIN32_GZIP_DATA: - case STREAM_ENCRYPTED_WIN32_DATA: - case STREAM_ENCRYPTED_WIN32_GZIP_DATA: return true; } return false; @@ -72,8 +75,8 @@ const char *stream_to_ascii(int stream) return _("File attributes"); case STREAM_FILE_DATA: return _("File data"); - case STREAM_MD5_DIGEST: - return _("MD5 digest"); + case STREAM_MD5_SIGNATURE: + return _("MD5 signature"); case STREAM_UNIX_ATTRIBUTES_EX: return _("Extended attributes"); case STREAM_SPARSE_DATA: @@ -82,168 +85,18 @@ const char *stream_to_ascii(int stream) return _("Program names"); case STREAM_PROGRAM_DATA: return _("Program data"); - case STREAM_SHA1_DIGEST: - return _("SHA1 digest"); + case STREAM_SHA1_SIGNATURE: + return _("SHA1 signature"); case STREAM_MACOS_FORK_DATA: return _("HFS+ resource fork"); case STREAM_HFSPLUS_ATTRIBUTES: return _("HFS+ Finder Info"); - case STREAM_SHA256_DIGEST: - return _("SHA256 digest"); - case STREAM_SHA512_DIGEST: - return _("SHA512 digest"); - case STREAM_SIGNED_DIGEST: - return _("Signed digest"); - case STREAM_ENCRYPTED_FILE_DATA: - return _("Encrypted File data"); - case STREAM_ENCRYPTED_FILE_GZIP_DATA: - return _("Encrypted GZIP data"); - case STREAM_ENCRYPTED_WIN32_DATA: - return _("Encrypted Win32 data"); - case STREAM_ENCRYPTED_WIN32_GZIP_DATA: - return _("Encrypted Win32 GZIP data"); - case STREAM_ENCRYPTED_MACOS_FORK_DATA: - return _("Encrypted HFS+ resource fork"); default: sprintf(buf, "%d", stream); return (const char *)buf; } } - -void int64_LE2BE(int64_t* pBE, const int64_t v) -{ - /* convert little endian to big endian */ - if (htonl(1) != 1L) { /* no work if on little endian machine */ - memcpy(pBE, &v, sizeof(int64_t)); - } else { - int i; - uint8_t rv[sizeof(int64_t)]; - uint8_t *pv = (uint8_t *) &v; - - for (i = 0; i < 8; i++) { - rv[i] = pv[7 - i]; - } - memcpy(pBE, &rv, sizeof(int64_t)); - } -} - - -void int32_LE2BE(int32_t* pBE, const int32_t v) -{ - /* convert little endian to big endian */ - if (htonl(1) != 1L) { /* no work if on little endian machine */ - memcpy(pBE, &v, sizeof(int32_t)); - } else { - int i; - uint8_t rv[sizeof(int32_t)]; - uint8_t *pv = (uint8_t *) &v; - - for (i = 0; i < 4; i++) { - rv[i] = pv[3 - i]; - } - memcpy(pBE, &rv, sizeof(int32_t)); - } -} - - -bool processWin32BackupAPIBlock (BFILE *bfd, void *pBuffer, ssize_t dwSize) -{ - /* 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. - */ - - PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT* pContext = &(bfd->win32DecompContext); - bool bContinue = false; - int64_t dwDataOffset = 0; - int64_t dwDataLen; - - /* Win32 Stream Header size without name of stream. - * = sizeof (WIN32_STREAM_ID)- sizeof(WCHAR*); - */ - int32_t dwSizeHeader = 20; - - do { - if (pContext->liNextHeader >= dwSize) { - dwDataLen = dwSize-dwDataOffset; - bContinue = false; /* 1 iteration is enough */ - } - else { - dwDataLen = pContext->liNextHeader-dwDataOffset; - bContinue = true; /* multiple iterations may be necessary */ - } - - /* flush */ - /* copy block of real DATA */ - if (pContext->bIsInData) { - if (bwrite(bfd, ((char *)pBuffer)+dwDataOffset, dwDataLen) != (ssize_t)dwDataLen) - return false; - } - - if (pContext->liNextHeader < dwSize) {/* is a header in this block ? */ - int32_t dwOffsetTarget; - int32_t dwOffsetSource; - - if (pContext->liNextHeader < 0) { - /* start of header was before this block, so we - * continue with the part in the current block - */ - dwOffsetTarget = -pContext->liNextHeader; - dwOffsetSource = 0; - } else { - /* start of header is inside of this block */ - dwOffsetTarget = 0; - dwOffsetSource = pContext->liNextHeader; - } - - int32_t dwHeaderPartLen = dwSizeHeader-dwOffsetTarget; - bool bHeaderIsComplete; - - if (dwHeaderPartLen <= dwSize-dwOffsetSource) - /* header (or rest of header) is completely available - in current block - */ - bHeaderIsComplete = true; - else { - /* header will continue in next block */ - bHeaderIsComplete = false; - dwHeaderPartLen = dwSize-dwOffsetSource; - } - - /* copy the available portion of header to persistent copy */ - memcpy(((char *)&pContext->header_stream)+dwOffsetTarget, ((char *)pBuffer)+dwOffsetSource, dwHeaderPartLen); - - /* recalculate position of next header */ - if (bHeaderIsComplete) { - /* convert stream name size (32 bit little endian) to machine type */ - int32_t dwNameSize; - int32_LE2BE (&dwNameSize, pContext->header_stream.dwStreamNameSize); - dwDataOffset = dwNameSize+pContext->liNextHeader+dwSizeHeader; - - /* convert stream size (64 bit little endian) to machine type */ - int64_LE2BE (&(pContext->liNextHeader), pContext->header_stream.Size); - pContext->liNextHeader += dwDataOffset; - - pContext->bIsInData = pContext->header_stream.dwStreamId == WIN32_BACKUP_DATA; - if (dwDataOffset == dwSize) - bContinue = false; - } - else { - /* stop and continue with next block */ - bContinue = false; - pContext->bIsInData = false; - } - } - } while (bContinue); - - /* set "NextHeader" relative to the beginning of the next block */ - pContext->liNextHeader-= dwSize; - - return TRUE; -} - /* =============================================================== @@ -311,53 +164,39 @@ bool have_win32_api() /* - * 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 ... + * Return 1 if we support the stream + * 0 if we do not support the stream */ bool is_restore_stream_supported(int stream) { + /* No Win32 backup on this machine */ 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: + return 0; #endif + case STREAM_WIN32_DATA: + case STREAM_WIN32_GZIP_DATA: + return have_win32_api(); + 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 - case STREAM_WIN32_DATA: case STREAM_UNIX_ATTRIBUTES: case STREAM_FILE_DATA: - case STREAM_MD5_DIGEST: + case STREAM_MD5_SIGNATURE: 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: -#endif + case STREAM_SHA1_SIGNATURE: case 0: /* compatibility with old tapes */ return true; } @@ -375,7 +214,7 @@ int bopen(BFILE *bfd, const char *fname, int flags, mode_t mode) 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); @@ -386,7 +225,7 @@ int bopen(BFILE *bfd, const char *fname, int flags, mode_t mode) return 0; if (p_CreateFileW && p_MultiByteToWideChar) - make_win32_path_UTF8_2_wchar(&win32_fname_wchar, fname); + UTF8_2_wchar(&win32_fname_wchar, win32_fname); if (flags & O_CREAT) { /* Create */ if (bfd->use_backup_api) { @@ -494,8 +333,6 @@ int bopen(BFILE *bfd, const char *fname, int flags, mode_t mode) } 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; @@ -694,18 +531,17 @@ bool set_prog(BFILE *bfd, char *prog, JCR *jcr) } -/* - * This code is running on a non-Win32 machine - */ + bool is_restore_stream_supported(int stream) { /* No Win32 backup on this machine */ - switch (stream) { + switch (stream) { #ifndef HAVE_LIBZ case STREAM_GZIP_DATA: case STREAM_SPARSE_GZIP_DATA: - case STREAM_WIN32_GZIP_DATA: #endif + case STREAM_WIN32_DATA: + case STREAM_WIN32_GZIP_DATA: #ifndef HAVE_DARWIN_OS case STREAM_MACOS_FORK_DATA: case STREAM_HFSPLUS_ATTRIBUTES: @@ -716,42 +552,56 @@ bool is_restore_stream_supported(int stream) #ifdef HAVE_LIBZ case STREAM_GZIP_DATA: case STREAM_SPARSE_GZIP_DATA: - case STREAM_WIN32_GZIP_DATA: #endif - case STREAM_WIN32_DATA: case STREAM_UNIX_ATTRIBUTES: case STREAM_FILE_DATA: - case STREAM_MD5_DIGEST: + case STREAM_MD5_SIGNATURE: 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: -#endif + case STREAM_SHA1_SIGNATURE: #ifdef HAVE_DARWIN_OS case STREAM_MACOS_FORK_DATA: case STREAM_HFSPLUS_ATTRIBUTES: -#ifdef HAVE_CRYPTO - case STREAM_ENCRYPTED_MACOS_FORK_DATA: -#endif /* HAVE_CRYPTO */ -#endif /* HAVE_DARWIN_OS */ - case 0: /* compatibility with old tapes */ +#endif + case 0: /* compatibility with old tapes */ return true; } - return false; + return 0; } +/* Old file reader code */ +#ifdef xxx + if (bfd->prog) { + POOLMEM *ecmd = get_pool_memory(PM_FNAME); + ecmd = edit_job_codes(bfd->jcr, ecmd, bfd->prog, fname); + const char *pmode; + if (flags & O_RDONLY) { + pmode = "r"; + } else { + pmode = "w"; + } + bfd->bpipe = open_bpipe(ecmd, 0, pmode); + if (bfd->bpipe == NULL) { + bfd->berrno = errno; + bfd->fid = -1; + free_pool_memory(ecmd); + return -1; + } + free_pool_memory(ecmd); + if (flags & O_RDONLY) { + bfd->fid = fileno(bfd->bpipe->rfd); + } else { + bfd->fid = fileno(bfd->bpipe->wfd); + } + errno = 0; + return bfd->fid; + } +#endif + + int bopen(BFILE *bfd, const char *fname, int flags, mode_t mode) { /* Open reader/writer program */ @@ -765,10 +615,6 @@ int bopen(BFILE *bfd, const char *fname, int flags, mode_t mode) bfd->berrno = errno; Dmsg1(400, "Open file %d\n", bfd->fid); errno = bfd->berrno; - - bfd->win32DecompContext.bIsInData = false; - bfd->win32DecompContext.liNextHeader = 0; - return bfd->fid; } diff --git a/bacula/src/findlib/bfile.h b/bacula/src/findlib/bfile.h index dc724fa7d4..1177dece37 100644 --- a/bacula/src/findlib/bfile.h +++ b/bacula/src/findlib/bfile.h @@ -6,17 +6,22 @@ * Kern Sibbald May MMIII */ /* - Copyright (C) 2003-2005 Kern Sibbald + Copyright (C) 2000-2005 Kern Sibbald This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as amended with additional clauses defined in the - file LICENSE in the main source directory. + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - the file LICENSE for additional details. + MERCHANTABILITY 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., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. */ @@ -36,28 +41,6 @@ struct Python_IO { }; #endif - -/* this should physically correspond to WIN32_STREAM_ID - * from winbase.h on Win32. We didn't inlcude cStreamName - * as we don't use it and don't need it for a correct struct size. - */ - -#define WIN32_BACKUP_DATA 1 - -typedef struct _BWIN32_STREAM_ID { - int32_t dwStreamId; - int32_t dwStreamAttributes; - int64_t Size; - 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; -} PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT; - /* ======================================================= * * W I N D O W S @@ -91,8 +74,6 @@ struct BFILE { char *prog; /* reader/writer program if any */ JCR *jcr; /* jcr for editing job codes */ Python_IO pio; /* Python I/O routines */ - PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT win32DecompContext; /* context for decomposition of win32 backup streams */ - int use_backup_decomp; /* set if using BackupRead Stream Decomposition */ }; HANDLE bget_handle(BFILE *bfd); @@ -113,8 +94,6 @@ struct BFILE { char *prog; /* reader/writer program if any */ JCR *jcr; /* jcr for editing job codes */ Python_IO pio; /* Python I/O routines */ - PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT win32DecompContext; /* context for decomposition of win32 backup streams */ - int use_backup_decomp; /* set if using BackupRead Stream Decomposition */ }; #endif @@ -139,6 +118,4 @@ ssize_t bwrite(BFILE *bfd, void *buf, size_t count); off_t blseek(BFILE *bfd, off_t offset, int whence); const char *stream_to_ascii(int stream); -bool processWin32BackupAPIBlock (BFILE *bfd, void *pBuffer, ssize_t dwSize); - #endif /* __BFILE_H */ diff --git a/bacula/src/findlib/create_file.c b/bacula/src/findlib/create_file.c index 0cea7be666..cdc8bf6ee4 100644 --- a/bacula/src/findlib/create_file.c +++ b/bacula/src/findlib/create_file.c @@ -83,20 +83,20 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) 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); + Jmsg(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); + Jmsg(jcr, M_SKIPPED, 0, _("File skipped. Not older: %s\n"), attr->ofname); return CF_SKIP; } break; case REPLACE_NEVER: - Qmsg(jcr, M_SKIPPED, 0, _("File skipped. Already exists: %s\n"), attr->ofname); + Jmsg(jcr, M_SKIPPED, 0, _("File skipped. Already exists: %s\n"), attr->ofname); return CF_SKIP; case REPLACE_ALWAYS: @@ -117,11 +117,11 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) * 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) { + if (exists && attr->type != FT_RAW && attr->type != FT_FIFO) { /* Get rid of old copy */ if (unlink(attr->ofname) == -1) { berrno be; - Qmsg(jcr, M_ERROR, 0, _("File %s already exists and could not be replaced. ERR=%s.\n"), + Jmsg(jcr, M_ERROR, 0, _("File %s already exists and could not be replaced. ERR=%s.\n"), attr->ofname, be.strerror()); /* Continue despite error */ } @@ -173,42 +173,29 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) } Dmsg1(50, "Create file: %s\n", attr->ofname); if (is_bopen(bfd)) { - Qmsg1(jcr, M_ERROR, 0, _("bpkt already open fid=%d\n"), bfd->fid); + Jmsg1(jcr, M_ERROR, 0, _("bpkt already open fid=%d\n"), bfd->fid); bclose(bfd); } - - - if ((bopen(bfd, attr->ofname, mode, 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.strerror()); - return CF_ERROR; - } - - /* this doesn't solve the Microsoft problem - Thorsten Engel - so I reused the code of V 1.40 /* * If the open fails, we attempt to cd into the directory * and create the file with a relative path rather than * the full absolute path. This is for Win32 where * path names may be too long to create. */ - /* if ((bopen(bfd, attr->ofname, mode, S_IRUSR | S_IWUSR)) < 0) { berrno be; int stat; Dmsg2(000, "bopen failed errno=%d: ERR=%s\n", bfd->berrno, - be.strerror(bfd->berrno)); - if (strlen(attr->ofname) > 250) { // Microsoft limitation + be.strerror(bfd->berrno)); + if (strlen(attr->ofname) > 250) { /* Microsoft limitation */ char savechr; char *p, *e; struct saved_cwd cwd; savechr = attr->ofname[pnl]; - attr->ofname[pnl] = 0; // terminate path + attr->ofname[pnl] = 0; /* terminate path */ Dmsg1(000, "Do chdir %s\n", attr->ofname); if (save_cwd(&cwd) != 0) { - Qmsg0(jcr, M_ERROR, 0, _("Could not save_dirn")); + Jmsg0(jcr, M_ERROR, 0, _("Could not save_dirn")); attr->ofname[pnl] = savechr; return CF_ERROR; } @@ -217,7 +204,7 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) *e = 0; if (chdir(p) < 0) { berrno be; - Qmsg2(jcr, M_ERROR, 0, _("Could not chdir to %s: ERR=%s\n"), + Jmsg2(jcr, M_ERROR, 0, _("Could not chdir to %s: ERR=%s\n"), attr->ofname, be.strerror()); restore_cwd(&cwd, NULL, NULL); free_cwd(&cwd); @@ -230,7 +217,7 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) } if (chdir(p) < 0) { berrno be; - Qmsg2(jcr, M_ERROR, 0, _("Could not chdir to %s: ERR=%s\n"), + Jmsg2(jcr, M_ERROR, 0, _("Could not chdir to %s: ERR=%s\n"), attr->ofname, be.strerror()); restore_cwd(&cwd, NULL, NULL); free_cwd(&cwd); @@ -250,10 +237,10 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) return CF_EXTRACT; } } - Qmsg2(jcr, M_ERROR, 0, _("Could not create %s: ERR=%s\n"), + Jmsg2(jcr, M_ERROR, 0, _("Could not create %s: ERR=%s\n"), attr->ofname, be.strerror(bfd->berrno)); - return CF_ERROR; - }*/ + return CF_ERROR; + } return CF_EXTRACT; #ifndef HAVE_WIN32 // none of these exists on MS Windows case FT_RAW: /* Bacula raw device e.g. /dev/sda1 */ @@ -263,17 +250,15 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) Dmsg1(200, "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"), + Jmsg2(jcr, M_ERROR, 0, _("Cannot make fifo %s: ERR=%s\n"), attr->ofname, be.strerror()); return CF_ERROR; } - } else if(S_ISSOCK(attr->statp.st_mode)) { - Dmsg1(200, "Skipping restore of socket: %s\n", attr->ofname); } else { Dmsg1(200, "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"), + Jmsg2(jcr, M_ERROR, 0, _("Cannot make node %s: ERR=%s\n"), attr->ofname, be.strerror()); return CF_ERROR; } @@ -289,12 +274,12 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) tid = NULL; } if (is_bopen(bfd)) { - Qmsg1(jcr, M_ERROR, 0, _("bpkt already open fid=%d\n"), bfd->fid); + Jmsg1(jcr, M_ERROR, 0, _("bpkt already open fid=%d\n"), bfd->fid); } if ((bopen(bfd, attr->ofname, mode, 0)) < 0) { berrno be; be.set_errno(bfd->berrno); - Qmsg2(jcr, M_ERROR, 0, _("Could not open %s: ERR=%s\n"), + Jmsg2(jcr, M_ERROR, 0, _("Could not open %s: ERR=%s\n"), attr->ofname, be.strerror()); stop_thread_timer(tid); return CF_ERROR; @@ -309,7 +294,7 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) 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"), + Jmsg3(jcr, M_ERROR, 0, _("Could not symlink %s -> %s: ERR=%s\n"), attr->ofname, attr->olname, be.strerror()); return CF_ERROR; } @@ -319,7 +304,7 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) Dmsg2(130, "Hard link %s => %s\n", attr->ofname, attr->olname); if (link(attr->olname, attr->ofname) != 0) { berrno be; - Qmsg3(jcr, M_ERROR, 0, _("Could not hard link %s -> %s: ERR=%s\n"), + Jmsg3(jcr, M_ERROR, 0, _("Could not hard link %s -> %s: ERR=%s\n"), attr->ofname, attr->olname, be.strerror()); return CF_ERROR; } @@ -340,7 +325,7 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) */ if (!is_portable_backup(bfd)) { if (is_bopen(bfd)) { - Qmsg1(jcr, M_ERROR, 0, _("bpkt already open fid=%d\n"), bfd->fid); + Jmsg1(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; @@ -351,7 +336,7 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) return CF_SKIP; } #endif - Qmsg2(jcr, M_ERROR, 0, _("Could not open %s: ERR=%s\n"), + Jmsg2(jcr, M_ERROR, 0, _("Could not open %s: ERR=%s\n"), attr->ofname, be.strerror()); return CF_ERROR; } @@ -370,10 +355,10 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) 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); + Jmsg2(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); + Jmsg2(jcr, M_ERROR, 0, _("Unknown file type %d; not restored: %s\n"), attr->type, attr->fname); break; } return CF_ERROR; @@ -404,7 +389,7 @@ static int separate_path_and_file(JCR *jcr, char *fname, char *ofile) /* The filename length must not be zero here because we * are dealing with a file (i.e. FT_REGE or FT_REG). */ - Qmsg1(jcr, M_ERROR, 0, _("Zero length filename: %s\n"), fname); + Jmsg1(jcr, M_ERROR, 0, _("Zero length filename: %s\n"), fname); return -1; } pnl = f - ofile - 1; diff --git a/bacula/src/findlib/find.h b/bacula/src/findlib/find.h index d5487aa539..798fa25940 100755 --- a/bacula/src/findlib/find.h +++ b/bacula/src/findlib/find.h @@ -7,14 +7,19 @@ Copyright (C) 2001-2005 Kern Sibbald This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as amended with additional clauses defined in the - file LICENSE in the main source directory. + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - the file LICENSE for additional details. + MERCHANTABILITY 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., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. */ @@ -85,10 +90,6 @@ enum { #define FO_NO_HARDLINK (1<<15) /* don't handle hard links */ #define FO_IGNORECASE (1<<16) /* Ignore file name case */ #define FO_HFSPLUS (1<<17) /* Resource forks and Finder Info */ -#define FO_WIN32DECOMP (1<<18) /* Use BackupRead decomposition */ -#define FO_SHA256 (1<<19) /* Do SHA256 checksum */ -#define FO_SHA512 (1<<20) /* Do SHA512 checksum */ -#define FO_ENCRYPT (1<<21) /* Encrypt data stream */ struct s_included_file { struct s_included_file *next; diff --git a/bacula/src/gnome2-console/.cvsignore b/bacula/src/gnome2-console/.cvsignore index d1324549a1..37844ba1f1 100644 --- a/bacula/src/gnome2-console/.cvsignore +++ b/bacula/src/gnome2-console/.cvsignore @@ -6,4 +6,3 @@ gnome-console.conf 2 3 main.c -static-gnome-console diff --git a/bacula/src/gnome2-console/Makefile.in b/bacula/src/gnome2-console/Makefile.in index 5a4c28f3d2..89f63722e2 100644 --- a/bacula/src/gnome2-console/Makefile.in +++ b/bacula/src/gnome2-console/Makefile.in @@ -42,6 +42,8 @@ CONS_INC=$(GNOME_INCLUDEDIR) CONS_LIBS=$(GNOME_LIBS) CONS_LDFLAGS=$(GNOME_LIBDIR) $(GNOMEUI_LIBS) +OPENSSL_INC=@OPENSSL_INC@ +OPENSSL_LIBS=@OPENSSL_LIBS@ .SUFFIXES: .c .o .PHONY: @@ -49,7 +51,7 @@ CONS_LDFLAGS=$(GNOME_LIBDIR) $(GNOMEUI_LIBS) # inference rules .c.o: - $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) $(CONS_INC) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) $< + $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) $(CONS_INC) $(OPENSSL_INC) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) $< #------------------------------------------------------------------------- all: Makefile gnome-console @STATIC_GNOME_CONS@ @echo "==== Make of gnome-console is good ====" @@ -59,17 +61,17 @@ support.o: support.c rm -f support.c.orig mv support.c support.c.orig sed "s%parent = g_object_get_data%parent = \(GtkWidget \*\)g_object_get_data%" support.c.orig >support.c - $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) $(CONS_INC) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) $< + $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) $(CONS_INC) $(OPENSSL_INC) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) $< gnome-console: $(CONSOBJS) ../lib/libbac.a $(CXX) $(LDFLAGS) $(CONS_LDFLAGS) -L../lib -o $@ $(CONSOBJS) \ - $(LIBS) $(DLIB) $(CONS_LIBS) -lbac -lm + $(LIBS) $(DLIB) $(CONS_LIBS) -lbac -lm $(OPENSSL_LIBS) static-console: static-gnome-console static-gnome-console: $(CONSOBJS) ../lib/libbac.a $(CXX) $(LDFLAGS) $(CONS_LDFLAGS) -L../lib -o $@ $(CONSOBJS) \ - $(LIBS) $(DLIB) $(CONS_LIBS) -lbac -lm + $(LIBS) $(DLIB) $(CONS_LIBS) -lbac -lm $(OPENSSL_LIBS) strip $@ Makefile: $(srcdir)/Makefile.in $(topdir)/config.status @@ -122,7 +124,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) -I$(srcdir) -I$(basedir) $(GNOME_INCLUDEDIR) $(SQL_INC) *.c >> Makefile + @$(CXX) -S -M $(CPPFLAGS) $(XINC) $(OPENSSL_INC) -I$(srcdir) -I$(basedir) $(GNOME_INCLUDEDIR) $(SQL_INC) *.c >> Makefile @if test -f Makefile ; then \ $(RMF) Makefile.bak; \ else \ diff --git a/bacula/src/gnome2-console/callbacks.c b/bacula/src/gnome2-console/callbacks.c index e46b575e71..f6fbfb930e 100644 --- a/bacula/src/gnome2-console/callbacks.c +++ b/bacula/src/gnome2-console/callbacks.c @@ -14,7 +14,7 @@ #include "support.h" #define KEY_Enter 65293 -#define KEY_Up 65362 +#define KEY_Up 65362 #define KEY_Down 65364 #define KEY_Left 65361 #define KEY_Right 65363 @@ -127,9 +127,9 @@ static void add_to_history(gchar *ecmd) int i; GList *hp; for (i=0; idata); - hist = g_list_remove(hist, hp->data); + hp = g_list_next(hist); + free(hp->data); + hist = g_list_remove(hist, hp->data); } hist_len -= HIST_DEL; } @@ -153,34 +153,34 @@ on_entry1_key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer user_d gtk_entry_set_text((GtkEntry *)entry1, ""); } else if (event->keyval == KEY_Up) { if (!hc) { - if (!hist) { - return FALSE; - } - hc = g_list_last(hist); + if (!hist) { + return FALSE; + } + hc = g_list_last(hist); } else { - hc = g_list_previous(hc); + hc = g_list_previous(hc); } if (!hc) { - if (!hist) { - return FALSE; - } - hc = g_list_first(hist); + if (!hist) { + return FALSE; + } + hc = g_list_first(hist); } gtk_entry_set_text((GtkEntry *)entry1, (gchar *)hc->data); } else if (event->keyval == KEY_Down) { if (!hc) { - if (!hist) { - return FALSE; - } - hc = g_list_first(hist); + if (!hist) { + return FALSE; + } + hc = g_list_first(hist); } else { - hc = g_list_next(hc); + hc = g_list_next(hc); } if (!hc) { - if (!hist) { - return FALSE; - } - hc = g_list_last(hist); + if (!hist) { + return FALSE; + } + hc = g_list_last(hist); } gtk_entry_set_text((GtkEntry *)entry1, (gchar *)hc->data); } @@ -294,30 +294,30 @@ static void set_run_defaults() while (bnet_recv(UA_sock) > 0) { def = strchr(UA_sock->msg, '='); if (!def) { - continue; + continue; } *def++ = 0; if (strcmp(UA_sock->msg, "job") == 0 || - strcmp(UA_sock->msg, "when") == 0) { - continue; + strcmp(UA_sock->msg, "when") == 0) { + continue; } /* Where is an entry box */ if (strcmp(UA_sock->msg, "where") == 0) { - entry = lookup_widget(run_dialog, "entry_where"); - gtk_entry_set_text(GTK_ENTRY(entry), def); - continue; + entry = lookup_widget(run_dialog, "entry_where"); + gtk_entry_set_text(GTK_ENTRY(entry), def); + continue; } /* Now handle combo boxes */ list = find_combo_list(UA_sock->msg); if (!list) { - continue; + continue; } item = g_list_find_custom(list, def, compare_func); bsnprintf(cmd, sizeof(cmd), "combo_%s", UA_sock->msg); combo = lookup_widget(run_dialog, cmd); if (!combo) { - continue; + continue; } pos = g_list_position(list, item); gtk_list_select_item(GTK_LIST(GTK_COMBO(combo)->list), pos); @@ -405,9 +405,9 @@ on_run_ok_clicked(GtkButton *button, gpointer user_data) } bsnprintf(cmd, sizeof(cmd), - "run job=\"%s\" fileset=\"%s\" level=%s client=\"%s\" pool=\"%s\" " - "when=\"%s\" where=\"%s\" storage=\"%s\"", - job, fileset, level, client, pool, when, where, storage); + "run job=\"%s\" fileset=\"%s\" level=%s client=\"%s\" pool=\"%s\" " + "when=\"%s\" where=\"%s\" storage=\"%s\"", + job, fileset, level, client, pool, when, where, storage); write_director(cmd); set_text(cmd, strlen(cmd)); write_director("yes"); @@ -479,8 +479,8 @@ on_label_ok_clicked(GtkButton *button, gpointer user_data) } bsnprintf(cmd, sizeof(cmd), - "label volume=\"%s\" pool=\"%s\" storage=\"%s\" slot=%s", - volume, pool, storage, slot); + "label name=\"%s\" pool=\"%s\" storage=\"%s\" slot=%s", + volume, pool, storage, slot); write_director(cmd); set_text(cmd, strlen(cmd)); } @@ -516,12 +516,12 @@ on_select_files_button_clicked(GtkButton *button, gpointer user_data) } bsnprintf(cmd, sizeof(cmd), - "restore select current fileset=\"%s\" client=\"%s\" pool=\"%s\" " - "storage=\"%s\"", fileset, client, pool, storage); + "restore select current fileset=\"%s\" client=\"%s\" pool=\"%s\" " + "storage=\"%s\"", fileset, client, pool, storage); write_director(cmd); set_text(cmd, strlen(cmd)); gtk_widget_show(restore_file_selection); - select_restore_files(); /* put up select files dialog */ + select_restore_files(); /* put up select files dialog */ } void @@ -554,96 +554,96 @@ on_restore_files_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_ void -on_new1_activate (GtkMenuItem *menuitem, - gpointer user_data) +on_new1_activate (GtkMenuItem *menuitem, + gpointer user_data) { } void -on_open1_activate (GtkMenuItem *menuitem, - gpointer user_data) +on_open1_activate (GtkMenuItem *menuitem, + gpointer user_data) { } void -on_save1_activate (GtkMenuItem *menuitem, - gpointer user_data) +on_save1_activate (GtkMenuItem *menuitem, + gpointer user_data) { } void -on_save_as1_activate (GtkMenuItem *menuitem, - gpointer user_data) +on_save_as1_activate (GtkMenuItem *menuitem, + gpointer user_data) { } void -on_quit1_activate (GtkMenuItem *menuitem, - gpointer user_data) +on_quit1_activate (GtkMenuItem *menuitem, + gpointer user_data) { } void -on_cut2_activate (GtkMenuItem *menuitem, - gpointer user_data) +on_cut2_activate (GtkMenuItem *menuitem, + gpointer user_data) { } void -on_copy2_activate (GtkMenuItem *menuitem, - gpointer user_data) +on_copy2_activate (GtkMenuItem *menuitem, + gpointer user_data) { } void -on_paste2_activate (GtkMenuItem *menuitem, - gpointer user_data) +on_paste2_activate (GtkMenuItem *menuitem, + gpointer user_data) { } void -on_clear2_activate (GtkMenuItem *menuitem, - gpointer user_data) +on_clear2_activate (GtkMenuItem *menuitem, + gpointer user_data) { } void -on_properties1_activate (GtkMenuItem *menuitem, - gpointer user_data) +on_properties1_activate (GtkMenuItem *menuitem, + gpointer user_data) { } void -on_preferences2_activate (GtkMenuItem *menuitem, - gpointer user_data) +on_preferences2_activate (GtkMenuItem *menuitem, + gpointer user_data) { } void -on_about2_activate (GtkMenuItem *menuitem, - gpointer user_data) +on_about2_activate (GtkMenuItem *menuitem, + gpointer user_data) { } @@ -668,28 +668,28 @@ void set_restore_dialog_defaults() while (bnet_recv(UA_sock) > 0) { def = strchr(UA_sock->msg, '='); if (!def) { - continue; + continue; } *def++ = 0; if (strcmp(UA_sock->msg, "job") == 0 || - strcmp(UA_sock->msg, "when") == 0 || - strcmp(UA_sock->msg, "where") == 0 || - strcmp(UA_sock->msg, "messages") == 0 || - strcmp(UA_sock->msg, "level") == 0 || - strcmp(UA_sock->msg, "type") == 0) { - continue; + strcmp(UA_sock->msg, "when") == 0 || + strcmp(UA_sock->msg, "where") == 0 || + strcmp(UA_sock->msg, "messages") == 0 || + strcmp(UA_sock->msg, "level") == 0 || + strcmp(UA_sock->msg, "type") == 0) { + continue; } /* Now handle combo boxes */ list = find_combo_list(UA_sock->msg); if (!list) { - continue; + continue; } item = g_list_find_custom(list, def, compare_func); bsnprintf(cmd, sizeof(cmd), "combo_restore_%s", UA_sock->msg); combo = lookup_widget(restore_dialog, cmd); if (!combo) { - continue; + continue; } pos = g_list_position(list, item); gtk_list_select_item(GTK_LIST(GTK_COMBO(combo)->list), pos); diff --git a/bacula/src/gnome2-console/console.c b/bacula/src/gnome2-console/console.c index 17643ef706..38fc765ac9 100644 --- a/bacula/src/gnome2-console/console.c +++ b/bacula/src/gnome2-console/console.c @@ -267,8 +267,8 @@ int main(int argc, char *argv[]) parse_config(configfile); - if (init_crypto() != 0) { - Emsg0(M_ERROR_TERM, 0, _("Cryptography library initialization failed.\n")); + if (init_tls() != 0) { + Emsg0(M_ERROR_TERM, 0, _("TLS library initialization failed.\n")); } if (!check_resources()) { @@ -672,7 +672,7 @@ void terminate_console(int sig) if (already_here) /* avoid recursive temination problems */ exit(1); already_here = true; - cleanup_crypto(); + cleanup_tls(); disconnect_from_director((gpointer)NULL); gtk_main_quit(); exit(0); diff --git a/bacula/src/gnome2-console/console_conf.c b/bacula/src/gnome2-console/console_conf.c index fa9561ff65..ac4ad05fce 100644 --- a/bacula/src/gnome2-console/console_conf.c +++ b/bacula/src/gnome2-console/console_conf.c @@ -69,8 +69,8 @@ static RES_ITEM dir_items[] = { {"dirport", store_int, ITEM(dir_res.DIRport), 0, ITEM_DEFAULT, 9101}, {"address", store_str, ITEM(dir_res.address), 0, ITEM_REQUIRED, 0}, {"password", store_password, ITEM(dir_res.password), 0, 0, 0}, - {"tlsenable", store_bit, ITEM(dir_res.tls_enable), 1, 0, 0}, - {"tlsrequire", store_bit, ITEM(dir_res.tls_require), 1, 0, 0}, + {"tlsenable", store_yesno, ITEM(dir_res.tls_enable), 1, 0, 0}, + {"tlsrequire", store_yesno, ITEM(dir_res.tls_require), 1, 0, 0}, {"tlscacertificatefile", store_dir, ITEM(dir_res.tls_ca_certfile), 0, 0, 0}, {"tlscacertificatedir", store_dir, ITEM(dir_res.tls_ca_certdir), 0, 0, 0}, {"tlscertificate", store_dir, ITEM(dir_res.tls_certfile), 0, 0, 0}, @@ -82,8 +82,8 @@ static RES_ITEM con_items[] = { {"name", store_name, ITEM(con_res.hdr.name), 0, ITEM_REQUIRED, 0}, {"description", store_str, ITEM(con_res.hdr.desc), 0, 0, 0}, {"password", store_password, ITEM(con_res.password), 0, ITEM_REQUIRED, 0}, - {"tlsenable", store_bit, ITEM(con_res.tls_enable), 1, 0, 0}, - {"tlsrequire", store_bit, ITEM(con_res.tls_require), 1, 0, 0}, + {"tlsenable", store_yesno, ITEM(con_res.tls_enable), 1, 0, 0}, + {"tlsrequire", store_yesno, ITEM(con_res.tls_require), 1, 0, 0}, {"tlscacertificatefile", store_dir, ITEM(con_res.tls_ca_certfile), 0, 0, 0}, {"tlscacertificatedir", store_dir, ITEM(con_res.tls_ca_certdir), 0, 0, 0}, {"tlscertificate", store_dir, ITEM(con_res.tls_certfile), 0, 0, 0}, @@ -95,7 +95,7 @@ static RES_ITEM con_font_items[] = { {"name", store_name, ITEM(con_font.hdr.name), 0, ITEM_REQUIRED, 0}, {"description", store_str, ITEM(con_font.hdr.desc), 0, 0, 0}, {"font", store_str, ITEM(con_font.fontface), 0, 0, 0}, - {"requiressl", store_bit, ITEM(con_font.require_ssl), 1, ITEM_DEFAULT, 0}, + {"requiressl", store_yesno, ITEM(con_font.require_ssl), 1, ITEM_DEFAULT, 0}, {NULL, NULL, NULL, 0, 0, 0} }; diff --git a/bacula/src/gnome2-console/test-gnome-console.conf b/bacula/src/gnome2-console/test-gnome-console.conf index fa5f9bcd4e..b2725a1f9f 100644 --- a/bacula/src/gnome2-console/test-gnome-console.conf +++ b/bacula/src/gnome2-console/test-gnome-console.conf @@ -5,6 +5,6 @@ Director { Name = rufus-dir DIRport = 8101 - address = localhost + address = rufus Password = UA_password } diff --git a/bacula/src/jcr.h b/bacula/src/jcr.h index a0e51aaaf2..0affa6b170 100644 --- a/bacula/src/jcr.h +++ b/bacula/src/jcr.h @@ -74,6 +74,18 @@ #define JS_WaitStartTime 't' /* Waiting for start time */ #define JS_WaitPriority 'p' /* Waiting for higher priority jobs to finish */ +/* Migration selection types */ +enum { + MT_SMALLEST_VOL = 1, + MT_OLDEST_VOL, + MT_POOL_OCCUPANCY, + MT_POOL_TIME, + MT_CLIENT, + MT_VOLUME, + MT_JOB, + MT_SQLQUERY +}; + #define job_canceled(jcr) \ (jcr->JobStatus == JS_Canceled || \ jcr->JobStatus == JS_ErrorTerminated || \ @@ -97,15 +109,22 @@ typedef void (JCR_free_HANDLER)(JCR *jcr); /* Job Control Record (JCR) */ class JCR { +private: + pthread_mutex_t mutex; /* jcr mutex */ + volatile int _use_count; /* use count */ public: - void inc_use_count(void) {P(mutex); use_count++; V(mutex); }; - void dec_use_count(void) {P(mutex); use_count--; V(mutex); }; + void inc_use_count(void) {P(mutex); _use_count++; V(mutex); }; + void dec_use_count(void) {P(mutex); _use_count--; V(mutex); }; + int use_count() { return _use_count; }; + void init_mutex(void) {pthread_mutex_init(&mutex, NULL); }; + void destroy_mutex(void) {pthread_mutex_destroy(&mutex); }; + void lock() {P(mutex); }; + void unlock() {V(mutex); }; + bool is_job_canceled() {return job_canceled(this); }; /* Global part of JCR common to all daemons */ dlink link; /* JCR chain link */ - volatile int use_count; /* use count */ pthread_t my_thread_id; /* id of thread controlling jcr */ - pthread_mutex_t mutex; /* jcr mutex */ BSOCK *dir_bsock; /* Director bsock or NULL if we are him */ BSOCK *store_bsock; /* Storage connection socket */ BSOCK *file_bsock; /* File daemon connection socket */ @@ -157,17 +176,14 @@ public: /* This should be empty in the library */ #ifdef DIRECTOR_DAEMON - /* Director Daemon specific part of JCR */ + /* Director Daemon specific data part of JCR */ pthread_t SD_msg_chan; /* Message channel thread id */ pthread_cond_t term_wait; /* Wait for job termination */ workq_ele_t *work_item; /* Work queue item if scheduled */ volatile bool sd_msg_thread_done; /* Set when Storage message thread terms */ BSOCK *ua; /* User agent */ JOB *job; /* Job resource */ - union { - JOB *verify_job; /* Job resource of verify target job */ - JOB *migration_job; /* Job resource of migration target job */ - }; + JOB *verify_job; /* Job resource of verify previous job */ alist *storage; /* Storage possibilities */ STORE *store; /* Storage daemon selected */ CLIENT *client; /* Client resource */ @@ -185,15 +201,20 @@ public: volatile int FDJobStatus; /* File daemon Job Status */ uint32_t ExpectedFiles; /* Expected restore files */ uint32_t MediaId; /* DB record IDs associated with this job */ + uint32_t PoolId; /* PoolId associated with Job */ FileId_t FileId; /* Last file id inserted */ uint32_t FileIndex; /* Last FileIndex processed */ POOLMEM *fname; /* name to put into catalog */ JOB_DBR jr; /* Job DB record for current job */ - JOB_DBR target_jr; /* target job */ - JCR *target_jcr; /* target job control record */ + JOB_DBR previous_jr; /* previous job database record */ + JOB *previous_job; /* Job resource of migration previous job */ + JCR *previous_jcr; /* previous job control record */ char FSCreateTime[MAX_TIME_LENGTH]; /* FileSet CreateTime as returned from DB */ char since[MAX_TIME_LENGTH]; /* since time */ - uint32_t RestoreJobId; /* Id specified by UA */ + union { + JobId_t RestoreJobId; /* Id specified by UA */ + JobId_t MigrateJobId; + }; POOLMEM *client_uname; /* client uname */ int replace; /* Replace option */ int NumVols; /* Number of Volume used in pool */ @@ -237,10 +258,10 @@ public: bool pki_sign; /* Enable PKI Signatures? */ bool pki_encrypt; /* Enable PKI Encryption? */ DIGEST *digest; /* Last file's digest context */ - X509_KEYPAIR *pki_keypair; /* Encryption key pair */ +// X509_KEYPAIR *pki_keypair; /* Encryption key pair */ alist *pki_signers; /* Trusted Signers */ alist *pki_recipients; /* Trusted Recipients */ - CRYPTO_SESSION *pki_session; /* PKE Public Keys + Symmetric Session Keys */ +// CRYPTO_SESSION *pki_session; /* PKE Public Keys + Symmetric Session Keys */ void *pki_session_encoded; /* Cached DER-encoded copy of pki_session */ size_t pki_session_encoded_size; /* Size of DER-encoded pki_session */ POOLMEM *crypto_buf; /* Encryption/Decryption buffer */ diff --git a/bacula/src/lib/Makefile.in b/bacula/src/lib/Makefile.in index d9809afdbf..3967cd2ebd 100644 --- a/bacula/src/lib/Makefile.in +++ b/bacula/src/lib/Makefile.in @@ -14,8 +14,6 @@ topdir = ../.. # this dir relative to top dir thisdir = src/lib -OPENSSL_LIBS = @OPENSSL_LIBS@ -OPENSSL_INC = @OPENSSL_INC@ DEBUG=@DEBUG@ @@ -24,10 +22,10 @@ dummy: LIBSRCS = alloc.c attr.c base64.c berrno.c bsys.c bget_msg.c \ bnet.c bnet_server.c \ - bpipe.c bshm.c bsnprintf.c btime.c \ - cram-md5.c crc32.c crypto.c daemon.c edit.c fnmatch.c \ + bpipe.c bshm.c btime.c \ + cram-md5.c crc32.c daemon.c edit.c fnmatch.c \ hmac.c idcache.c jcr.c lex.c alist.c dlist.c \ - md5.c message.c mem_pool.c openssl.c parse_conf.c \ + md5.c message.c mem_pool.c parse_conf.c \ queue.c regex.c \ res.c rwlock.c scan.c serial.c sha1.c \ semlock.c signal.c smartall.c tls.c tree.c \ @@ -37,10 +35,10 @@ LIBSRCS = alloc.c attr.c base64.c berrno.c bsys.c bget_msg.c \ LIBOBJS = alloc.o attr.o base64.o berrno.o bsys.o bget_msg.o \ bnet.o bnet_server.o \ - bpipe.o bshm.o bsnprintf.o btime.o \ - cram-md5.o crc32.o crypto.o daemon.o edit.o fnmatch.o \ + bpipe.o bshm.o btime.o \ + cram-md5.o crc32.o daemon.o edit.o fnmatch.o \ hmac.o idcache.o jcr.o lex.o alist.o dlist.o \ - md5.o message.o mem_pool.o openssl.o parse_conf.o \ + md5.o message.o mem_pool.o parse_conf.o \ queue.o regex.o \ res.o rwlock.o scan.o serial.o sha1.o \ semlock.o signal.o smartall.o tls.o tree.o \ @@ -50,6 +48,9 @@ LIBOBJS = alloc.o attr.o base64.o berrno.o bsys.o bget_msg.o \ EXTRAOBJS = @OBJLIST@ +OPENSSL_LIBS=@OPENSSL_LIBS@ +OPENSSL_INC=@OPENSSL_INC@ + .SUFFIXES: .c .o .ch .dvi .pdf .tex .view .w .1 .PHONY: @@ -99,15 +100,7 @@ sha1sum: sha1.o $(CXX) -DSHA1_SUM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) sha1.c $(CXX) $(LDFLAGS) -L. -o $@ sha1.o $(LIBS) $(DLIB) -lbac $(OPENSSL_LIBS) -lm rm -f sha1.o - $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) sha1.c - -bsnprintf: bsnprintf.o - rm -f bsnprintf.o - $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) bsnprintf.c - $(CXX) $(LDFLAGS) -L. -o $@ bsnprintf.o $(LIBS) $(DLIB) -lbac $(OPENSSL_LIBS) -lm - rm -f bsnprintf.o - $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) bsnprintf.c - + $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) md5.c install: @@ -130,6 +123,7 @@ distclean: realclean # `semi'-automatic since dependencies are generated at distribution time. depend: + @$(RMF) -f Makefile.bak @$(MV) Makefile Makefile.bak @$(SED) "/^# DO NOT DELETE:/,$$ d" Makefile.bak > Makefile @$(ECHO) "# DO NOT DELETE: nice dependency list follows" >> Makefile @@ -141,5 +135,6 @@ depend: echo " ===== Something went wrong in make depend ====="; \ fi + # ----------------------------------------------------------------------- -# DO NOT DELETE: nice dependency list follows +# DO NOT DELETE: nice dependency list follows diff --git a/bacula/src/lib/alist.h b/bacula/src/lib/alist.h index 1682575703..e1c6e39ae7 100644 --- a/bacula/src/lib/alist.h +++ b/bacula/src/lib/alist.h @@ -26,17 +26,18 @@ * * Loop var through each member of list */ +#ifdef HAVE_GCC +#define foreach_alist(var, list) \ + for((var)=(typeof(var))(list)->first(); (var); (var)=(typeof(var))(list)->next() ) +#else #define foreach_alist(var, list) \ for((*((void **)&(var))=(void*)((list)->first())); \ (var); \ (*((void **)&(var))=(void*)((list)->next()))) - -#ifdef the_easy_way -#define foreach_alist(var, list) \ - for(((void*)(var))=(list)->first(); (var); ((void*)(var))=(list)->next()); ) #endif + /* Second arg of init */ enum { owned_by_alist = true, diff --git a/bacula/src/lib/attr.c b/bacula/src/lib/attr.c index 1b56f86618..379069075c 100644 --- a/bacula/src/lib/attr.c +++ b/bacula/src/lib/attr.c @@ -59,13 +59,13 @@ int unpack_attributes_record(JCR *jcr, int32_t stream, char *rec, ATTR *attr) * */ attr->stream = stream; - Dmsg1(400, "Attr: %s\n", rec); + Dmsg1(100, "Attr: %s\n", rec); if (sscanf(rec, "%d %d", &attr->file_index, &attr->type) != 2) { Jmsg(jcr, M_FATAL, 0, _("Error scanning attributes: %s\n"), rec); Dmsg1(100, "\nError scanning attributes. %s\n", rec); return 0; } - Dmsg2(400, "Got Attr: FilInx=%d type=%d\n", attr->file_index, attr->type); + Dmsg2(100, "Got Attr: FilInx=%d type=%d\n", attr->file_index, attr->type); if (attr->type & AR_DATA_STREAM) { attr->data_stream = 1; } else { @@ -96,7 +96,7 @@ int unpack_attributes_record(JCR *jcr, int32_t stream, char *rec, ATTR *attr) from_base64(&val, p); attr->data_stream = (int32_t)val; } - Dmsg7(400, "unpack_attr FI=%d Type=%d fname=%s attr=%s lname=%s attrEx=%s ds=%d\n", + Dmsg7(200, "unpack_attr FI=%d Type=%d fname=%s attr=%s lname=%s attrEx=%s ds=%d\n", attr->file_index, attr->type, attr->fname, attr->attr, attr->lname, attr->attrEx, attr->data_stream); *attr->ofname = 0; diff --git a/bacula/src/lib/bnet_pkt.c b/bacula/src/lib/bnet_pkt.c new file mode 100644 index 0000000000..d84d241b5f --- /dev/null +++ b/bacula/src/lib/bnet_pkt.c @@ -0,0 +1,153 @@ +/* + * Network Packet Utility Routines + * + * by Kern Sibbald, July MMII + * + * + * Version $Id$ + */ +/* + Copyright (C) 2002-2004 Kern Sibbald and John Walker + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program; if not, write to the Free + Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. + + */ + +#ifdef implemented + +#include "bacula.h" + +/* + * 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 + * Returns 0 on end of file + * Returns -1 on hard end of file (i.e. network connection close) + * Returns -2 on error + */ +int32_t +bnet_recv_pkt(BSOCK *bsock, BPKT *pkt, int *version) +{ + unser_declare; + short lversion; + int type; + + unser_begin(bsock->msg, 0); + unser_uint16(lversion); + *version = (int)lversion; + + + for ( ; pkt->type != BP_EOF; pkt++) { + if (pkt->id) { + ser_int8(BP_ID); + ser_string((char *)pkt->id); + } + ser_int8(pkt->type); + switch (pkt->type) { + case BP_CHAR: + ser_int8(*(int8_t *)pkt->value); + break; + case BP_INT32: + ser_int32(*(int32_t *)pkt->value); + break; + case BP_UINT32: + break; + ser_unit32(*(uint32_t *)pkt->value); + break; + case BP_INT64: + ser_int64(*(int64_t *)pkt->value); + break; + case BP_BTIME: + case BP_UTIME: + case BP_UINT64: + ser_uint64(*(uint64_t *)pkt->value); + break; + case BP_POOL: + case BP_STRING: + case BP_NAME: + ser_string((char *)pkt->value); + break; + case BP_BYTES: + ser_uint32(*(uint32_t *)pkt->len); + ser_bytes((char *)pkt->value, pkt->len); + break; + default: + Emsg1(M_ABORT, 0, _("Unknown BPKT type: %d\n"), pkt->type); + } + } + unser_end(bsock->msg, 0); + +} + +/* + * 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: 0 on failure + * 1 on success + */ +int +bnet_send_pkt(BSOCK *bsock, BPKT *pkt, int version) +{ + ser_declare; + + ser_begin(bsock->msg, 0); + ser_uint16(version); + + for ( ; pkt->type != BP_EOF; pkt++) { + if (pkt->id) { + ser_int8(BP_ID); + ser_string((char *)pkt->id); + } + ser_int8(pkt->type); + switch (pkt->type) { + case BP_CHAR: + ser_int8(*(int8_t *)pkt->value); + break; + case BP_INT32: + ser_int32(*(int32_t *)pkt->value); + break; + case BP_UINT32: + break; + ser_unit32(*(uint32_t *)pkt->value); + break; + case BP_INT64: + ser_int64(*(int64_t *)pkt->value); + break; + case BP_BTIME: + case BP_UTIME: + case BP_UINT64: + ser_uint64(*(uint64_t *)pkt->value); + break; + case BP_POOL: + case BP_STRING: + case BP_NAME: + ser_string((char *)pkt->value); + break; + case BP_BYTES: + ser_uint32(*(uint32_t *)pkt->len); + ser_bytes((char *)pkt->value, pkt->len); + break; + default: + Emsg1(M_ABORT, 0, _("Unknown BPKT type: %d\n"), pkt->type); + } + } + ser_end(bsock->msg, 0); +} + +#endif diff --git a/bacula/src/lib/bpipe.c b/bacula/src/lib/bpipe.c index ca82913663..b87f106ab5 100644 --- a/bacula/src/lib/bpipe.c +++ b/bacula/src/lib/bpipe.c @@ -6,7 +6,7 @@ * Version $Id$ */ /* - Copyright (C) 2002-2005 Kern Sibbald + Copyright (C) 2002-2006 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -62,13 +62,13 @@ BPIPE *open_bpipe(char *prog, int wait, const char *mode) printf("argc=%d argv=%s:\n", i, bargv[i]); } #endif - free_pool_memory(tprog); /* Each pipe is one way, write one end, read the other, so we need two */ if (mode_write && pipe(writep) == -1) { save_errno = errno; free(bpipe); errno = save_errno; + free_pool_memory(tprog); return NULL; } if (mode_read && pipe(readp) == -1) { @@ -79,6 +79,7 @@ BPIPE *open_bpipe(char *prog, int wait, const char *mode) } free(bpipe); errno = save_errno; + free_pool_memory(tprog); return NULL; } /* Start worker process */ @@ -95,6 +96,7 @@ BPIPE *open_bpipe(char *prog, int wait, const char *mode) } free(bpipe); errno = save_errno; + free_pool_memory(tprog); return NULL; case 0: /* child */ @@ -120,11 +122,10 @@ BPIPE *open_bpipe(char *prog, int wait, const char *mode) } exit(255); /* unknown errno */ - - default: /* parent */ break; } + free_pool_memory(tprog); if (mode_read) { close(readp[1]); /* close unused parent fds */ bpipe->rfd = fdopen(readp[0], "r"); /* open file descriptor */ diff --git a/bacula/src/lib/bsnprintf.c b/bacula/src/lib/bsnprintf.c deleted file mode 100644 index bd6c2a19d4..0000000000 --- a/bacula/src/lib/bsnprintf.c +++ /dev/null @@ -1,913 +0,0 @@ -/* - * Copyright Patrick Powell 1995 - * - * This code is based on code written by Patrick Powell - * (papowell@astart.com) It may be used for any purpose as long - * as this notice remains intact on all source code distributions. - * - * Adapted for Bacula -- note there were lots of bugs in - * the original code: %lld and %s were seriously broken, and - * with FP turned off %f seg faults. - * Kern Sibbald, November MMV - * - * Version $Id$ - */ - - -#include "bacula.h" -#define FP_OUTPUT 1 /* Bacula uses floating point */ - -/* - Temp only for me -- NOT YET READY FOR USE -- seems to work fine - on Linux, but doesn't build correctly on Win32 - */ -#ifdef USE_BSNPRINTF - -#ifdef HAVE_LONG_DOUBLE -#define LDOUBLE long double -#else -#define LDOUBLE double -#endif - -int bvsnprintf(char *buffer, int32_t maxlen, const char *format, va_list args); -static int32_t fmtstr(char *buffer, int32_t currlen, int32_t maxlen, - char *value, int flags, int min, int max); -static int32_t fmtint(char *buffer, int32_t currlen, int32_t maxlen, - int64_t value, int base, int min, int max, int flags); - -#ifdef FP_OUTPUT -# ifdef HAVE_FCVTL -# define fcvt fcvtl -# endif -static int32_t fmtfp(char *buffer, int32_t currlen, int32_t maxlen, - LDOUBLE fvalue, int min, int max, int flags); -#else -#define fmtfp(b, c, m, f, min, max, fl) currlen -#endif - -#define outch(c) {int len=currlen; if (currlen++ < maxlen) { buffer[len] = (c);}} - - -/* format read states */ -#define DP_S_DEFAULT 0 -#define DP_S_FLAGS 1 -#define DP_S_MIN 2 -#define DP_S_DOT 3 -#define DP_S_MAX 4 -#define DP_S_MOD 5 -#define DP_S_CONV 6 -#define DP_S_DONE 7 - -/* format flags - Bits */ -#define DP_F_MINUS (1 << 0) -#define DP_F_PLUS (1 << 1) -#define DP_F_SPACE (1 << 2) -#define DP_F_NUM (1 << 3) -#define DP_F_ZERO (1 << 4) -#define DP_F_UP (1 << 5) -#define DP_F_UNSIGNED (1 << 6) -#define DP_F_DOT (1 << 7) - -/* Conversion Flags */ -#define DP_C_INT16 1 -#define DP_C_INT32 2 -#define DP_C_LDOUBLE 3 -#define DP_C_INT64 4 - -#define char_to_int(p) ((p)- '0') -#define MAX(p,q) (((p) >= (q)) ? (p) : (q)) - -/* - 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. - */ - -int bsnprintf(char *str, int32_t size, const char *fmt, ...) -{ - va_list arg_ptr; - int len; - - va_start(arg_ptr, fmt); - len = bvsnprintf(str, size, fmt, arg_ptr); - va_end(arg_ptr); - return len; -} - - -int bvsnprintf(char *buffer, int32_t maxlen, const char *format, va_list args) -{ - char ch; - int64_t value; - char *strvalue; - int min; - int max; - int state; - int flags; - int cflags; - int32_t currlen; - int base; - int junk; -#ifdef FP_OUTPUT - LDOUBLE fvalue; -#endif - - state = DP_S_DEFAULT; - currlen = flags = cflags = min = 0; - max = -1; - ch = *format++; - *buffer = 0; - - while (state != DP_S_DONE) { - if ((ch == '\0') || (currlen >= maxlen)) - state = DP_S_DONE; - - switch (state) { - case DP_S_DEFAULT: - if (ch == '%') { - state = DP_S_FLAGS; - } else { - outch(ch); - } - ch = *format++; - break; - case DP_S_FLAGS: - switch (ch) { - case '-': - flags |= DP_F_MINUS; - ch = *format++; - break; - case '+': - flags |= DP_F_PLUS; - ch = *format++; - break; - case ' ': - flags |= DP_F_SPACE; - ch = *format++; - break; - case '#': - flags |= DP_F_NUM; - ch = *format++; - break; - case '0': - flags |= DP_F_ZERO; - ch = *format++; - break; - default: - state = DP_S_MIN; - break; - } - break; - case DP_S_MIN: - if (isdigit((unsigned char)ch)) { - min = 10 * min + char_to_int(ch); - ch = *format++; - } else if (ch == '*') { -#ifdef SECURITY_PROBLEM - min = va_arg(args, int); -#else - junk = va_arg(args, int); -#endif - ch = *format++; - state = DP_S_DOT; - } else - state = DP_S_DOT; - break; - case DP_S_DOT: - if (ch == '.') { - state = DP_S_MAX; - flags |= DP_F_DOT; - ch = *format++; - } else - state = DP_S_MOD; - break; - case DP_S_MAX: - if (isdigit((unsigned char)ch)) { - if (max < 0) - max = 0; - max = 10 * max + char_to_int(ch); - ch = *format++; - } else if (ch == '*') { -#ifdef SECURITY_PROBLEM - max = va_arg(args, int); -#else - junk = va_arg(args, int); -#endif - ch = *format++; - state = DP_S_MOD; - } else - state = DP_S_MOD; - break; - case DP_S_MOD: - switch (ch) { - case 'h': - cflags = DP_C_INT16; - ch = *format++; - break; - case 'l': - cflags = DP_C_INT32; - ch = *format++; - if (ch == 'l') { /* It's a long long */ - cflags = DP_C_INT64; - ch = *format++; - } - break; - case 'L': - cflags = DP_C_LDOUBLE; - ch = *format++; - break; - default: - break; - } - state = DP_S_CONV; - break; - case DP_S_CONV: - switch (ch) { - case 'd': - case 'i': - if (cflags == DP_C_INT16) { - value = va_arg(args, int32_t); - } else if (cflags == DP_C_INT32) { - value = va_arg(args, int32_t); - } else if (cflags == DP_C_INT64) { - value = va_arg(args, int64_t); - } else { - value = va_arg(args, int); - } - currlen = fmtint(buffer, currlen, maxlen, value, 10, min, max, flags); - break; - case 'X': - case 'x': - case 'o': - case 'u': - if (ch == 'o') { - base = 8; - } else if (ch == 'x') { - base = 16; - } else if (ch == 'X') { - base = 16; - flags |= DP_F_UP; - } else { - base = 10; - } - flags |= DP_F_UNSIGNED; - if (cflags == DP_C_INT16) { - value = va_arg(args, uint32_t); - } else if (cflags == DP_C_INT32) { - value = (long)va_arg(args, uint32_t); - } else if (cflags == DP_C_INT64) { - value = (int64_t) va_arg(args, uint64_t); - } else { - value = (long)va_arg(args, unsigned int); - } - currlen = fmtint(buffer, currlen, maxlen, value, base, min, max, flags); - break; - case 'f': - if (cflags == DP_C_LDOUBLE) { - fvalue = va_arg(args, LDOUBLE); - } else { - fvalue = va_arg(args, double); - } - currlen = fmtfp(buffer, currlen, maxlen, fvalue, min, max, flags); - break; - case 'E': - flags |= DP_F_UP; - case 'e': - if (cflags == DP_C_LDOUBLE) { - fvalue = va_arg(args, LDOUBLE); - } else { - fvalue = va_arg(args, double); - } - currlen = fmtfp(buffer, currlen, maxlen, fvalue, min, max, flags); - break; - case 'G': - flags |= DP_F_UP; - case 'g': - if (cflags == DP_C_LDOUBLE) { - fvalue = va_arg(args, LDOUBLE); - } else { - fvalue = va_arg(args, double); - } - currlen = fmtfp(buffer, currlen, maxlen, fvalue, min, max, flags); - break; - case 'c': - outch(va_arg(args, int)); - break; - case 's': - strvalue = va_arg(args, char *); - currlen = fmtstr(buffer, currlen, maxlen, strvalue, flags, min, max); - break; - case 'p': - strvalue = va_arg(args, char *); - currlen = fmtint(buffer, currlen, maxlen, (long)strvalue, 16, min, max, flags); - break; - case 'n': - if (cflags == DP_C_INT16) { - int16_t *num; - num = va_arg(args, int16_t *); -#ifdef SECURITY_PROBLEM - *num = currlen; -#endif - } else if (cflags == DP_C_INT32) { - int32_t *num; - num = va_arg(args, int32_t *); -#ifdef SECURITY_PROBLEM - *num = (int32_t)currlen; -#endif - } else if (cflags == DP_C_INT64) { - int64_t *num; - num = va_arg(args, int64_t *); -#ifdef SECURITY_PROBLEM - *num = (int64_t)currlen; -#endif - } else { - int32_t *num; - num = va_arg(args, int32_t *); -#ifdef SECURITY_PROBLEM - *num = (int32_t)currlen; -#endif - } - break; - case '%': - outch(ch); - break; - case 'w': - /* not supported yet, treat as next char */ - ch = *format++; - break; - default: - /* Unknown, skip */ - break; - } - ch = *format++; - state = DP_S_DEFAULT; - flags = cflags = min = 0; - max = -1; - break; - case DP_S_DONE: - break; - default: - /* hmm? */ - break; /* some picky compilers need this */ - } - } - if (currlen < maxlen - 1) { - buffer[currlen] = '\0'; - } else { - buffer[maxlen - 1] = '\0'; - } - return currlen; -} - -static int32_t fmtstr(char *buffer, int32_t currlen, int32_t maxlen, - char *value, int flags, int min, int max) -{ - int padlen, strln; /* amount to pad */ - int cnt = 0; - - if (value == 0) { - value = ""; - } - - if (flags & DP_F_DOT && max < 0) { /* Max not specified */ - max = 0; - } else if (max < 0) { - max = maxlen; - } - strln = strlen(value); - if (strln > max) { - strln = max; /* truncate to max */ - } - padlen = min - strln; - if (padlen < 0) { - padlen = 0; - } - if (flags & DP_F_MINUS) { - padlen = -padlen; /* Left Justify */ - } - - while (padlen > 0) { - outch(' '); - --padlen; - } - while (*value && (cnt < max)) { - outch(*value++); - ++cnt; - } - while (padlen < 0) { - outch(' '); - ++padlen; - } - return currlen; -} - -/* Have to handle DP_F_NUM (ie 0x and 0 alternates) */ - -static int32_t fmtint(char *buffer, int32_t currlen, int32_t maxlen, - int64_t value, int base, int min, int max, int flags) -{ - int signvalue = 0; - uint64_t uvalue; - char convert[20]; - int place = 0; - int spadlen = 0; /* amount to space pad */ - int zpadlen = 0; /* amount to zero pad */ - int caps = 0; - - if (max < 0) { - max = 0; - } - - uvalue = value; - - if (!(flags & DP_F_UNSIGNED)) { - if (value < 0) { - signvalue = '-'; - uvalue = -value; - } else if (flags & DP_F_PLUS) { /* Do a sign (+/i) */ - signvalue = '+'; - } else if (flags & DP_F_SPACE) { - signvalue = ' '; - } - } - - if (flags & DP_F_UP) { - caps = 1; /* Should characters be upper case? */ - } - - do { - convert[place++] = (caps ? "0123456789ABCDEF" : "0123456789abcdef") - [uvalue % (unsigned)base]; - uvalue = (uvalue / (unsigned)base); - } while (uvalue && (place < 20)); - if (place == 20) { - place--; - } - convert[place] = 0; - - zpadlen = max - place; - spadlen = min - MAX(max, place) - (signvalue ? 1 : 0); - if (zpadlen < 0) - zpadlen = 0; - if (spadlen < 0) - spadlen = 0; - if (flags & DP_F_ZERO) { - zpadlen = MAX(zpadlen, spadlen); - spadlen = 0; - } - if (flags & DP_F_MINUS) - spadlen = -spadlen; /* Left Justifty */ - -#ifdef DEBUG_SNPRINTF - printf("zpad: %d, spad: %d, min: %d, max: %d, place: %d\n", - zpadlen, spadlen, min, max, place); -#endif - - /* Spaces */ - while (spadlen > 0) { - outch(' '); - --spadlen; - } - - /* Sign */ - if (signvalue) { - outch(signvalue); - } - - /* Zeros */ - if (zpadlen > 0) { - while (zpadlen > 0) { - outch('0'); - --zpadlen; - } - } - - /* Digits */ - while (place > 0) { - outch(convert[--place]); - } - - /* Left Justified spaces */ - while (spadlen < 0) { - outch(' '); - ++spadlen; - } - return currlen; -} - -#ifdef FP_OUTPUT - -static LDOUBLE abs_val(LDOUBLE value) -{ - LDOUBLE result = value; - - if (value < 0) - result = -value; - - return result; -} - -static LDOUBLE pow10(int exp) -{ - LDOUBLE result = 1; - - while (exp) { - result *= 10; - exp--; - } - - return result; -} - -static long round(LDOUBLE value) -{ - long intpart; - - intpart = (long)value; - value = value - intpart; - if (value >= 0.5) - intpart++; - - return intpart; -} - -static int32_t fmtfp(char *buffer, int32_t currlen, int32_t maxlen, - LDOUBLE fvalue, int min, int max, int flags) -{ - int signvalue = 0; - LDOUBLE ufvalue; -#ifndef HAVE_FCVT - char iconvert[20]; - char fconvert[20]; -#else - char iconvert[311]; - char fconvert[311]; - char *result; - int dec_pt, sig; - int r_length; - extern char *fcvt(double value, int ndigit, int *decpt, int *sign); -#endif - int iplace = 0; - int fplace = 0; - int padlen = 0; /* amount to pad */ - int zpadlen = 0; - int caps = 0; - int64_t intpart; - int64_t fracpart; - - /* - * AIX manpage says the default is 0, but Solaris says the default - * is 6, and sprintf on AIX defaults to 6 - */ - if (max < 0) - max = 6; - - ufvalue = abs_val(fvalue); - - if (fvalue < 0) - signvalue = '-'; - else if (flags & DP_F_PLUS) /* Do a sign (+/i) */ - signvalue = '+'; - 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 = (long)ufvalue; - - /* - * Sorry, we only support 9 digits past the decimal because of our - * conversion method - */ - if (max > 9) - max = 9; - - /* We "cheat" by converting the fractional part to integer by - * multiplying by a factor of 10 - */ - fracpart = round((pow10(max)) * (ufvalue - intpart)); - - if (fracpart >= pow10(max)) { - intpart++; - fracpart -= (int64_t)pow10(max); - } -#ifdef DEBUG_SNPRINTF - printf("fmtfp: %g %d.%d min=%d max=%d\n", - (double)fvalue, intpart, fracpart, min, max); -#endif - - /* Convert integer part */ - do { - iconvert[iplace++] = - (caps ? "0123456789ABCDEF" : "0123456789abcdef")[intpart % 10]; - intpart = (intpart / 10); - } while (intpart && (iplace < 20)); - if (iplace == 20) - iplace--; - iconvert[iplace] = 0; - - /* Convert fractional part */ - do { - fconvert[fplace++] = - (caps ? "0123456789ABCDEF" : "0123456789abcdef")[fracpart % 10]; - fracpart = (fracpart / 10); - } while (fracpart && (fplace < 20)); - if (fplace == 20) - fplace--; - fconvert[fplace] = 0; -#else /* use fcvt() */ - if (max > 310) - max = 310; -# ifdef HAVE_FCVTL - result = fcvtl(ufvalue, max, &dec_pt, &sig); -# else - result = fcvt(ufvalue, max, &dec_pt, &sig); -# endif - - r_length = strlen(result); - - /* - * Fix broken fcvt implementation returns.. - */ - - if (r_length == 0) { - result[0] = '0'; - result[1] = '\0'; - r_length = 1; - } - - if (r_length < dec_pt) - dec_pt = r_length; - - if (dec_pt <= 0) { - iplace = 1; - iconvert[0] = '0'; - iconvert[1] = '\0'; - - fplace = 0; - - while (r_length) - fconvert[fplace++] = result[--r_length]; - - while ((dec_pt < 0) && (fplace < max)) { - fconvert[fplace++] = '0'; - dec_pt++; - } - } else { - int c; - - iplace = 0; - for (c = dec_pt; c; iconvert[iplace++] = result[--c]); - iconvert[iplace] = '\0'; - - result += dec_pt; - fplace = 0; - - for (c = (r_length - dec_pt); c; fconvert[fplace++] = result[--c]); - } -#endif /* HAVE_FCVT */ - - /* -1 for decimal point, another -1 if we are printing a sign */ - padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0); - zpadlen = max - fplace; - if (zpadlen < 0) { - zpadlen = 0; - } - if (padlen < 0) { - padlen = 0; - } - if (flags & DP_F_MINUS) { - padlen = -padlen; /* Left Justifty */ - } - - if ((flags & DP_F_ZERO) && (padlen > 0)) { - if (signvalue) { - outch(signvalue); - --padlen; - signvalue = 0; - } - while (padlen > 0) { - outch('0'); - --padlen; - } - } - while (padlen > 0) { - outch(' '); - --padlen; - } - if (signvalue) { - outch(signvalue); - } - - while (iplace > 0) { - outch(iconvert[--iplace]); - } - - -#ifdef DEBUG_SNPRINTF - printf("fmtfp: fplace=%d zpadlen=%d\n", fplace, zpadlen); -#endif - - /* - * Decimal point. This should probably use locale to find the correct - * char to print out. - */ - if (max > 0) { - outch('.'); - while (fplace > 0) { - outch(fconvert[--fplace]); - } - } - - while (zpadlen > 0) { - outch('0'); - --zpadlen; - } - - while (padlen < 0) { - outch(' '); - ++padlen; - } - return currlen; -} -#endif /* FP_OUTPUT */ - - -#ifdef TEST_PROGRAM - -#ifndef LONG_STRING -#define LONG_STRING 1024 -#endif -int main(void) -{ - char buf1[LONG_STRING]; - char buf2[LONG_STRING]; - -#ifdef FP_OUTPUT - char *fp_fmt[] = { - "%-1.5f", - "%1.5f", - "%123.9f", - "%10.5f", - "% 10.5f", - "%+22.9f", - "%+4.9f", - "%01.3f", - "%4f", - "%3.1f", - "%3.2f", - "%.0f", - "%.1f", - NULL - }; - double fp_nums[] = { -1.5, 134.21, 91340.2, 341.1234, 0203.9, 0.96, 0.996, - 0.9996, 1.996, 4.136, 6442452944.1234, 0 - }; -#endif - char *int_fmt[] = { - "%-1.5d", - "%1.5d", - "%123.9d", - "%5.5d", - "%10.5d", - "% 10.5d", - "%+22.33d", - "%01.3d", - "%4d", - "%-1.5ld", - "%1.5ld", - "%123.9ld", - "%5.5ld", - "%10.5ld", - "% 10.5ld", - "%+22.33ld", - "%01.3ld", - "%4ld", - NULL - }; - long int_nums[] = { -1, 134, 91340, 341, 0203, 0 }; - - char *ll_fmt[] = { - "%-1.8lld", - "%1.8lld", - "%123.9lld", - "%5.8lld", - "%10.5lld", - "% 10.8lld", - "%+22.33lld", - "%01.3lld", - "%4lld", - NULL - }; - int64_t ll_nums[] = { -1976, 789134567890LL, 91340, 34123, 0203, 0 }; - - char *s_fmt[] = { - "%-1.8s", - "%1.8s", - "%123.9s", - "%5.8s", - "%10.5s", - "% 10.3s", - "%+22.1s", - "%01.3s", - "%s", - "%10s", - "%3s", - "%3.0s", - "%3.s", - NULL - }; - char *s_nums[] = { "abc", "def", "ghi", "123", "4567", "a", "bb", "ccccccc", NULL}; - - - int x, y; - int fail = 0; - int num = 0; - - printf("Testing snprintf format codes against system sprintf...\n"); - -#ifdef FP_OUTPUT - for (x = 0; fp_fmt[x] != NULL; x++) - for (y = 0; fp_nums[y] != 0; y++) { - bsnprintf(buf1, sizeof(buf1), fp_fmt[x], fp_nums[y]); - sprintf(buf2, fp_fmt[x], fp_nums[y]); - if (strcmp(buf1, buf2)) { - printf - ("snprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n", - fp_fmt[x], buf1, buf2); - fail++; - } - num++; - } -#endif - - for (x = 0; int_fmt[x] != NULL; x++) - for (y = 0; int_nums[y] != 0; y++) { - int pcount, bcount; - bcount = bsnprintf(buf1, sizeof(buf1), int_fmt[x], int_nums[y]); - printf("%s\n", buf1); - pcount = sprintf(buf2, int_fmt[x], int_nums[y]); - if (bcount != pcount) { - printf("bsnprintf count %d doesn't match sprintf count %d\n", - bcount, pcount); - } - if (strcmp(buf1, buf2)) { - printf - ("bsnprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n", - int_fmt[x], buf1, buf2); - fail++; - } - num++; - } - - for (x = 0; ll_fmt[x] != NULL; x++) { - for (y = 0; ll_nums[y] != 0; y++) { - int pcount, bcount; - bcount = bsnprintf(buf1, sizeof(buf1), ll_fmt[x], ll_nums[y]); - printf("%s\n", buf1); - pcount = sprintf(buf2, ll_fmt[x], ll_nums[y]); - if (bcount != pcount) { - printf("bsnprintf count %d doesn't match sprintf count %d\n", - bcount, pcount); - } - if (strcmp(buf1, buf2)) { - printf - ("bsnprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n", - ll_fmt[x], buf1, buf2); - fail++; - } - num++; - } - } - - for (x = 0; s_fmt[x] != NULL; x++) { - for (y = 0; s_nums[y] != 0; y++) { - int pcount, bcount; - bcount = bsnprintf(buf1, sizeof(buf1), s_fmt[x], s_nums[y]); - printf("%s\n", buf1); - pcount = sprintf(buf2, s_fmt[x], s_nums[y]); - if (bcount != pcount) { - printf("bsnprintf count %d doesn't match sprintf count %d\n", - bcount, pcount); - } - if (strcmp(buf1, buf2)) { - printf - ("bsnprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n", - s_fmt[x], buf1, buf2); - fail++; - } - num++; - } - } - - - printf("%d tests failed out of %d.\n", fail, num); -} -#endif /* TEST_PROGRAM */ - -#endif /* USE_BSNPRINTF */ diff --git a/bacula/src/lib/btree.c b/bacula/src/lib/btree.c deleted file mode 100644 index 5b822ba9cf..0000000000 --- a/bacula/src/lib/btree.c +++ /dev/null @@ -1,477 +0,0 @@ -/* - * Bacula red-black binary tree routines. - * - * btree is a binary tree with the links being in the data item. - * - * Developped in part from ideas obtained from several online University - * courses. - * - * Kern Sibbald, November MMV - * - * Version $Id$ - * - */ -/* - Copyright (C) 2005 Kern Sibbald - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as amended with additional clauses defined in the - file LICENSE in the main source directory. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - the file LICENSE for additional details. - - */ - -#include "bacula.h" -#include "btree.h" - -/* =================================================================== - * btree - */ - -/* - * 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 - * to avoid recursion. - * - * Returns: item if item inserted - * other_item if same value already exists (item not inserted) - */ -bnode *btree::insert(bnode *item, int compare(bnode *item1, bnode *item2)) -{ - bnode *x, *y; - bnode *last = NULL; /* last leaf if not found */ - bnode *found = NULL; - int comp = 0; - - /* Search */ - x = head; - while (x && !found) { - last = x; - comp = compare(item, x); - if (comp < 0) { - x = x->left; - } else if (comp > 0) { - x = x->right; - } else { - found = x; - } - } - - if (found) { /* found? */ - return found; /* yes, return item found */ - } - /* Handle empty tree */ - if (num_items == 0) { - head = item; - num_items++; - return item; - } - x = last; - /* Not found, so insert it on appropriate side of tree */ - if (comp < 0) { - last->left = item; - } else { - last->right = item; - } - last->red = true; - item->parent = last; - num_items++; - - /* Now we must walk up the tree balancing it */ - x = last; - while (x != head && x->parent->red) { - if (x->parent == x->parent->parent->left) { - /* Look at the right side of our grandparent */ - y = x->parent->parent->right; - if (y && y->red) { - /* our parent must be black */ - x->parent->red = false; - y->red = false; - x->parent->parent->red = true; - x = x->parent->parent; /* move up to grandpa */ - } else { - if (x == x->parent->right) { /* right side of parent? */ - x = x->parent; - left_rotate(x); - } - /* make parent black too */ - x->parent->red = false; - x->parent->parent->red = true; - right_rotate(x->parent->parent); - } - } else { - /* Look at left side of our grandparent */ - y = x->parent->parent->left; - if (y && y->red) { - x->parent->red = false; - y->red = false; - x->parent->parent->red = true; - x = x->parent->parent; /* move up to grandpa */ - } else { - if (x == x->parent->left) { - x = x->parent; - right_rotate(x); - } - /* make parent black too */ - x->parent->red = false; - x->parent->parent->red = true; - left_rotate(x->parent->parent); - } - } - } - /* Make sure the head is always black */ - head->red = false; - return item; -} - - -/* - * Search for item - */ -bnode *btree::search(bnode *item, int compare(bnode *item1, bnode *item2)) -{ - bnode *found = NULL; - bnode *x; - int comp; - - x = head; - while (x) { - comp = compare(item, x); - if (comp < 0) { - x = x->left; - } else if (comp > 0) { - x = x->right; - } else { - found = x; - break; - } - } - return found; -} - -/* - * Get first item (i.e. lowest value) - */ -bnode *btree::first(void) -{ - bnode *x; - - x = head; - down = true; - while (x) { - if (x->left) { - x = x->left; - continue; - } - return x; - } - /* Tree is empty */ - return NULL; -} - -/* - * This is a non-recursive btree walk routine that returns - * the items one at a time in order. I've never seen a - * non-recursive tree walk routine published that returns - * one item at a time rather than doing a callback. - * - * Return the next item in sorted order. We assume first() - * 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. - * - * Returns: pointer to next larger item - * NULL when no more items in tree - */ -bnode *btree::next(bnode *item) -{ - bnode *x; - - x = item; - if ((down && !x->left && x->right) || (!down && x->right)) { - /* Move down to right one */ - down = true; - x = x->right; - /* Then all the way down left */ - while (x->left) { - x = x->left; - } - return x; - } - - /* We have gone down all we can, so now go up */ - for ( ;; ) { - /* If at head, we are done */ - if (!x->parent) { - return NULL; - } - /* Move up in tree */ - down = false; - /* if coming from right, continue up */ - if (x->parent->right == x) { - x = x->parent; - continue; - } - /* Coming from left, go up one -- ie. return parent */ - return x->parent; - } -} - -/* - * Similer to next(), but visits all right nodes when - * coming up the tree. - */ -bnode *btree::any(bnode *item) -{ - bnode *x; - - x = item; - if ((down && !x->left && x->right) || (!down && x->right)) { - /* Move down to right one */ - down = true; - x = x->right; - /* Then all the way down left */ - while (x->left) { - x = x->left; - } - return x; - } - - /* We have gone down all we can, so now go up */ - for ( ;; ) { - /* If at head, we are done */ - if (!x->parent) { - return NULL; - } - down = false; - /* Go up one and return parent */ - return x->parent; - } -} - - -/* x is item, y is below and to right, then rotated to below left */ -void btree::left_rotate(bnode *item) -{ - bnode *y; - bnode *x; - - x = item; - y = x->right; - x->right = y->left; - if (y->left) { - y->left->parent = x; - } - y->parent = x->parent; - /* if no parent then we have a new head */ - if (!x->parent) { - head = y; - } else if (x == x->parent->left) { - x->parent->left = y; - } else { - x->parent->right = y; - } - y->left = x; - x->parent = y; -} - -void btree::right_rotate(bnode *item) -{ - bnode *x, *y; - - y = item; - x = y->left; - y->left = x->right; - if (x->right) { - x->right->parent = y; - } - x->parent = y->parent; - /* if no parent then we have a new head */ - if (!y->parent) { - head = x; - } else if (y == y->parent->left) { - y->parent->left = x; - } else { - y->parent->right = x; - } - x->right = y; - y->parent = x; -} - - -void btree::remove(bnode *item) -{ -} - -/* Destroy the tree contents. Not totally working */ -void btree::destroy() -{ - bnode *x, *y = NULL; - - x = first(); -// printf("head=%p first=%p left=%p right=%p\n", head, x, x->left, x->right); - - for ( ; (y=any(x)); ) { - /* Prune the last item */ - if (x->parent) { - if (x == x->parent->left) { - x->parent->left = NULL; - } else if (x == x->parent->right) { - x->parent->right = NULL; - } - } - if (!x->left && !x->right) { - if (head == x) { - head = NULL; - } -// if (num_items<30) { -// printf("free nitems=%d item=%p left=%p right=%p\n", num_items, x, x->left, x->right); -// } - free((void *)x); /* free previous node */ - num_items--; - } - x = y; /* save last node */ - } - if (x) { - if (x == head) { - head = NULL; - } -// printf("free nitems=%d item=%p left=%p right=%p\n", num_items, x, x->left, x->right); - free((void *)x); - num_items--; - } - if (head) { -// printf("Free head\n"); - free((void *)head); - } -// printf("free nitems=%d\n", num_items); - - head = NULL; -} - - - -#ifdef TEST_PROGRAM - -struct MYJCR { - bnode link; - char *buf; -}; - -static int my_compare(bnode *item1, bnode *item2) -{ - MYJCR *jcr1, *jcr2; - int comp; - jcr1 = (MYJCR *)item1; - jcr2 = (MYJCR *)item2; - comp = strcmp(jcr1->buf, jcr2->buf); - //Dmsg3(000, "compare=%d: %s to %s\n", comp, jcr1->buf, jcr2->buf); - return comp; -} - -int main() -{ - char buf[30]; - btree *jcr_chain; - MYJCR *jcr = NULL; - MYJCR *jcr1; - - - /* Now do a binary insert for the tree */ - jcr_chain = New(btree()); -#define CNT 26 - printf("append %d items\n", CNT*CNT*CNT); - strcpy(buf, "ZZZ"); - int count = 0; - for (int i=0; ibuf = bstrdup(buf); -// printf("buf=%p %s\n", jcr, jcr->buf); - jcr1 = (MYJCR *)jcr_chain->insert((bnode *)jcr, my_compare); - if (jcr != jcr1) { - Dmsg2(000, "Insert of %s vs %s failed.\n", jcr->buf, jcr1->buf); - } - buf[1]--; - } - buf[1] = 'Z'; - buf[2]--; - } - buf[2] = 'Z'; - buf[0]--; - } - printf("%d items appended\n", CNT*CNT*CNT); - printf("num_items=%d\n", jcr_chain->size()); - - jcr = (MYJCR *)malloc(sizeof(MYJCR)); - memset(jcr, 0, sizeof(MYJCR)); - - jcr->buf = bstrdup("a"); - if ((jcr1=(MYJCR *)jcr_chain->search((bnode *)jcr, my_compare))) { - printf("One less failed!!!! Got: %s\n", jcr1->buf); - } else { - printf("One less: OK\n"); - } - free(jcr->buf); - - jcr->buf = bstrdup("ZZZZZZZZZZZZZZZZ"); - if ((jcr1=(MYJCR *)jcr_chain->search((bnode *)jcr, my_compare))) { - printf("One greater failed!!!! Got:%s\n", jcr1->buf); - } else { - printf("One greater: OK\n"); - } - free(jcr->buf); - - jcr->buf = bstrdup("AAA"); - if ((jcr1=(MYJCR *)jcr_chain->search((bnode *)jcr, my_compare))) { - printf("Search for AAA got %s\n", jcr1->buf); - } else { - printf("Search for AAA not found\n"); - } - free(jcr->buf); - - jcr->buf = bstrdup("ZZZ"); - if ((jcr1 = (MYJCR *)jcr_chain->search((bnode *)jcr, my_compare))) { - printf("Search for ZZZ got %s\n", jcr1->buf); - } else { - printf("Search for ZZZ not found\n"); - } - free(jcr->buf); - free(jcr); - - - printf("Find each of %d items in tree.\n", count); - for (jcr=(MYJCR *)jcr_chain->first(); jcr; (jcr=(MYJCR *)jcr_chain->next((bnode *)jcr)) ) { -// printf("Got: %s\n", jcr->buf); - if (!jcr_chain->search((bnode *)jcr, my_compare)) { - printf("btree binary_search item not found = %s\n", jcr->buf); - } - } - printf("Free each of %d items in tree.\n", count); - for (jcr=(MYJCR *)jcr_chain->first(); jcr; (jcr=(MYJCR *)jcr_chain->next((bnode *)jcr)) ) { -// printf("Free: %p %s\n", jcr, jcr->buf); - free(jcr->buf); - jcr->buf = NULL; - } - printf("num_items=%d\n", jcr_chain->size()); - delete jcr_chain; - - - sm_dump(true); - -} -#endif diff --git a/bacula/src/lib/btree.h b/bacula/src/lib/btree.h deleted file mode 100644 index df25085341..0000000000 --- a/bacula/src/lib/btree.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Version $Id$ - */ -/* - Copyright (C) 2005 Kern Sibbald - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as amended with additional clauses defined in the - file LICENSE in the main source directory. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - the file LICENSE for additional details. - - */ - - -/* ======================================================================== - * - * red-black binary tree routines -- btree.h - * - * Kern Sibbald, MMV - * - */ - -#define M_ABORT 1 - -/* - * There is a lot of extra casting here to work around the fact - * that some compilers (Sun and Visual C++) do not accept - * (bnode *) as an lvalue on the left side of an equal. - * - * Loop var through each member of list - */ -#define foreach_btree(var, tree) \ - for(*((bnode **)&(var))=(tree)->first(); (*((bnode **)&(var))=(tree)->next((bnode *)var)); ) - -#ifdef the_old_way -#define foreach_btree(var, tree) \ - for((var)=(tree)->first(); (((bnode *)(var))=(tree)->next((bnode *)var)); ) -#endif - -struct bnode; -struct bnode { - bnode *left; - bnode *right; - bnode *parent; - bool red; -}; - -class btree : public SMARTALLOC { - bnode *head; - uint32_t num_items; - bool down; - void left_rotate(bnode *item); - void right_rotate(bnode *item); -public: - btree(void); - ~btree() { destroy(); } - void init(void); - bnode *insert(bnode *item, int compare(bnode *item1, bnode *item2)); - bnode *search(bnode *item, int compare(bnode *item1, bnode *item2)); - bnode *first(void); - bnode *next(bnode *item); - bnode *any(bnode *item); - void remove(bnode *item); - int size() const; - void destroy(); -}; - - -/* - * This allows us to do explicit initialization, - * allowing us to mix C++ classes inside malloc'ed - * C structures. Define before called in constructor. - */ -inline void btree::init() -{ - head = NULL; - num_items = 0; -} - - -/* Constructor with link at head of item */ -inline btree::btree(void) : head(0), num_items(0) -{ -} - -inline int btree::size() const -{ - return num_items; -} diff --git a/bacula/src/lib/crypto.c b/bacula/src/lib/crypto.c deleted file mode 100644 index 7cc359c2a3..0000000000 --- a/bacula/src/lib/crypto.c +++ /dev/null @@ -1,1620 +0,0 @@ -/* - * crypto.c Encryption support functions - * - * Author: Landon Fuller - * - * Version $Id$ - * - * Copyright (C) 2005 Kern Sibbald - * - * This file was contributed to the Bacula project by Landon Fuller. - * - * Landon Fuller has been granted a perpetual, worldwide, non-exclusive, - * no-charge, royalty-free, irrevocable copyright license to reproduce, - * prepare derivative works of, publicly display, publicly perform, - * sublicense, and distribute the original work contributed by Landon Fuller - * to the Bacula project in source or object form. - * - * If you wish to license these contributions under an alternate open source - * license please contact Landon Fuller . - */ -/* - Copyright (C) 2005 Kern Sibbald - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as amended with additional clauses defined in the - file LICENSE in the main source directory. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - the file LICENSE for additional details. - - */ - - -#include "bacula.h" -#include - -/* - * Bacula ASN.1 Syntax - * - * OID Allocation: - * Prefix: iso.org.dod.internet.private.enterprise.threerings.external.bacula (1.3.6.1.4.1.22054.500.2) - * Organization: Bacula Project - * Contact Name: Kern Sibbald - * Contact E-mail: kern@sibbald.com - * - * Top Level Allocations - 500.2 - * 1 - Published Allocations - * 1.1 - Bacula Encryption - * - * Bacula Encryption - 500.2.1.1 - * 1 - ASN.1 Modules - * 1.1 - BaculaCrypto - * 2 - ASN.1 Object Identifiers - * 2.1 - SignatureData - * 2.2 - SignerInfo - * 2.3 - CryptoData - * 2.4 - RecipientInfo - * - * BaculaCrypto { iso(1) identified-organization(3) usdod(6) - * internet(1) private(4) enterprises(1) three-rings(22054) - * external(500) bacula(2) published(1) bacula-encryption(1) - * asn1-modules(1) bacula-crypto(1) } - * - * DEFINITIONS AUTOMATIC TAGS ::= - * BEGIN - * - * SignatureData ::= SEQUENCE { - * version Version DEFAULT v0, - * signerInfo SignerInfo } - * - * CryptoData ::= SEQUENCE { - * version Version DEFAULT v0, - * contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier, - * iv InitializationVector, - * recipientInfo RecipientInfo - * } - * - * SignerInfo ::= SET OF SignerInfo - * RecipientInfo ::= SET OF RecipientInfo - * - * Version ::= INTEGER { v0(0) } - * - * SignerInfo ::= SEQUENCE { - * version Version, - * subjectKeyIdentifier SubjectKeyIdentifier, - * digestAlgorithm DigestAlgorithmIdentifier, - * signatureAlgorithm SignatureAlgorithmIdentifier, - * signature SignatureValue } - * - * RecipientInfo ::= SEQUENCE { - * version Version - * subjectKeyIdentifier SubjectKeyIdentifier - * keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier - * encryptedKey EncryptedKey - * } - * - * SubjectKeyIdentifier ::= OCTET STRING - * - * DigestAlgorithmIdentifier ::= AlgorithmIdentifier - * - * SignatureAlgorithmIdentifier ::= AlgorithmIdentifier - * - * KeyEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier - * - * ContentEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier - * - * InitializationVector ::= OCTET STRING - * - * SignatureValue ::= OCTET STRING - * - * EncryptedKey ::= OCTET STRING - * - * AlgorithmIdentifier ::= OBJECT IDENTIFIER - * - * END - */ - -#ifdef HAVE_CRYPTO /* Is encryption enabled? */ -#ifdef HAVE_OPENSSL /* How about OpenSSL? */ - -/* Are we initialized? */ -static int crypto_initialized = false; - -/* ASN.1 Declarations */ -#define BACULA_ASN1_VERSION 0 - -typedef struct { - ASN1_INTEGER *version; - ASN1_OCTET_STRING *subjectKeyIdentifier; - ASN1_OBJECT *digestAlgorithm; - ASN1_OBJECT *signatureAlgorithm; - ASN1_OCTET_STRING *signature; -} SignerInfo; - -typedef struct { - ASN1_INTEGER *version; - ASN1_OCTET_STRING *subjectKeyIdentifier; - ASN1_OBJECT *keyEncryptionAlgorithm; - ASN1_OCTET_STRING *encryptedKey; -} RecipientInfo; - -ASN1_SEQUENCE(SignerInfo) = { - ASN1_SIMPLE(SignerInfo, version, ASN1_INTEGER), - ASN1_SIMPLE(SignerInfo, subjectKeyIdentifier, ASN1_OCTET_STRING), - ASN1_SIMPLE(SignerInfo, digestAlgorithm, ASN1_OBJECT), - ASN1_SIMPLE(SignerInfo, signatureAlgorithm, ASN1_OBJECT), - ASN1_SIMPLE(SignerInfo, signature, ASN1_OCTET_STRING) -} ASN1_SEQUENCE_END(SignerInfo); - -ASN1_SEQUENCE(RecipientInfo) = { - ASN1_SIMPLE(RecipientInfo, version, ASN1_INTEGER), - ASN1_SIMPLE(RecipientInfo, subjectKeyIdentifier, ASN1_OCTET_STRING), - ASN1_SIMPLE(RecipientInfo, keyEncryptionAlgorithm, ASN1_OBJECT), - ASN1_SIMPLE(RecipientInfo, encryptedKey, ASN1_OCTET_STRING), -} ASN1_SEQUENCE_END(RecipientInfo); - -typedef struct { - ASN1_INTEGER *version; - STACK_OF(SignerInfo) *signerInfo; -} SignatureData; - -typedef struct { - ASN1_INTEGER *version; - ASN1_OBJECT *contentEncryptionAlgorithm; - ASN1_OCTET_STRING *iv; - STACK_OF(RecipientInfo) *recipientInfo; -} CryptoData; - -ASN1_SEQUENCE(SignatureData) = { - ASN1_SIMPLE(SignatureData, version, ASN1_INTEGER), - ASN1_SET_OF(SignatureData, signerInfo, SignerInfo), -} ASN1_SEQUENCE_END(SignatureData); - -ASN1_SEQUENCE(CryptoData) = { - ASN1_SIMPLE(CryptoData, version, ASN1_INTEGER), - ASN1_SIMPLE(CryptoData, contentEncryptionAlgorithm, ASN1_OBJECT), - ASN1_SIMPLE(CryptoData, iv, ASN1_OCTET_STRING), - ASN1_SET_OF(CryptoData, recipientInfo, RecipientInfo) -} ASN1_SEQUENCE_END(CryptoData); - -IMPLEMENT_ASN1_FUNCTIONS(SignerInfo) -IMPLEMENT_ASN1_FUNCTIONS(RecipientInfo) -IMPLEMENT_ASN1_FUNCTIONS(SignatureData) -IMPLEMENT_ASN1_FUNCTIONS(CryptoData) -IMPLEMENT_STACK_OF(SignerInfo) -IMPLEMENT_STACK_OF(RecipientInfo) - -/* - * SignerInfo and RecipientInfo stack macros, generated by OpenSSL's util/mkstack.pl. - */ -#define sk_SignerInfo_new(st) SKM_sk_new(SignerInfo, (st)) -#define sk_SignerInfo_new_null() SKM_sk_new_null(SignerInfo) -#define sk_SignerInfo_free(st) SKM_sk_free(SignerInfo, (st)) -#define sk_SignerInfo_num(st) SKM_sk_num(SignerInfo, (st)) -#define sk_SignerInfo_value(st, i) SKM_sk_value(SignerInfo, (st), (i)) -#define sk_SignerInfo_set(st, i, val) SKM_sk_set(SignerInfo, (st), (i), (val)) -#define sk_SignerInfo_zero(st) SKM_sk_zero(SignerInfo, (st)) -#define sk_SignerInfo_push(st, val) SKM_sk_push(SignerInfo, (st), (val)) -#define sk_SignerInfo_unshift(st, val) SKM_sk_unshift(SignerInfo, (st), (val)) -#define sk_SignerInfo_find(st, val) SKM_sk_find(SignerInfo, (st), (val)) -#define sk_SignerInfo_delete(st, i) SKM_sk_delete(SignerInfo, (st), (i)) -#define sk_SignerInfo_delete_ptr(st, ptr) SKM_sk_delete_ptr(SignerInfo, (st), (ptr)) -#define sk_SignerInfo_insert(st, val, i) SKM_sk_insert(SignerInfo, (st), (val), (i)) -#define sk_SignerInfo_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SignerInfo, (st), (cmp)) -#define sk_SignerInfo_dup(st) SKM_sk_dup(SignerInfo, st) -#define sk_SignerInfo_pop_free(st, free_func) SKM_sk_pop_free(SignerInfo, (st), (free_func)) -#define sk_SignerInfo_shift(st) SKM_sk_shift(SignerInfo, (st)) -#define sk_SignerInfo_pop(st) SKM_sk_pop(SignerInfo, (st)) -#define sk_SignerInfo_sort(st) SKM_sk_sort(SignerInfo, (st)) -#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)) -#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) \ - SKM_ASN1_seq_pack(SignerInfo, (st), (i2d_func), (buf), (len)) -#define ASN1_seq_unpack_SignerInfo(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(SignerInfo, (buf), (len), (d2i_func), (free_func)) - -#define sk_RecipientInfo_new(st) SKM_sk_new(RecipientInfo, (st)) -#define sk_RecipientInfo_new_null() SKM_sk_new_null(RecipientInfo) -#define sk_RecipientInfo_free(st) SKM_sk_free(RecipientInfo, (st)) -#define sk_RecipientInfo_num(st) SKM_sk_num(RecipientInfo, (st)) -#define sk_RecipientInfo_value(st, i) SKM_sk_value(RecipientInfo, (st), (i)) -#define sk_RecipientInfo_set(st, i, val) SKM_sk_set(RecipientInfo, (st), (i), (val)) -#define sk_RecipientInfo_zero(st) SKM_sk_zero(RecipientInfo, (st)) -#define sk_RecipientInfo_push(st, val) SKM_sk_push(RecipientInfo, (st), (val)) -#define sk_RecipientInfo_unshift(st, val) SKM_sk_unshift(RecipientInfo, (st), (val)) -#define sk_RecipientInfo_find(st, val) SKM_sk_find(RecipientInfo, (st), (val)) -#define sk_RecipientInfo_delete(st, i) SKM_sk_delete(RecipientInfo, (st), (i)) -#define sk_RecipientInfo_delete_ptr(st, ptr) SKM_sk_delete_ptr(RecipientInfo, (st), (ptr)) -#define sk_RecipientInfo_insert(st, val, i) SKM_sk_insert(RecipientInfo, (st), (val), (i)) -#define sk_RecipientInfo_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(RecipientInfo, (st), (cmp)) -#define sk_RecipientInfo_dup(st) SKM_sk_dup(RecipientInfo, st) -#define sk_RecipientInfo_pop_free(st, free_func) SKM_sk_pop_free(RecipientInfo, (st), (free_func)) -#define sk_RecipientInfo_shift(st) SKM_sk_shift(RecipientInfo, (st)) -#define sk_RecipientInfo_pop(st) SKM_sk_pop(RecipientInfo, (st)) -#define sk_RecipientInfo_sort(st) SKM_sk_sort(RecipientInfo, (st)) -#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)) -#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) \ - SKM_ASN1_seq_pack(RecipientInfo, (st), (i2d_func), (buf), (len)) -#define ASN1_seq_unpack_RecipientInfo(buf, len, d2i_func, free_func) \ - SKM_ASN1_seq_unpack(RecipientInfo, (buf), (len), (d2i_func), (free_func)) -/* End of util/mkstack.pl block */ - -/* X509 Public/Private Key Pair Structure */ -struct X509_Keypair { - ASN1_OCTET_STRING *keyid; - EVP_PKEY *pubkey; - EVP_PKEY *privkey; -}; - -/* Message Digest Structure */ -struct Digest { - crypto_digest_t type; - EVP_MD_CTX ctx; -}; - -/* Message Signature Structure */ -struct Signature { - SignatureData *sigData; -}; - -/* Encryption Session Data */ -struct Crypto_Session { - CryptoData *cryptoData; /* ASN.1 Structure */ - unsigned char *session_key; /* Private symmetric session key */ - size_t session_key_len; /* Symmetric session key length */ -}; - -/* Symmetric Cipher Context */ -struct Cipher_Context { - EVP_CIPHER_CTX ctx; -}; - -/* PEM Password Dispatch Context */ -typedef struct PEM_CB_Context { - CRYPTO_PEM_PASSWD_CB *pem_callback; - const void *pem_userdata; -} PEM_CB_CONTEXT; - -/* - * Extract subjectKeyIdentifier from x509 certificate. - * Returns: On success, an ASN1_OCTET_STRING that must be freed via M_ASN1_OCTET_STRING_free(). - * NULL on failure. - */ -static ASN1_OCTET_STRING *openssl_cert_keyid(X509 *cert){ - X509_EXTENSION *ext; - X509V3_EXT_METHOD *method; - ASN1_OCTET_STRING *keyid; - int i; -#if (OPENSSL_VERSION_NUMBER >= 0x0090800FL) - const unsigned char *ext_value_data; -#else - unsigned char *ext_value_data; -#endif - - - /* Find the index to the subjectKeyIdentifier extension */ - i = X509_get_ext_by_NID(cert, NID_subject_key_identifier, -1); - if (i < 0) { - /* Not found */ - return NULL; - } - - /* Grab the extension */ - ext = X509_get_ext(cert, i); - - /* Get x509 extension method structure */ - if (!(method = X509V3_EXT_get(ext))) { - return NULL; - } - - ext_value_data = ext->value->data; - -#if (OPENSSL_VERSION_NUMBER > 0x00907000L) - if (method->it) { - /* New style ASN1 */ - - /* Decode ASN1 item in data */ - keyid = (ASN1_OCTET_STRING *) ASN1_item_d2i(NULL, &ext_value_data, ext->value->length, - ASN1_ITEM_ptr(method->it)); - } else { - /* Old style ASN1 */ - - /* Decode ASN1 item in data */ - keyid = (ASN1_OCTET_STRING *) method->d2i(NULL, &ext_value_data, ext->value->length); - } - -#else - keyid = (ASN1_OCTET_STRING *) method->d2i(NULL, &ext_value_data, ext->value->length); -#endif - - return keyid; -} - -/* - * Create a new keypair object. - * Returns: A pointer to a X509 KEYPAIR object on success. - * NULL on failure. - */ -X509_KEYPAIR *crypto_keypair_new (void) { - X509_KEYPAIR *keypair; - - /* Allocate our keypair structure */ - keypair = (X509_KEYPAIR *) malloc(sizeof(X509_KEYPAIR)); - if (!keypair) { - return NULL; - } - - /* Initialize our keypair structure */ - keypair->keyid = NULL; - keypair->pubkey = NULL; - keypair->privkey = NULL; - - return keypair; -} - -/* - * Create a copy of a keypair object. The underlying - * EVP objects are not duplicated, as no EVP_PKEY_dup() - * API is available. Instead, the reference count is - * incremented. - */ -X509_KEYPAIR *crypto_keypair_dup (X509_KEYPAIR *keypair) -{ - X509_KEYPAIR *newpair; - - newpair = crypto_keypair_new(); - - if (!newpair) { - /* Allocation failed */ - return NULL; - } - - /* Increment the public key ref count */ - if (keypair->pubkey) { - CRYPTO_add(&(keypair->pubkey->references), 1, CRYPTO_LOCK_EVP_PKEY); - newpair->pubkey = keypair->pubkey; - } - - /* Increment the private key ref count */ - if (keypair->privkey) { - CRYPTO_add(&(keypair->privkey->references), 1, CRYPTO_LOCK_EVP_PKEY); - newpair->privkey = keypair->privkey; - } - - /* Duplicate the keyid */ - if (keypair->keyid) { - newpair->keyid = M_ASN1_OCTET_STRING_dup(keypair->keyid); - if (!newpair->keyid) { - /* Allocation failed */ - crypto_keypair_free(newpair); - return NULL; - } - } - - return newpair; -} - - -/* - * Load a public key from a PEM-encoded x509 certificate. - * Returns: true on success - * false on failure - */ -int crypto_keypair_load_cert (X509_KEYPAIR *keypair, const char *file) -{ - BIO *bio; - X509 *cert; - - /* Open the file */ - if (!(bio = BIO_new_file(file, "r"))) { - openssl_post_errors(M_ERROR, _("Unable to open certificate file")); - return false; - } - - cert = PEM_read_bio_X509(bio, NULL, NULL, NULL); - BIO_free(bio); - if (!cert) { - openssl_post_errors(M_ERROR, _("Unable to read certificate from file")); - return false; - } - - /* Extract the public key */ - if (!(keypair->pubkey = X509_get_pubkey(cert))) { - openssl_post_errors(M_ERROR, _("Unable to extract public key from certificate")); - goto err; - } - - /* Extract the subjectKeyIdentifier extension field */ - if ((keypair->keyid = openssl_cert_keyid(cert)) == NULL) { - Emsg0(M_ERROR, 0, _("Provided certificate does not include the required subjectKeyIdentifier extension.")); - goto err; - } - - /* Validate the public key type (only RSA is supported) */ - if (EVP_PKEY_type(keypair->pubkey->type) != EVP_PKEY_RSA) { - Emsg1(M_ERROR, 0, _("Unsupported key type provided: %d\n"), EVP_PKEY_type(keypair->pubkey->type)); - goto err; - } - - X509_free(cert); - return true; - -err: - X509_free(cert); - if (keypair->pubkey) { - EVP_PKEY_free(keypair->pubkey); - } - return false; -} - -/* Dispatch user PEM encryption callbacks */ -static int crypto_pem_callback_dispatch (char *buf, int size, int rwflag, void *userdata) -{ - PEM_CB_CONTEXT *ctx = (PEM_CB_CONTEXT *) userdata; - return (ctx->pem_callback(buf, size, ctx->pem_userdata)); -} - -/* - * Check a PEM-encoded file - * for the existence of a private key. - * Returns: true if a private key is found - * false otherwise - */ -bool crypto_keypair_has_key (const char *file) { - BIO *bio; - char *name = NULL; - char *header = NULL; - unsigned char *data = NULL; - bool retval = false; - long len; - - if (!(bio = BIO_new_file(file, "r"))) { - openssl_post_errors(M_ERROR, _("Unable to open private key file")); - return false; - } - - while (PEM_read_bio(bio, &name, &header, &data, &len)) { - /* We don't care what the data is, just that it's there */ - OPENSSL_free(header); - OPENSSL_free(data); - - /* - * PEM Header Found, check for a private key - * Due to OpenSSL limitations, we must specifically - * list supported PEM private key encodings. - */ - if (strcmp(name, PEM_STRING_RSA) == 0 - || strcmp(name, PEM_STRING_DSA) == 0 - || strcmp(name, PEM_STRING_PKCS8) == 0 - || strcmp(name, PEM_STRING_PKCS8INF) == 0) { - retval = true; - OPENSSL_free(name); - break; - } else { - OPENSSL_free(name); - } - } - - /* Free our bio */ - BIO_free(bio); - - /* Post PEM-decoding error messages, if any */ - openssl_post_errors(M_ERROR, _("Unable to read private key from file")); - return retval; -} - -/* - * Load a PEM-encoded private key. - * Returns: true on success - * false on failure - */ -int crypto_keypair_load_key (X509_KEYPAIR *keypair, const char *file, - CRYPTO_PEM_PASSWD_CB *pem_callback, - const void *pem_userdata) -{ - BIO *bio; - PEM_CB_CONTEXT ctx; - - /* Open the file */ - if (!(bio = BIO_new_file(file, "r"))) { - openssl_post_errors(M_ERROR, _("Unable to open private key file")); - return false; - } - - /* Set up PEM encryption callback */ - if (pem_callback) { - ctx.pem_callback = pem_callback; - ctx.pem_userdata = pem_userdata; - } else { - ctx.pem_callback = crypto_default_pem_callback; - ctx.pem_userdata = NULL; - } - - keypair->privkey = PEM_read_bio_PrivateKey(bio, NULL, crypto_pem_callback_dispatch, &ctx); - BIO_free(bio); - if (!keypair->privkey) { - openssl_post_errors(M_ERROR, _("Unable to read private key from file")); - return false; - } - - return true; -} - -/* - * Free memory associated with a keypair object. - */ -void crypto_keypair_free (X509_KEYPAIR *keypair) -{ - if (keypair->pubkey) { - EVP_PKEY_free(keypair->pubkey); - } - if (keypair->privkey) { - EVP_PKEY_free(keypair->privkey); - } - if (keypair->keyid) { - M_ASN1_OCTET_STRING_free(keypair->keyid); - } - free(keypair); -} - -/* - * Create a new message digest context of the specified type - * Returns: A pointer to a DIGEST object on success. - * NULL on failure. - */ -DIGEST *crypto_digest_new (crypto_digest_t type) -{ - DIGEST *digest; - const EVP_MD *md = NULL; /* Quell invalid uninitialized warnings */ - - digest = (DIGEST *) malloc(sizeof(DIGEST)); - digest->type = type; - - /* Initialize the OpenSSL message digest context */ - EVP_MD_CTX_init(&digest->ctx); - - /* Determine the correct OpenSSL message digest type */ - switch (type) { - case CRYPTO_DIGEST_MD5: - md = EVP_md5(); - break; - case CRYPTO_DIGEST_SHA1: - md = EVP_sha1(); - break; -#ifdef HAVE_SHA2 - case CRYPTO_DIGEST_SHA256: - md = EVP_sha256(); - break; - case CRYPTO_DIGEST_SHA512: - md = EVP_sha512(); - break; -#endif - default: - Emsg1(M_ERROR, 0, _("Unsupported digest type: %d\n"), type); - goto err; - } - - /* Initialize the backing OpenSSL context */ - if (EVP_DigestInit_ex(&digest->ctx, md, NULL) == 0) { - goto err; - } - - return digest; - -err: - /* This should not happen, but never say never ... */ - openssl_post_errors(M_ERROR, _("OpenSSL digest initialization failed")); - crypto_digest_free(digest); - return NULL; -} - -/* - * Hash length bytes of data into the provided digest context. - * Returns: true on success - * false on failure - */ -bool crypto_digest_update (DIGEST *digest, const void *data, size_t length) { - if (EVP_DigestUpdate(&digest->ctx, data, length) == 0) { - return true; - } else { - return false; - } -} - -/* - * Finalize the data in digest, storing the result in dest and the result size - * in length. The result size can be determined with crypto_digest_size(). - * - * Returns: true on success - * false on failure - */ -bool crypto_digest_finalize (DIGEST *digest, void *dest, size_t *length) { - if (!EVP_DigestFinal(&digest->ctx, (unsigned char *) dest, (unsigned int *) length)) { - return false; - } else { - return true; - } -} - -/* - * Free memory associated with a digest object. - */ -void crypto_digest_free (DIGEST *digest) -{ - EVP_MD_CTX_cleanup(&digest->ctx); - free (digest); -} - -/* - * Create a new message signature context. - * Returns: A pointer to a SIGNATURE object on success. - * NULL on failure. - */ -SIGNATURE *crypto_sign_new (void) -{ - SIGNATURE *sig; - - sig = (SIGNATURE *) malloc(sizeof(SIGNATURE)); - if (!sig) { - return NULL; - } - - sig->sigData = SignatureData_new(); - - if (!sig->sigData) { - /* Allocation failed in OpenSSL */ - free(sig); - return NULL; - } - - /* Set the ASN.1 structure version number */ - ASN1_INTEGER_set(sig->sigData->version, BACULA_ASN1_VERSION); - - return sig; -} - -/* - * For a given public key, find the associated SignatureInfo record - * and create a digest context for signature validation - * 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, DIGEST **digest) -{ - STACK_OF(SignerInfo) *signers; - SignerInfo *si; - int i; - - signers = sig->sigData->signerInfo; - - for (i = 0; i < sk_SignerInfo_num(signers); i++) { - si = sk_SignerInfo_value(signers, i); - if (M_ASN1_OCTET_STRING_cmp(keypair->keyid, si->subjectKeyIdentifier) == 0) { - /* Get the digest algorithm and allocate a digest context */ - switch (OBJ_obj2nid(si->digestAlgorithm)) { - case NID_md5: - *digest = crypto_digest_new(CRYPTO_DIGEST_MD5); - break; - case NID_sha1: - *digest = crypto_digest_new(CRYPTO_DIGEST_SHA1); - break; -#ifdef HAVE_SHA2 - case NID_sha256: - *digest = crypto_digest_new(CRYPTO_DIGEST_SHA256); - break; - case NID_sha512: - *digest = crypto_digest_new(CRYPTO_DIGEST_SHA512); - break; -#endif - default: - *digest = NULL; - return CRYPTO_ERROR_INVALID_DIGEST; - } - - /* Shouldn't happen */ - if (*digest == NULL) { - return CRYPTO_ERROR_INVALID_DIGEST; - } else { - return CRYPTO_ERROR_NONE; - } - } - } - - return CRYPTO_ERROR_NOSIGNER; -} - -/* - * For a given signature, public key, and digest, verify the SIGNATURE. - * Returns: CRYPTO_ERROR_NONE on success. - * A crypto_error_t value on failure. - */ -crypto_error_t crypto_sign_verify(SIGNATURE *sig, X509_KEYPAIR *keypair, DIGEST *digest) -{ - STACK_OF(SignerInfo) *signers; - SignerInfo *si; - int ok, i; - unsigned int sigLen; -#if (OPENSSL_VERSION_NUMBER >= 0x0090800FL) - const unsigned char *sigData; -#else - unsigned char *sigData; -#endif - - signers = sig->sigData->signerInfo; - - /* Find the signer */ - for (i = 0; i < sk_SignerInfo_num(signers); i++) { - si = sk_SignerInfo_value(signers, i); - if (M_ASN1_OCTET_STRING_cmp(keypair->keyid, si->subjectKeyIdentifier) == 0) { - /* Extract the signature data */ - sigLen = M_ASN1_STRING_length(si->signature); - sigData = M_ASN1_STRING_data(si->signature); - - ok = EVP_VerifyFinal(&digest->ctx, sigData, sigLen, keypair->pubkey); - if (ok >= 1) { - return CRYPTO_ERROR_NONE; - } else if (ok == 0) { - return CRYPTO_ERROR_BAD_SIGNATURE; - } else if (ok < 0) { - /* Shouldn't happen */ - openssl_post_errors(M_ERROR, _("OpenSSL error occured")); - return CRYPTO_ERROR_INTERNAL; - } - } - } - - /* Signer wasn't found. */ - return CRYPTO_ERROR_NOSIGNER; -} - - -/* - * Add a new signer - * Returns: true on success - * false on failure - */ -int crypto_sign_add_signer(SIGNATURE *sig, DIGEST *digest, X509_KEYPAIR *keypair) -{ - SignerInfo *si = NULL; - unsigned char *buf = NULL; - unsigned int len; - - si = SignerInfo_new(); - - if (!si) { - /* Allocation failed in OpenSSL */ - return false; - } - - /* Set the ASN.1 structure version number */ - ASN1_INTEGER_set(si->version, BACULA_ASN1_VERSION); - - /* Set the digest algorithm identifier */ - switch (digest->type) { - case CRYPTO_DIGEST_MD5: - si->digestAlgorithm = OBJ_nid2obj(NID_md5); - break; - case CRYPTO_DIGEST_SHA1: - si->digestAlgorithm = OBJ_nid2obj(NID_sha1); - break; -#ifdef HAVE_SHA2 - case CRYPTO_DIGEST_SHA256: - si->digestAlgorithm = OBJ_nid2obj(NID_sha256); - break; - case CRYPTO_DIGEST_SHA512: - si->digestAlgorithm = OBJ_nid2obj(NID_sha512); - break; -#endif - default: - /* This should never happen */ - goto err; - } - - /* Drop the string allocated by OpenSSL, and add our subjectKeyIdentifier */ - M_ASN1_OCTET_STRING_free(si->subjectKeyIdentifier); - si->subjectKeyIdentifier = M_ASN1_OCTET_STRING_dup(keypair->keyid); - - /* Set our signature algorithm. We currently require RSA */ - assert(EVP_PKEY_type(keypair->pubkey->type) == EVP_PKEY_RSA); - /* This is slightly evil. Reach into the MD structure and grab the key type */ - si->signatureAlgorithm = OBJ_nid2obj(digest->ctx.digest->pkey_type); - - /* Finalize/Sign our Digest */ - len = EVP_PKEY_size(keypair->privkey); - buf = (unsigned char *) malloc(len); - if (!EVP_SignFinal(&digest->ctx, buf, &len, keypair->privkey)) { - openssl_post_errors(M_ERROR, _("Signature creation failed")); - goto err; - } - - /* Add the signature to the SignerInfo structure */ - if (!M_ASN1_OCTET_STRING_set(si->signature, buf, len)) { - /* Allocation failed in OpenSSL */ - goto err; - } - - /* No longer needed */ - free(buf); - - /* Push the new SignerInfo structure onto the stack */ - sk_SignerInfo_push(sig->sigData->signerInfo, si); - - return true; - -err: - if (si) { - SignerInfo_free(si); - } - if (buf) { - free(buf); - } - - return false; -} - -/* - * Encodes the SignatureData structure. The length argument is used to specify the - * size of dest. A length of 0 will cause no data to be written to dest, and the - * required length to be written to length. The caller can then allocate sufficient - * space for the output. - * - * Returns: true on success, stores the encoded data in dest, and the size in length. - * false on failure. - */ -int crypto_sign_encode(SIGNATURE *sig, void *dest, size_t *length) -{ - if (*length == 0) { - *length = i2d_SignatureData(sig->sigData, NULL); - return true; - } - - *length = i2d_SignatureData(sig->sigData, (unsigned char **) &dest); - return true; -} - -/* - * Decodes the SignatureData structure. The length argument is used to specify the - * size of sigData. - * - * Returns: SIGNATURE instance on success. - * NULL on failure. - - */ - -SIGNATURE *crypto_sign_decode(const void *sigData, size_t length) -{ - SIGNATURE *sig; -#if (OPENSSL_VERSION_NUMBER >= 0x0090800FL) - const unsigned char *p = (const unsigned char *) sigData; -#else - unsigned char *p = (unsigned char *) sigData; -#endif - - sig = (SIGNATURE *) malloc(sizeof(SIGNATURE)); - if (!sig) { - return NULL; - } - - /* d2i_SignatureData modifies the supplied pointer */ - sig->sigData = d2i_SignatureData(NULL, &p, length); - - if (!sig->sigData) { - /* Allocation / Decoding failed in OpenSSL */ - openssl_post_errors(M_ERROR, _("Signature decoding failed")); - free(sig); - return NULL; - } - - return sig; -} - -/* - * Free memory associated with a signature object. - */ -void crypto_sign_free(SIGNATURE *sig) -{ - SignatureData_free(sig->sigData); - free (sig); -} - -/* - * Create a new encryption session. - * Returns: A pointer to a CRYPTO_SESSION object on success. - * NULL on failure. - */ -CRYPTO_SESSION *crypto_session_new (crypto_cipher_t cipher, alist *pubkeys) -{ - CRYPTO_SESSION *cs; - X509_KEYPAIR *keypair; - const EVP_CIPHER *ec; - unsigned char *iv; - int iv_len; - - /* Allocate our session description structures */ - cs = (CRYPTO_SESSION *) malloc(sizeof(CRYPTO_SESSION)); - if (!cs) { - return NULL; - } - - /* Initialize required fields */ - cs->session_key = NULL; - - /* Allocate a CryptoData structure */ - cs->cryptoData = CryptoData_new(); - - if (!cs->cryptoData) { - /* Allocation failed in OpenSSL */ - free(cs); - return NULL; - } - - /* Set the ASN.1 structure version number */ - ASN1_INTEGER_set(cs->cryptoData->version, BACULA_ASN1_VERSION); - - /* - * Acquire a cipher instance and set the ASN.1 cipher NID - */ - switch (cipher) { - case CRYPTO_CIPHER_AES_128_CBC: - /* AES 128 bit CBC */ - cs->cryptoData->contentEncryptionAlgorithm = OBJ_nid2obj(NID_aes_128_cbc); - ec = EVP_aes_128_cbc(); - break; - case CRYPTO_CIPHER_AES_192_CBC: - /* AES 192 bit CBC */ - cs->cryptoData->contentEncryptionAlgorithm = OBJ_nid2obj(NID_aes_192_cbc); - ec = EVP_aes_192_cbc(); - break; - case CRYPTO_CIPHER_AES_256_CBC: - /* AES 256 bit CBC */ - cs->cryptoData->contentEncryptionAlgorithm = OBJ_nid2obj(NID_aes_256_cbc); - ec = EVP_aes_256_cbc(); - break; - case CRYPTO_CIPHER_BLOWFISH_CBC: - /* Blowfish CBC */ - cs->cryptoData->contentEncryptionAlgorithm = OBJ_nid2obj(NID_bf_cbc); - ec = EVP_bf_cbc(); - break; - default: - Emsg0(M_ERROR, 0, _("Unsupported cipher type specified\n")); - crypto_session_free(cs); - return NULL; - } - - /* Generate a symmetric session key */ - cs->session_key_len = EVP_CIPHER_key_length(ec); - cs->session_key = (unsigned char *) malloc(cs->session_key_len); - if (RAND_bytes(cs->session_key, cs->session_key_len) <= 0) { - /* OpenSSL failure */ - crypto_session_free(cs); - return NULL; - } - - /* Generate an IV if possible */ - if ((iv_len = EVP_CIPHER_iv_length(ec))) { - iv = (unsigned char *) malloc(iv_len); - if (!iv) { - /* Malloc failure */ - crypto_session_free(cs); - return NULL; - } - - /* Generate random IV */ - if (RAND_bytes(iv, iv_len) <= 0) { - /* OpenSSL failure */ - crypto_session_free(cs); - free(iv); - return NULL; - } - - /* Store it in our ASN.1 structure */ - if (!M_ASN1_OCTET_STRING_set(cs->cryptoData->iv, iv, iv_len)) { - /* Allocation failed in OpenSSL */ - crypto_session_free(cs); - free(iv); - return NULL; - } - free(iv); - } - - /* - * Create RecipientInfo structures for supplied - * public keys. - */ - foreach_alist(keypair, pubkeys) { - RecipientInfo *ri; - unsigned char *ekey; - int ekey_len; - - ri = RecipientInfo_new(); - if (!ri) { - /* Allocation failed in OpenSSL */ - crypto_session_free(cs); - return NULL; - } - - /* Set the ASN.1 structure version number */ - ASN1_INTEGER_set(ri->version, BACULA_ASN1_VERSION); - - /* Drop the string allocated by OpenSSL, and add our subjectKeyIdentifier */ - M_ASN1_OCTET_STRING_free(ri->subjectKeyIdentifier); - ri->subjectKeyIdentifier = M_ASN1_OCTET_STRING_dup(keypair->keyid); - - /* Set our key encryption algorithm. We currently require RSA */ - assert(keypair->pubkey && EVP_PKEY_type(keypair->pubkey->type) == EVP_PKEY_RSA); - ri->keyEncryptionAlgorithm = OBJ_nid2obj(NID_rsaEncryption); - - /* Encrypt the session key */ - ekey = (unsigned char *) malloc(EVP_PKEY_size(keypair->pubkey)); - if (!ekey) { - RecipientInfo_free(ri); - crypto_session_free(cs); - return NULL; - } - - if ((ekey_len = EVP_PKEY_encrypt(ekey, cs->session_key, cs->session_key_len, keypair->pubkey)) <= 0) { - /* OpenSSL failure */ - RecipientInfo_free(ri); - crypto_session_free(cs); - free(ekey); - return NULL; - } - - /* Store it in our ASN.1 structure */ - if (!M_ASN1_OCTET_STRING_set(ri->encryptedKey, ekey, ekey_len)) { - /* Allocation failed in OpenSSL */ - RecipientInfo_free(ri); - crypto_session_free(cs); - free(ekey); - return NULL; - } - - /* Free the encrypted key buffer */ - free(ekey); - - /* Push the new RecipientInfo structure onto the stack */ - sk_RecipientInfo_push(cs->cryptoData->recipientInfo, ri); - } - - return cs; -} - -/* - * Encodes the CryptoData structure. The length argument is used to specify the - * size of dest. A length of 0 will cause no data to be written to dest, and the - * required length to be written to length. The caller can then allocate sufficient - * space for the output. - * - * Returns: true on success, stores the encoded data in dest, and the size in length. - * false on failure. - */ -bool crypto_session_encode(CRYPTO_SESSION *cs, void *dest, size_t *length) -{ - if (*length == 0) { - *length = i2d_CryptoData(cs->cryptoData, NULL); - return true; - } - - *length = i2d_CryptoData(cs->cryptoData, (unsigned char **) &dest); - return true; -} - -/* - * Decodes the CryptoData structure. The length argument is - * used to specify the size of data. - * - * Returns: CRYPTO_SESSION instance on success. - * NULL on failure. - * Returns: CRYPTO_ERROR_NONE and a pointer to a newly allocated CRYPTO_SESSION structure in *session on success. - * A crypto_error_t value on failure. - */ -crypto_error_t crypto_session_decode(const void *data, size_t length, alist *keypairs, CRYPTO_SESSION **session) -{ - CRYPTO_SESSION *cs; - X509_KEYPAIR *keypair; - STACK_OF(RecipientInfo) *recipients; - crypto_error_t retval = CRYPTO_ERROR_NONE; -#if (OPENSSL_VERSION_NUMBER >= 0x0090800FL) - const unsigned char *p = (const unsigned char *) data; -#else - unsigned char *p = (unsigned char *) data; -#endif - - cs = (CRYPTO_SESSION *) malloc(sizeof(CRYPTO_SESSION)); - if (!cs) { - return CRYPTO_ERROR_INTERNAL; - } - - /* Initialize required fields */ - cs->session_key = NULL; - - /* d2i_CryptoData modifies the supplied pointer */ - cs->cryptoData = d2i_CryptoData(NULL, &p, length); - - if (!cs->cryptoData) { - /* Allocation / Decoding failed in OpenSSL */ - openssl_post_errors(M_ERROR, _("CryptoData decoding failed")); - retval = CRYPTO_ERROR_INTERNAL; - goto err; - } - - recipients = cs->cryptoData->recipientInfo; - - /* - * Find a matching RecipientInfo structure for a supplied - * public key - */ - foreach_alist(keypair, keypairs) { - RecipientInfo *ri; - int i; - - /* Private key available? */ - if (keypair->privkey == NULL) { - continue; - } - - for (i = 0; i < sk_RecipientInfo_num(recipients); i++) { - ri = sk_RecipientInfo_value(recipients, i); - - /* 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); - - /* If we recieve a RecipientInfo structure that does not use - * RSA, return an error */ - if (OBJ_obj2nid(ri->keyEncryptionAlgorithm) != NID_rsaEncryption) { - retval = CRYPTO_ERROR_INVALID_CRYPTO; - goto err; - } - - /* Decrypt the session key */ - /* Allocate sufficient space for the largest possible decrypted data */ - cs->session_key = (unsigned char *) malloc(EVP_PKEY_size(keypair->privkey)); - cs->session_key_len = EVP_PKEY_decrypt(cs->session_key, M_ASN1_STRING_data(ri->encryptedKey), - M_ASN1_STRING_length(ri->encryptedKey), keypair->privkey); - - if (cs->session_key_len <= 0) { - openssl_post_errors(M_ERROR, _("Failure decrypting the session key")); - retval = CRYPTO_ERROR_DECRYPTION; - goto err; - } - - /* Session key successfully extracted, return the CRYPTO_SESSION structure */ - *session = cs; - return CRYPTO_ERROR_NONE; - } - } - } - - /* No matching recipient found */ - return CRYPTO_ERROR_NORECIPIENT; - -err: - crypto_session_free(cs); - return retval; -} - -/* - * Free memory associated with a crypto session object. - */ -void crypto_session_free (CRYPTO_SESSION *cs) -{ - if (cs->cryptoData) { - CryptoData_free(cs->cryptoData); - } - if (cs->session_key){ - free(cs->session_key); - } - free(cs); -} - -/* - * Create a new crypto cipher context with the specified session object - * Returns: A pointer to a CIPHER_CONTEXT object on success. The cipher block size is returned in blocksize. - * NULL on failure. - */ -CIPHER_CONTEXT *crypto_cipher_new (CRYPTO_SESSION *cs, bool encrypt, size_t *blocksize) -{ - CIPHER_CONTEXT *cipher_ctx; - const EVP_CIPHER *ec; - - cipher_ctx = (CIPHER_CONTEXT *) malloc(sizeof(CIPHER_CONTEXT)); - if (!cipher_ctx) { - return NULL; - } - - /* - * Acquire a cipher instance for the given ASN.1 cipher NID - */ - if ((ec = EVP_get_cipherbyobj(cs->cryptoData->contentEncryptionAlgorithm)) == NULL) { - Emsg1(M_ERROR, 0, _("Unsupported contentEncryptionAlgorithm: %d\n"), OBJ_obj2nid(cs->cryptoData->contentEncryptionAlgorithm)); - free(cipher_ctx); - return NULL; - } - - /* Initialize the OpenSSL cipher context */ - EVP_CIPHER_CTX_init(&cipher_ctx->ctx); - if (encrypt) { - /* Initialize for encryption */ - if (!EVP_CipherInit_ex(&cipher_ctx->ctx, ec, NULL, NULL, NULL, 1)) { - openssl_post_errors(M_ERROR, _("OpenSSL cipher context initialization failed")); - goto err; - } - } else { - /* Initialize for decryption */ - if (!EVP_CipherInit_ex(&cipher_ctx->ctx, ec, NULL, NULL, NULL, 0)) { - openssl_post_errors(M_ERROR, _("OpenSSL cipher context initialization failed")); - goto err; - } - } - - /* Set the key size */ - if (!EVP_CIPHER_CTX_set_key_length(&cipher_ctx->ctx, cs->session_key_len)) { - openssl_post_errors(M_ERROR, _("Encryption session provided an invalid symmetric key")); - goto err; - } - - /* Validate the IV length */ - if (EVP_CIPHER_iv_length(ec) != M_ASN1_STRING_length(cs->cryptoData->iv)) { - 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")); - goto err; - } - - *blocksize = EVP_CIPHER_CTX_block_size(&cipher_ctx->ctx); - return cipher_ctx; - -err: - crypto_cipher_free(cipher_ctx); - return NULL; -} - - -/* - * Encrypt/Decrypt length bytes of data using the provided cipher context - * Returns: true on success, number of bytes output in written - * false on failure - */ -bool crypto_cipher_update (CIPHER_CONTEXT *cipher_ctx, const void *data, size_t length, const void *dest, size_t *written) { - if (!EVP_CipherUpdate(&cipher_ctx->ctx, (unsigned char *) dest, (int *) written, (const unsigned char *) data, length)) { - /* This really shouldn't fail */ - return false; - } else { - return true; - } -} - -/* - * Finalize the cipher context, writing any remaining data and necessary padding - * to dest, and the size in written. - * The result size will either be one block of data or zero. - * - * Returns: true on success - * false on failure - */ -bool crypto_cipher_finalize (CIPHER_CONTEXT *cipher_ctx, void *dest, size_t *written) { - if (!EVP_CipherFinal_ex(&cipher_ctx->ctx, (unsigned char *) dest, (int *) written)) { - /* This really shouldn't fail */ - return false; - } else { - return true; - } -} - - -/* - * Free memory associated with a cipher context. - */ -void crypto_cipher_free (CIPHER_CONTEXT *cipher_ctx) -{ - EVP_CIPHER_CTX_cleanup(&cipher_ctx->ctx); - free (cipher_ctx); -} - - -/* - * Perform global initialization of OpenSSL - * This function is not thread safe. - * Returns: 0 on success - * errno on failure - */ -int init_crypto (void) -{ - int stat; - - if ((stat = openssl_init_threads()) != 0) { - Emsg1(M_ABORT, 0, _("Unable to init OpenSSL threading: ERR=%s\n"), strerror(stat)); - } - - /* Load libssl and libcrypto human-readable error strings */ - SSL_load_error_strings(); - - /* Initialize OpenSSL SSL library */ - SSL_library_init(); - - /* Register OpenSSL ciphers and digests */ - OpenSSL_add_all_algorithms(); - - if (!openssl_seed_prng()) { - Emsg0(M_ERROR_TERM, 0, _("Failed to seed OpenSSL PRNG\n")); - } - - crypto_initialized = true; - - return stat; -} - -/* - * Perform global cleanup of OpenSSL - * All cryptographic operations must be completed before calling this function. - * This function is not thread safe. - * Returns: 0 on success - * errno on failure - */ -int cleanup_crypto (void) -{ - /* - * Ensure that we've actually been initialized; Doing this here decreases the - * complexity of client's termination/cleanup code. - */ - if (!crypto_initialized) { - return 0; - } - - if (!openssl_save_prng()) { - Emsg0(M_ERROR, 0, _("Failed to save OpenSSL PRNG\n")); - } - - openssl_cleanup_threads(); - - /* Free libssl and libcrypto error strings */ - ERR_free_strings(); - - /* Free all ciphers and digests */ - EVP_cleanup(); - - /* Free memory used by PRNG */ - RAND_cleanup(); - - crypto_initialized = false; - - return 0; -} - - -#else /* HAVE_OPENSSL */ -# error No encryption library available -#endif /* HAVE_OPENSSL */ - -#else /* HAVE_CRYPTO */ - -/* - * Cryptography Support Disabled - */ - -/* Message Digest Structure */ -struct Digest { - crypto_digest_t type; - union { - SHA1Context sha1; - MD5Context md5; - }; -}; - -/* Dummy Signature Structure */ -struct Signature { -}; - -DIGEST *crypto_digest_new (crypto_digest_t type) -{ - DIGEST *digest; - - digest = (DIGEST *) malloc(sizeof(DIGEST)); - digest->type = type; - - switch (type) { - case CRYPTO_DIGEST_MD5: - MD5Init(&digest->md5); - break; - case CRYPTO_DIGEST_SHA1: - SHA1Init(&digest->sha1); - break; - default: - Emsg0(M_ERROR, 0, _("Unsupported digest type specified\n")); - free(digest); - return NULL; - } - - return (digest); -} - -bool crypto_digest_update (DIGEST *digest, const void *data, size_t length) { - switch (digest->type) { - case CRYPTO_DIGEST_MD5: - /* Doesn't return anything ... */ - MD5Update(&digest->md5, (unsigned char *) data, length); - return true; - case CRYPTO_DIGEST_SHA1: - int ret; - if ((ret = SHA1Update(&digest->sha1, (const u_int8_t *) data, length)) == shaSuccess) { - return true; - } else { - Emsg1(M_ERROR, 0, _("SHA1Update() returned an error: %d\n"), ret); - return false; - } - break; - default: - return false; - } -} - -bool crypto_digest_finalize (DIGEST *digest, void *dest, size_t *length) { - - switch (digest->type) { - case CRYPTO_DIGEST_MD5: - /* Guard against programmer error by either the API client or - * an out-of-sync CRYPTO_DIGEST_MAX_SIZE */ - assert(*length >= CRYPTO_DIGEST_MD5_SIZE); - *length = CRYPTO_DIGEST_MD5_SIZE; - /* Doesn't return anything ... */ - MD5Final((unsigned char *) dest, &digest->md5); - return true; - case CRYPTO_DIGEST_SHA1: - /* Guard against programmer error by either the API client or - * an out-of-sync CRYPTO_DIGEST_MAX_SIZE */ - assert(*length >= CRYPTO_DIGEST_SHA1_SIZE); - *length = CRYPTO_DIGEST_SHA1_SIZE; - if (SHA1Final(&digest->sha1, (u_int8_t *) dest) == shaSuccess) { - return true; - } else { - return false; - } - break; - default: - return false; - } - - return false; -} - -void crypto_digest_free (DIGEST *digest) -{ - free (digest); -} - -/* Dummy routines */ -int init_crypto (void) { return 0; } -int cleanup_crypto (void) { return 0; } - -SIGNATURE *crypto_sign_new (void) { return NULL; } - -crypto_error_t crypto_sign_get_digest (SIGNATURE *sig, X509_KEYPAIR *keypair, DIGEST **digest) { return CRYPTO_ERROR_INTERNAL; } -crypto_error_t crypto_sign_verify (SIGNATURE *sig, X509_KEYPAIR *keypair, DIGEST *digest) { return CRYPTO_ERROR_INTERNAL; } - -int crypto_sign_add_signer (SIGNATURE *sig, DIGEST *digest, X509_KEYPAIR *keypair) { return false; } -int crypto_sign_encode (SIGNATURE *sig, void *dest, size_t *length) { return false; } - -SIGNATURE *crypto_sign_decode (const void *sigData, size_t length) { return NULL; } -void crypto_sign_free (SIGNATURE *sig) { } - - -X509_KEYPAIR *crypto_keypair_new (void) { return NULL; } -X509_KEYPAIR *crypto_keypair_dup (X509_KEYPAIR *keypair) { return NULL; } -int crypto_keypair_load_cert (X509_KEYPAIR *keypair, const char *file) { return false; } -bool crypto_keypair_has_key (const char *file) { return false; } -int crypto_keypair_load_key (X509_KEYPAIR *keypair, const char *file, CRYPTO_PEM_PASSWD_CB *pem_callback, const void *pem_userdata) { return false; } -void crypto_keypair_free (X509_KEYPAIR *keypair) { } - -CRYPTO_SESSION *crypto_session_new (crypto_cipher_t cipher, alist *pubkeys) { return NULL; } -void crypto_session_free (CRYPTO_SESSION *cs) { } -bool crypto_session_encode (CRYPTO_SESSION *cs, void *dest, size_t *length) { return false; } -crypto_error_t crypto_session_decode (const void *data, size_t length, alist *keypairs, CRYPTO_SESSION **session) { return CRYPTO_ERROR_INTERNAL; } - -CIPHER_CONTEXT *crypto_cipher_new (CRYPTO_SESSION *cs, bool encrypt, size_t *blocksize) { return NULL; } -bool crypto_cipher_update (CIPHER_CONTEXT *cipher_ctx, const void *data, size_t length, const void *dest, size_t *written) { return false; } -bool crypto_cipher_finalize (CIPHER_CONTEXT *cipher_ctx, void *dest, size_t *written) { return false; } -void crypto_cipher_free (CIPHER_CONTEXT *cipher_ctx) { } - -#endif /* HAVE_CRYPTO */ - -/* Shared Code */ - -/* - * Default PEM encryption passphrase callback. - * Returns an empty password. - */ -int crypto_default_pem_callback(char *buf, int size, const void *userdata) -{ - bstrncpy(buf, "", size); - return (strlen(buf)); -} - -/* - * Returns the ASCII name of the digest type. - * Returns: ASCII name of digest type. - */ -const char *crypto_digest_name (DIGEST *digest) { - switch (digest->type) { - case CRYPTO_DIGEST_MD5: - return "MD5"; - case CRYPTO_DIGEST_SHA1: - return "SHA1"; - case CRYPTO_DIGEST_SHA256: - return "SHA256"; - case CRYPTO_DIGEST_SHA512: - return "SHA512"; - case CRYPTO_DIGEST_NONE: - return "None"; - default: - return "Invalid Digest Type"; - } - -} - -/* - * Given a stream type, returns the associated - * crypto_digest_t value. - */ -crypto_digest_t crypto_digest_stream_type (int stream) { - switch (stream) { - case STREAM_MD5_DIGEST: - return CRYPTO_DIGEST_MD5; - case STREAM_SHA1_DIGEST: - return CRYPTO_DIGEST_SHA1; - case STREAM_SHA256_DIGEST: - return CRYPTO_DIGEST_SHA256; - case STREAM_SHA512_DIGEST: - return CRYPTO_DIGEST_SHA512; - default: - return CRYPTO_DIGEST_NONE; - } -} - -/* - * * Given a crypto_error_t value, return the associated - * * error string - * */ -const char *crypto_strerror(crypto_error_t error) { - switch (error) { - case CRYPTO_ERROR_NONE: - return "No error"; - case CRYPTO_ERROR_NOSIGNER: - return "Signer not found"; - case CRYPTO_ERROR_NORECIPIENT: - return "Recipient not found"; - case CRYPTO_ERROR_INVALID_DIGEST: - return "Unsupported digest algorithm"; - case CRYPTO_ERROR_INVALID_CRYPTO: - return "Unsupported encryption algorithm"; - case CRYPTO_ERROR_BAD_SIGNATURE: - return "Signature is invalid"; - case CRYPTO_ERROR_DECRYPTION: - return "Decryption error"; - case CRYPTO_ERROR_INTERNAL: - /* This shouldn't happen */ - return "Internal error"; - default: - return "Unknown error"; - } -} diff --git a/bacula/src/lib/crypto.h b/bacula/src/lib/crypto.h index 8b3552d08c..17e546bd63 100644 --- a/bacula/src/lib/crypto.h +++ b/bacula/src/lib/crypto.h @@ -46,10 +46,7 @@ typedef struct Digest DIGEST; typedef struct Signature SIGNATURE; /* Opaque PKI Symmetric Key Data Structure */ -typedef struct Crypto_Session CRYPTO_SESSION; - -/* Opaque Encryption/Decryption Context Structure */ -typedef struct Cipher_Context CIPHER_CONTEXT; +typedef struct Crypto_Recipients CRYPTO_RECIPIENTS; /* PEM Decryption Passphrase Callback */ typedef int (CRYPTO_PEM_PASSWD_CB) (char *buf, int size, const void *userdata); @@ -77,12 +74,9 @@ typedef enum { typedef enum { CRYPTO_ERROR_NONE = 0, /* No error */ CRYPTO_ERROR_NOSIGNER = 1, /* Signer not found */ - CRYPTO_ERROR_NORECIPIENT = 2, /* Recipient not found */ - CRYPTO_ERROR_INVALID_DIGEST = 3, /* Unsupported digest algorithm */ - CRYPTO_ERROR_INVALID_CRYPTO = 4, /* Unsupported encryption algorithm */ - CRYPTO_ERROR_BAD_SIGNATURE = 5, /* Signature is invalid */ - CRYPTO_ERROR_DECRYPTION = 6, /* Decryption error */ - CRYPTO_ERROR_INTERNAL = 7 /* Internal Error */ + CRYPTO_ERROR_INVALID_DIGEST = 2, /* Unsupported digest algorithm */ + CRYPTO_ERROR_BAD_SIGNATURE = 3, /* Signature is invalid */ + CRYPTO_ERROR_INTERNAL = 4 /* Internal Error */ } crypto_error_t; /* Message Digest Sizes */ @@ -94,9 +88,8 @@ typedef enum { /* Maximum Message Digest Size */ #ifdef HAVE_OPENSSL -/* Let OpenSSL define a few things */ -#define CRYPTO_DIGEST_MAX_SIZE EVP_MAX_MD_SIZE -#define CRYPTO_CIPHER_MAX_BLOCK_SIZE EVP_MAX_BLOCK_LENGTH +/* Let OpenSSL define it */ +#define CRYPTO_DIGEST_MAX_SIZE EVP_MAX_MD_SIZE #else /* HAVE_OPENSSL */ @@ -113,9 +106,6 @@ typedef enum { #define CRYPTO_DIGEST_MAX_SIZE CRYPTO_DIGEST_SHA512_SIZE #endif -/* Dummy Value */ -#define CRYPTO_CIPHER_MAX_BLOCK_SIZE 0 - #endif /* HAVE_OPENSSL */ #endif /* __CRYPTO_H_ */ diff --git a/bacula/src/lib/dlist.h b/bacula/src/lib/dlist.h index ce975f4865..32933ad608 100644 --- a/bacula/src/lib/dlist.h +++ b/bacula/src/lib/dlist.h @@ -36,15 +36,16 @@ * * Loop var through each member of list */ +#ifdef HAVE_GCC #define foreach_dlist(var, list) \ - for((var)=NULL; (*((void **)&(var))=(void*)((list)->next(var))); ) - -#ifdef the_old_way + for((var)=NULL; ((var)=(typeof(var))(list)->next(var)); ) +#else #define foreach_dlist(var, list) \ - for((var)=NULL; (((void *)(var))=(list)->next(var)); ) + for((var)=NULL; (*((void **)&(var))=(void*)((list)->next(var))); ) #endif + struct dlink { void *next; void *prev; diff --git a/bacula/src/lib/jcr.c b/bacula/src/lib/jcr.c index 6c7d6daa0d..8c2c241ba9 100755 --- a/bacula/src/lib/jcr.c +++ b/bacula/src/lib/jcr.c @@ -229,8 +229,8 @@ JCR *new_jcr(int size, JCR_free_HANDLER *daemon_free_jcr) jcr->job_end_push.init(1, false); jcr->sched_time = time(NULL); jcr->daemon_free_jcr = daemon_free_jcr; /* plug daemon free routine */ - jcr->use_count = 1; - pthread_mutex_init(&(jcr->mutex), NULL); + jcr->init_mutex(); + jcr->inc_use_count(); jcr->JobStatus = JS_Created; /* ready to run */ jcr->VolumeName = get_pool_memory(PM_FNAME); jcr->VolumeName[0] = 0; @@ -329,7 +329,7 @@ static void free_common_jcr(JCR *jcr) default: break; } - pthread_mutex_destroy(&jcr->mutex); + jcr->destroy_mutex(); delete jcr->msg_queue; close_msg(jcr); /* close messages for this job */ @@ -396,14 +396,14 @@ void free_jcr(JCR *jcr) dequeue_messages(jcr); lock_jcr_chain(); jcr->dec_use_count(); /* decrement use count */ - if (jcr->use_count < 0) { + if (jcr->use_count() < 0) { Emsg2(M_ERROR, 0, _("JCR use_count=%d JobId=%d\n"), - jcr->use_count, jcr->JobId); + jcr->use_count(), jcr->JobId); } - Dmsg3(3400, "Dec free_jcr 0x%x use_count=%d jobid=%d\n", jcr, jcr->use_count, jcr->JobId); - if (jcr->use_count > 0) { /* if in use */ + Dmsg3(3400, "Dec free_jcr 0x%x use_count=%d jobid=%d\n", jcr, jcr->use_count(), jcr->JobId); + if (jcr->use_count() > 0) { /* if in use */ unlock_jcr_chain(); - Dmsg3(3400, "free_jcr 0x%x job=%d use_count=%d\n", jcr, jcr->JobId, jcr->use_count); + Dmsg3(3400, "free_jcr 0x%x job=%d use_count=%d\n", jcr, jcr->JobId, jcr->use_count()); return; } @@ -432,15 +432,14 @@ JCR *get_jcr_by_id(uint32_t JobId) { JCR *jcr; - lock_jcr_chain(); /* lock chain */ - foreach_dlist(jcr, jcrs) { + foreach_jcr(jcr) { if (jcr->JobId == JobId) { jcr->inc_use_count(); - Dmsg2(3400, "Inc get_jcr 0x%x use_count=%d\n", jcr, jcr->use_count); + Dmsg2(3400, "Inc get_jcr 0x%x use_count=%d\n", jcr, jcr->use_count()); break; } } - unlock_jcr_chain(); + endeach_jcr(jcr); return jcr; } @@ -453,16 +452,15 @@ JCR *get_jcr_by_session(uint32_t SessionId, uint32_t SessionTime) { JCR *jcr; - lock_jcr_chain(); - foreach_dlist(jcr, jcrs) { + foreach_jcr(jcr) { if (jcr->VolSessionId == SessionId && jcr->VolSessionTime == SessionTime) { jcr->inc_use_count(); - Dmsg2(3400, "Inc get_jcr 0x%x use_count=%d\n", jcr, jcr->use_count); + Dmsg2(3400, "Inc get_jcr 0x%x use_count=%d\n", jcr, jcr->use_count()); break; } } - unlock_jcr_chain(); + endeach_jcr(jcr); return jcr; } @@ -482,16 +480,15 @@ JCR *get_jcr_by_partial_name(char *Job) if (!Job) { return NULL; } - lock_jcr_chain(); len = strlen(Job); - foreach_dlist(jcr, jcrs) { + foreach_jcr(jcr) { if (strncmp(Job, jcr->Job, len) == 0) { jcr->inc_use_count(); - Dmsg2(3400, "Inc get_jcr 0x%x use_count=%d\n", jcr, jcr->use_count); + Dmsg2(3400, "Inc get_jcr 0x%x use_count=%d\n", jcr, jcr->use_count()); break; } } - unlock_jcr_chain(); + endeach_jcr(jcr); return jcr; } @@ -509,15 +506,14 @@ JCR *get_jcr_by_full_name(char *Job) if (!Job) { return NULL; } - lock_jcr_chain(); - foreach_dlist(jcr, jcrs) { + foreach_jcr(jcr) { if (strcmp(jcr->Job, Job) == 0) { jcr->inc_use_count(); - Dmsg2(3400, "Inc get_jcr 0x%x use_count=%d\n", jcr, jcr->use_count); + Dmsg2(3400, "Inc get_jcr 0x%x use_count=%d\n", jcr, jcr->use_count()); break; } } - unlock_jcr_chain(); + endeach_jcr(jcr); return jcr; } @@ -600,7 +596,7 @@ JCR *jcr_walk_start() if (jcr) { jcr->inc_use_count(); Dmsg3(3400, "Inc jcr_walk_start 0x%x job=%d use_count=%d\n", jcr, - jcr->JobId, jcr->use_count); + jcr->JobId, jcr->use_count()); } unlock_jcr_chain(); return jcr; @@ -618,7 +614,7 @@ JCR *jcr_walk_next(JCR *prev_jcr) if (jcr) { jcr->inc_use_count(); Dmsg3(3400, "Inc jcr_walk_next 0x%x job=%d use_count=%d\n", jcr, - jcr->JobId, jcr->use_count); + jcr->JobId, jcr->use_count()); } unlock_jcr_chain(); if (prev_jcr) { diff --git a/bacula/src/lib/lib.h b/bacula/src/lib/lib.h index 88c2fe4d16..58c404cf3b 100644 --- a/bacula/src/lib/lib.h +++ b/bacula/src/lib/lib.h @@ -9,7 +9,7 @@ */ /* - Copyright (C) 2000-2005 Kern Sibbald + Copyright (C) 2000-2006 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -32,7 +32,7 @@ #include "crypto.h" #include "mem_pool.h" #include "message.h" -#include "openssl.h" +/* #include "openssl.h" */ #include "lex.h" #include "parse_conf.h" #include "tls.h" diff --git a/bacula/src/lib/openssl.c b/bacula/src/lib/openssl.c deleted file mode 100644 index 929dee7c26..0000000000 --- a/bacula/src/lib/openssl.c +++ /dev/null @@ -1,232 +0,0 @@ -/* - * openssl.c OpenSSL support functions - * - * Author: Landon Fuller - * - * Version $Id$ - * - * Copyright (C) 2005 Kern Sibbald - * - * This file was contributed to the Bacula project by Landon Fuller. - * - * Landon Fuller has been granted a perpetual, worldwide, non-exclusive, - * no-charge, royalty-free, irrevocable copyright license to reproduce, - * prepare derivative works of, publicly display, publicly perform, - * sublicense, and distribute the original work contributed by Landon Fuller - * to the Bacula project in source or object form. - * - * If you wish to license these contributions under an alternate open source - * license please contact Landon Fuller . - */ -/* - Copyright (C) 2005 Kern Sibbald - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as amended with additional clauses defined in the - file LICENSE in the main source directory. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - the file LICENSE for additional details. - - */ - - -#include "bacula.h" -#include - -#ifdef HAVE_OPENSSL - -/* Array of mutexes for use with OpenSSL static locking */ -static pthread_mutex_t *mutexes; - -/* OpenSSL dynamic locking structure */ -struct CRYPTO_dynlock_value { - pthread_mutex_t mutex; -}; - - -/* - * Post all per-thread openssl errors - */ -void openssl_post_errors(int code, const char *errstring) -{ - char buf[512]; - unsigned long sslerr; - - /* Pop errors off of the per-thread queue */ - while((sslerr = ERR_get_error()) != 0) { - /* Acquire the human readable string */ - ERR_error_string_n(sslerr, (char *) &buf, sizeof(buf)); - Emsg2(M_ERROR, 0, "%s: ERR=%s\n", errstring, buf); - } -} - -/* - * Return an OpenSSL thread ID - * Returns: thread ID - * - */ -static unsigned long get_openssl_thread_id (void) -{ - /* Comparison without use of pthread_equal() is mandated by the OpenSSL API */ - return ((unsigned long) pthread_self()); -} - -/* - * Allocate a dynamic OpenSSL mutex - */ -static struct CRYPTO_dynlock_value *openssl_create_dynamic_mutex (const char *file, int line) -{ - struct CRYPTO_dynlock_value *dynlock; - int stat; - - dynlock = (struct CRYPTO_dynlock_value *) malloc(sizeof(struct CRYPTO_dynlock_value)); - - if ((stat = pthread_mutex_init(&dynlock->mutex, NULL)) != 0) { - Emsg1(M_ABORT, 0, _("Unable to init mutex: ERR=%s\n"), strerror(stat)); - } - - return dynlock; -} - -static void openssl_update_dynamic_mutex (int mode, struct CRYPTO_dynlock_value *dynlock, const char *file, int line) -{ - if (mode & CRYPTO_LOCK) { - P(dynlock->mutex); - } else { - V(dynlock->mutex); - } -} - -static void openssl_destroy_dynamic_mutex (struct CRYPTO_dynlock_value *dynlock, const char *file, int line) -{ - int stat; - - if ((stat = pthread_mutex_destroy(&dynlock->mutex)) != 0) { - Emsg1(M_ABORT, 0, _("Unable to destroy mutex: ERR=%s\n"), strerror(stat)); - } - - free(dynlock); -} - -/* - * (Un)Lock a static OpenSSL mutex - */ -static void openssl_update_static_mutex (int mode, int i, const char *file, int line) -{ - if (mode & CRYPTO_LOCK) { - P(mutexes[i]); - } else { - V(mutexes[i]); - } -} - -/* - * Initialize OpenSSL thread support - * Returns: 0 on success - * errno on failure - */ -int openssl_init_threads (void) -{ - int i, numlocks; - int stat; - - - /* Set thread ID callback */ - CRYPTO_set_id_callback(get_openssl_thread_id); - - /* Initialize static locking */ - numlocks = CRYPTO_num_locks(); - mutexes = (pthread_mutex_t *) malloc(numlocks * sizeof(pthread_mutex_t)); - for (i = 0; i < numlocks; i++) { - if ((stat = pthread_mutex_init(&mutexes[i], NULL)) != 0) { - Emsg1(M_ERROR, 0, _("Unable to init mutex: ERR=%s\n"), strerror(stat)); - return stat; - } - } - - /* Set static locking callback */ - CRYPTO_set_locking_callback(openssl_update_static_mutex); - - /* Initialize dyanmic locking */ - CRYPTO_set_dynlock_create_callback(openssl_create_dynamic_mutex); - CRYPTO_set_dynlock_lock_callback(openssl_update_dynamic_mutex); - CRYPTO_set_dynlock_destroy_callback(openssl_destroy_dynamic_mutex); - - return 0; -} - -/* - * Clean up OpenSSL threading support - */ -void openssl_cleanup_threads (void) -{ - int i, numlocks; - int stat; - - /* 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) { - /* We don't halt execution, reporting the error should be sufficient */ - Emsg1(M_ERROR, 0, _("Unable to destroy mutex: ERR=%s\n"), strerror(stat)); - } - } - - /* Unset static locking callback */ - CRYPTO_set_locking_callback(NULL); - - /* Free static lock array */ - free(mutexes); - - /* Unset dynamic locking callbacks */ - CRYPTO_set_dynlock_create_callback(NULL); - CRYPTO_set_dynlock_lock_callback(NULL); - CRYPTO_set_dynlock_destroy_callback(NULL); -} - - -/* - * Seed OpenSSL PRNG - * Returns: 1 on success - * 0 on failure - */ -int openssl_seed_prng (void) -{ - const char *names[] = { "/dev/urandom", "/dev/random", NULL }; - int i; - - // ***FIXME*** - // Win32 Support - // Read saved entropy? - - for (i = 0; names[i]; i++) { - if (RAND_load_file(names[i], 1024) != -1) { - /* Success */ - return 1; - } - } - - /* Fail */ - return 0; -} - -/* - * Save OpenSSL Entropy - * Returns: 1 on success - * 0 on failure - */ -int openssl_save_prng (void) -{ - // ***FIXME*** - // Implement PRNG state save - return 1; -} - -#endif /* HAVE_OPENSSL */ diff --git a/bacula/src/lib/openssl.h b/bacula/src/lib/openssl.h deleted file mode 100644 index 7654e177cf..0000000000 --- a/bacula/src/lib/openssl.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * openssl.h OpenSSL support functions - * - * Author: Landon Fuller - * - * Version $Id$ - * - * Copyright (C) 2005 Kern Sibbald - * - * This file was contributed to the Bacula project by Landon Fuller. - * - * Landon Fuller has been granted a perpetual, worldwide, non-exclusive, - * no-charge, royalty-free, irrevocable copyright * license to reproduce, - * prepare derivative works of, publicly display, publicly perform, - * sublicense, and distribute the original work contributed by Landon Fuller - * to the Bacula project in source or object form. - * - * If you wish to license these contributions under an alternate open source - * license please contact Landon Fuller . - */ -/* - Copyright (C) 2005 Kern Sibbald - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as amended with additional clauses defined in the - file LICENSE in the main source directory. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - the file LICENSE for additional details. - - */ - -#ifndef __OPENSSL_H_ -#define __OPENSSL_H_ - -#ifdef HAVE_OPENSSL -void openssl_post_errors (int code, const char *errstring); -int openssl_init_threads (void); -void openssl_cleanup_threads (void); -int openssl_seed_prng (void); -int openssl_save_prng (void); -#endif /* HAVE_OPENSSL */ - -#endif /* __OPENSSL_H_ */ diff --git a/bacula/src/lib/parse_conf.c b/bacula/src/lib/parse_conf.c index 238307312b..a16609b2f4 100755 --- a/bacula/src/lib/parse_conf.c +++ b/bacula/src/lib/parse_conf.c @@ -136,7 +136,7 @@ struct s_kw { * * tape label label code = token */ -static s_kw tapelabels[] = { +struct s_kw tapelabels[] = { {"bacula", B_BACULA_LABEL}, {"ansi", B_ANSI_LABEL}, {"ibm", B_IBM_LABEL}, @@ -191,10 +191,8 @@ void init_resource(int type, RES_ITEM *items, int pass) (items[i].flags & ITEM_DEFAULT) ? "yes" : "no", items[i].default_value); if (items[i].flags & ITEM_DEFAULT && items[i].default_value != 0) { - if (items[i].handler == store_bit) { + if (items[i].handler == store_yesno) { *(int *)(items[i].value) |= items[i].code; - } else if (items[i].handler == store_bool) { - *(bool *)(items[i].value) = items[i].default_value; } else if (items[i].handler == store_pint || items[i].handler == store_int) { *(int *)(items[i].value) = items[i].default_value; @@ -305,25 +303,24 @@ 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; - bool found, is_not; + int i, found, quit, is_not; int msg_type = 0; char *str; - for ( ;; ) { + for (quit=0; !quit;) { lex_get_token(lc, T_NAME); /* expect at least one type */ - found = false; + found = FALSE; if (lc->str[0] == '!') { - is_not = true; + is_not = TRUE; str = &lc->str[1]; } else { - is_not = false; + is_not = FALSE; str = &lc->str[0]; } for (i=0; msg_types[i].name; i++) { if (strcasecmp(str, msg_types[i].name) == 0) { msg_type = msg_types[i].token; - found = true; + found = TRUE; break; } } @@ -336,10 +333,12 @@ static void scan_types(LEX *lc, MSGS *msg, int dest_code, char *where, char *cmd for (i=1; i<=M_MAX; i++) { /* yes set all types */ add_msg_dest(msg, dest_code, i, where, cmd); } - } else if (is_not) { - rem_msg_dest(msg, dest_code, msg_type, where); } else { - add_msg_dest(msg, dest_code, msg_type, where, cmd); + if (is_not) { + rem_msg_dest(msg, dest_code, msg_type, where); + } else { + add_msg_dest(msg, dest_code, msg_type, where, cmd); + } } if (lc->ch != ',') { break; @@ -689,36 +688,20 @@ void store_time(LEX *lc, RES_ITEM *item, int index, int pass) /* Store a yes/no in a bit field */ -void store_bit(LEX *lc, RES_ITEM *item, int index, int pass) +void store_yesno(LEX *lc, RES_ITEM *item, int index, int pass) { lex_get_token(lc, T_NAME); - if (strcasecmp(lc->str, "yes") == 0 || strcasecmp(lc->str, "true") == 0) { + if (strcasecmp(lc->str, "yes") == 0) { *(int *)(item->value) |= item->code; - } else if (strcasecmp(lc->str, "no") == 0 || strcasecmp(lc->str, "false") == 0) { + } else if (strcasecmp(lc->str, "no") == 0) { *(int *)(item->value) &= ~(item->code); } else { - scan_err2(lc, _("Expect %s, got: %s"), "YES, NO, TRUE, or FALSE", lc->str); /* YES and NO must not be translated */ + scan_err3(lc, _("Expect a %s or %s, got: %s"), "YES", "NO", lc->str); /* YES and NO must not be translated */ } scan_to_eol(lc); set_bit(index, res_all.hdr.item_present); } -/* Store a bool in a bit field */ -void store_bool(LEX *lc, RES_ITEM *item, int index, int pass) -{ - lex_get_token(lc, T_NAME); - if (strcasecmp(lc->str, "yes") == 0 || strcasecmp(lc->str, "true") == 0) { - *(bool *)(item->value) = true; - } else if (strcasecmp(lc->str, "no") == 0 || strcasecmp(lc->str, "false") == 0) { - *(bool *)(item->value) = false; - } else { - scan_err2(lc, _("Expect %s, got: %s"), "YES, NO, TRUE, or FALSE", lc->str); /* YES and NO must not be translated */ - } - scan_to_eol(lc); - set_bit(index, res_all.hdr.item_present); -} - - /* * Store Tape Label Type (Bacula, ANSI, IBM) * diff --git a/bacula/src/lib/parse_conf.h b/bacula/src/lib/parse_conf.h index 754a009cc7..e4d3980bde 100644 --- a/bacula/src/lib/parse_conf.h +++ b/bacula/src/lib/parse_conf.h @@ -2,22 +2,17 @@ * Version $Id$ */ /* - Copyright (C) 2000-2005 Kern Sibbald + Copyright (C) 2000-2006 Kern Sibbald This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of - the License, or (at your option) any later version. + modify it under the terms of the GNU General Public License + version 2 as amended with additional clauses defined in the + file LICENSE in the main source directory. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY 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., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + the file LICENSE for additional details. */ @@ -32,14 +27,14 @@ typedef void (MSG_RES_HANDLER)(LEX *lc, RES_ITEM *item, int index, int pass); struct RES_ITEM { const char *name; /* Resource name i.e. Director, ... */ MSG_RES_HANDLER *handler; /* Routine storing the resource item */ - void **value; /* Where to store the item */ + char **value; /* Where to store the item */ int code; /* item code/additional info */ int flags; /* flags: default, required, ... */ int default_value; /* default value */ }; /* For storing name_addr items in res_items table */ -#define ITEM(x) ((void **)&res_all.x) +#define ITEM(x) ((char **)&res_all.x) #define MAX_RES_ITEMS 70 /* maximum resource items per RES */ @@ -114,15 +109,16 @@ void save_resource(int type, RES_ITEM *item, int pass); const char *res_to_str(int rcode); /* Loop through each resource of type, returning in var */ +#ifdef HAVE_GCC #define foreach_res(var, type) \ - for(var=NULL; (*((void **)&(var))=(void *)GetNextRes((type), (RES *)var));) - -#ifdef the_old_way + for((var)=NULL; ((var)=(typeof(var))GetNextRes((type), (RES *)var));) +#else #define foreach_res(var, type) \ - for((var)=NULL; (((void *)(var))=GetNextRes((type), (RES *)var));) + for(var=NULL; (*((void **)&(var))=(void *)GetNextRes((type), (RES *)var));) #endif + void store_str(LEX *lc, RES_ITEM *item, int index, int pass); void store_dir(LEX *lc, RES_ITEM *item, int index, int pass); void store_password(LEX *lc, RES_ITEM *item, int index, int pass); @@ -135,8 +131,7 @@ void store_int(LEX *lc, RES_ITEM *item, int index, int pass); void store_pint(LEX *lc, RES_ITEM *item, int index, int pass); void store_msgs(LEX *lc, RES_ITEM *item, int index, int pass); void store_int64(LEX *lc, RES_ITEM *item, int index, int pass); -void store_bit(LEX *lc, RES_ITEM *item, int index, int pass); -void store_bool(LEX *lc, RES_ITEM *item, int index, int pass); +void store_yesno(LEX *lc, RES_ITEM *item, int index, int pass); void store_time(LEX *lc, RES_ITEM *item, int index, int pass); void store_size(LEX *lc, RES_ITEM *item, int index, int pass); void store_defs(LEX *lc, RES_ITEM *item, int index, int pass); diff --git a/bacula/src/lib/protos.h b/bacula/src/lib/protos.h index eedbc018cb..753064c7b7 100644 --- a/bacula/src/lib/protos.h +++ b/bacula/src/lib/protos.h @@ -4,22 +4,17 @@ * Version $Id$ */ /* - Copyright (C) 2000-2005 Kern Sibbald + Copyright (C) 2000-2006 Kern Sibbald This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of - the License, or (at your option) any later version. + modify it under the terms of the GNU General Public License + version 2 as amended with additional clauses defined in the + file LICENSE in the main source directory. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY 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., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + the file LICENSE for additional details. */ @@ -113,49 +108,15 @@ void hmac_md5(uint8_t* text, int text_len, uint8_t* key, uint32_t bcrc32(uint8_t *buf, int len); -/* crypto.c */ -int init_crypto (void); -int cleanup_crypto (void); -DIGEST * crypto_digest_new (crypto_digest_t type); -bool crypto_digest_update (DIGEST *digest, const void *data, size_t length); -bool crypto_digest_finalize (DIGEST *digest, void *dest, size_t *length); -void crypto_digest_free (DIGEST *digest); -SIGNATURE * crypto_sign_new (void); -crypto_error_t crypto_sign_get_digest (SIGNATURE *sig, X509_KEYPAIR *keypair, 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); -int crypto_sign_encode (SIGNATURE *sig, void *dest, size_t *length); -SIGNATURE * crypto_sign_decode (const void *sigData, size_t length); -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, void *dest, size_t *length); -crypto_error_t crypto_session_decode (const void *data, size_t length, alist *keypairs, CRYPTO_SESSION **session); -CRYPTO_SESSION * crypto_session_decode (const void *data, size_t length); -CIPHER_CONTEXT * crypto_cipher_new (CRYPTO_SESSION *cs, bool encrypt, size_t *blocksize); -bool crypto_cipher_update (CIPHER_CONTEXT *cipher_ctx, const void *data, size_t length, const void *dest, size_t *written); -bool crypto_cipher_finalize (CIPHER_CONTEXT *cipher_ctx, void *dest, size_t *written); -void crypto_cipher_free (CIPHER_CONTEXT *cipher_ctx); -X509_KEYPAIR * crypto_keypair_new (void); -X509_KEYPAIR * crypto_keypair_dup (X509_KEYPAIR *keypair); -int crypto_keypair_load_cert (X509_KEYPAIR *keypair, const char *file); -bool crypto_keypair_has_key (const char *file); -int crypto_keypair_load_key (X509_KEYPAIR *keypair, const char *file, CRYPTO_PEM_PASSWD_CB *pem_callback, const void *pem_userdata); -void crypto_keypair_free (X509_KEYPAIR *keypair); -int crypto_default_pem_callback (char *buf, int size, const void *userdata); -const char * crypto_digest_name (DIGEST *digest); -crypto_digest_t crypto_digest_stream_type (int stream); -const char * crypto_strerror (crypto_error_t error); - /* daemon.c */ void daemon_start (); /* edit.c */ uint64_t str_to_uint64(char *str); int64_t str_to_int64(char *str); -#define str_to_int32(str) ((int32_t)str_to_int64(str)) -char * edit_uint64_with_commas (uint64_t val, char *buf); +#define str_to_int32(str) ((int32_t)str_to_int64(str)) char * edit_uint64_with_suffix (uint64_t val, char *buf); +char * edit_uint64_with_commas (uint64_t val, char *buf); char * add_commas (char *val, char *buf); char * edit_uint64 (uint64_t val, char *buf); char * edit_int64 (int64_t val, char *buf); @@ -235,6 +196,7 @@ void init_stack_dump (void); /* scan.c */ void strip_leading_space (char *str); void strip_trailing_junk (char *str); +void strip_trailing_newline (char *str); void strip_trailing_slashes (char *dir); bool skip_spaces (char **msg); bool skip_nonspaces (char **msg); @@ -248,11 +210,14 @@ int bsscanf(const char *buf, const char *fmt, ...); /* tls.c */ +int init_tls (void); +int cleanup_tls (void); + TLS_CONTEXT *new_tls_context (const char *ca_certfile, const char *ca_certdir, const char *certfile, const char *keyfile, - CRYPTO_PEM_PASSWD_CB *pem_callback, + TLS_PEM_PASSWD_CB *pem_callback, const void *pem_userdata, const char *dhfile, bool verify_peer); diff --git a/bacula/src/lib/rwlock.c b/bacula/src/lib/rwlock.c index d66a5cc983..fc70892cfd 100644 --- a/bacula/src/lib/rwlock.c +++ b/bacula/src/lib/rwlock.c @@ -13,22 +13,17 @@ * */ /* - Copyright (C) 2000-2004 Kern Sibbald and John Walker + Copyright (C) 2001-2006 Kern Sibbald This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of - the License, or (at your option) any later version. + modify it under the terms of the GNU General Public License + version 2 as amended with additional clauses defined in the + file LICENSE in the main source directory. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY 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., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + the file LICENSE for additional details. */ diff --git a/bacula/src/lib/rwlock.h b/bacula/src/lib/rwlock.h index 8abd1b8311..178410945c 100644 --- a/bacula/src/lib/rwlock.h +++ b/bacula/src/lib/rwlock.h @@ -11,22 +11,17 @@ * */ /* - Copyright (C) 2000-2003 Kern Sibbald and John Walker + Copyright (C) 2001-2006 Kern Sibbald This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of - the License, or (at your option) any later version. + modify it under the terms of the GNU General Public License + version 2 as amended with additional clauses defined in the + file LICENSE in the main source directory. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY 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., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + the file LICENSE for additional details. */ diff --git a/bacula/src/lib/scan.c b/bacula/src/lib/scan.c index cfb5751300..53c4024210 100644 --- a/bacula/src/lib/scan.c +++ b/bacula/src/lib/scan.c @@ -49,6 +49,16 @@ void strip_trailing_junk(char *cmd) *p-- = 0; } +/* Strip any trailing newline characters from the string */ +void strip_trailing_newline(char *cmd) +{ + char *p; + p = cmd + strlen(cmd) - 1; + + while ((p >= cmd) && (*p == '\n' || *p == '\r')) + *p-- = 0; +} + /* Strip any trailing slashes from a directory path */ void strip_trailing_slashes(char *dir) { diff --git a/bacula/src/lib/tls.c b/bacula/src/lib/tls.c index 978e1aede9..b35069ec3f 100644 --- a/bacula/src/lib/tls.c +++ b/bacula/src/lib/tls.c @@ -36,7 +36,6 @@ */ - #include "bacula.h" #include @@ -49,10 +48,21 @@ extern time_t watchdog_time; /* No anonymous ciphers, no <128 bit ciphers, no export ciphers, no MD5 ciphers */ #define TLS_DEFAULT_CIPHERS "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH" +/* Array of mutexes for use with OpenSSL static locking */ +static pthread_mutex_t *mutexes; + +/* OpenSSL dynamic locking structure */ +struct CRYPTO_dynlock_value { + pthread_mutex_t mutex; +}; + +/* Are we initialized? */ +static int tls_initialized = false; + /* TLS Context Structure */ struct TLS_Context { SSL_CTX *openssl; - CRYPTO_PEM_PASSWD_CB *pem_callback; + TLS_PEM_PASSWD_CB *pem_callback; const void *pem_userdata; }; @@ -60,6 +70,20 @@ struct TLS_Connection { SSL *openssl; }; +/* post all per-thread openssl errors */ +static void openssl_post_errors(int code, const char *errstring) +{ + char buf[512]; + unsigned long sslerr; + + /* Pop errors off of the per-thread queue */ + while((sslerr = ERR_get_error()) != 0) { + /* Acquire the human readable string */ + ERR_error_string_n(sslerr, (char *) &buf, sizeof(buf)); + Emsg2(M_ERROR, 0, "%s: ERR=%s\n", errstring, buf); + } +} + /* * OpenSSL certificate verification callback. * OpenSSL has already performed internal certificate verification. @@ -87,8 +111,18 @@ static int openssl_verify_peer(int ok, X509_STORE_CTX *store) return ok; } +/* + * Default PEM encryption passphrase callback. + * Returns an empty password. + */ +static int tls_default_pem_callback(char *buf, int size, const void *userdata) +{ + bstrncpy(buf, "", size); + return (strlen(buf)); +} + /* Dispatch user PEM encryption callbacks */ -static int tls_pem_callback_dispatch (char *buf, int size, int rwflag, void *userdata) +static int openssl_pem_callback_dispatch (char *buf, int size, int rwflag, void *userdata) { TLS_CONTEXT *ctx = (TLS_CONTEXT *) userdata; return (ctx->pem_callback(buf, size, ctx->pem_userdata)); @@ -101,7 +135,7 @@ static int tls_pem_callback_dispatch (char *buf, int size, int rwflag, void *use */ TLS_CONTEXT *new_tls_context(const char *ca_certfile, const char *ca_certdir, const char *certfile, const char *keyfile, - CRYPTO_PEM_PASSWD_CB *pem_callback, + TLS_PEM_PASSWD_CB *pem_callback, const void *pem_userdata, const char *dhfile, bool verify_peer) { @@ -124,10 +158,10 @@ TLS_CONTEXT *new_tls_context(const char *ca_certfile, const char *ca_certdir, ctx->pem_callback = pem_callback; ctx->pem_userdata = pem_userdata; } else { - ctx->pem_callback = crypto_default_pem_callback; + ctx->pem_callback = tls_default_pem_callback; ctx->pem_userdata = NULL; } - SSL_CTX_set_default_passwd_cb(ctx->openssl, tls_pem_callback_dispatch); + SSL_CTX_set_default_passwd_cb(ctx->openssl, openssl_pem_callback_dispatch); SSL_CTX_set_default_passwd_cb_userdata(ctx->openssl, (void *) ctx); /* @@ -333,7 +367,7 @@ bool tls_postconnect_verify_host(TLS_CONNECTION *tls, const char *host) for (j = 0; j < sk_CONF_VALUE_num(val); j++) { nval = sk_CONF_VALUE_value(val, j); if (strcmp(nval->name, "DNS") == 0) { - if (strcasecmp(nval->value, host) == 0) { + if (strcasecmp(nval->name, host) == 0) { auth_success = true; goto success; } @@ -664,6 +698,234 @@ int tls_bsock_readn(BSOCK *bsock, char *ptr, int32_t nbytes) { return (openssl_bsock_readwrite(bsock, ptr, nbytes, false)); } +/* + * Return an OpenSSL thread ID + * Returns: thread ID + * + */ +static unsigned long get_openssl_thread_id (void) +{ + /* Comparison without use of pthread_equal() is mandated by the OpenSSL API */ + return ((unsigned long) pthread_self()); +} + +/* + * Allocate a dynamic OpenSSL mutex + */ +static struct CRYPTO_dynlock_value *openssl_create_dynamic_mutex (const char *file, int line) +{ + struct CRYPTO_dynlock_value *dynlock; + int stat; + + dynlock = (struct CRYPTO_dynlock_value *) malloc(sizeof(struct CRYPTO_dynlock_value)); + + if ((stat = pthread_mutex_init(&dynlock->mutex, NULL)) != 0) { + Emsg1(M_ABORT, 0, _("Unable to init mutex: ERR=%s\n"), strerror(stat)); + } + + return dynlock; +} + +static void openssl_update_dynamic_mutex (int mode, struct CRYPTO_dynlock_value *dynlock, const char *file, int line) +{ + if (mode & CRYPTO_LOCK) { + P(dynlock->mutex); + } else { + V(dynlock->mutex); + } +} + +static void openssl_destroy_dynamic_mutex (struct CRYPTO_dynlock_value *dynlock, const char *file, int line) +{ + int stat; + + if ((stat = pthread_mutex_destroy(&dynlock->mutex)) != 0) { + Emsg1(M_ABORT, 0, _("Unable to destroy mutex: ERR=%s\n"), strerror(stat)); + } + + free(dynlock); +} + +/* + * (Un)Lock a static OpenSSL mutex + */ +static void openssl_update_static_mutex (int mode, int i, const char *file, int line) +{ + if (mode & CRYPTO_LOCK) { + P(mutexes[i]); + } else { + V(mutexes[i]); + } +} + +/* + * Initialize OpenSSL thread support + * Returns: 0 on success + * errno on failure + */ +static int openssl_init_threads (void) +{ + int i, numlocks; + int stat; + + + /* Set thread ID callback */ + CRYPTO_set_id_callback(get_openssl_thread_id); + + /* Initialize static locking */ + numlocks = CRYPTO_num_locks(); + mutexes = (pthread_mutex_t *) malloc(numlocks * sizeof(pthread_mutex_t)); + for (i = 0; i < numlocks; i++) { + if ((stat = pthread_mutex_init(&mutexes[i], NULL)) != 0) { + Emsg1(M_ERROR, 0, _("Unable to init mutex: ERR=%s\n"), strerror(stat)); + return stat; + } + } + + /* Set static locking callback */ + CRYPTO_set_locking_callback(openssl_update_static_mutex); + + /* Initialize dyanmic locking */ + CRYPTO_set_dynlock_create_callback(openssl_create_dynamic_mutex); + CRYPTO_set_dynlock_lock_callback(openssl_update_dynamic_mutex); + CRYPTO_set_dynlock_destroy_callback(openssl_destroy_dynamic_mutex); + + return 0; +} + +/* + * Clean up OpenSSL threading support + */ +static void openssl_cleanup_threads (void) +{ + int i, numlocks; + int stat; + + /* 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) { + /* We don't halt execution, reporting the error should be sufficient */ + Emsg1(M_ERROR, 0, _("Unable to destroy mutex: ERR=%s\n"), strerror(stat)); + } + } + + /* Unset static locking callback */ + CRYPTO_set_locking_callback(NULL); + + /* Free static lock array */ + free(mutexes); + + /* Unset dynamic locking callbacks */ + CRYPTO_set_dynlock_create_callback(NULL); + CRYPTO_set_dynlock_lock_callback(NULL); + CRYPTO_set_dynlock_destroy_callback(NULL); +} + + +/* + * Seed TLS PRNG + * Returns: 1 on success + * 0 on failure + */ +static int seed_tls_prng (void) +{ + const char *names[] = { "/dev/urandom", "/dev/random", NULL }; + int i; + + // ***FIXME*** + // Win32 Support + // Read saved entropy? + + for (i = 0; names[i]; i++) { + if (RAND_load_file(names[i], 1024) != -1) { + /* Success */ + return 1; + } + } + + /* Fail */ + return 0; +} + +/* + * Save TLS Entropy + * Returns: 1 on success + * 0 on failure + */ +static int save_tls_prng (void) +{ + // ***FIXME*** + // Implement PRNG state save + return 1; +} + +/* + * Perform global initialization of TLS + * This function is not thread safe. + * Returns: 0 on success + * errno on failure + */ +int init_tls (void) +{ + int stat; + + if ((stat = openssl_init_threads()) != 0) { + Emsg1(M_ABORT, 0, _("Unable to init OpenSSL threading: ERR=%s\n"), strerror(stat)); + } + + /* Load libssl and libcrypto human-readable error strings */ + SSL_load_error_strings(); + + /* Register OpenSSL ciphers */ + SSL_library_init(); + + if (!seed_tls_prng()) { + Emsg0(M_ERROR_TERM, 0, _("Failed to seed OpenSSL PRNG\n")); + } + + tls_initialized = true; + + return stat; +} + +/* + * Perform global cleanup of TLS + * All TLS connections must be closed before calling this function. + * This function is not thread safe. + * Returns: 0 on success + * errno on failure + */ +int cleanup_tls (void) +{ + /* + * Ensure that we've actually been initialized; Doing this here decreases the + * complexity of client's termination/cleanup code. + */ + if (!tls_initialized) { + return 0; + } + + if (!save_tls_prng()) { + Emsg0(M_ERROR, 0, _("Failed to save OpenSSL PRNG\n")); + } + + openssl_cleanup_threads(); + + /* Free libssl and libcrypto error strings */ + ERR_free_strings(); + + /* Free memory used by PRNG */ + RAND_cleanup(); + + tls_initialized = false; + + return 0; +} + #else /* HAVE_OPENSSL */ # error No TLS implementation available. #endif /* !HAVE_OPENSSL */ @@ -671,9 +933,11 @@ int tls_bsock_readn(BSOCK *bsock, char *ptr, int32_t nbytes) { #else /* Dummy routines */ +int init_tls(void) { return 0; } +int cleanup_tls (void) { return 0; } TLS_CONTEXT *new_tls_context(const char *ca_certfile, const char *ca_certdir, const char *certfile, const char *keyfile, - CRYPTO_PEM_PASSWD_CB *pem_callback, + TLS_PEM_PASSWD_CB *pem_callback, const void *pem_userdata, const char *dhfile, bool verify_peer) { diff --git a/bacula/src/lib/tls.h b/bacula/src/lib/tls.h index 28d6fd6111..13595dd17f 100644 --- a/bacula/src/lib/tls.h +++ b/bacula/src/lib/tls.h @@ -50,4 +50,7 @@ typedef struct TLS_Context TLS_CONTEXT; /* Opaque TLS Connection Structure */ typedef struct TLS_Connection TLS_CONNECTION; +/* PEM Decryption Passphrase Callback */ +typedef int (TLS_PEM_PASSWD_CB) (char *buf, int size, const void *userdata); + #endif /* __TLS_H_ */ diff --git a/bacula/src/lib/util.c b/bacula/src/lib/util.c index 90cf6044a0..95799f2498 100644 --- a/bacula/src/lib/util.c +++ b/bacula/src/lib/util.c @@ -510,7 +510,7 @@ void make_session_key(char *key, char *seed, int mode) * %d = Director's name * %e = Job Exit code * %i = JobId - * %j = Unique Job name + * %j = Unique Job id * %l = job level * %n = Unadorned Job name * %s = Since time diff --git a/bacula/src/lib/winapi.h b/bacula/src/lib/winapi.h index 42db9f3fcb..a138f04f47 100644 --- a/bacula/src/lib/winapi.h +++ b/bacula/src/lib/winapi.h @@ -51,7 +51,7 @@ typedef char POOLMEM; int wchar_2_UTF8(char *pszUTF, const WCHAR *pszUCS, int cchChar = MAX_PATH_UTF8); int UTF8_2_wchar(POOLMEM **pszUCS, const char *pszUTF); -int make_win32_path_UTF8_2_wchar(POOLMEM **pszUCS, const char *pszUTF, BOOL* pBIsRawPath = NULL); + /* In ADVAPI32.DLL */ diff --git a/bacula/src/stored/Makefile.in b/bacula/src/stored/Makefile.in index ba70f04ef6..2b9e2141ea 100644 --- a/bacula/src/stored/Makefile.in +++ b/bacula/src/stored/Makefile.in @@ -23,14 +23,14 @@ first_rule: all dummy: # bacula-sd -SDOBJS = stored.o ansi_label.o \ +SVROBJS = stored.o ansi_label.o \ autochanger.o acquire.o append.o \ askdir.o authenticate.o \ block.o butil.o dev.o \ device.o dircmd.o dvd.o ebcdic.c fd_cmds.o job.o \ - label.o mac.o match_bsr.o mount.o parse_bsr.o \ + label.o match_bsr.o mount.o parse_bsr.o \ pythonsd.o read.o read_record.o record.o \ - reserve.o scan.o \ + reserve.o \ spool.o status.o stored_conf.o wait.o # btape @@ -38,33 +38,35 @@ TAPEOBJS = btape.o block.o butil.o dev.o device.o label.o \ ansi_label.o dvd.o ebcdic.o \ autochanger.o acquire.o mount.o record.o read_record.o \ reserve.o \ - stored_conf.o match_bsr.o parse_bsr.o scan.o spool.o wait.o + stored_conf.o match_bsr.o parse_bsr.o spool.o wait.o # bls BLSOBJS = bls.o block.o butil.o device.o dev.o label.o match_bsr.o \ ansi_label.o dvd.o ebcdic.o \ autochanger.o acquire.o mount.o parse_bsr.o record.o \ - read_record.o reserve.o scan.o stored_conf.o spool.o wait.o + reserve.o \ + read_record.o stored_conf.o spool.o wait.o # bextract BEXTOBJS = bextract.o block.o device.o dev.o label.o record.o \ ansi_label.o dvd.o ebcdic.o \ autochanger.o acquire.o mount.o match_bsr.o parse_bsr.o butil.o \ - pythonsd.o read_record.o reserve.o \ - scan.o stored_conf.o spool.o wait.o + pythonsd.o reserve.o \ + read_record.o stored_conf.o spool.o wait.o # bscan SCNOBJS = bscan.o block.o device.o dev.o label.o \ ansi_label.o dvd.o ebcdic.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 wait.o + reserve.o \ + butil.o read_record.o stored_conf.o spool.o wait.o # bcopy COPYOBJS = bcopy.o block.o device.o dev.o label.o \ ansi_label.o dvd.o ebcdic.o \ autochanger.o acquire.o mount.o record.o match_bsr.o parse_bsr.o \ - butil.o read_record.o reserve.o \ - scan.o stored_conf.o spool.o wait.o + reserve.o \ + butil.o read_record.o stored_conf.o spool.o wait.o @@ -87,13 +89,13 @@ all: Makefile bacula-sd @STATIC_SD@ bls bextract bscan btape bcopy @echo "===== Make of stored is good ====" @echo " " -bacula-sd: $(SDOBJS) ../lib/libbac.a - $(CXX) $(WLDFLAGS) $(LDFLAGS) -L../lib -o $@ $(SDOBJS) $(FDLIBS) \ +bacula-sd: $(SVROBJS) ../lib/libbac.a + $(CXX) $(WLDFLAGS) $(LDFLAGS) -L../lib -o $@ $(SVROBJS) $(FDLIBS) \ -lbac -lm $(PYTHON_LIBS) $(DLIB) $(LIBS) $(WRAPLIBS) \ $(GETTEXT_LIBS) $(OPENSSL_LIBS) -static-bacula-sd: $(SDOBJS) ../lib/libbac.a - $(CXX) $(WLDFLAGS) $(LDFLAGS) -static -L../lib -o $@ $(SDOBJS) $(FDLIBS) \ +static-bacula-sd: $(SVROBJS) ../lib/libbac.a + $(CXX) $(WLDFLAGS) $(LDFLAGS) -static -L../lib -o $@ $(SVROBJS) $(FDLIBS) \ -lbac -lm $(PYTHON_LIBS) $(DLIB) $(LIBS) $(WRAPLIBS) \ $(GETTEXT_LIBS) $(OPENSSL_LIBS) strip $@ diff --git a/bacula/src/stored/acquire.c b/bacula/src/stored/acquire.c index 4d32968cfc..156c73cf1e 100644 --- a/bacula/src/stored/acquire.c +++ b/bacula/src/stored/acquire.c @@ -23,9 +23,6 @@ #include "bacula.h" /* pull in global headers */ #include "stored.h" /* pull in Storage Deamon headers */ -/* Forward referenced functions */ -static void detach_dcr_from_dev(DCR *dcr); - /********************************************************************* * Acquire device for reading. @@ -36,17 +33,18 @@ static void detach_dcr_from_dev(DCR *dcr); * Returns: NULL if failed for any reason * dcr if successful */ -bool acquire_device_for_read(DCR *dcr) +DCR *acquire_device_for_read(DCR *dcr) { DEVICE *dev = dcr->dev; JCR *jcr = dcr->jcr; - bool ok = false; + bool vol_ok = false; bool tape_previously_mounted; bool tape_initially_mounted; VOL_LIST *vol; bool try_autochanger = true; int i; int vol_label_status; + int retry = 0; dev->block(BST_DOING_ACQUIRE); @@ -70,71 +68,6 @@ bool acquire_device_for_read(DCR *dcr) goto get_out; /* should not happen */ } bstrncpy(dcr->VolumeName, vol->VolumeName, sizeof(dcr->VolumeName)); - bstrncpy(dcr->media_type, vol->MediaType, sizeof(dcr->media_type)); - dcr->VolCatInfo.Slot = vol->Slot; - - /* - * If the MediaType requested for this volume is not the - * same as the current drive, we attempt to find the same - * device that was used to write the orginal volume. If - * found, we switch to using that device. - */ - Dmsg2(100, "MediaType dcr=%s dev=%s\n", dcr->media_type, dev->device->media_type); - if (dcr->media_type[0] && strcmp(dcr->media_type, dev->device->media_type) != 0) { - RCTX rctx; - DIRSTORE *store; - int stat; - memset(&rctx, 0, sizeof(RCTX)); - rctx.jcr = jcr; - jcr->reserve_msgs = New(alist(10, not_owned_by_alist)); - rctx.any_drive = true; - rctx.device_name = vol->device; - store = new DIRSTORE; - memset(store, 0, sizeof(DIRSTORE)); - store->name[0] = 0; /* No dir 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; - - /* - * Note, if search_for_device() succeeds, we get a new_dcr, - * which we do not use except for the dev info. - */ - stat = search_res_for_device(rctx); - release_msgs(jcr); /* release queued messages */ - if (stat == 1) { - DCR *new_dcr = jcr->read_dcr; - dev->unblock(); - detach_dcr_from_dev(dcr); /* release old device */ - /* Copy important info from the new dcr */ - dev = dcr->dev = new_dcr->dev; - jcr->read_dcr = dcr; - dcr->device = new_dcr->device; - dcr->max_job_spool_size = dcr->device->max_job_spool_size; - if (dev->fd != 0 && jcr && jcr->JobType != JT_SYSTEM) { - dev->attached_dcrs->append(dcr); /* attach dcr to device */ - } - new_dcr->VolumeName[0] = 0; - free_dcr(new_dcr); - dev->block(BST_DOING_ACQUIRE); - Jmsg(jcr, M_INFO, 0, _("Media Type change. New device %s chosen.\n"), - dev->print_name()); - bstrncpy(dcr->VolumeName, vol->VolumeName, sizeof(dcr->VolumeName)); - bstrncpy(dcr->media_type, vol->MediaType, sizeof(dcr->media_type)); - dcr->VolCatInfo.Slot = vol->Slot; - bstrncpy(dcr->pool_name, store->pool_name, sizeof(dcr->pool_name)); - bstrncpy(dcr->pool_type, store->pool_type, sizeof(dcr->pool_type)); - } else if (stat == 0) { /* device busy */ - Dmsg1(000, "Device %s is busy.\n", vol->device); - } else { - /* error */ - Jmsg1(jcr, M_FATAL, 0, _("No suitable device found to read Volume \"%s\"\n"), - vol->VolumeName); - goto get_out; - } - } init_device_wait_timers(dcr); @@ -149,7 +82,11 @@ bool acquire_device_for_read(DCR *dcr) Jmsg1(jcr, M_WARNING, 0, "%s", jcr->errmsg); } - for (i=0; i<5; i++) { + for ( ;; ) { + /* If not polling limit retries */ + if (!dev->poll && retry++ > 10) { + break; + } dev->clear_labeled(); /* force reread of label */ if (job_canceled(jcr)) { Mmsg1(dev->errmsg, _("Job %d canceled.\n"), jcr->JobId); @@ -164,12 +101,12 @@ bool acquire_device_for_read(DCR *dcr) if (dev->open(dcr, OPEN_READ_ONLY) < 0) { if (dev->dev_errno == EIO) { /* no tape loaded */ Jmsg3(jcr, M_WARNING, 0, _("Read open device %s Volume \"%s\" failed (EIO): ERR=%s\n"), - dev->print_name(), dcr->VolumeName, dev->bstrerror()); + dev->print_name(), dcr->VolumeName, strerror_dev(dev)); goto default_path; } Jmsg3(jcr, M_FATAL, 0, _("Read open device %s Volume \"%s\" failed: ERR=%s\n"), - dev->print_name(), dcr->VolumeName, dev->bstrerror()); + dev->print_name(), dcr->VolumeName, strerror_dev(dev)); goto get_out; } Dmsg1(100, "opened dev %s OK\n", dev->print_name()); @@ -180,7 +117,7 @@ bool acquire_device_for_read(DCR *dcr) vol_label_status = read_dev_volume_label(dcr); switch (vol_label_status) { case VOL_OK: - ok = true; + vol_ok = true; memcpy(&dev->VolCatInfo, &dcr->VolCatInfo, sizeof(dev->VolCatInfo)); break; /* got it */ case VOL_IO_ERROR: @@ -198,17 +135,22 @@ bool acquire_device_for_read(DCR *dcr) tape_initially_mounted = false; goto default_path; } + /* If polling and got a previous bad name, ignore it */ + if (dev->poll && strcmp(dev->BadVolName, dev->VolHdr.VolumeName) == 0) { + goto default_path; + } else { + bstrncpy(dev->BadVolName, dev->VolHdr.VolumeName, sizeof(dev->BadVolName)); + } /* Fall through */ default: Jmsg1(jcr, M_WARNING, 0, "%s", jcr->errmsg); default_path: tape_previously_mounted = true; - /* - * If the device requires mount, close it, so the device can be ejected. - */ + /* If the device requires mount, close it, so the device can be ejected. + * FIXME: This should perhaps be done for all devices. */ if (dev->requires_mount()) { - dev->close(); + force_close_device(dev); } /* Call autochanger only once unless ask_sysop called */ @@ -233,7 +175,7 @@ default_path: } /* end switch */ break; } /* end for loop */ - if (!ok) { + if (!vol_ok) { Jmsg1(jcr, M_FATAL, 0, _("Too many errors trying to mount device %s.\n"), dev->print_name()); goto get_out; @@ -255,7 +197,8 @@ get_out: } V(dev->mutex); dev->unblock(); - return ok; + Dmsg1(000, "jcr->dcr=%p\n", jcr->dcr); + return dcr; } @@ -373,7 +316,7 @@ DCR *acquire_device_for_append(DCR *dcr) P(dev->mutex); if (dcr->reserved_device) { dev->reserved_device--; - Dmsg2(100, "Dec reserve=%d dev=%s\n", dev->reserved_device, dev->print_name()); + Dmsg1(100, "Dec reserve=%d\n", dev->reserved_device); dcr->reserved_device = false; } V(dev->mutex); @@ -387,15 +330,15 @@ get_out: P(dev->mutex); if (dcr->reserved_device) { dev->reserved_device--; - Dmsg2(100, "Dec reserve=%d dev=%s\n", dev->reserved_device, dev->print_name()); + Dmsg1(100, "Dec reserve=%d\n", dev->reserved_device); dcr->reserved_device = false; } V(dev->mutex); + free_dcr(dcr); dev->unblock(); return NULL; } - /* * This job is done, so release the device. From a Unix standpoint, * the device remains open. @@ -408,12 +351,12 @@ bool release_device(DCR *dcr) bool ok = true; lock_device(dev); - Dmsg2(100, "release_device device %s is %s\n", dev->print_name(), dev->is_tape()?"tape":"disk"); + Dmsg1(100, "release_device device is %s\n", dev->is_tape()?"tape":"disk"); /* if device is reserved, job never started, so release the reserve here */ if (dcr->reserved_device) { dev->reserved_device--; - Dmsg2(100, "Dec reserve=%d dev=%s\n", dev->reserved_device, dev->print_name()); + Dmsg1(100, "Dec reserve=%d\n", dev->reserved_device); dcr->reserved_device = false; } @@ -461,7 +404,8 @@ bool release_device(DCR *dcr) /* If no writers, close if file or !CAP_ALWAYS_OPEN */ if (dev->num_writers == 0 && (!dev->is_tape() || !dev_cap(dev, CAP_ALWAYSOPEN))) { - dev->close(); + offline_or_rewind_dev(dev); + close_device(dev); } /* Fire off Alert command and include any output */ @@ -552,18 +496,22 @@ static void remove_dcr_from_dcrs(DCR *dcr) } #endif -static void detach_dcr_from_dev(DCR *dcr) +/* + * Free up all aspects of the given dcr -- i.e. dechain it, + * release allocated memory, zap pointers, ... + */ +void free_dcr(DCR *dcr) { + JCR *jcr = dcr->jcr; DEVICE *dev = dcr->dev; if (dcr->reserved_device) { - dcr->reserved_device = false; lock_device(dev); dev->reserved_device--; Dmsg2(100, "Dec reserve=%d dev=%s\n", dev->reserved_device, dev->print_name()); dcr->reserved_device = false; /* If we set read mode in reserving, remove it */ - if (dev->can_read()) { + if (dev->can_read()) { dev->clear_read(); } if (dev->num_writers < 0) { @@ -574,24 +522,10 @@ static void detach_dcr_from_dev(DCR *dcr) } /* Detach this dcr only if the dev is initialized */ - if (dcr->dev->fd != 0 && dcr->jcr && dcr->jcr->JobType != JT_SYSTEM) { - dcr->dev->attached_dcrs->remove(dcr); /* detach dcr from device */ + if (dev->fd != 0 && jcr && jcr->JobType != JT_SYSTEM) { + dev->attached_dcrs->remove(dcr); /* detach dcr from device */ // remove_dcr_from_dcrs(dcr); /* remove dcr from jcr list */ } - free_unused_volume(dcr); /* free unused vols attached to this dcr */ - pthread_cond_broadcast(&dcr->dev->wait_next_vol); - pthread_cond_broadcast(&wait_device_release); -} - -/* - * Free up all aspects of the given dcr -- i.e. dechain it, - * release allocated memory, zap pointers, ... - */ -void free_dcr(DCR *dcr) -{ - - detach_dcr_from_dev(dcr); - if (dcr->block) { free_block(dcr->block); } @@ -601,5 +535,8 @@ void free_dcr(DCR *dcr) if (dcr->jcr) { dcr->jcr->dcr = NULL; } + free_unused_volume(dcr); /* free unused vols attached to this dcr */ free(dcr); + pthread_cond_broadcast(&dev->wait_next_vol); + pthread_cond_broadcast(&wait_device_release); } diff --git a/bacula/src/stored/append.c b/bacula/src/stored/append.c index eeae53420b..4c6c12d53b 100644 --- a/bacula/src/stored/append.c +++ b/bacula/src/stored/append.c @@ -5,7 +5,7 @@ * Version $Id$ */ /* - Copyright (C) 2000-2006 Kern Sibbald + Copyright (C) 2000-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -69,7 +69,6 @@ bool do_append_data(JCR *jcr) if (!acquire_device_for_append(dcr)) { set_jcr_job_status(jcr, JS_ErrorTerminated); - jcr->dcr = NULL; return false; } @@ -93,7 +92,7 @@ bool do_append_data(JCR *jcr) */ if (!write_session_label(dcr, SOS_LABEL)) { Jmsg1(jcr, M_FATAL, 0, _("Write session label failed. ERR=%s\n"), - dev->bstrerror()); + strerror_dev(dev)); set_jcr_job_status(jcr, JS_ErrorTerminated); ok = false; } @@ -203,9 +202,9 @@ bool do_append_data(JCR *jcr) rec.remainder); if (!write_block_to_device(dcr)) { Dmsg2(90, "Got write_block_to_dev error on device %s. %s\n", - dev->print_name(), dev->bstrerror()); + dev->print_name(), strerror_dev(dev)); Jmsg2(jcr, M_FATAL, 0, _("Fatal append error on device %s: ERR=%s\n"), - dev->print_name(), dev->bstrerror()); + dev->print_name(), strerror_dev(dev)); ok = false; break; } @@ -220,8 +219,8 @@ bool do_append_data(JCR *jcr) stream_to_ascii(buf2, rec.Stream, rec.FileIndex), rec.data_len); /* Send attributes and digest to Director for Catalog */ - if (stream == STREAM_UNIX_ATTRIBUTES || stream == STREAM_UNIX_ATTRIBUTES_EX || - crypto_digest_stream_type(stream) != CRYPTO_DIGEST_NONE) { + if (stream == STREAM_UNIX_ATTRIBUTES || stream == STREAM_MD5_SIGNATURE || + stream == STREAM_UNIX_ATTRIBUTES_EX || stream == STREAM_SHA1_SIGNATURE) { if (!jcr->no_attributes) { if (are_attributes_spooled(jcr)) { jcr->dir_bsock->spool = true; @@ -252,7 +251,10 @@ bool do_append_data(JCR *jcr) /* Create Job status for end of session label */ set_jcr_job_status(jcr, ok?JS_Terminated:JS_ErrorTerminated); - Dmsg1(200, "Write EOS label JobStatus=%c\n", jcr->JobStatus); + Dmsg1(200, "Write session label JobStatus=%d\n", jcr->JobStatus); + if ((!ok || job_canceled(jcr)) && dev->VolCatInfo.VolCatName[0] == 0) { + Pmsg0(000, _("NULL Volume name. This shouldn't happen!!!\n")); + } /* * If !OK, check if we can still write. This may not be the case @@ -261,7 +263,7 @@ bool do_append_data(JCR *jcr) if (ok || dev->can_write()) { if (!write_session_label(dcr, EOS_LABEL)) { Jmsg1(jcr, M_FATAL, 0, _("Error writting end session label. ERR=%s\n"), - dev->bstrerror()); + strerror_dev(dev)); set_jcr_job_status(jcr, JS_ErrorTerminated); ok = false; } @@ -272,7 +274,7 @@ bool do_append_data(JCR *jcr) /* Flush out final partial block of this session */ if (!write_block_to_device(dcr)) { Jmsg2(jcr, M_FATAL, 0, _("Fatal append error on device %s: ERR=%s\n"), - dev->print_name(), dev->bstrerror()); + dev->print_name(), strerror_dev(dev)); Dmsg0(100, _("Set ok=FALSE after write_block_to_device.\n")); ok = false; } diff --git a/bacula/src/stored/askdir.c b/bacula/src/stored/askdir.c index 16557abd98..8d31f72fc5 100644 --- a/bacula/src/stored/askdir.c +++ b/bacula/src/stored/askdir.c @@ -162,7 +162,7 @@ static bool do_get_volume_info(DCR *dcr) return false; } memset(&vol, 0, sizeof(vol)); - Dmsg1(100, "msg); + Dmsg1(110, "msg); n = sscanf(dir->msg, OK_media, vol.VolCatName, &vol.VolCatJobs, &vol.VolCatFiles, &vol.VolCatBlocks, &vol.VolCatBytes, @@ -174,7 +174,7 @@ static bool do_get_volume_info(DCR *dcr) &vol.EndFile, &vol.EndBlock, &vol.VolCatParts, &vol.LabelType); if (n != 21) { - Dmsg2(100, "Bad response from Dir fields=%d: %s", n, dir->msg); + Dmsg2(110, "Bad response from Dir fields=%d: %s", n, dir->msg); Mmsg(jcr->errmsg, _("Error getting Volume info: %s"), dir->msg); return false; } @@ -228,10 +228,6 @@ bool dir_find_next_appendable_volume(DCR *dcr) JCR *jcr = dcr->jcr; BSOCK *dir = jcr->dir_bsock; bool found = false; - /* This mutex should keep different devices from getting the - * same Volume. - */ - static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; Dmsg0(200, "dir_find_next_appendable_volume\n"); /* @@ -239,7 +235,7 @@ bool dir_find_next_appendable_volume(DCR *dcr) * the most available could already be mounted on another * drive, so we continue looking for a not in use Volume. */ - P(mutex); + lock_reservations(); for (int vol_index=1; vol_index < 20; vol_index++) { bash_spaces(dcr->media_type); bash_spaces(dcr->pool_name); @@ -257,7 +253,8 @@ bool dir_find_next_appendable_volume(DCR *dcr) continue; } } else { - Dmsg0(200, "No volume info, return false\n"); + Dmsg2(100, "No vol. index %d return false. dev=%s\n", vol_index, + dcr->dev->print_name()); found = false; break; } @@ -265,11 +262,11 @@ bool dir_find_next_appendable_volume(DCR *dcr) if (found) { Dmsg0(400, "dir_find_next_appendable_volume return true\n"); new_volume(dcr, dcr->VolumeName); /* reserve volume */ - V(mutex); + unlock_reservations(); return true; } dcr->VolumeName[0] = 0; - V(mutex); + unlock_reservations(); return false; } @@ -520,7 +517,7 @@ bool dir_ask_sysop_to_mount_volume(DCR *dcr) } if (dev->is_dvd()) { - unmount_dvd(dev, 0); + unmount_dev(dev, 0); } /* diff --git a/bacula/src/stored/autochanger.c b/bacula/src/stored/autochanger.c index e135852474..8c822b9ebb 100644 --- a/bacula/src/stored/autochanger.c +++ b/bacula/src/stored/autochanger.c @@ -105,7 +105,6 @@ int autoload_device(DCR *dcr, int writing, BSOCK *dir) POOLMEM *changer; if (!dev->is_autochanger()) { - Dmsg0(200, "======== NOT AUTOCHANGER ======\n"); return 0; } slot = dcr->VolCatInfo.InChanger ? dcr->VolCatInfo.Slot : 0; @@ -155,8 +154,8 @@ int autoload_device(DCR *dcr, int writing, BSOCK *dir) 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); + offline_or_rewind_dev(dev); + force_close_device(dev); status = run_program(changer, timeout, NULL); if (status == 0) { Jmsg(jcr, M_INFO, 0, _("3305 Autochanger \"load slot %d, drive %d\", status is OK.\n"), @@ -220,9 +219,8 @@ int get_autochanger_loaded_slot(DCR *dcr) drive); changer = edit_device_codes(dcr, changer, dcr->device->changer_command, "loaded"); *results = 0; - Dmsg1(200, "Run program=%s\n", changer); status = run_program(changer, timeout, results); - Dmsg3(200, "run_prog: %s stat=%d result=%s\n", changer, status, results); + Dmsg3(50, "run_prog: %s stat=%d result=%s\n", changer, status, results); if (status == 0) { loaded = str_to_int32(results); if (loaded > 0) { @@ -302,8 +300,8 @@ bool unload_autochanger(DCR *dcr, int loaded) dcr->VolCatInfo.Slot = loaded; changer = edit_device_codes(dcr, changer, dcr->device->changer_command, "unload"); - dev->close(); - Dmsg1(200, "Run program=%s\n", changer); + offline_or_rewind_dev(dev); + force_close_device(dev); int stat = run_program(changer, timeout, NULL); dcr->VolCatInfo.Slot = slot; if (stat != 0) { @@ -337,6 +335,7 @@ static bool unload_other_drive(DCR *dcr, int slot) bool found = false; bool first = true; + if (!changer) { return false; } @@ -367,9 +366,9 @@ static bool unload_other_drive(DCR *dcr, int slot) } P(dev->mutex); if (dev->is_busy()) { - Jmsg(jcr, M_WARNING, 0, _("Volume \"%s\" is in use by device %s\n"), + Jmsg(jcr, M_WARNING, 0, _("Volume %s is in use by device %s\n"), dcr->VolumeName, dev->print_name()); - Dmsg2(200, "Volume \"%s\" is in use by device %s\n", + Dmsg2(200, "Volume %s is in use by device %s\n", dcr->VolumeName, dev->print_name()); V(dev->mutex); return false; @@ -384,16 +383,15 @@ static bool unload_other_drive(DCR *dcr, int slot) Dmsg2(200, "Issuing autochanger \"unload slot %d, drive %d\" command.\n", slot, dev->drive_index); + save_slot = dcr->VolCatInfo.Slot; save_dev = dcr->dev; dcr->dev = dev; - save_slot = dcr->VolCatInfo.Slot; dcr->VolCatInfo.Slot = slot; 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(), - dev->reserved_device); Dmsg1(200, "Run program=%s\n", changer_cmd); + offline_or_rewind_dev(dev); + force_close_device(dev); int stat = run_program(changer_cmd, timeout, NULL); dcr->VolCatInfo.Slot = save_slot; dcr->dev = save_dev; diff --git a/bacula/src/stored/bcopy.c b/bacula/src/stored/bcopy.c index b072bd9a93..08e9ba6614 100644 --- a/bacula/src/stored/bcopy.c +++ b/bacula/src/stored/bcopy.c @@ -190,8 +190,8 @@ int main (int argc, char *argv[]) free_jcr(in_jcr); free_jcr(out_jcr); - in_dev->term(); - out_dev->term(); + term_dev(in_dev); + term_dev(out_dev); return 0; } @@ -231,16 +231,16 @@ static bool record_cb(DCR *in_dcr, DEV_RECORD *rec) rec->remainder); if (!write_block_to_device(out_jcr->dcr)) { Dmsg2(90, "Got write_block_to_dev error on device %s: ERR=%s\n", - out_dev->print_name(), out_dev->bstrerror()); + out_dev->print_name(), strerror_dev(out_dev)); Jmsg(out_jcr, M_FATAL, 0, _("Cannot fixup device error. %s\n"), - out_dev->bstrerror()); + strerror_dev(out_dev)); } } if (!write_block_to_device(out_jcr->dcr)) { Dmsg2(90, "Got write_block_to_dev error on device %s: ERR=%s\n", - out_dev->print_name(), out_dev->bstrerror()); + out_dev->print_name(), strerror_dev(out_dev)); Jmsg(out_jcr, M_FATAL, 0, _("Cannot fixup device error. %s\n"), - out_dev->bstrerror()); + strerror_dev(out_dev)); } break; case EOM_LABEL: @@ -261,9 +261,9 @@ static bool record_cb(DCR *in_dcr, DEV_RECORD *rec) rec->remainder); if (!write_block_to_device(out_jcr->dcr)) { Dmsg2(90, "Got write_block_to_dev error on device %s: ERR=%s\n", - out_dev->print_name(), out_dev->bstrerror()); + out_dev->print_name(), strerror_dev(out_dev)); Jmsg(out_jcr, M_FATAL, 0, _("Cannot fixup device error. %s\n"), - out_dev->bstrerror()); + strerror_dev(out_dev)); break; } } diff --git a/bacula/src/stored/bextract.c b/bacula/src/stored/bextract.c index 4d1cf2051d..ec1a670831 100644 --- a/bacula/src/stored/bextract.c +++ b/bacula/src/stored/bextract.c @@ -8,7 +8,7 @@ * */ /* - Copyright (C) 2000-2006 Kern Sibbald + Copyright (C) 2000-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -246,7 +246,7 @@ static void do_extract(char *devname) release_device(dcr); free_attr(attr); free_jcr(jcr); - dev->term(); + term_dev(dev); printf(_("%u files restored.\n"), num_files); return; @@ -432,8 +432,7 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec) break; case STREAM_SIGNED_DIGEST: - case STREAM_ENCRYPTED_SESSION_DATA: - // TODO landonf: Investigate crypto support in the storage daemon + // TODO landonf: Investigate signed digest support in the storage daemon break; case STREAM_PROGRAM_NAMES: diff --git a/bacula/src/stored/block.c b/bacula/src/stored/block.c index d1d7b2669d..1a38ee7c81 100644 --- a/bacula/src/stored/block.c +++ b/bacula/src/stored/block.c @@ -9,7 +9,7 @@ * */ /* - Copyright (C) 2001-2006 Kern Sibbald + Copyright (C) 2001-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -480,7 +480,7 @@ bool write_block_to_dev(DCR *dcr) if (weof_dev(dev, 1) != 0) { /* write eof */ Dmsg0(190, "WEOF error in max file size.\n"); Jmsg(jcr, M_FATAL, 0, _("Unable to write EOF. ERR=%s\n"), - dev->bstrerror()); + strerror_dev(dev)); terminate_writing_volume(dcr); dev->dev_errno = ENOSPC; return false; @@ -613,20 +613,20 @@ static void reread_last_block(DCR *dcr) */ if (dev->is_tape() && dev_cap(dev, CAP_BSR)) { /* Now back up over what we wrote and read the last block */ - if (!dev->bsf(1)) { + if (!bsf_dev(dev, 1)) { berrno be; ok = false; Jmsg(jcr, M_ERROR, 0, _("Backspace file at EOT failed. ERR=%s\n"), be.strerror(dev->dev_errno)); } - if (ok && dev->has_cap(CAP_TWOEOF) && !dev->bsf(1)) { + if (ok && dev_cap(dev, CAP_TWOEOF) && !bsf_dev(dev, 1)) { berrno be; ok = false; Jmsg(jcr, M_ERROR, 0, _("Backspace file at EOT failed. ERR=%s\n"), be.strerror(dev->dev_errno)); } /* Backspace over record */ - if (ok && !dev->bsr(1)) { + if (ok && !bsr_dev(dev, 1)) { berrno be; ok = false; Jmsg(jcr, M_ERROR, 0, _("Backspace record at EOT failed. ERR=%s\n"), @@ -637,7 +637,7 @@ static void reread_last_block(DCR *dcr) * 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_dev() call in bsr() + * tape is requested. Note, the clrerror_dev() call in bsr_dev() * calls ioctl(MTCERRSTAT), which *should* fix the problem. */ } @@ -649,12 +649,17 @@ static void reread_last_block(DCR *dcr) Jmsg(jcr, M_ERROR, 0, _("Re-read last block at EOT failed. ERR=%s"), dev->errmsg); } else { - if (lblock->BlockNumber+1 == block->BlockNumber) { - Jmsg(jcr, M_INFO, 0, _("Re-read of last block succeeded.\n")); - } else { + /* + * If we wrote block and the block numbers don't agree + * we have a possible problem. + */ + if (lblock->VolSessionId == block->VolSessionId && + lblock->BlockNumber+1 != block->BlockNumber) { Jmsg(jcr, M_ERROR, 0, _( -"Re-read of last block failed. Last block=%u Current block=%u.\n"), +"Re-read of last block OK, but block numbers differ. Last block=%u Current block=%u.\n"), lblock->BlockNumber, block->BlockNumber); + } else { + Jmsg(jcr, M_INFO, 0, _("Re-read of last block succeeded.\n")); } } free_block(lblock); @@ -801,7 +806,7 @@ static bool do_dvd_size_checks(DCR *dcr) 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->print_name(), strerror_dev(dev)); dev->dev_errno = EIO; return false; } @@ -911,7 +916,7 @@ reread: (dev->part < dev->num_parts)) { 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->print_name(), strerror_dev(dev)); dev->dev_errno = EIO; return false; } @@ -994,8 +999,8 @@ reread: /* Attempt to reposition to re-read the block */ if (dev->is_tape()) { Dmsg0(200, "BSR for reread; block too big for buffer.\n"); - if (!dev->bsr(1)) { - Jmsg(jcr, M_ERROR, 0, "%s", dev->bstrerror()); + if (!bsr_dev(dev, 1)) { + Jmsg(jcr, M_ERROR, 0, "%s", strerror_dev(dev)); block->read_len = 0; return false; } diff --git a/bacula/src/stored/bls.c b/bacula/src/stored/bls.c index ee3343889f..8dbea4c8c2 100644 --- a/bacula/src/stored/bls.c +++ b/bacula/src/stored/bls.c @@ -250,15 +250,15 @@ static void do_close(JCR *jcr) free_attr(attr); free_record(rec); free_jcr(jcr); - dev->term(); + term_dev(dev); } /* List just block information */ static void do_blocks(char *infname) { - DEV_BLOCK *block = dcr->block; char buf1[100], buf2[100]; + DEV_BLOCK *block = dcr->block; for ( ;; ) { if (!read_block_from_device(dcr, NO_BLOCK_NUMBER_CHECK)) { Dmsg1(100, "!read_block(): ERR=%s\n", dev->strerror()); @@ -277,7 +277,7 @@ static void do_blocks(char *infname) free_record(record); Jmsg(jcr, M_INFO, 0, _("Mounted Volume \"%s\".\n"), dcr->VolumeName); } else if (dev->at_eof()) { - Jmsg(jcr, M_INFO, 0, _("Got EOF at file %u on device %s, Volume \"%s\"\n"), + Jmsg(jcr, M_INFO, 0, _("End of file %u on device %s, Volume \"%s\"\n"), dev->file, dev->print_name(), dcr->VolumeName); Dmsg0(20, "read_record got eof. try again\n"); continue; @@ -407,7 +407,6 @@ static void get_session_record(DEVICE *dev, DEV_RECORD *rec, SESSION_LABEL *sess case EOS_LABEL: rtype = _("End Job Session"); break; - case 0: case EOM_LABEL: rtype = _("End of Medium"); break; diff --git a/bacula/src/stored/bscan.c b/bacula/src/stored/bscan.c index d88a10991a..68ff836e26 100644 --- a/bacula/src/stored/bscan.c +++ b/bacula/src/stored/bscan.c @@ -10,7 +10,7 @@ * Version $Id$ */ /* - Copyright (C) 2001-2006 Kern Sibbald + Copyright (C) 2001-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -48,7 +48,7 @@ static int create_client_record(B_DB *db, CLIENT_DBR *cr); static int create_fileset_record(B_DB *db, FILESET_DBR *fsr); static int create_jobmedia_record(B_DB *db, JCR *jcr); static JCR *create_jcr(JOB_DBR *jr, DEV_RECORD *rec, uint32_t JobId); -static int update_digest_record(B_DB *db, char *digest, DEV_RECORD *rec, int type); +static int update_SIG_record(B_DB *db, char *SIGbuf, DEV_RECORD *rec, int type); /* Global variables */ @@ -292,7 +292,7 @@ int main (int argc, char *argv[]) } free_jcr(bjcr); - dev->term(); + term_dev(dev); return 0; } @@ -373,7 +373,6 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec) DEVICE *dev = dcr->dev; JCR *bjcr = dcr->jcr; DEV_BLOCK *block = dcr->block; - char digest[BASE64_SIZE(CRYPTO_DIGEST_MAX_SIZE)]; if (rec->data_len > 0) { mr.VolBytes += rec->data_len + WRITE_RECHDR_LENGTH; /* Accumulate Volume bytes */ @@ -702,51 +701,24 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec) free_jcr(mjcr); /* done using JCR */ break; - case STREAM_MD5_DIGEST: - bin_to_base64(digest, (char *)rec->data, CRYPTO_DIGEST_MD5_SIZE); + case STREAM_MD5_SIGNATURE: + char MD5buf[50]; + bin_to_base64(MD5buf, (char *)rec->data, 16); /* encode 16 bytes */ if (verbose > 1) { - Pmsg1(000, _("Got MD5 record: %s\n"), digest); + Pmsg1(000, _("Got MD5 record: %s\n"), MD5buf); } - update_digest_record(db, digest, rec, CRYPTO_DIGEST_MD5); + update_SIG_record(db, MD5buf, rec, MD5_SIG); break; - case STREAM_SHA1_DIGEST: - bin_to_base64(digest, (char *)rec->data, CRYPTO_DIGEST_SHA1_SIZE); + case STREAM_SHA1_SIGNATURE: + char SIGbuf[50]; + bin_to_base64(SIGbuf, (char *)rec->data, 20); /* encode 20 bytes */ if (verbose > 1) { - Pmsg1(000, _("Got SHA1 record: %s\n"), digest); + Pmsg1(000, _("Got SHA1 record: %s\n"), SIGbuf); } - update_digest_record(db, digest, rec, CRYPTO_DIGEST_SHA1); + update_SIG_record(db, SIGbuf, rec, SHA1_SIG); break; - case STREAM_SHA256_DIGEST: - bin_to_base64(digest, (char *)rec->data, CRYPTO_DIGEST_SHA256_SIZE); - if (verbose > 1) { - Pmsg1(000, _("Got SHA256 record: %s\n"), digest); - } - update_digest_record(db, digest, rec, CRYPTO_DIGEST_SHA256); - break; - - case STREAM_SHA512_DIGEST: - bin_to_base64(digest, (char *)rec->data, CRYPTO_DIGEST_SHA512_SIZE); - if (verbose > 1) { - Pmsg1(000, _("Got SHA512 record: %s\n"), digest); - } - update_digest_record(db, digest, rec, CRYPTO_DIGEST_SHA512); - break; - - case STREAM_ENCRYPTED_SESSION_DATA: - // TODO landonf: Investigate crypto support in bscan - if (verbose > 1) { - Pmsg0(000, _("Got signed digest record\n")); - } - break; - - case STREAM_SIGNED_DIGEST: - // TODO landonf: Investigate crypto support in bscan - if (verbose > 1) { - Pmsg0(000, _("Got signed digest record\n")); - } - break; case STREAM_PROGRAM_NAMES: if (verbose) { @@ -1178,7 +1150,7 @@ static int create_jobmedia_record(B_DB *db, JCR *mjcr) /* * Simulate the database call that updates the MD5/SHA1 record */ -static int update_digest_record(B_DB *db, char *digest, DEV_RECORD *rec, int type) +static int update_SIG_record(B_DB *db, char *SIGbuf, DEV_RECORD *rec, int type) { JCR *mjcr; @@ -1198,7 +1170,7 @@ static int update_digest_record(B_DB *db, char *digest, DEV_RECORD *rec, int typ return 1; } - if (!db_add_digest_to_file_record(bjcr, db, mjcr->FileId, digest, type)) { + if (!db_add_SIG_to_file_record(bjcr, db, mjcr->FileId, SIGbuf, type)) { Pmsg1(0, _("Could not add MD5/SHA1 to File record. ERR=%s\n"), db_strerror(db)); free_jcr(mjcr); return 0; @@ -1252,7 +1224,10 @@ bool dir_ask_sysop_to_mount_volume(DCR *dcr) DEVICE *dev = dcr->dev; Dmsg0(20, "Enter dir_ask_sysop_to_mount_volume\n"); /* Close device so user can use autochanger if desired */ - dev->close(); + if (dev_cap(dev, CAP_OFFLINEUNMOUNT)) { + offline_dev(dev); + } + force_close_device(dev); fprintf(stderr, _("Mount Volume \"%s\" on device %s and press return when ready: "), dcr->VolumeName, dev->print_name()); getchar(); diff --git a/bacula/src/stored/btape.c b/bacula/src/stored/btape.c index c8979749be..f84cee4eda 100644 --- a/bacula/src/stored/btape.c +++ b/bacula/src/stored/btape.c @@ -14,7 +14,7 @@ * */ /* - Copyright (C) 2000-2006 Kern Sibbald + Copyright (C) 2000-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -303,7 +303,7 @@ static void terminate_btape(int stat) jcr = NULL; if (dev) { - dev->term(); + term_dev(dev); } if (debug_level > 10) @@ -363,7 +363,7 @@ static void labelcmd() if (!dev->is_open()) { if (!first_open_device(dcr)) { - Pmsg1(0, _("Device open failed. ERR=%s\n"), dev->bstrerror()); + Pmsg1(0, _("Device open failed. ERR=%s\n"), strerror_dev(dev)); } } dev->rewind(dcr); @@ -388,13 +388,13 @@ static void readlabelcmd() Pmsg0(0, _("Volume label read correctly.\n")); break; case VOL_IO_ERROR: - Pmsg1(0, _("I/O error on device: ERR=%s"), dev->bstrerror()); + Pmsg1(0, _("I/O error on device: ERR=%s"), strerror_dev(dev)); break; case VOL_NAME_ERROR: Pmsg0(0, _("Volume name error\n")); break; case VOL_CREATE_ERROR: - Pmsg1(0, _("Error creating label. ERR=%s"), dev->bstrerror()); + Pmsg1(0, _("Error creating label. ERR=%s"), strerror_dev(dev)); break; case VOL_VERSION_ERROR: Pmsg0(0, _("Volume version error.\n")); @@ -421,7 +421,7 @@ static void loadcmd() { if (!load_dev(dev)) { - Pmsg1(0, _("Bad status from load. ERR=%s\n"), dev->bstrerror()); + Pmsg1(0, _("Bad status from load. ERR=%s\n"), strerror_dev(dev)); } else Pmsg1(0, _("Loaded %s\n"), dev->print_name()); } @@ -432,7 +432,7 @@ static void loadcmd() static void rewindcmd() { if (!dev->rewind(dcr)) { - Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), dev->bstrerror()); + Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), strerror_dev(dev)); clrerror_dev(dev, -1); } else { Pmsg1(0, _("Rewound %s\n"), dev->print_name()); @@ -462,7 +462,7 @@ static void weofcmd() } if ((stat = weof_dev(dev, num)) < 0) { - Pmsg2(0, _("Bad status from weof %d. ERR=%s\n"), stat, dev->bstrerror()); + Pmsg2(0, _("Bad status from weof %d. ERR=%s\n"), stat, strerror_dev(dev)); return; } else { if (num==1) { @@ -483,8 +483,8 @@ static void weofcmd() */ static void eomcmd() { - if (!dev->eod()) { - Pmsg1(0, "%s", dev->bstrerror()); + if (!eod_dev(dev)) { + Pmsg1(0, "%s", strerror_dev(dev)); return; } else { Pmsg0(0, _("Moved to end of medium.\n")); @@ -513,8 +513,8 @@ static void bsfcmd() num = 1; } - if (!dev->bsf(num)) { - Pmsg1(0, _("Bad status from bsf. ERR=%s\n"), dev->bstrerror()); + if (!bsf_dev(dev, num)) { + Pmsg1(0, _("Bad status from bsf. ERR=%s\n"), strerror_dev(dev)); } else { Pmsg2(0, _("Backspaced %d file%s.\n"), num, num==1?"":"s"); } @@ -532,8 +532,8 @@ static void bsrcmd() if (num <= 0) { num = 1; } - if (!dev->bsr(num)) { - Pmsg1(0, _("Bad status from bsr. ERR=%s\n"), dev->bstrerror()); + if (!bsr_dev(dev, num)) { + Pmsg1(0, _("Bad status from bsr. ERR=%s\n"), strerror_dev(dev)); } else { Pmsg2(0, _("Backspaced %d record%s.\n"), num, num==1?"":"s"); } @@ -699,19 +699,19 @@ static int re_read_block_test() if (dev_cap(dev, CAP_TWOEOF)) { weofcmd(); } - if (!dev->bsf(1)) { - Pmsg1(0, _("Backspace file failed! ERR=%s\n"), dev->bstrerror()); + if (!bsf_dev(dev, 1)) { + Pmsg1(0, _("Backspace file failed! ERR=%s\n"), strerror_dev(dev)); goto bail_out; } if (dev_cap(dev, CAP_TWOEOF)) { - if (!dev->bsf(1)) { - Pmsg1(0, _("Backspace file failed! ERR=%s\n"), dev->bstrerror()); + if (!bsf_dev(dev, 1)) { + Pmsg1(0, _("Backspace file failed! ERR=%s\n"), strerror_dev(dev)); goto bail_out; } } Pmsg0(0, _("Backspaced over EOF OK.\n")); - if (!dev->bsr(1)) { - Pmsg1(0, _("Backspace record failed! ERR=%s\n"), dev->bstrerror()); + if (!bsr_dev(dev, 1)) { + Pmsg1(0, _("Backspace record failed! ERR=%s\n"), strerror_dev(dev)); goto bail_out; } Pmsg0(0, _("Backspace record OK.\n")); @@ -772,7 +772,7 @@ static int write_read_test() block = dcr->block; rec = new_record(); if (!dev->rewind(dcr)) { - Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), dev->bstrerror()); + Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), strerror_dev(dev)); goto bail_out; } rec->data = check_pool_memory_size(rec->data, block->buf_len); @@ -814,7 +814,7 @@ static int write_read_test() weofcmd(); } if (!dev->rewind(dcr)) { - Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), dev->bstrerror()); + Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), strerror_dev(dev)); goto bail_out; } else { Pmsg0(0, _("Rewind OK.\n")); @@ -884,7 +884,7 @@ static int position_test() empty_block(block); rec = new_record(); if (!dev->rewind(dcr)) { - Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), dev->bstrerror()); + Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), strerror_dev(dev)); goto bail_out; } rec->data = check_pool_memory_size(rec->data, block->buf_len); @@ -926,7 +926,7 @@ static int position_test() weofcmd(); } if (!dev->rewind(dcr)) { - Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), dev->bstrerror()); + Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), strerror_dev(dev)); goto bail_out; } else { Pmsg0(0, _("Rewind OK.\n")); @@ -970,7 +970,7 @@ static int position_test() continue; } Pmsg2(-1, _("Reposition to file:block %d:%d\n"), file, blk); - if (!dev->reposition(file, blk)) { + if (!reposition_dev(dev, file, blk)) { Pmsg0(0, _("Reposition error.\n")); goto bail_out; } @@ -1053,7 +1053,7 @@ static int append_test() if (dev_cap(dev, CAP_TWOEOF)) { weofcmd(); } - dev->close(); /* release device */ + force_close_device(dev); /* release device */ if (!open_the_device()) { return -1; } @@ -1147,8 +1147,9 @@ try_again: Dmsg1(100, "Results from loaded query=%s\n", results); if (loaded) { dcr->VolCatInfo.Slot = loaded; + offline_or_rewind_dev(dev); /* We are going to load a new tape, so close the device */ - dev->close(); + force_close_device(dev); Pmsg2(-1, _("3302 Issuing autochanger \"unload %d %d\" command.\n"), loaded, dev->drive_index); changer = edit_device_codes(dcr, changer, @@ -1173,7 +1174,7 @@ try_again: changer = edit_device_codes(dcr, changer, dcr->device->changer_command, "load"); Dmsg1(100, "Changer=%s\n", changer); - dev->close(); + force_close_device(dev); status = run_program(changer, timeout, results); if (status == 0) { Pmsg2(-1, _("3303 Autochanger \"load %d %d\" status is OK.\n"), @@ -1194,7 +1195,7 @@ try_again: */ bmicrosleep(sleep_time, 0); if (!dev->rewind(dcr) || weof_dev(dev,1) < 0) { - Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), dev->bstrerror()); + Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), strerror_dev(dev)); clrerror_dev(dev, -1); Pmsg0(-1, _("\nThe test failed, probably because you need to put\n" "a longer sleep time in the mtx-script in the load) case.\n" @@ -1206,7 +1207,7 @@ try_again: } if ((status = weof_dev(dev, 1)) < 0) { - Pmsg2(0, _("Bad status from weof %d. ERR=%s\n"), status, dev->bstrerror()); + Pmsg2(0, _("Bad status from weof %d. ERR=%s\n"), status, strerror_dev(dev)); goto bail_out; } else { Pmsg1(0, _("Wrote EOF to %s\n"), dev->print_name()); @@ -1274,7 +1275,7 @@ test_again: rewindcmd(); Pmsg0(0, _("Now forward spacing 1 file.\n")); if (!dev->fsf(1)) { - Pmsg1(0, _("Bad status from fsr. ERR=%s\n"), dev->bstrerror()); + Pmsg1(0, _("Bad status from fsr. ERR=%s\n"), strerror_dev(dev)); goto bail_out; } Pmsg2(-1, _("We should be in file 1. I am at file %d. %s\n"), @@ -1286,7 +1287,7 @@ test_again: Pmsg0(0, _("Now forward spacing 2 files.\n")); if (!dev->fsf(2)) { - Pmsg1(0, _("Bad status from fsr. ERR=%s\n"), dev->bstrerror()); + Pmsg1(0, _("Bad status from fsr. ERR=%s\n"), strerror_dev(dev)); goto bail_out; } Pmsg2(-1, _("We should be in file 3. I am at file %d. %s\n"), @@ -1299,7 +1300,7 @@ test_again: rewindcmd(); Pmsg0(0, _("Now forward spacing 4 files.\n")); if (!dev->fsf(4)) { - Pmsg1(0, _("Bad status from fsr. ERR=%s\n"), dev->bstrerror()); + Pmsg1(0, _("Bad status from fsr. ERR=%s\n"), strerror_dev(dev)); goto bail_out; } Pmsg2(-1, _("We should be in file 4. I am at file %d. %s\n"), @@ -1317,7 +1318,7 @@ test_again: Pmsg0(-1, "\n"); Pmsg0(0, _("Now forward spacing 1 more file.\n")); if (!dev->fsf(1)) { - Pmsg1(0, _("Bad status from fsr. ERR=%s\n"), dev->bstrerror()); + Pmsg1(0, _("Bad status from fsr. ERR=%s\n"), strerror_dev(dev)); } Pmsg2(-1, _("We should be in file 5. I am at file %d. %s\n"), dev->file, dev->file == 5 ? _("This is correct!") : _("This is NOT correct!!!!")); @@ -1464,7 +1465,7 @@ static void fsfcmd() num = 1; } if (!dev->fsf(num)) { - Pmsg1(0, _("Bad status from fsf. ERR=%s\n"), dev->bstrerror()); + Pmsg1(0, _("Bad status from fsf. ERR=%s\n"), strerror_dev(dev)); return; } if (num == 1) { @@ -1486,7 +1487,7 @@ static void fsrcmd() num = 1; } if (!dev->fsr(num)) { - Pmsg1(0, _("Bad status from fsr. ERR=%s\n"), dev->bstrerror()); + Pmsg1(0, _("Bad status from fsr. ERR=%s\n"), strerror_dev(dev)); return; } if (num == 1) { @@ -1593,7 +1594,7 @@ static void scancmd() clrerror_dev(dev, -1); Mmsg2(dev->errmsg, _("read error on %s. ERR=%s.\n"), dev->dev_name, be.strerror()); - Pmsg2(0, _("Bad status from read %d. ERR=%s\n"), stat, dev->bstrerror()); + Pmsg2(0, _("Bad status from read %d. ERR=%s\n"), stat, strerror_dev(dev)); if (blocks > 0) { if (blocks==1) { printf(_("1 block of %d bytes in file %d\n"), block_size, dev->file); @@ -1670,7 +1671,7 @@ static void scan_blocks() tot_files = dev->file; for (;;) { if (!read_block_from_device(dcr, NO_BLOCK_NUMBER_CHECK)) { - Dmsg1(100, "!read_block(): ERR=%s\n", dev->bstrerror()); + Dmsg1(100, "!read_block(): ERR=%s\n", strerror_dev(dev)); if (dev->state & ST_EOT) { if (blocks > 0) { if (blocks==1) { @@ -1709,7 +1710,7 @@ static void scan_blocks() printf(_("Short block read.\n")); continue; } - printf(_("Error reading block. ERR=%s\n"), dev->bstrerror()); + printf(_("Error reading block. ERR=%s\n"), strerror_dev(dev)); goto bail_out; } if (block->block_len != block_size) { @@ -1755,7 +1756,7 @@ static void statcmd() { int debug = debug_level; debug_level = 30; - Pmsg2(0, _("Device status: %u. ERR=%s\n"), status_dev(dev), dev->bstrerror()); + Pmsg2(0, _("Device status: %u. ERR=%s\n"), status_dev(dev), strerror_dev(dev)); #ifdef xxxx dump_volume_label(dev); #endif @@ -1851,7 +1852,7 @@ static void fillcmd() if (!write_session_label(dcr, SOS_LABEL)) { set_jcr_job_status(jcr, JS_ErrorTerminated); Jmsg1(jcr, M_FATAL, 0, _("Write session label failed. ERR=%s\n"), - dev->bstrerror()); + strerror_dev(dev)); ok = false; } Pmsg0(-1, _("Wrote Start of Session label.\n")); @@ -1972,7 +1973,7 @@ static void fillcmd() set_jcr_job_status(jcr, JS_ErrorTerminated); } if (!write_session_label(dcr, EOS_LABEL)) { - Pmsg1(000, _("Error writting end session label. ERR=%s\n"), dev->bstrerror()); + Pmsg1(000, _("Error writting end session label. ERR=%s\n"), strerror_dev(dev)); ok = false; } /* Write out final block of this session */ @@ -2102,11 +2103,11 @@ static void do_unfill() /* Multiple Volume tape */ /* Close device so user can use autochanger if desired */ if (dev_cap(dev, CAP_OFFLINEUNMOUNT)) { - dev->offline(); + offline_dev(dev); } autochanger = autoload_device(dcr, 1, NULL); if (!autochanger) { - dev->close(); + force_close_device(dev); get_cmd(_("Mount first tape. Press enter when ready: ")); } free_restore_volume_list(jcr); @@ -2114,7 +2115,8 @@ static void do_unfill() set_volume_name("TestVolume1", 1); jcr->bsr = NULL; create_restore_volume_list(jcr); - dev->close(); + close_device(dev); + dev->state &= ~(ST_READ|ST_APPEND); dev->num_writers = 0; if (!acquire_device_for_read(dcr)) { Pmsg1(-1, "%s", dev->errmsg); @@ -2137,13 +2139,13 @@ static void do_unfill() read_records(dcr, quickie_cb, my_mount_next_read_volume); Pmsg4(-1, _("Reposition from %u:%u to %u:%u\n"), dev->file, dev->block_num, last_file, last_block_num); - if (!dev->reposition(last_file, last_block_num)) { - Pmsg1(-1, _("Reposition error. ERR=%s\n"), dev->bstrerror()); + if (!reposition_dev(dev, last_file, last_block_num)) { + Pmsg1(-1, _("Reposition error. ERR=%s\n"), strerror_dev(dev)); goto bail_out; } Pmsg1(-1, _("Reading block %u.\n"), last_block_num); if (!read_block_from_device(dcr, NO_BLOCK_NUMBER_CHECK)) { - Pmsg1(-1, _("Error reading block: ERR=%s\n"), dev->bstrerror()); + Pmsg1(-1, _("Error reading block: ERR=%s\n"), strerror_dev(dev)); goto bail_out; } if (compare_blocks(last_block, block)) { @@ -2165,7 +2167,7 @@ static void do_unfill() /* Multiple Volume tape */ /* Close device so user can use autochanger if desired */ if (dev_cap(dev, CAP_OFFLINEUNMOUNT)) { - dev->offline(); + offline_dev(dev); } free_restore_volume_list(jcr); @@ -2174,7 +2176,7 @@ static void do_unfill() create_restore_volume_list(jcr); autochanger = autoload_device(dcr, 1, NULL); if (!autochanger) { - dev->close(); + force_close_device(dev); get_cmd(_("Mount second tape. Press enter when ready: ")); } @@ -2188,13 +2190,13 @@ static void do_unfill() * on the previous tape. */ Pmsg2(-1, _("Reposition from %u:%u to 0:1\n"), dev->file, dev->block_num); - if (!dev->reposition(0, 1)) { - Pmsg1(-1, _("Reposition error. ERR=%s\n"), dev->bstrerror()); + if (!reposition_dev(dev, 0, 1)) { + Pmsg1(-1, _("Reposition error. ERR=%s\n"), strerror_dev(dev)); goto bail_out; } Pmsg1(-1, _("Reading block %d.\n"), dev->block_num); if (!read_block_from_device(dcr, NO_BLOCK_NUMBER_CHECK)) { - Pmsg1(-1, _("Error reading block: ERR=%s\n"), dev->bstrerror()); + Pmsg1(-1, _("Error reading block: ERR=%s\n"), strerror_dev(dev)); goto bail_out; } if (compare_blocks(first_block, block)) { @@ -2204,13 +2206,13 @@ static void do_unfill() /* Now find and compare the last block */ Pmsg4(-1, _("Reposition from %u:%u to %u:%u\n"), dev->file, dev->block_num, last_file, last_block_num); - if (!dev->reposition(last_file, last_block_num)) { - Pmsg1(-1, _("Reposition error. ERR=%s\n"), dev->bstrerror()); + if (!reposition_dev(dev, last_file, last_block_num)) { + Pmsg1(-1, _("Reposition error. ERR=%s\n"), strerror_dev(dev)); goto bail_out; } Pmsg1(-1, _("Reading block %d.\n"), dev->block_num); if (!read_block_from_device(dcr, NO_BLOCK_NUMBER_CHECK)) { - Pmsg1(-1, _("Error reading block: ERR=%s\n"), dev->bstrerror()); + Pmsg1(-1, _("Error reading block: ERR=%s\n"), strerror_dev(dev)); goto bail_out; } if (compare_blocks(last_block, block)) { @@ -2337,7 +2339,7 @@ static int flush_block(DEV_BLOCK *block, int dump) } else { /* Full test in progress */ if (!fixup_device_block_write_error(jcr->dcr)) { - Pmsg1(000, _("Cannot fixup device error. %s\n"), dev->bstrerror()); + Pmsg1(000, _("Cannot fixup device error. %s\n"), strerror_dev(dev)); ok = false; unlock_device(dev); return 0; @@ -2675,7 +2677,11 @@ bool dir_ask_sysop_to_mount_volume(DCR *dcr) if (dcr->VolumeName[0] == 0) { return dir_ask_sysop_to_create_appendable_volume(dcr); } - dev->close(); + /* Close device so user can use autochanger if desired */ + if (dev_cap(dev, CAP_OFFLINEUNMOUNT)) { + offline_dev(dev); + } + force_close_device(dev); Pmsg1(-1, "%s", dev->errmsg); /* print reason */ if (dcr->VolumeName[0] == 0 || strcmp(dcr->VolumeName, "TestVolume2") == 0) { fprintf(stderr, _("Mount second Volume on device %s and press return when ready: "), @@ -2700,11 +2706,11 @@ bool dir_ask_sysop_to_create_appendable_volume(DCR *dcr) } /* Close device so user can use autochanger if desired */ if (dev_cap(dev, CAP_OFFLINEUNMOUNT)) { - dev->offline(); + offline_dev(dev); } autochanger = autoload_device(dcr, 1, NULL); if (!autochanger) { - dev->close(); + force_close_device(dev); fprintf(stderr, _("Mount blank Volume on device %s and press return when ready: "), dev->print_name()); getchar(); @@ -2747,7 +2753,8 @@ static bool my_mount_next_read_volume(DCR *dcr) set_volume_name("TestVolume2", 2); jcr->bsr = NULL; create_restore_volume_list(jcr); - dev->close(); + close_device(dev); + dev->clear_read(); if (!acquire_device_for_read(dcr)) { Pmsg2(0, _("Cannot open Dev=%s, Vol=%s\n"), dev->print_name(), dcr->VolumeName); return false; @@ -2765,3 +2772,4 @@ static void set_volume_name(const char *VolName, int volnum) bstrncpy(dcr->VolumeName, VolName, sizeof(dcr->VolumeName)); dcr->VolCatInfo.Slot = volnum; } + diff --git a/bacula/src/stored/butil.c b/bacula/src/stored/butil.c index 44f190761f..43a8088a8f 100644 --- a/bacula/src/stored/butil.c +++ b/bacula/src/stored/butil.c @@ -12,7 +12,7 @@ * Version $Id$ */ /* - Copyright (C) 2000-2005 Kern Sibbald + Copyright (C) 2000-2006 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -93,7 +93,7 @@ JCR *setup_jcr(const char *name, char *dev_name, BSR *bsr, pm_strcpy(jcr->fileset_md5, "Dummy.fileset.md5"); init_autochangers(); - init_volume_list(); + create_volume_list(); dcr = setup_to_access_device(jcr, dev_name, VolumeName, mode); if (!dcr) { @@ -121,6 +121,8 @@ static DCR *setup_to_access_device(JCR *jcr, char *dev_name, DCR *dcr; char VolName[MAX_NAME_LENGTH]; + init_reservations_lock(); + /* * If no volume name already given and no bsr, and it is a file, * try getting name from Filename diff --git a/bacula/src/stored/dev.c b/bacula/src/stored/dev.c index a00a6e25ea..294c17d9c3 100644 --- a/bacula/src/stored/dev.c +++ b/bacula/src/stored/dev.c @@ -103,7 +103,7 @@ init_dev(JCR *jcr, DEVRES *device) DCR *dcr = NULL; DEVICE *dev; - + /* If no device type specified, try to guess */ if (!device->dev_type) { /* Check that device is available */ @@ -129,8 +129,9 @@ init_dev(JCR *jcr, DEVRES *device) } } - dev = (DEVICE *)malloc(sizeof(DEVICE)); + dev = (DEVICE *)get_memory(sizeof(DEVICE)); memset(dev, 0, sizeof(DEVICE)); + dev->state = ST_MALLOC; /* Copy user supplied device parameters from Resource */ dev->dev_name = get_memory(strlen(device->device_name)+1); @@ -138,7 +139,6 @@ init_dev(JCR *jcr, DEVRES *device) dev->prt_name = get_memory(strlen(device->device_name) + strlen(device->hdr.name) + 20); /* We edit "Resource-name" (physical-name) */ Mmsg(dev->prt_name, "\"%s\" (%s)", device->hdr.name, device->device_name); - Dmsg1(400, "Allocate dev=%s\n", dev->print_name()); dev->capabilities = device->cap_bits; dev->min_block_size = device->min_block_size; dev->max_block_size = device->max_block_size; @@ -154,7 +154,7 @@ init_dev(JCR *jcr, DEVRES *device) dev->autoselect = device->autoselect; dev->dev_type = device->dev_type; if (dev->is_tape()) { /* No parts on tapes */ - dev->max_part_size = 0; + dev->max_part_size = 0; } else { dev->max_part_size = device->max_part_size; } @@ -162,9 +162,7 @@ init_dev(JCR *jcr, DEVRES *device) if (dev->vol_poll_interval && dev->vol_poll_interval < 60) { dev->vol_poll_interval = 60; } - /* Link the dev and device structures together */ dev->device = device; - device->dev = dev; if (dev->is_fifo()) { dev->capabilities |= CAP_STREAM; /* set stream device */ @@ -274,7 +272,7 @@ DEVICE::open(DCR *dcr, int omode) bstrncpy(VolCatInfo.VolCatName, dcr->VolumeName, sizeof(VolCatInfo.VolCatName)); } - Dmsg4(29, "open dev: type=%d dev_name=%s vol=%s mode=%s\n", dev_type, + Dmsg4(29, "open dev: tape=%d dev_name=%s vol=%s mode=%s\n", is_tape(), print_name(), VolCatInfo.VolCatName, mode_to_str(omode)); state &= ~(ST_LABEL|ST_APPEND|ST_READ|ST_EOT|ST_WEOT|ST_EOF); label_type = B_BACULA_LABEL; @@ -285,12 +283,9 @@ DEVICE::open(DCR *dcr, int omode) open_dvd_device(dcr, omode); } else { Dmsg1(100, "call open_file_device mode=%s\n", mode_to_str(omode)); - open_file_device(dcr, omode); + open_file_device(omode); } state |= preserve; /* reset any important state info */ - if (preserve) { - Dmsg1(000, "preserve=0x%x\n", preserve); - } return fd; } @@ -301,7 +296,11 @@ void DEVICE::set_mode(int new_mode) mode = O_CREAT | O_RDWR | O_BINARY; break; case OPEN_READ_WRITE: - mode = O_RDWR | O_BINARY; + if (is_dvd() || is_file()) { + mode = O_CREAT | O_RDWR | O_BINARY; + } else { + mode = O_RDWR | O_BINARY; + } break; case OPEN_READ_ONLY: mode = O_RDONLY | O_BINARY; @@ -405,14 +404,10 @@ void DEVICE::set_blocking() /* * Open a file device */ -void DEVICE::open_file_device(DCR *dcr, int omode) +void DEVICE::open_file_device(int omode) { POOL_MEM archive_name(PM_FNAME); - if (is_autochanger()) { - get_autochanger_loaded_slot(dcr); - } - /* * Handle opening of File Archive (not a tape) */ @@ -437,12 +432,15 @@ void DEVICE::open_file_device(DCR *dcr, int omode) pm_strcat(archive_name, VolCatInfo.VolCatName); } - mount(1); /* do mount if required */ + Dmsg3(29, "open dev: %s dev=%s mode=%s\n", is_dvd()?"DVD":"disk", + archive_name.c_str(), mode_to_str(omode)); openmode = omode; + Dmsg2(100, "openmode=%d %s\n", openmode, mode_to_str(openmode)); + set_mode(omode); /* If creating file, give 0640 permissions */ - Dmsg3(29, "open disk: mode=%s open(%s, 0x%x, 0640)\n", mode_to_str(omode), + Dmsg3(29, "mode=%s open(%s, 0x%x, 0640)\n", mode_to_str(omode), archive_name.c_str(), mode); /* Use system open() */ if ((fd = ::open(archive_name.c_str(), mode, 0640)) < 0) { @@ -456,13 +454,13 @@ void DEVICE::open_file_device(DCR *dcr, int omode) dev_errno = 0; update_pos_dev(this); /* update position */ } - Dmsg4(29, "open dev: disk fd=%d opened, part=%d/%d, part_size=%u\n", - fd, part, num_parts, part_size); + Dmsg5(29, "open dev: %s fd=%d opened, part=%d/%d, part_size=%u\n", + is_dvd()?"DVD":"disk", fd, part, num_parts, + part_size); } /* - * Open a DVD device. N.B. at this point, dcr->VolCatInfo.VolCatName - * (NB:??? I think it's VolCatInfo.VolCatName that is right) + * Open a DVD device. N.B. at this point, dcr->VolCatInfo.VolCatName (NB:??? I think it's VolCatInfo.VolCatName that is right) * has the desired Volume name, but there is NO assurance that * any other field of VolCatInfo is correct. */ @@ -499,20 +497,21 @@ void DEVICE::open_dvd_device(DCR *dcr, int omode) dcr->dev->num_parts = dcr->VolCatInfo.VolCatParts; } - if (mount_dvd(this, 1)) { + if (mount_dev(this, 1)) { if ((num_parts == 0) && (!truncating)) { /* If we can mount the device, and we are not truncating the DVD, we usually want to abort. */ /* There is one exception, if there is only one 0-sized file on the DVD, with the right volume name, - * we continue (it's the method used by truncate_dvd to truncate a volume). */ + * we continue (it's the method used by truncate_dvd_dev to truncate a volume). */ if (!check_can_write_on_non_blank_dvd(dcr)) { Mmsg(errmsg, _("The media in the device %s is not empty, please blank it before writing anything to it.\n"), print_name()); Emsg0(M_FATAL, 0, errmsg); - unmount_dvd(this, 1); /* Unmount the device, so the operator can change it. */ + unmount_dev(this, 1); /* Unmount the device, so the operator can change it. */ clear_opened(); return; } } - } else { + } + else { /* We cannot mount the device */ if (num_parts == 0) { /* Run free space, check there is a media. */ @@ -625,7 +624,7 @@ bool DEVICE::rewind(DCR *dcr) unsigned int i; bool first = true; - Dmsg3(400, "rewind res=%d fd=%d %s\n", reserved_device, fd, print_name()); + Dmsg3(29, "rewind res=%d fd=%d %s\n", reserved_device, fd, print_name()); if (fd < 0) { if (!is_dvd()) { /* In case of major error, the fd is not open on DVD, so we don't want to abort. */ dev_errno = EBADF; @@ -760,54 +759,56 @@ void DEVICE::set_ateot() * Returns: true on succes * false on error */ -bool DEVICE::eod() +bool +eod_dev(DEVICE *dev) { struct mtop mt_com; struct mtget mt_stat; bool ok = true; off_t pos; - if (fd < 0) { - dev_errno = EBADF; - Mmsg1(errmsg, _("Bad call to eod_dev. Device %s not open\n"), print_name()); + if (dev->fd < 0) { + dev->dev_errno = EBADF; + Mmsg1(dev->errmsg, _("Bad call to eod_dev. Device %s not open\n"), + dev->print_name()); return false; } #if defined (__digital__) && defined (__unix__) - return fsf(VolCatInfo.VolCatFiles); + return dev->fsf(dev->VolCatInfo.VolCatFiles); #endif Dmsg0(29, "eod_dev\n"); - if (at_eot()) { + if (dev->at_eot()) { return true; } - state &= ~(ST_EOF); /* remove EOF flags */ - block_num = file = 0; - file_size = 0; - file_addr = 0; - if (is_fifo() || is_prog()) { + dev->state &= ~(ST_EOF); /* remove EOF flags */ + dev->block_num = dev->file = 0; + dev->file_size = 0; + dev->file_addr = 0; + if (dev->is_fifo() || dev->is_prog()) { return true; } - if (!is_tape()) { - pos = lseek_dev(this, (off_t)0, SEEK_END); + if (!dev->is_tape()) { + pos = lseek_dev(dev, (off_t)0, SEEK_END); // Dmsg1(100, "====== Seek to %lld\n", pos); if (pos >= 0) { - update_pos_dev(this); - state |= ST_EOT; + update_pos_dev(dev); + dev->state |= ST_EOT; return true; } - dev_errno = errno; + dev->dev_errno = errno; berrno be; - Mmsg2(errmsg, _("lseek_dev error on %s. ERR=%s.\n"), - print_name(), be.strerror()); + Mmsg2(dev->errmsg, _("lseek_dev error on %s. ERR=%s.\n"), + dev->print_name(), be.strerror()); return false; } #ifdef MTEOM - if (has_cap(CAP_FASTFSF) && !has_cap(CAP_EOM)) { + if (dev_cap(dev, CAP_FASTFSF) && !dev_cap(dev, CAP_EOM)) { Dmsg0(100,"Using FAST FSF for EOM\n"); /* If unknown position, rewind */ - if (!dev_get_os_pos(this, &mt_stat)) { - if (!rewind(NULL)) { + if (!dev_get_os_pos(dev, &mt_stat)) { + if (!dev->rewind(NULL)) { return false; } } @@ -822,33 +823,33 @@ bool DEVICE::eod() } } - if (has_cap(CAP_MTIOCGET) && (has_cap(CAP_FASTFSF) || has_cap(CAP_EOM))) { - if (has_cap(CAP_EOM)) { + if (dev_cap(dev, CAP_MTIOCGET) && (dev_cap(dev, CAP_FASTFSF) || dev_cap(dev, CAP_EOM))) { + if (dev_cap(dev, CAP_EOM)) { Dmsg0(100,"Using EOM for EOM\n"); mt_com.mt_op = MTEOM; mt_com.mt_count = 1; } - if (ioctl(fd, MTIOCTOP, (char *)&mt_com) < 0) { + if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) { berrno be; - clrerror_dev(this, mt_com.mt_op); + clrerror_dev(dev, mt_com.mt_op); Dmsg1(50, "ioctl error: %s\n", be.strerror()); - update_pos_dev(this); - Mmsg2(errmsg, _("ioctl MTEOM error on %s. ERR=%s.\n"), - print_name(), be.strerror()); + update_pos_dev(dev); + Mmsg2(dev->errmsg, _("ioctl MTEOM error on %s. ERR=%s.\n"), + dev->print_name(), be.strerror()); return false; } - if (!dev_get_os_pos(this, &mt_stat)) { + if (!dev_get_os_pos(dev, &mt_stat)) { berrno be; - clrerror_dev(this, -1); - Mmsg2(errmsg, _("ioctl MTIOCGET error on %s. ERR=%s.\n"), - print_name(), be.strerror()); + clrerror_dev(dev, -1); + Mmsg2(dev->errmsg, _("ioctl MTIOCGET error on %s. ERR=%s.\n"), + dev->print_name(), be.strerror()); return false; } Dmsg2(100, "EOD file=%d block=%d\n", mt_stat.mt_fileno, mt_stat.mt_blkno); - set_ateof(); - file = mt_stat.mt_fileno; + dev->set_ateof(); + dev->file = mt_stat.mt_fileno; } else { #else { @@ -856,29 +857,29 @@ bool DEVICE::eod() /* * Rewind then use FSF until EOT reached */ - if (!rewind(NULL)) { + if (!dev->rewind(NULL)) { return false; } /* * Move file by file to the end of the tape */ int file_num; - for (file_num=file; !at_eot(); file_num++) { + for (file_num=dev->file; !dev->at_eot(); file_num++) { Dmsg0(200, "eod_dev: doing fsf 1\n"); - if (!fsf(1)) { + if (!dev->fsf(1)) { Dmsg0(200, "fsf error.\n"); return false; } /* * Avoid infinite loop by ensuring we advance. */ - if (file_num == (int)file) { + if (file_num == (int)dev->file) { struct mtget mt_stat; Dmsg1(100, "fsf did not advance from file %d\n", file_num); - set_ateof(); - if (dev_get_os_pos(this, &mt_stat)) { - Dmsg2(100, "Adjust file from %d to %d\n", file , mt_stat.mt_fileno); - file = mt_stat.mt_fileno; + dev->set_ateof(); + if (dev_get_os_pos(dev, &mt_stat)) { + Dmsg2(100, "Adjust file from %d to %d\n", dev->file , mt_stat.mt_fileno); + dev->file = mt_stat.mt_fileno; } break; } @@ -889,21 +890,21 @@ bool DEVICE::eod() * MTEOM, so we must backup so that appending overwrites * the second EOF. */ - if (has_cap(CAP_BSFATEOM)) { + if (dev_cap(dev, CAP_BSFATEOM)) { struct mtget mt_stat; /* Backup over EOF */ - ok = bsf(1); + ok = bsf_dev(dev, 1); /* If BSF worked and fileno is known (not -1), set file */ - if (dev_get_os_pos(this, &mt_stat)) { - Dmsg2(100, "BSFATEOF adjust file from %d to %d\n", file , mt_stat.mt_fileno); - file = mt_stat.mt_fileno; + if (dev_get_os_pos(dev, &mt_stat)) { + Dmsg2(100, "BSFATEOF adjust file from %d to %d\n", dev->file , mt_stat.mt_fileno); + dev->file = mt_stat.mt_fileno; } else { - file++; /* wing it -- not correct on all OSes */ + dev->file++; /* wing it -- not correct on all OSes */ } } else { - update_pos_dev(this); /* update position */ + update_pos_dev(dev); /* update position */ } - Dmsg1(200, "EOD dev->file=%d\n", file); + Dmsg1(200, "EOD dev->file=%d\n", dev->file); return ok; } @@ -1018,7 +1019,7 @@ uint32_t status_dev(DEVICE *dev) Pmsg0(-20, " IM_REP_EN"); } #endif /* !SunOS && !OSF */ - if (dev->has_cap(CAP_MTIOCGET)) { + if (dev_cap(dev, 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); @@ -1080,44 +1081,44 @@ bool load_dev(DEVICE *dev) * Returns: true on success * false on failure */ -bool DEVICE::offline() +bool offline_dev(DEVICE *dev) { struct mtop mt_com; - if (!is_tape()) { + if (!dev || dev->fd < 0 || !dev->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; - part = 0; + dev->state &= ~(ST_APPEND|ST_READ|ST_EOT|ST_EOF|ST_WEOT); /* remove EOF/EOT flags */ + dev->block_num = dev->file = 0; + dev->file_size = 0; + dev->file_addr = 0; + dev->part = 0; #ifdef MTUNLOCK mt_com.mt_op = MTUNLOCK; mt_com.mt_count = 1; - ioctl(fd, MTIOCTOP, (char *)&mt_com); + ioctl(dev->fd, MTIOCTOP, (char *)&mt_com); #endif mt_com.mt_op = MTOFFL; mt_com.mt_count = 1; - if (ioctl(fd, MTIOCTOP, (char *)&mt_com) < 0) { + if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) { berrno be; - dev_errno = errno; - Mmsg2(errmsg, _("ioctl MTOFFL error on %s. ERR=%s.\n"), - print_name(), be.strerror()); + dev->dev_errno = errno; + Mmsg2(dev->errmsg, _("ioctl MTOFFL error on %s. ERR=%s.\n"), + dev->print_name(), be.strerror()); return false; } - Dmsg1(100, "Offlined device %s\n", print_name()); + Dmsg1(100, "Offlined device %s\n", dev->print_name()); return true; } -bool DEVICE::offline_or_rewind() +bool offline_or_rewind_dev(DEVICE *dev) { - if (fd < 0) { + if (dev->fd < 0) { return false; } - if (has_cap(CAP_OFFLINEUNMOUNT)) { - return offline(); + if (dev_cap(dev, CAP_OFFLINEUNMOUNT)) { + return offline_dev(dev); } else { /* * Note, this rewind probably should not be here (it wasn't @@ -1126,8 +1127,8 @@ bool DEVICE::offline_or_rewind() * such as backspacing after writing and EOF. If it is not * done, all future references to the drive get and I/O error. */ - clrerror_dev(this, MTREW); - return rewind(NULL); + clrerror_dev(dev, MTREW); + return dev->rewind(NULL); } } @@ -1170,7 +1171,7 @@ bool DEVICE::fsf(int num) * 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)) { + if (dev_cap(this, CAP_FSF) && dev_cap(this, CAP_MTIOCGET) && dev_cap(this, CAP_FASTFSF)) { mt_com.mt_op = MTFSF; mt_com.mt_count = num; stat = ioctl(fd, MTIOCTOP, (char *)&mt_com); @@ -1196,7 +1197,7 @@ bool DEVICE::fsf(int num) * 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)) { + } else if (dev_cap(this, CAP_FSF)) { POOLMEM *rbuf; int rbuf_len; Dmsg0(200, "FSF has cap_fsf\n"); @@ -1296,38 +1297,39 @@ bool DEVICE::fsf(int num) * Returns: false on failure * true on success */ -bool DEVICE::bsf(int num) +bool +bsf_dev(DEVICE *dev, int num) { struct mtop mt_com; int stat; - if (fd < 0) { - dev_errno = EBADF; - Mmsg0(errmsg, _("Bad call to bsf. Device not open\n")); - Emsg0(M_FATAL, 0, errmsg); + if (dev->fd < 0) { + dev->dev_errno = EBADF; + Mmsg0(dev->errmsg, _("Bad call to bsf_dev. Device not open\n")); + Emsg0(M_FATAL, 0, dev->errmsg); return false; } - if (!is_tape()) { - Mmsg1(errmsg, _("Device %s cannot BSF because it is not a tape.\n"), - print_name()); + if (!dev->is_tape()) { + Mmsg1(dev->errmsg, _("Device %s cannot BSF because it is not a tape.\n"), + dev->print_name()); return false; } - Dmsg0(29, "bsf\n"); - state &= ~(ST_EOT|ST_EOF); - file -= num; - file_addr = 0; - file_size = 0; + Dmsg0(29, "bsf_dev\n"); + dev->state &= ~(ST_EOT|ST_EOF); + dev->file -= num; + dev->file_addr = 0; + dev->file_size = 0; mt_com.mt_op = MTBSF; mt_com.mt_count = num; - stat = ioctl(fd, MTIOCTOP, (char *)&mt_com); + stat = ioctl(dev->fd, MTIOCTOP, (char *)&mt_com); if (stat < 0) { berrno be; - clrerror_dev(this, MTBSF); - Mmsg2(errmsg, _("ioctl MTBSF error on %s. ERR=%s.\n"), - print_name(), be.strerror()); + clrerror_dev(dev, MTBSF); + Mmsg2(dev->errmsg, _("ioctl MTBSF error on %s. ERR=%s.\n"), + dev->print_name(), be.strerror()); } - update_pos_dev(this); + update_pos_dev(dev); return stat == 0; } @@ -1352,7 +1354,7 @@ bool DEVICE::fsr(int num) if (!is_tape()) { return false; } - if (!has_cap(CAP_FSR)) { + if (!dev_cap(this, CAP_FSR)) { Mmsg1(errmsg, _("ioctl MTFSR not permitted on %s.\n"), print_name()); return false; } @@ -1393,40 +1395,41 @@ bool DEVICE::fsr(int num) * Returns: false on failure * true on success */ -bool DEVICE::bsr(int num) +bool +bsr_dev(DEVICE *dev, int num) { struct mtop mt_com; int stat; - if (fd < 0) { - dev_errno = EBADF; - Mmsg0(errmsg, _("Bad call to bsr_dev. Device not open\n")); - Emsg0(M_FATAL, 0, errmsg); + if (dev->fd < 0) { + dev->dev_errno = EBADF; + Mmsg0(dev->errmsg, _("Bad call to bsr_dev. Device not open\n")); + Emsg0(M_FATAL, 0, dev->errmsg); return false; } - if (!is_tape()) { + if (!dev->is_tape()) { return false; } - if (!has_cap(CAP_BSR)) { - Mmsg1(errmsg, _("ioctl MTBSR not permitted on %s.\n"), print_name()); + if (!dev_cap(dev, CAP_BSR)) { + Mmsg1(dev->errmsg, _("ioctl MTBSR not permitted on %s.\n"), dev->print_name()); return false; } Dmsg0(29, "bsr_dev\n"); - block_num -= num; - state &= ~(ST_EOF|ST_EOT|ST_EOF); + dev->block_num -= num; + dev->state &= ~(ST_EOF|ST_EOT|ST_EOF); mt_com.mt_op = MTBSR; mt_com.mt_count = num; - stat = ioctl(fd, MTIOCTOP, (char *)&mt_com); + stat = ioctl(dev->fd, MTIOCTOP, (char *)&mt_com); if (stat < 0) { berrno be; - clrerror_dev(this, MTBSR); - Mmsg2(errmsg, _("ioctl MTBSR error on %s. ERR=%s.\n"), - print_name(), be.strerror()); + clrerror_dev(dev, MTBSR); + Mmsg2(dev->errmsg, _("ioctl MTBSR error on %s. ERR=%s.\n"), + dev->print_name(), be.strerror()); } - update_pos_dev(this); + update_pos_dev(dev); return stat == 0; } @@ -1435,58 +1438,59 @@ bool DEVICE::bsr(int num) * Returns: false on failure * true on success */ -bool DEVICE::reposition(uint32_t rfile, uint32_t rblock) +bool +reposition_dev(DEVICE *dev, uint32_t file, uint32_t block) { - if (fd < 0) { - dev_errno = EBADF; - Mmsg0(errmsg, _("Bad call to reposition. Device not open\n")); - Emsg0(M_FATAL, 0, errmsg); + if (dev->fd < 0) { + dev->dev_errno = EBADF; + Mmsg0(dev->errmsg, _("Bad call to reposition_dev. Device not open\n")); + Emsg0(M_FATAL, 0, dev->errmsg); return false; } - if (!is_tape()) { - off_t pos = (((off_t)rfile)<<32) + (off_t)rblock; + if (!dev->is_tape()) { + off_t pos = (((off_t)file)<<32) + (off_t)block; Dmsg1(100, "===== lseek_dev to %d\n", (int)pos); - if (lseek_dev(this, pos, SEEK_SET) == (off_t)-1) { + if (lseek_dev(dev, pos, SEEK_SET) == (off_t)-1) { berrno be; - dev_errno = errno; - Mmsg2(errmsg, _("lseek_dev error on %s. ERR=%s.\n"), - print_name(), be.strerror()); + dev->dev_errno = errno; + Mmsg2(dev->errmsg, _("lseek_dev error on %s. ERR=%s.\n"), + dev->print_name(), be.strerror()); return false; } - file = rfile; - block_num = rblock; - file_addr = pos; + dev->file = file; + dev->block_num = block; + dev->file_addr = pos; return true; } - Dmsg4(100, "reposition from %u:%u to %u:%u\n", - file, block_num, rfile, rblock); - if (rfile < file) { + Dmsg4(100, "reposition_dev from %u:%u to %u:%u\n", + dev->file, dev->block_num, file, block); + if (file < dev->file) { Dmsg0(100, "Rewind\n"); - if (!rewind(NULL)) { + if (!dev->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()); + if (file > dev->file) { + Dmsg1(100, "fsf %d\n", file-dev->file); + if (!dev->fsf(file-dev->file)) { + Dmsg1(100, "fsf failed! ERR=%s\n", strerror_dev(dev)); return false; } - Dmsg2(100, "wanted_file=%d at_file=%d\n", rfile, file); + Dmsg2(100, "wanted_file=%d at_file=%d\n", file, dev->file); } - if (rblock < block_num) { - Dmsg2(100, "wanted_blk=%d at_blk=%d\n", rblock, block_num); - Dmsg0(100, "bsf 1\n"); - bsf(1); + if (block < dev->block_num) { + Dmsg2(100, "wanted_blk=%d at_blk=%d\n", block, dev->block_num); + Dmsg0(100, "bsf_dev 1\n"); + bsf_dev(dev, 1); Dmsg0(100, "fsf_dev 1\n"); - fsf(1); - Dmsg2(100, "wanted_blk=%d at_blk=%d\n", rblock, block_num); + dev->fsf(1); + Dmsg2(100, "wanted_blk=%d at_blk=%d\n", block, dev->block_num); } - if (has_cap(CAP_POSITIONBLOCKS) && rblock > block_num) { + if (dev_cap(dev, CAP_POSITIONBLOCKS) && block > dev->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); + Dmsg1(100, "fsr %d\n", block-dev->block_num); + return dev->fsr(block-dev->block_num); } return true; } @@ -1541,6 +1545,18 @@ weof_dev(DEVICE *dev, int num) return stat; } +/* + * Return string message with last error in English + * Be careful not to call this routine from within dev.c + * while editing an Mmsg() or you will end up in a recursive + * loop creating a Segmentation Violation. + */ +char * +strerror_dev(DEVICE *dev) +{ + return dev->errmsg; +} + /* * If implemented in system, clear the tape @@ -1661,31 +1677,33 @@ clrerror_dev(DEVICE *dev, int func) } /* - * Close the device + * Flush buffer contents + * No longer used. */ -void DEVICE::close() +int flush_dev(DEVICE *dev) { - Dmsg1(100, "close_dev %s\n", print_name()); - if (has_cap(CAP_OFFLINEUNMOUNT)) { - offline(); - } - if (fd >= 0) { - ::close(fd); - } else { - return; /* already closed */ + return 1; +} + +static void do_close(DEVICE *dev) +{ + + Dmsg1(100, "really close_dev %s\n", dev->print_name()); + if (dev->fd >= 0) { + ::close(dev->fd); } - if (is_dvd() && !unmount_dvd(this, 1)) { - Dmsg1(0, "Cannot unmount device %s.\n", print_name()); + if (!unmount_dev(dev, 1)) { + Dmsg1(0, "Cannot unmount device %s.\n", dev->print_name()); } /* Remove the last part file if it is empty */ - if (num_parts > 0) { + if (dev->num_parts > 0) { struct stat statp; POOL_MEM archive_name(PM_FNAME); - part = num_parts; - Dmsg1(100, "Call make_dvd_filename. Vol=%s\n", VolCatInfo.VolCatName); - make_spooled_dvd_filename(this, archive_name); + dev->part = dev->num_parts; + Dmsg1(100, "Call make_dvd_filename. Vol=%s\n", dev->VolCatInfo.VolCatName); + make_spooled_dvd_filename(dev, archive_name); /* Check that the part file is empty */ if ((stat(archive_name.c_str(), &statp) == 0) && (statp.st_size == 0)) { Dmsg1(100, "unlink(%s)\n", archive_name.c_str()); @@ -1694,263 +1712,59 @@ void DEVICE::close() } /* Clean up device packet so it can be reused */ - clear_opened(); - state &= ~(ST_LABEL|ST_READ|ST_APPEND|ST_EOT|ST_WEOT|ST_EOF); - label_type = B_BACULA_LABEL; - file = block_num = 0; - file_size = 0; - file_addr = 0; - part = 0; - num_parts = 0; - part_size = 0; - part_start = 0; - EndFile = EndBlock = 0; - memset(&VolCatInfo, 0, sizeof(VolCatInfo)); - free_volume(this); - memset(&VolHdr, 0, sizeof(VolHdr)); - if (tid) { - stop_thread_timer(tid); - tid = 0; - } - openmode = 0; + dev->clear_opened(); + dev->state &= ~(ST_LABEL|ST_READ|ST_APPEND|ST_EOT|ST_WEOT|ST_EOF); + dev->label_type = B_BACULA_LABEL; + dev->file = dev->block_num = 0; + dev->file_size = 0; + dev->file_addr = 0; + dev->part = 0; + dev->num_parts = 0; + dev->part_size = 0; + dev->part_start = 0; + dev->EndFile = dev->EndBlock = 0; + free_volume(dev); + memset(&dev->VolCatInfo, 0, sizeof(dev->VolCatInfo)); + memset(&dev->VolHdr, 0, sizeof(dev->VolHdr)); + if (dev->tid) { + stop_thread_timer(dev->tid); + dev->tid = 0; + } + dev->openmode = 0; } +/* + * Close the device + */ +void DEVICE::close() +{ + do_close(this); +} -bool DEVICE::truncate(DCR *dcr) /* We need the DCR for DVD-writing */ +bool truncate_dev(DCR *dcr) /* We need the DCR for DVD-writing */ { - Dmsg1(100, "truncate_dev %s\n", print_name()); - if (is_tape()) { + DEVICE *dev = dcr->dev; + + Dmsg1(100, "truncate_dev %s\n", dev->print_name()); + if (dev->is_tape()) { return true; /* we don't really truncate tapes */ /* maybe we should rewind and write and eof ???? */ } - if (is_dvd()) { - return truncate_dvd(dcr); + if (dev->is_dvd()) { + return truncate_dvd_dev(dcr); } - if (ftruncate(fd, 0) != 0) { + if (ftruncate(dev->fd, 0) != 0) { berrno be; - Mmsg2(errmsg, _("Unable to truncate device %s. ERR=%s\n"), - print_name(), be.strerror()); - return false; - } - return true; -} - -/* 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) -{ - Dmsg0(90, "Enter mount\n"); - if (is_mounted()) { - return true; - } else if (requires_mount()) { - return do_mount(1, timeout); - } - return true; -} - -/* Unmount the device - * If timeout, wait until the unmount command returns 0. - * If !timeout, try to unmount the device only once. - */ -bool DEVICE::unmount(int timeout) -{ - Dmsg0(90, "Enter unmount_dvd\n"); - if (is_mounted()) { - return do_mount(0, timeout); - } - return true; -} - -/* (Un)mount the device */ -bool DEVICE::do_mount(int mount, int dotimeout) -{ - POOL_MEM ocmd(PM_FNAME); - POOLMEM *results; - char *icmd; - int status, timeout; - - sm_check(__FILE__, __LINE__, false); - if (mount) { - if (is_mounted()) { - Dmsg0(200, "======= mount=1\n"); - return true; - } - icmd = device->mount_command; - } else { - if (!is_mounted()) { - Dmsg0(200, "======= mount=0\n"); - return true; - } - icmd = device->unmount_command; - } - - edit_mount_codes(ocmd, icmd); - - Dmsg2(000, "do_mount_dvd: cmd=%s mounted=%d\n", ocmd.c_str(), !!is_mounted()); - - if (dotimeout) { - /* Try at most 1 time to (un)mount the device. This should perhaps be configurable. */ - timeout = 1; - } else { - timeout = 0; - } - results = get_memory(2000); - results[0] = 0; - /* If busy retry each second */ - while ((status = run_program_full_output(ocmd.c_str(), - max_open_wait/2, results)) != 0) { - /* Doesn't work with internationalisation (This is not a problem) */ - if (fnmatch("*is already mounted on", results, 0) == 0) { - break; - } - if (timeout-- > 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_mount(0, 0); - } - bmicrosleep(1, 0); - continue; - } - Dmsg2(40, "Device %s cannot be mounted. ERR=%s\n", print_name(), results); - Mmsg(errmsg, _("Device %s cannot be mounted. ERR=%s\n"), - print_name(), results); - /* - * Now, just to be sure it is not mounted, try to read the - * filesystem. - */ - DIR* dp; - struct dirent *entry, *result; - int name_max; - int count; - - 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(29, "do_mount: failed to open dir %s (dev=%s), ERR=%s\n", - device->mount_point, print_name(), be.strerror()); - 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_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_mount: ignoring %s in %s\n", result->d_name, device->mount_point); - } - } - free(entry); - closedir(dp); - - Dmsg1(29, "do_mount: got %d files in the mount point (not counting ., .. and .keep)\n", count); - - if (count > 0) { - mount = 1; /* If we got more than ., .. and .keep */ - break; /* there must be something mounted */ - } -get_out: - set_mounted(false); - sm_check(__FILE__, __LINE__, false); - free_pool_memory(results); - Dmsg0(200, "============ mount=0\n"); + Mmsg2(dev->errmsg, _("Unable to truncate device %s. ERR=%s\n"), + dev->print_name(), be.strerror()); return false; } - - set_mounted(mount); /* set/clear mounted flag */ - free_pool_memory(results); - Dmsg1(200, "============ mount=%d\n", mount); return true; } -/* - * Edit codes into (Un)MountCommand, Write(First)PartCommand - * %% = % - * %a = archive device name - * %e = erase (set if cannot mount and first part) - * %n = part number - * %m = mount point - * %v = last part name - * - * omsg = edited output message - * imsg = input string containing edit codes (%x) - * - */ -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; - Dmsg1(800, "edit_mount_codes: %s\n", imsg); - for (p=imsg; *p; p++) { - if (*p == '%') { - switch (*++p) { - case '%': - str = "%"; - break; - case 'a': - str = dev_name; - break; - case 'e': - if (num_parts == 0) { - str = "1"; - } else { - str = "0"; - } - break; - case 'n': - bsnprintf(add, sizeof(add), "%d", part); - str = add; - break; - 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; - add[2] = 0; - str = add; - break; - } - } else { - add[0] = *p; - add[1] = 0; - str = add; - } - Dmsg1(1900, "add_str %s\n", str); - pm_strcat(omsg, (char *)str); - Dmsg1(1800, "omsg=%s\n", omsg.c_str()); - } -} - - /* Return the resource name for the device */ const char *DEVICE::name() const { @@ -1978,35 +1792,41 @@ uint32_t dev_file(DEVICE *dev) /* * Free memory allocated for the device */ -void DEVICE::term(void) +void +term_dev(DEVICE *dev) { - Dmsg1(900, "term dev: %s\n", print_name()); - close(); - if (dev_name) { - free_memory(dev_name); - dev_name = NULL; - } - if (prt_name) { - free_memory(prt_name); - prt_name = NULL; - } - if (errmsg) { - free_pool_memory(errmsg); - errmsg = NULL; - } - pthread_mutex_destroy(&mutex); - 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; - } - if (device) { - device->dev = NULL; - } - free((char *)this); + if (!dev) { + dev->dev_errno = EBADF; + Mmsg0(dev->errmsg, _("Bad call to term_dev. Device not open\n")); + Emsg0(M_FATAL, 0, dev->errmsg); + return; + } + Dmsg1(29, "term_dev: %s\n", dev->print_name()); + do_close(dev); + if (dev->dev_name) { + free_memory(dev->dev_name); + dev->dev_name = NULL; + } + if (dev->prt_name) { + free_memory(dev->prt_name); + dev->prt_name = NULL; + } + if (dev->errmsg) { + free_pool_memory(dev->errmsg); + dev->errmsg = NULL; + } + pthread_mutex_destroy(&dev->mutex); + pthread_cond_destroy(&dev->wait); + pthread_cond_destroy(&dev->wait_next_vol); + pthread_mutex_destroy(&dev->spool_mutex); + rwl_destroy(&dev->lock); + if (dev->attached_dcrs) { + delete dev->attached_dcrs; + dev->attached_dcrs = NULL; + } + if (dev->state & ST_MALLOC) { + free_pool_memory((POOLMEM *)dev); + } } /* @@ -2082,10 +1902,10 @@ void set_os_device_parameters(DEVICE *dev) } mt_com.mt_op = MTSETDRVBUFFER; mt_com.mt_count = MT_ST_CLEARBOOLEANS; - if (!dev->has_cap(CAP_TWOEOF)) { + if (!dev_cap(dev, CAP_TWOEOF)) { mt_com.mt_count |= MT_ST_TWO_FM; } - if (dev->has_cap(CAP_EOM)) { + if (dev_cap(dev, CAP_EOM)) { mt_com.mt_count |= MT_ST_FAST_MTEOM; } if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) { @@ -2143,7 +1963,7 @@ void set_os_device_parameters(DEVICE *dev) static bool dev_get_os_pos(DEVICE *dev, struct mtget *mt_stat) { - return dev->has_cap(CAP_MTIOCGET) && + return dev_cap(dev, CAP_MTIOCGET) && ioctl(dev->fd, MTIOCGET, (char *)mt_stat) == 0 && mt_stat->mt_fileno >= 0; } diff --git a/bacula/src/stored/dev.h b/bacula/src/stored/dev.h index 72a9607044..7d62347ff8 100644 --- a/bacula/src/stored/dev.h +++ b/bacula/src/stored/dev.h @@ -309,6 +309,8 @@ public: dev_blocked == BST_WAITING_FOR_SYSOP || dev_blocked == BST_UNMOUNTED_WAITING_FOR_SYSOP); }; bool weof() { return !weof_dev(this, 1); }; + bool fsr(int num); /* in dev.c */ + bool fsf(int num); /* in dev.c */ const char *strerror() const; const char *archive_name() const; const char *name() const; @@ -319,7 +321,7 @@ public: 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_read() { state |= ST_READ; }; void set_offline() { state |= ST_OFFLINE; }; void set_mounted() { state |= ST_MOUNTED; }; void set_media() { state |= ST_MEDIA; }; @@ -339,28 +341,14 @@ public: void clear_mounted() { state &= ~ST_MOUNTED; }; void clear_media() { state &= ~ST_MEDIA; }; void clear_short_block() { state &= ~ST_SHORT; }; - void clear_freespace_ok() { state &= ~ST_FREESPACE_OK; }; - char *bstrerror(void) { return errmsg; }; + void clear_freespace_ok() { state &= ~ST_FREESPACE_OK; } - void block(int why); /* in dev.c */ - void unblock(); /* in dev.c */ - void close(); /* in dev.c */ - bool truncate(DCR *dcr); /* in dev.c */ + void block(int why); /* in dev.c */ + void unblock(); /* in dev.c */ + void close(); /* in dev.c */ int open(DCR *dcr, int mode); /* in dev.c */ - void term(void); /* in dev.c */ - bool rewind(DCR *dcr); /* in dev.c */ - bool mount(int timeout); /* in dev.c */ - 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(); /* 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 scan_dir_for_volume(DCR *dcr); /* in scan.c */ - bool reposition(uint32_t rfile, uint32_t rblock); /* in dev.c */ + bool rewind(DCR *dcr); /* in dev.c */ + void set_blocked(int block) { dev_blocked = block; }; int get_blocked() const { return dev_blocked; }; @@ -368,12 +356,11 @@ public: bool is_blocked() const { return dev_blocked != BST_NOT_BLOCKED; }; private: - bool do_mount(int mount, int timeout); /* in dev.c */ - void set_mode(int omode); /* 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 */ - void open_dvd_device(DCR *dcr, int omode); /* in dev.c */ - void set_blocking(); /* in dev.c */ + void open_file_device(int omode); /* in dev.c */ + void open_dvd_device(DCR *dcr, int omode); /* in dev.c */ + void set_blocking(); /* in dev.c */ }; diff --git a/bacula/src/stored/device.c b/bacula/src/stored/device.c index 30f6c403f6..c7407d5d24 100644 --- a/bacula/src/stored/device.c +++ b/bacula/src/stored/device.c @@ -291,17 +291,38 @@ bool open_device(DCR *dcr) /* If polling, ignore the error */ /* If DVD, also ignore the error, very often you cannot open the device * (when there is no DVD, or when the one inserted is a wrong one) */ - if (!dev->poll && !dev->is_dvd() && !dev->is_removable()) { + if ((!dev->poll) && (!dev->is_dvd())) { Jmsg2(dcr->jcr, M_FATAL, 0, _("Unable to open device %s: ERR=%s\n"), - dev->print_name(), dev->bstrerror()); + dev->print_name(), strerror_dev(dev)); Pmsg2(000, _("Unable to open archive %s: ERR=%s\n"), - dev->print_name(), dev->bstrerror()); + dev->print_name(), strerror_dev(dev)); } return false; } return true; } +/* + * Release any Volume attached to this device + * then close the device. + */ +void close_device(DEVICE *dev) +{ + free_volume(dev); + dev->close(); +} + +/* + */ +void force_close_device(DEVICE *dev) +{ + if (!dev || dev->fd < 0) { + return; + } + Dmsg1(29, "Force close_dev %s\n", dev->print_name()); + free_volume(dev); + dev->close(); +} void dev_lock(DEVICE *dev) diff --git a/bacula/src/stored/dircmd.c b/bacula/src/stored/dircmd.c index a371688fe3..10c3a20590 100644 --- a/bacula/src/stored/dircmd.c +++ b/bacula/src/stored/dircmd.c @@ -20,7 +20,7 @@ * */ /* - Copyright (C) 2001-2006 Kern Sibbald + Copyright (C) 2001-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -71,7 +71,6 @@ static bool setdebug_cmd(JCR *jcr); static bool cancel_cmd(JCR *cjcr); static bool mount_cmd(JCR *jcr); 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); @@ -192,7 +191,7 @@ void *handle_connection_request(void *arg) if ((bnet_stat = bnet_recv(bs)) <= 0) { break; /* connection terminated */ } - Dmsg1(199, "msg); + Dmsg1(199, "msg); /* Ensure that device initialization is complete */ while (!init_done) { bmicrosleep(1, 0); @@ -262,13 +261,13 @@ static bool cancel_cmd(JCR *cjcr) if (!(jcr=get_jcr_by_full_name(Job))) { bnet_fsend(dir, _("3904 Job %s not found.\n"), Job); } else { - P(jcr->mutex); + jcr->lock(); oldStatus = jcr->JobStatus; set_jcr_job_status(jcr, JS_Canceled); if (!jcr->authenticated && oldStatus == JS_WaitFD) { pthread_cond_signal(&jcr->job_start_wait); /* wake waiting thread */ } - V(jcr->mutex); + jcr->unlock(); if (jcr->file_bsock) { bnet_sig(jcr->file_bsock, BNET_TERMINATE); } @@ -345,9 +344,9 @@ static bool do_label(JCR *jcr, int relabel) dev = dcr->dev; P(dev->mutex); /* Use P to avoid indefinite block */ if (!dev->is_open()) { - Dmsg1(400, "Can %slabel. Device is not open\n", relabel?"re":""); + Dmsg0(400, "Can relabel. Device is not open\n"); label_volume_if_ok(dcr, oldname, newname, poolname, slot, relabel); - dev->close(); + force_close_device(dev); /* Under certain "safe" conditions, we can steal the lock */ } else if (dev->can_steal_lock()) { Dmsg0(400, "Can relabel. can_steal_lock\n"); @@ -391,27 +390,15 @@ static void label_volume_if_ok(DCR *dcr, char *oldname, bsteal_lock_t hold; DEVICE *dev = dcr->dev; int label_status; - int mode; steal_device_lock(dev, &hold, BST_WRITING_LABEL); Dmsg1(100, "Stole device %s lock, writing label.\n", dev->print_name()); + /* Note, try_autoload_device() opens the device */ if (!try_autoload_device(dcr->jcr, slot, newname)) { goto bail_out; /* error */ } - /* Ensure that the device is open -- autoload_device() closes it */ - if (dev->is_tape()) { - mode = OPEN_READ_WRITE; - } else { - mode = CREATE_READ_WRITE; - } - if (dev->open(dcr, mode) < 0) { - bnet_fsend(dir, _("3910 Unable to open device %s: ERR=%s\n"), - dev->print_name(), dev->strerror()); - return; - } - /* See what we have for a Volume */ label_status = read_dev_volume_label(dcr); @@ -441,7 +428,7 @@ static void label_volume_if_ok(DCR *dcr, char *oldname, case VOL_IO_ERROR: case VOL_NO_LABEL: if (!write_new_volume_label_to_dev(dcr, newname, poolname)) { - bnet_fsend(dir, _("3912 Failed to label Volume: ERR=%s\n"), dev->bstrerror()); + bnet_fsend(dir, _("3912 Failed to label Volume: ERR=%s\n"), strerror_dev(dev)); break; } bstrncpy(dcr->VolumeName, newname, sizeof(dcr->VolumeName)); @@ -450,7 +437,7 @@ static void label_volume_if_ok(DCR *dcr, char *oldname, newname, dev->print_name()); break; case VOL_NO_MEDIA: - bnet_fsend(dir, _("3912 Failed to label Volume: ERR=%s\n"), dev->bstrerror()); + bnet_fsend(dir, _("3912 Failed to label Volume: ERR=%s\n"), strerror_dev(dev)); break; default: bnet_fsend(dir, _("3913 Cannot label Volume. " @@ -528,42 +515,40 @@ static DCR *find_device(JCR *jcr, POOL_MEM &devname, int drive) break; } } - if (!found) { - foreach_res(changer, R_AUTOCHANGER) { - /* Find resource, and make sure we were able to open it */ - if (fnmatch(devname.c_str(), changer->hdr.name, 0) == 0) { - /* Try each device in this AutoChanger */ - foreach_alist(device, changer->device) { - Dmsg1(100, "Try changer device %s\n", device->hdr.name); - if (!device->dev) { - device->dev = init_dev(jcr, device); - } - if (!device->dev) { - Dmsg1(100, "Device %s could not be opened. Skipped\n", devname.c_str()); - Jmsg(jcr, M_WARNING, 0, _("\n" - " Device \"%s\" in changer \"%s\" requested by DIR could not be opened or does not exist.\n"), - device->hdr.name, devname.c_str()); - continue; - } - if (!device->dev->autoselect) { - 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) { - Dmsg1(20, "Found changer device %s\n", device->hdr.name); - found = true; - break; - } - Dmsg3(100, "Device %s drive wrong: want=%d got=%d skipping\n", - devname.c_str(), drive, (int)device->dev->drive_index); + foreach_res(changer, R_AUTOCHANGER) { + /* Find resource, and make sure we were able to open it */ + if (fnmatch(devname.c_str(), changer->hdr.name, 0) == 0) { + /* Try each device in this AutoChanger */ + foreach_alist(device, changer->device) { + Dmsg1(100, "Try changer device %s\n", device->hdr.name); + if (!device->dev) { + device->dev = init_dev(jcr, device); + } + if (!device->dev) { + Dmsg1(100, "Device %s could not be opened. Skipped\n", devname.c_str()); + Jmsg(jcr, M_WARNING, 0, _("\n" + " Device \"%s\" in changer \"%s\" requested by DIR could not be opened or does not exist.\n"), + device->hdr.name, devname.c_str()); + continue; } - break; /* we found it but could not open a device */ + if (!device->dev->autoselect) { + 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) { + Dmsg1(20, "Found changer device %s\n", device->hdr.name); + found = true; + break; + } + Dmsg3(100, "Device %s drive wrong: want=%d got=%d skipping\n", + devname.c_str(), drive, (int)device->dev->drive_index); } + break; /* we found it but could not open a device */ } } if (found) { - Dmsg1(100, "Found device %s\n", device->hdr.name); + Dmsg1(100, "Found changer device %s\n", device->hdr.name); dcr = new_dcr(jcr, device->dev); dcr->device = device; jcr->dcr = dcr; @@ -606,7 +591,7 @@ static bool mount_cmd(JCR *jcr) /* We freed the device, so reopen it and wake any waiting threads */ if (dev->open(dcr, OPEN_READ_ONLY) < 0) { bnet_fsend(dir, _("3901 open device failed: ERR=%s\n"), - dev->bstrerror()); + strerror_dev(dev)); if (dev->dev_blocked == BST_UNMOUNTED) { /* We blocked the device, so unblock it */ Dmsg0(100, "Unmounted. Unblocking device\n"); @@ -659,7 +644,7 @@ static bool mount_cmd(JCR *jcr) } else if (dev->is_tape()) { if (dev->open(dcr, OPEN_READ_ONLY) < 0) { bnet_fsend(dir, _("3901 open device failed: ERR=%s\n"), - dev->bstrerror()); + strerror_dev(dev)); break; } read_label(dcr); @@ -672,11 +657,11 @@ static bool mount_cmd(JCR *jcr) dev->print_name()); } } else if (dev->is_dvd()) { - if (mount_dvd(dev, 1)) { + if (mount_dev(dev, 1)) { bnet_fsend(dir, _("3002 Device %s is mounted.\n"), dev->print_name()); } else { - bnet_fsend(dir, _("3907 %s"), dev->bstrerror()); + bnet_fsend(dir, _("3907 %s"), strerror_dev(dev)); } } else { /* must be file */ bnet_fsend(dir, _("3906 File device %s is always mounted.\n"), @@ -730,7 +715,8 @@ static bool unmount_cmd(JCR *jcr) Dmsg2(90, "%d waiter dev_block=%d. doing unmount\n", dev->num_waiting, dev->dev_blocked); if (!unload_autochanger(jcr->dcr, -1)) { - dev->close(); + offline_or_rewind_dev(dev); + force_close_device(dev); } dev->dev_blocked = BST_UNMOUNTED_WAITING_FOR_SYSOP; bnet_fsend(dir, _("3001 Device %s unmounted.\n"), @@ -757,7 +743,8 @@ static bool unmount_cmd(JCR *jcr) dev->dev_blocked = BST_UNMOUNTED; dev->no_wait_id = 0; if (!unload_autochanger(jcr->dcr, -1)) { - dev->close(); + offline_or_rewind_dev(dev); + force_close_device(dev); } bnet_fsend(dir, _("3002 Device %s unmounted.\n"), dev->print_name()); @@ -841,10 +828,6 @@ static bool release_cmd(JCR *jcr) } -static bool bootstrap_cmd(JCR *jcr) -{ - return get_bootstrap_file(jcr, jcr->dir_bsock); -} /* * Autochanger command from Director @@ -873,7 +856,7 @@ static bool changer_cmd(JCR *jcr) if (dcr) { dev = dcr->dev; P(dev->mutex); /* Use P to avoid indefinite block */ - if (!dev->device->changer_res) { + if (!dev->device->changer_res) { bnet_fsend(dir, _("3995 Device %s is not an autochanger.\n"), dev->print_name()); /* Under certain "safe" conditions, we can steal the lock */ @@ -919,7 +902,7 @@ static bool readlabel_cmd(JCR *jcr) P(dev->mutex); /* Use P to avoid indefinite block */ if (!dev->is_open()) { read_volume_label(jcr, dev, Slot); - dev->close(); + force_close_device(dev); /* Under certain "safe" conditions, we can steal the lock */ } else if (dev->can_steal_lock()) { read_volume_label(jcr, dev, Slot); @@ -942,7 +925,6 @@ static bool readlabel_cmd(JCR *jcr) return true; } - /* * Read the tape label * @@ -983,6 +965,7 @@ static bool try_autoload_device(JCR *jcr, int slot, const char *VolName) { DCR *dcr = jcr->dcr; BSOCK *dir = jcr->dir_bsock; + DEVICE *dev = dcr->dev; bstrncpy(dcr->VolumeName, VolName, sizeof(dcr->VolumeName)); dcr->VolCatInfo.Slot = slot; @@ -990,6 +973,13 @@ static bool try_autoload_device(JCR *jcr, int slot, const char *VolName) if (autoload_device(dcr, 0, dir) < 0) { /* autoload if possible */ return false; } + + /* Ensure that the device is open -- autoload_device() closes it */ + if (dev->open(dcr, OPEN_READ_WRITE) < 0) { + bnet_fsend(dir, _("3910 Unable to open device %s: ERR=%s\n"), + dev->print_name(), dev->strerror()); + return false; + } return true; } diff --git a/bacula/src/stored/dvd.c b/bacula/src/stored/dvd.c index 8284256911..417cf5fcec 100644 --- a/bacula/src/stored/dvd.c +++ b/bacula/src/stored/dvd.c @@ -8,7 +8,7 @@ * Version $Id$ */ /* - Copyright (C) 2005-2006 Kern Sibbald + Copyright (C) 2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -26,7 +26,8 @@ #include "stored.h" /* Forward referenced functions */ -static bool do_mount_dvd(DEVICE* dev, int mount, int dotimeout); +static void edit_device_codes_dev(DEVICE *dev, POOL_MEM &omsg, const char *imsg); +static bool do_mount_dev(DEVICE* dev, int mount, int dotimeout); static void add_file_and_part_name(DEVICE *dev, POOL_MEM &archive_name); /* @@ -65,20 +66,20 @@ static void add_file_and_part_name(DEVICE *dev, POOL_MEM &archive_name) bsnprintf(partnumber, sizeof(partnumber), "%d", dev->part); pm_strcat(archive_name, partnumber); } - Dmsg1(400, "Exit make_dvd_filename: arch=%s\n", archive_name.c_str()); + Dmsg1(100, "Exit make_dvd_filename: arch=%s\n", archive_name.c_str()); } /* Mount the device. * If timeout, wait until the mount command returns 0. * If !timeout, try to mount the device only once. */ -bool mount_dvd(DEVICE* dev, int timeout) +bool mount_dev(DEVICE* dev, int timeout) { - Dmsg0(90, "Enter mount_dvd\n"); + Dmsg0(90, "Enter mount_dev\n"); if (dev->is_mounted()) { return true; } else if (dev->requires_mount()) { - return do_mount_dvd(dev, 1, timeout); + return do_mount_dev(dev, 1, timeout); } return true; } @@ -87,20 +88,17 @@ bool mount_dvd(DEVICE* dev, int timeout) * If timeout, wait until the unmount command returns 0. * If !timeout, try to unmount the device only once. */ -bool unmount_dvd(DEVICE *dev, int timeout) +bool unmount_dev(DEVICE *dev, int timeout) { - if (!dev->is_dvd()) { - return true; - } - Dmsg0(90, "Enter unmount_dvd\n"); + Dmsg0(90, "Enter unmount_dev\n"); if (dev->is_mounted()) { - return do_mount_dvd(dev, 0, timeout); + return do_mount_dev(dev, 0, timeout); } return true; } /* (Un)mount the device */ -static bool do_mount_dvd(DEVICE* dev, int mount, int dotimeout) +static bool do_mount_dev(DEVICE* dev, int mount, int dotimeout) { POOL_MEM ocmd(PM_FNAME); POOLMEM *results; @@ -122,9 +120,9 @@ static bool do_mount_dvd(DEVICE* dev, int mount, int dotimeout) icmd = dev->device->unmount_command; } - dev->edit_mount_codes(ocmd, icmd); + edit_device_codes_dev(dev, ocmd, icmd); - Dmsg2(200, "do_mount_dvd: cmd=%s mounted=%d\n", ocmd.c_str(), !!dev->is_mounted()); + Dmsg2(200, "do_mount_dev: cmd=%s mounted=%d\n", ocmd.c_str(), !!dev->is_mounted()); if (dotimeout) { /* Try at most 1 time to (un)mount the device. This should perhaps be configurable. */ @@ -146,7 +144,7 @@ static bool do_mount_dvd(DEVICE* dev, int mount, int dotimeout) * Try to unmount it, then remount it */ if (mount) { Dmsg1(400, "Trying to unmount the device %s...\n", dev->print_name()); - do_mount_dvd(dev, 0, 0); + do_mount_dev(dev, 0, 0); } bmicrosleep(1, 0); continue; @@ -161,7 +159,7 @@ static bool do_mount_dvd(DEVICE* dev, int mount, int dotimeout) DIR* dp; struct dirent *entry, *result; int name_max; - int count; + int count = 0; name_max = pathconf(".", _PC_NAME_MAX); if (name_max < 1024) { @@ -171,34 +169,31 @@ static bool do_mount_dvd(DEVICE* dev, int mount, int dotimeout) if (!(dp = opendir(dev->device->mount_point))) { berrno be; dev->dev_errno = errno; - Dmsg3(29, "do_mount_dvd: failed to open dir %s (dev=%s), ERR=%s\n", + Dmsg3(29, "open_mounted_dev: failed to open dir %s (dev=%s), ERR=%s\n", dev->device->mount_point, dev->print_name(), be.strerror()); 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->dev_errno = EIO; - Dmsg2(129, "do_mount_dvd: failed to find suitable file in dir %s (dev=%s)\n", + Dmsg2(129, "open_mounted_dev: failed to find suitable file in dir %s (dev=%s)\n", dev->device->mount_point, dev->print_name()); break; } - if (strcmp(result->d_name, ".") && strcmp(result->d_name, "..") && - strcmp(result->d_name, ".keep")) { + 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_mount_dvd: ignoring %s in %s\n", + Dmsg2(129, "open_mounted_dev: ignoring %s in %s\n", result->d_name, dev->device->mount_point); } } free(entry); closedir(dp); - Dmsg1(29, "do_mount_dvd: got %d files in the mount point (not counting ., .. and .keep)\n", count); + Dmsg1(29, "open_mounted_dev: got %d files in the mount point (not counting ., .. and .keep)\n", count); if (count > 0) { mount = 1; /* If we got more than ., .. and .keep */ @@ -233,7 +228,7 @@ void update_free_space_dev(DEVICE* dev) char ed1[50]; /* The device must be mounted in order to dvd-freespace to work */ - mount_dvd(dev, 1); + mount_dev(dev, 1); sm_check(__FILE__, __LINE__, false); icmd = dev->device->free_space_command; @@ -248,7 +243,7 @@ void update_free_space_dev(DEVICE* dev) return; } - dev->edit_mount_codes(ocmd, icmd); + edit_device_codes_dev(dev, ocmd, icmd); Dmsg1(29, "update_free_space_dev: cmd=%s\n", ocmd.c_str()); @@ -259,7 +254,7 @@ void update_free_space_dev(DEVICE* dev) while (1) { if (run_program_full_output(ocmd.c_str(), dev->max_open_wait/2, results) == 0) { - Dmsg1(400, "Free space program run : %s\n", results); + Dmsg1(100, "Free space program run : %s\n", results); free = str_to_int64(results); if (free >= 0) { dev->free_space = free; @@ -303,7 +298,7 @@ void update_free_space_dev(DEVICE* dev) * Write a part (Vol, Vol.1, ...) 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 + * It is also called from truncate_dvd_dev 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) @@ -347,7 +342,7 @@ bool dvd_write_part(DCR *dcr) 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); + edit_device_codes_dev(dev, ocmd, icmd); /* * original line follows @@ -395,7 +390,7 @@ bool dvd_write_part(DCR *dcr) /* growisofs umounted the device, so remount it (it will update the free space) */ dev->clear_mounted(); - mount_dvd(dev, 1); + mount_dev(dev, 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()); sm_check(__FILE__, __LINE__, false); @@ -472,7 +467,7 @@ int dvd_open_next_part(DCR *dcr) } } - Dmsg2(400, "num_parts=%d part=%d\n", dev->num_parts, dev->part); + Dmsg2(100, "num_parts=%d part=%d\n", dev->num_parts, dev->part); dev->VolCatInfo.VolCatParts = dev->part; make_spooled_dvd_filename(dev, archive_name); /* makes spool name */ @@ -497,11 +492,11 @@ int dvd_open_next_part(DCR *dcr) * think it is not needed. */ if (dev->num_parts < dev->part) { - Dmsg2(400, "Set npart=%d to part=%d\n", dev->num_parts, dev->part); + Dmsg2(100, "Set npart=%d to part=%d\n", dev->num_parts, dev->part); dev->num_parts = dev->part; dev->VolCatInfo.VolCatParts = dev->part; } - Dmsg2(400, "Call dev->open(vol=%s, mode=%d\n", dev->VolCatInfo.VolCatName, + Dmsg2(50, "Call dev->open(vol=%s, mode=%d\n", dev->VolCatInfo.VolCatName, dev->openmode); /* Open next part */ @@ -537,17 +532,17 @@ int dvd_open_first_part(DCR *dcr, int mode) dev->part_start = 0; dev->part = 0; - Dmsg2(400, "Call dev->open(vol=%s, mode=%d)\n", dcr->VolCatInfo.VolCatName, + Dmsg2(50, "Call dev->open(vol=%s, mode=%d)\n", dcr->VolCatInfo.VolCatName, mode); int append = dev->can_append(); if (dev->open(dcr, mode) < 0) { - Dmsg0(400, "open dev() failed\n"); + Dmsg0(50, "open dev() failed\n"); return -1; } if (append && (dev->part == dev->num_parts)) { /* If needed, set the append flag back */ dev->set_append(); } - Dmsg2(400, "Leave open_first_part state=%s append=%d\n", dev->is_open()?"open":"not open", dev->can_append()); + Dmsg2(50, "Leave open_first_part state=%s append=%d\n", dev->is_open()?"open":"not open", dev->can_append()); return dev->fd; } @@ -560,17 +555,17 @@ off_t lseek_dev(DEVICE *dev, off_t offset, int whence) off_t pos; char ed1[50], ed2[50]; - Dmsg3(400, "Enter lseek_dev fd=%d part=%d nparts=%d\n", dev->fd, + Dmsg3(100, "Enter lseek_dev fd=%d part=%d nparts=%d\n", dev->fd, dev->part, dev->num_parts); if (!dev->is_dvd()) { - Dmsg0(400, "Using sys lseek\n"); + Dmsg0(100, "Using sys lseek\n"); return lseek(dev->fd, offset, whence); } dcr = (DCR *)dev->attached_dcrs->first(); /* any dcr will do */ switch(whence) { case SEEK_SET: - Dmsg2(400, "lseek_dev SEEK_SET to %s (part_start=%s)\n", + Dmsg2(100, "lseek_dev SEEK_SET to %s (part_start=%s)\n", edit_uint64(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))) { @@ -583,7 +578,7 @@ off_t lseek_dev(DEVICE *dev, off_t offset, int whence) } else { /* Load next part, and start again */ if (dvd_open_next_part(dcr) < 0) { - Dmsg0(400, "lseek_dev failed while trying to open the next part\n"); + Dmsg0(100, "lseek_dev failed while trying to open the next part\n"); return -1; } return lseek_dev(dev, offset, SEEK_SET); @@ -596,27 +591,27 @@ off_t lseek_dev(DEVICE *dev, off_t offset, int whence) * until the right one is loaded */ if (dvd_open_first_part(dcr, dev->openmode) < 0) { - Dmsg0(400, "lseek_dev failed while trying to open the first part\n"); + Dmsg0(100, "lseek_dev failed while trying to open the first part\n"); return -1; } return lseek_dev(dev, offset, SEEK_SET); } break; case SEEK_CUR: - Dmsg1(400, "lseek_dev SEEK_CUR to %s\n", edit_uint64(offset, ed1)); + Dmsg1(100, "lseek_dev SEEK_CUR to %s\n", edit_uint64(offset, ed1)); if ((pos = lseek(dev->fd, (off_t)0, SEEK_CUR)) < 0) { return pos; } pos += dev->part_start; if (offset == 0) { - Dmsg1(400, "lseek_dev SEEK_CUR returns %s\n", edit_uint64(pos, ed1)); + Dmsg1(100, "lseek_dev SEEK_CUR returns %s\n", edit_uint64(pos, ed1)); return pos; } else { /* Not used in Bacula, but should work */ return lseek_dev(dev, pos, SEEK_SET); } break; case SEEK_END: - Dmsg1(400, "lseek_dev SEEK_END to %s\n", edit_uint64(offset, ed1)); + Dmsg1(100, "lseek_dev SEEK_END to %s\n", edit_uint64(offset, ed1)); /* * Bacula does not use offsets for SEEK_END * Also, Bacula uses seek_end only when it wants to @@ -625,7 +620,7 @@ off_t lseek_dev(DEVICE *dev, off_t offset, int whence) * itself is read-only (as currently implemented). */ if (offset > 0) { /* Not used by bacula */ - Dmsg1(400, "lseek_dev SEEK_END called with an invalid offset %s\n", + Dmsg1(100, "lseek_dev SEEK_END called with an invalid offset %s\n", edit_uint64(offset, ed1)); errno = EINVAL; return -1; @@ -637,7 +632,7 @@ off_t lseek_dev(DEVICE *dev, off_t offset, int whence) if ((pos = lseek(dev->fd, (off_t)0, SEEK_END)) < 0) { return pos; } else { - Dmsg1(400, "lseek_dev SEEK_END returns %s\n", + Dmsg1(100, "lseek_dev SEEK_END returns %s\n", edit_uint64(pos + dev->part_start, ed1)); return pos + dev->part_start; } @@ -652,19 +647,19 @@ off_t lseek_dev(DEVICE *dev, off_t offset, int whence) int modesave = dev->openmode; /* Works because num_parts > 0. */ if (dvd_open_first_part(dcr, OPEN_READ_ONLY) < 0) { - Dmsg0(400, "lseek_dev failed while trying to open the first part\n"); + Dmsg0(100, "lseek_dev failed while trying to open the first part\n"); return -1; } if (dev->num_parts > 0) { while (dev->part < (dev->num_parts-1)) { if (dvd_open_next_part(dcr) < 0) { - Dmsg0(400, "lseek_dev failed while trying to open the next part\n"); + Dmsg0(100, "lseek_dev failed while trying to open the next part\n"); return -1; } } dev->openmode = modesave; if (dvd_open_next_part(dcr) < 0) { - Dmsg0(400, "lseek_dev failed while trying to open the next part\n"); + Dmsg0(100, "lseek_dev failed while trying to open the next part\n"); return -1; } } @@ -688,7 +683,7 @@ bool dvd_close_job(DCR *dcr) * 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", + Dmsg1(100, "Writing last part=%d write_partafter_job is set.\n", dev->part); if (dev->part < dev->num_parts) { Jmsg3(jcr, M_FATAL, 0, _("Error while writing, current part number is less than the total number of parts (%d/%d, device=%s)\n"), @@ -703,7 +698,7 @@ bool dvd_close_job(DCR *dcr) update the part number. */ if (ok && (dvd_open_next_part(dcr) < 0)) { Jmsg2(jcr, M_FATAL, 0, _("Unable to write part %s: ERR=%s\n"), - dev->print_name(), dev->bstrerror()); + dev->print_name(), strerror_dev(dev)); dev->dev_errno = EIO; ok = false; } @@ -713,7 +708,7 @@ bool dvd_close_job(DCR *dcr) return ok; } -bool truncate_dvd(DCR *dcr) { +bool truncate_dvd_dev(DCR *dcr) { DEVICE* dev = dcr->dev; /* Set num_parts to zero (on disk) */ @@ -721,17 +716,17 @@ bool truncate_dvd(DCR *dcr) { dcr->VolCatInfo.VolCatParts = 0; dev->VolCatInfo.VolCatParts = 0; - Dmsg0(400, "truncate_dvd: Opening first part (1)...\n"); + Dmsg0(100, "truncate_dvd_dev: Opening first part (1)...\n"); dev->truncating = true; if (dvd_open_first_part(dcr, OPEN_READ_WRITE) < 0) { - Dmsg0(400, "truncate_dvd: Error while opening first part (1).\n"); + Dmsg0(100, "truncate_dvd_dev: Error while opening first part (1).\n"); dev->truncating = false; return false; } dev->truncating = false; - Dmsg0(400, "truncate_dvd: Truncating...\n"); + Dmsg0(100, "truncate_dvd_dev: Truncating...\n"); /* If necessary, truncate it. */ if (ftruncate(dev->fd, 0) != 0) { @@ -745,10 +740,10 @@ bool truncate_dvd(DCR *dcr) { dev->fd = -1; dev->clear_opened(); - Dmsg0(400, "truncate_dvd: Opening first part (2)...\n"); + Dmsg0(100, "truncate_dvd_dev: Opening first part (2)...\n"); if (!dvd_write_part(dcr)) { - Dmsg0(400, "truncate_dvd: Error while writing to DVD.\n"); + Dmsg0(100, "truncate_dvd_dev: Error while writing to DVD.\n"); return false; } @@ -758,7 +753,7 @@ bool truncate_dvd(DCR *dcr) { dev->VolCatInfo.VolCatParts = 0; if (dvd_open_first_part(dcr, OPEN_READ_WRITE) < 0) { - Dmsg0(400, "truncate_dvd: Error while opening first part (2).\n"); + Dmsg0(100, "truncate_dvd_dev: Error while opening first part (2).\n"); return false; } @@ -797,7 +792,8 @@ bool check_can_write_on_non_blank_dvd(DCR *dcr) { Dmsg2(129, "check_can_write_on_non_blank_dvd: failed to find suitable file in dir %s (dev=%s)\n", dev->device->mount_point, dev->print_name()); break; - } else { + } + else { Dmsg2(99, "check_can_write_on_non_blank_dvd: found %s (versus %s)\n", result->d_name, dev->VolCatInfo.VolCatName); if (strcmp(result->d_name, dev->VolCatInfo.VolCatName) == 0) { @@ -817,7 +813,7 @@ bool check_can_write_on_non_blank_dvd(DCR *dcr) { } Dmsg2(99, "check_can_write_on_non_blank_dvd: size of %s is %d\n", filename.c_str(), filestat.st_size); - matched = filestat.st_size == 0; + matched = (filestat.st_size == 0); } } count++; @@ -828,9 +824,77 @@ bool check_can_write_on_non_blank_dvd(DCR *dcr) { Dmsg2(29, "check_can_write_on_non_blank_dvd: got %d files in the mount point (matched=%d)\n", count, matched); if (count != 3) { - /* There are more than 3 files (., .., and the volume file) */ + /* There is more than 3 files (., .., and the volume file) */ return false; } return matched; } + +/* + * Edit codes into (Un)MountCommand, Write(First)PartCommand + * %% = % + * %a = archive device name + * %e = erase (set if cannot mount and first part) + * %n = part number + * %m = mount point + * %v = last part name + * + * omsg = edited output message + * imsg = input string containing edit codes (%x) + * + */ +static void edit_device_codes_dev(DEVICE* dev, 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; + Dmsg1(800, "edit_device_codes: %s\n", imsg); + for (p=imsg; *p; p++) { + if (*p == '%') { + switch (*++p) { + case '%': + str = "%"; + break; + case 'a': + str = dev->dev_name; + break; + case 'e': + if (dev->num_parts == 0) { + str = "1"; + } else { + str = "0"; + } + break; + case 'n': + bsnprintf(add, sizeof(add), "%d", dev->part); + str = add; + break; + case 'm': + str = dev->device->mount_point; + break; + case 'v': + make_spooled_dvd_filename(dev, archive_name); + str = archive_name.c_str(); + break; + default: + add[0] = '%'; + add[1] = *p; + add[2] = 0; + str = add; + break; + } + } else { + add[0] = *p; + add[1] = 0; + str = add; + } + Dmsg1(1900, "add_str %s\n", str); + pm_strcat(omsg, (char *)str); + Dmsg1(1800, "omsg=%s\n", omsg.c_str()); + } +} diff --git a/bacula/src/stored/fd_cmds.c b/bacula/src/stored/fd_cmds.c index aca7e3c0d4..0387f2399e 100644 --- a/bacula/src/stored/fd_cmds.c +++ b/bacula/src/stored/fd_cmds.c @@ -13,7 +13,7 @@ * */ /* - Copyright (C) 2000-2006 Kern Sibbald + Copyright (C) 2000-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -53,10 +53,9 @@ static bool append_end_session(JCR *jcr); static bool read_open_session(JCR *jcr); static bool read_data_cmd(JCR *jcr); static bool read_close_session(JCR *jcr); -static bool bootstrap_cmd(JCR *jcr); /* Exported function */ -bool get_bootstrap_file(JCR *jcr, BSOCK *bs); +bool bootstrap_cmd(JCR *jcr); struct s_cmds { const char *cmd; @@ -94,7 +93,7 @@ static char ERROR_bootstrap[] = "3904 Error bootstrap\n"; /* Information sent to the Director */ static char Job_start[] = "3010 Job %s start\n"; -char Job_end[] = +static char Job_end[] = "3099 Job %s end JobStatus=%d JobFiles=%d JobBytes=%s\n"; /* @@ -138,7 +137,7 @@ void run_job(JCR *jcr) for (i=0; fd_cmds[i].cmd; i++) { if (strncmp(fd_cmds[i].cmd, fd->msg, strlen(fd_cmds[i].cmd)) == 0) { found = true; /* indicate command found */ - if (!fd_cmds[i].func(jcr)) { /* do command */ + if (!fd_cmds[i].func(jcr) || job_canceled(jcr)) { /* do command */ set_jcr_job_status(jcr, JS_ErrorTerminated); quit = true; } @@ -310,13 +309,9 @@ static bool read_open_session(JCR *jcr) return true; } -static bool bootstrap_cmd(JCR *jcr) -{ - return get_bootstrap_file(jcr, jcr->file_bsock); -} - -bool get_bootstrap_file(JCR *jcr, BSOCK *sock) +bool bootstrap_cmd(JCR *jcr) { + BSOCK *fd = jcr->file_bsock; POOLMEM *fname = get_pool_memory(PM_FNAME); FILE *bs; bool ok = false; @@ -335,9 +330,9 @@ bool get_bootstrap_file(JCR *jcr, BSOCK *sock) jcr->RestoreBootstrap, strerror(errno)); goto bail_out; } - while (bnet_recv(sock) >= 0) { - Dmsg1(400, "storedmsg); - fputs(sock->msg, bs); + while (bnet_recv(fd) >= 0) { + Dmsg1(400, "storedmsg); + fputs(fd->msg, bs); } fclose(bs); jcr->bsr = parse_bsr(jcr, jcr->RestoreBootstrap); @@ -355,10 +350,10 @@ bail_out: free_pool_memory(jcr->RestoreBootstrap); jcr->RestoreBootstrap = NULL; if (!ok) { - bnet_fsend(sock, ERROR_bootstrap); + bnet_fsend(fd, ERROR_bootstrap); return false; } - return bnet_fsend(sock, OK_bootstrap); + return bnet_fsend(fd, OK_bootstrap); } diff --git a/bacula/src/stored/job.c b/bacula/src/stored/job.c index 4809fc7286..6a139c3cce 100644 --- a/bacula/src/stored/job.c +++ b/bacula/src/stored/job.c @@ -24,12 +24,13 @@ #include "bacula.h" #include "stored.h" +static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; + /* Imported variables */ extern uint32_t VolSessionTime; /* Imported functions */ extern uint32_t newVolSessionId(); -extern bool do_mac(JCR *jcr); /* Requests from the Director daemon */ static char jobcmd[] = "JobId=%d job=%127s job_name=%127s client_name=%127s " @@ -39,7 +40,7 @@ static char jobcmd[] = "JobId=%d job=%127s job_name=%127s client_name=%127s " /* Responses sent to Director daemon */ static char OKjob[] = "3000 OK Job SDid=%u SDtime=%u Authorization=%s\n"; -static char BAD_job[] = "3915 Bad Job command: %s\n"; +static char BAD_job[] = "3915 Bad Job command. stat=%d CMD: %s\n"; //static char OK_query[] = "3001 OK query\n"; //static char NO_query[] = "3918 Query failed\n"; //static char BAD_query[] = "3917 Bad query command: %s\n"; @@ -62,22 +63,22 @@ bool job_cmd(JCR *jcr) POOL_MEM job_name, client_name, job, fileset_name, fileset_md5; int JobType, level, spool_attributes, no_attributes, spool_data; int write_part_after_job, PreferMountedVols; - + int stat; JCR *ojcr; /* * Get JobId and permissions from Director */ Dmsg1(100, "msg); - if (sscanf(dir->msg, jobcmd, &JobId, job.c_str(), job_name.c_str(), + stat = sscanf(dir->msg, jobcmd, &JobId, job.c_str(), job_name.c_str(), client_name.c_str(), &JobType, &level, fileset_name.c_str(), &no_attributes, &spool_attributes, fileset_md5.c_str(), &spool_data, - &write_part_after_job, &PreferMountedVols) != 13) { + &write_part_after_job, &PreferMountedVols); + if (stat != 13) { pm_strcpy(jcr->errmsg, dir->msg); - bnet_fsend(dir, BAD_job, jcr->errmsg); + bnet_fsend(dir, BAD_job, stat, jcr->errmsg); Dmsg1(100, ">dird: %s", dir->msg); - Emsg1(M_FATAL, 0, _("Bad Job Command from Director: %s\n"), jcr->errmsg); set_jcr_job_status(jcr, JS_ErrorTerminated); return false; } @@ -142,7 +143,7 @@ bool run_cmd(JCR *jcr) case JT_COPY: case JT_ARCHIVE: jcr->authenticated = true; - do_mac(jcr); + run_job(jcr); return false; } @@ -159,14 +160,14 @@ bool run_cmd(JCR *jcr) * when he does, we will be released, unless the 30 minutes * expires. */ - P(jcr->mutex); + P(mutex); for ( ;!job_canceled(jcr); ) { - errstat = pthread_cond_timedwait(&jcr->job_start_wait, &jcr->mutex, &timeout); + errstat = pthread_cond_timedwait(&jcr->job_start_wait, &mutex, &timeout); if (errstat == 0 || errstat == ETIMEDOUT) { break; } } - V(jcr->mutex); + V(mutex); memset(jcr->sd_auth_key, 0, strlen(jcr->sd_auth_key)); @@ -215,12 +216,10 @@ void handle_filed_connection(BSOCK *fd, char *job_name) Dmsg1(110, "OK Authentication Job %s\n", jcr->Job); } - P(jcr->mutex); if (!jcr->authenticated) { set_jcr_job_status(jcr, JS_ErrorTerminated); } pthread_cond_signal(&jcr->job_start_wait); /* wake waiting job */ - V(jcr->mutex); free_jcr(jcr); return; } diff --git a/bacula/src/stored/label.c b/bacula/src/stored/label.c index 612c2b4b97..ee0d4fbd74 100644 --- a/bacula/src/stored/label.c +++ b/bacula/src/stored/label.c @@ -8,7 +8,7 @@ * Version $Id$ */ /* - Copyright (C) 2000-2006 Kern Sibbald + Copyright (C) 2000-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -71,9 +71,7 @@ int read_dev_volume_label(DCR *dcr) dev->VolHdr.VolumeName[0]?dev->VolHdr.VolumeName:"*NULL*"); if (!dev->is_open()) { - if (dev->open(dcr, OPEN_READ_ONLY) < 0) { - return VOL_IO_ERROR; - } + Emsg0(M_ABORT, 0, _("BAD call to read_dev_volume_label\n")); } if (dev->is_labeled()) { /* did we already read label? */ /* Compare Volume Names allow special wild card */ @@ -102,7 +100,7 @@ int read_dev_volume_label(DCR *dcr) if (!dev->rewind(dcr)) { Mmsg(jcr->errmsg, _("Couldn't rewind device %s: ERR=%s\n"), - dev->print_name(), dev->bstrerror()); + dev->print_name(), strerror_dev(dev)); Dmsg1(30, "return VOL_NO_MEDIA: %s", jcr->errmsg); return VOL_NO_MEDIA; } @@ -141,14 +139,14 @@ int read_dev_volume_label(DCR *dcr) if (!read_block_from_dev(dcr, 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->bstrerror()); + dev->print_name(), strerror_dev(dev)); Dmsg1(30, "%s", jcr->errmsg); } else if (!read_record_from_block(block, record)) { Mmsg(jcr->errmsg, _("Could not read Volume label from block.\n")); Dmsg1(30, "%s", jcr->errmsg); } else if (!unser_volume_label(dev, record)) { Mmsg(jcr->errmsg, _("Could not unserialize Volume label: ERR=%s\n"), - dev->bstrerror()); + strerror_dev(dev)); Dmsg1(30, "%s", jcr->errmsg); } else if (strcmp(dev->VolHdr.Id, BaculaId) != 0 && strcmp(dev->VolHdr.Id, OldBaculaId) != 0) { @@ -289,6 +287,8 @@ bool write_volume_label_to_block(DCR *dcr) * after the label will be destroyed, * in fact, we write the label 5 times !!!! * + * This routine expects that open_device() was previously called. + * * This routine should be used only when labeling a blank tape. */ bool write_new_volume_label_to_dev(DCR *dcr, const char *VolName, const char *PoolName) @@ -300,16 +300,13 @@ bool write_new_volume_label_to_dev(DCR *dcr, const char *VolName, const char *Po empty_block(dcr->block); if (dev->open(dcr, OPEN_READ_WRITE) < 0) { - /* If device is not tape, attempt to create it */ - if (dev->is_tape() || dev->open(dcr, CREATE_READ_WRITE) < 0) { - goto bail_out; - } + goto bail_out; } Dmsg1(150, "Label type=%d\n", dev->label_type); if (!dev->rewind(dcr)) { free_volume(dev); memset(&dev->VolHdr, 0, sizeof(dev->VolHdr)); - Dmsg2(30, "Bad status on %s from rewind: ERR=%s\n", dev->print_name(), dev->bstrerror()); + Dmsg2(30, "Bad status on %s from rewind: ERR=%s\n", dev->print_name(), strerror_dev(dev)); if (!forge_on) { goto bail_out; } @@ -338,7 +335,7 @@ bool write_new_volume_label_to_dev(DCR *dcr, const char *VolName, const char *Po /* Temporarily mark in append state to enable writing */ dev->set_append(); if (!write_record_to_block(dcr->block, dcr->rec)) { - Dmsg2(30, "Bad Label write on %s: ERR=%s\n", dev->print_name(), dev->bstrerror()); + Dmsg2(30, "Bad Label write on %s: ERR=%s\n", dev->print_name(), strerror_dev(dev)); goto bail_out; } else { Dmsg2(30, "Wrote label of %d bytes to %s\n", dcr->rec->data_len, dev->print_name()); @@ -346,7 +343,7 @@ bool write_new_volume_label_to_dev(DCR *dcr, const char *VolName, const char *Po Dmsg0(99, "Call write_block_to_dev()\n"); if (!write_block_to_dev(dcr)) { - Dmsg2(30, "Bad Label write on %s: ERR=%s\n", dev->print_name(), dev->bstrerror()); + Dmsg2(30, "Bad Label write on %s: ERR=%s\n", dev->print_name(), strerror_dev(dev)); goto bail_out; } Dmsg0(99, " Wrote block to device\n"); @@ -401,12 +398,12 @@ bool rewrite_volume_label(DCR *dcr, bool recycle) if (!dev_cap(dev, CAP_STREAM)) { if (!dev->rewind(dcr)) { Jmsg2(jcr, M_WARNING, 0, _("Rewind error on device %s: ERR=%s\n"), - dev->print_name(), dev->bstrerror()); + dev->print_name(), strerror_dev(dev)); } if (recycle) { - if (!dev->truncate(dcr)) { + if (!truncate_dev(dcr)) { Jmsg2(jcr, M_WARNING, 0, _("Truncate error on device %s: ERR=%s\n"), - dev->print_name(), dev->bstrerror()); + dev->print_name(), strerror_dev(dev)); } } @@ -428,7 +425,7 @@ bool rewrite_volume_label(DCR *dcr, bool recycle) Dmsg1(200, "Attempt to write to device fd=%d.\n", dev->fd); if (!write_block_to_dev(dcr)) { Jmsg2(jcr, M_ERROR, 0, _("Unable to write device %s: ERR=%s\n"), - dev->print_name(), dev->bstrerror()); + dev->print_name(), strerror_dev(dev)); Dmsg0(200, "===ERROR write block to dev\n"); return false; } diff --git a/bacula/src/stored/mac.c b/bacula/src/stored/mac.c deleted file mode 100644 index aedbf100b4..0000000000 --- a/bacula/src/stored/mac.c +++ /dev/null @@ -1,209 +0,0 @@ -/* - * SD -- mac.c -- responsible for doing - * migration, archive, and copy jobs. - * - * Kern Sibbald, January MMVI - * - * Version $Id$ - */ -/* - Copyright (C) 2006 Kern Sibbald - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as amended with additional clauses defined in the - file LICENSE in the main source directory. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - the file LICENSE for additional details. - - */ - -#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->JobType) { - case JT_MIGRATE: - Type = "Migration"; - break; - case JT_ARCHIVE: - Type = "Archive"; - break; - case JT_COPY: - Type = "Copy"; - break; - default: - Type = "Unknown"; - break; - } - - - Dmsg0(20, "Start read data.\n"); - - - create_restore_volume_list(jcr); - if (jcr->NumVolumes == 0) { - Jmsg(jcr, M_FATAL, 0, _("No Volume names found for %s.\n"), Type); - free_restore_volume_list(jcr); - return false; - } - - Dmsg3(200, "Found %d volumes names for %s. First=%s\n", jcr->NumVolumes, - jcr->VolList->VolumeName, Type); - - /* Ready device for reading */ - if (!acquire_device_for_read(jcr->read_dcr)) { - ok = false; - goto bail_out; - } - - if (!acquire_device_for_append(jcr->dcr)) { - set_jcr_job_status(jcr, JS_ErrorTerminated); - ok = false; - goto bail_out; - } - jcr->dcr->VolFirstIndex = jcr->dcr->VolLastIndex = 0; - jcr->run_time = time(NULL); - - ok = read_records(jcr->read_dcr, record_cb, mount_next_read_volume); - -bail_out: - - dev = jcr->dcr->dev; - if (ok || dev->can_write()) { - /* Flush out final partial block of this session */ - if (!write_block_to_device(jcr->dcr)) { - 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; - } - } - - - 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 (!release_device(jcr->read_dcr)) { - ok = false; - } - - free_restore_volume_list(jcr); - - - if (!ok || job_canceled(jcr)) { - discard_attribute_spool(jcr); - } else { - commit_attribute_spool(jcr); - } - - dir_send_job_status(jcr); /* update director */ - - - Dmsg0(30, "Done reading.\n"); - jcr->end_time = time(NULL); - dequeue_messages(jcr); /* send any queued messages */ - if (ok) { - set_jcr_job_status(jcr, JS_Terminated); - } - generate_daemon_event(jcr, "JobEnd"); - bnet_fsend(dir, Job_end, jcr->Job, jcr->JobStatus, jcr->JobFiles, - edit_uint64(jcr->JobBytes, ec1)); - Dmsg4(400, Job_end, jcr->Job, jcr->JobStatus, jcr->JobFiles, ec1); - - bnet_sig(dir, BNET_EOD); /* send EOD to Director daemon */ - - 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) -{ - bool ok = true; - JCR *jcr = dcr->jcr; - char buf1[100], buf2[100]; - int32_t stream; - - switch (rec->FileIndex) { - case PRE_LABEL: - case VOL_LABEL: - case EOT_LABEL: - return true; /* don't write vol labels */ - } - rec->VolSessionId = jcr->VolSessionId; - rec->VolSessionTime = jcr->VolSessionTime; - Dmsg4(850, "before writ_rec FI=%d SessId=%d Strm=%s len=%d\n", - rec->FileIndex, rec->VolSessionId, - stream_to_ascii(buf1, rec->Stream,rec->FileIndex), - rec->data_len); - - while (!write_record_to_block(jcr->dcr->block, rec)) { - Dmsg2(850, "!write_record_to_block data_len=%d rem=%d\n", rec->data_len, - rec->remainder); - if (!write_block_to_device(jcr->dcr)) { - DEVICE *dev = jcr->dcr->dev; - 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; - } - } - jcr->JobBytes += rec->data_len; /* increment bytes this job */ - if (rec->FileIndex > 0) { - jcr->JobFiles = rec->FileIndex; - } - Dmsg4(850, "write_record FI=%s SessId=%d Strm=%s len=%d\n", - FI_to_ascii(buf1, rec->FileIndex), rec->VolSessionId, - stream_to_ascii(buf2, rec->Stream, rec->FileIndex), rec->data_len); - - /* Send attributes and digest to Director for Catalog */ - stream = rec->Stream; - if (stream == STREAM_UNIX_ATTRIBUTES || stream == STREAM_UNIX_ATTRIBUTES_EX || - crypto_digest_stream_type(stream) != CRYPTO_DIGEST_NONE) { - if (!jcr->no_attributes) { - if (are_attributes_spooled(jcr)) { - jcr->dir_bsock->spool = true; - } - Dmsg0(850, "Send attributes to dir.\n"); - if (!dir_update_file_attributes(jcr->dcr, rec)) { - jcr->dir_bsock->spool = false; - Jmsg(jcr, M_FATAL, 0, _("Error updating file attributes. ERR=%s\n"), - bnet_strerror(jcr->dir_bsock)); - return false; - } - jcr->dir_bsock->spool = false; - } - } - - return ok; -} diff --git a/bacula/src/stored/mount.c b/bacula/src/stored/mount.c index 8b86db484b..65100cdcc0 100644 --- a/bacula/src/stored/mount.c +++ b/bacula/src/stored/mount.c @@ -8,7 +8,7 @@ * Version $Id$ */ /* - Copyright (C) 2002-2006 Kern Sibbald + Copyright (C) 2002-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -26,14 +26,6 @@ #include "stored.h" /* pull in Storage Deamon headers */ static void mark_volume_not_inchanger(DCR *dcr); -static int try_autolabel(DCR *dcr); - -enum { - try_next_vol = 1, - try_read_vol, - try_error, - try_default -}; /* * If release is set, we rewind the current volume, @@ -55,10 +47,8 @@ bool mount_next_write_volume(DCR *dcr, bool release) DEVICE *dev = dcr->dev; JCR *jcr = dcr->jcr; DEV_BLOCK *block = dcr->block; - int mode; - Dmsg2(150, "Enter mount_next_volume(release=%d) dev=%s\n", release, - dev->print_name()); + Dmsg1(150, "Enter mount_next_volume(release=%d)\n", release); init_device_wait_timers(dcr); @@ -133,12 +123,12 @@ mount_next_vol: * and read the label. If there is no tape in the drive, * we will err, recurse and ask the operator the next time. */ - if (!release && dev->is_tape() && dev->has_cap(CAP_AUTOMOUNT)) { + if (!release && dev->is_tape() && dev_cap(dev, CAP_AUTOMOUNT)) { Dmsg0(150, "(1)Ask=0\n"); ask = false; /* don't ask SYSOP this time */ } /* Don't ask if not removable */ - if (!dev->is_removable()) { + if (!dev_cap(dev, CAP_REM)) { Dmsg0(150, "(2)Ask=0\n"); ask = false; } @@ -154,30 +144,15 @@ mount_next_vol: } Dmsg1(150, "want vol=%s\n", dcr->VolumeName); - if (dev->poll && dev->has_cap(CAP_CLOSEONPOLL)) { - dev->close(); + if (dev->poll && dev_cap(dev, CAP_CLOSEONPOLL)) { + force_close_device(dev); } /* Ensure the device is open */ - if (dev_cap(dev, CAP_STREAM)) { - mode = OPEN_WRITE_ONLY; - } else { - mode = OPEN_READ_WRITE; - } - while (dev->open(dcr, mode) < 0) { - Dmsg0(150, "open_device failed\n"); - if (dev->is_file() && dev->is_removable()) { - Dmsg0(150, "call scan_dir_for_vol\n"); - if (dev->scan_dir_for_volume(dcr)) { - break; /* got a valid volume */ - } - } - if (try_autolabel(dcr) == try_read_vol) { - break; /* created a new volume label */ - } + if (!open_device(dcr)) { /* If DVD, ignore the error, very often you cannot open the device * (when there is no DVD, or when the one inserted is a wrong one) */ - if (dev->poll || dev->is_dvd() || dev->is_removable()) { + if ((dev->poll) || (dev->is_dvd())) { goto mount_next_vol; } else { return false; @@ -192,7 +167,7 @@ read_volume: * If we are writing to a stream device, ASSUME the volume label * is correct. */ - if (dev->has_cap(CAP_STREAM)) { + if (dev_cap(dev, CAP_STREAM)) { vol_label_status = VOL_OK; create_volume_label(dev, dcr->VolumeName, "Default"); dev->VolHdr.LabelType = PRE_LABEL; @@ -219,7 +194,7 @@ read_volume: VOLUME_CAT_INFO VolCatInfo, devVolCatInfo; /* If not removable, Volume is broken */ - if (!dev->is_removable()) { + if (!dev_cap(dev, CAP_REM)) { Jmsg(jcr, M_WARNING, 0, _("Volume \"%s\" not on device %s.\n"), dcr->VolumeName, dev->print_name()); mark_volume_in_error(dcr); @@ -230,7 +205,8 @@ read_volume: /* If polling and got a previous bad name, ignore it */ if (dev->poll && strcmp(dev->BadVolName, dev->VolHdr.VolumeName) == 0) { ask = true; - Dmsg1(200, "Vol Name error supress due to poll. Name=%s\n", dcr->VolumeName); + Dmsg1(200, "Vol Name error supress due to poll. Name=%s\n", + dcr->VolumeName); goto mount_next_vol; } /* @@ -244,19 +220,20 @@ read_volume: /* Check if this is a valid Volume in the pool */ bstrncpy(dcr->VolumeName, dev->VolHdr.VolumeName, sizeof(dcr->VolumeName)); if (!dir_get_volume_info(dcr, GET_VOL_INFO_FOR_WRITE)) { - /* Restore desired volume name, note device info out of sync */ - /* This gets the info regardless of the Pool */ + /* Saved bad volume name */ + bstrncpy(dev->BadVolName, dev->VolHdr.VolumeName, sizeof(dev->BadVolName)); + Jmsg(jcr, M_WARNING, 0, _("Director wanted Volume \"%s\" for device %s.\n" + " Current Volume \"%s\" not acceptable because:\n" + " %s"), + VolCatInfo.VolCatName, dev->print_name(), + dev->VolHdr.VolumeName, jcr->dir_bsock->msg); + /* This gets the info regardless of the Pool so we can change chgr status */ bstrncpy(dcr->VolumeName, dev->VolHdr.VolumeName, sizeof(dcr->VolumeName)); if (autochanger && !dir_get_volume_info(dcr, GET_VOL_INFO_FOR_READ)) { mark_volume_not_inchanger(dcr); } + /* Restore original info */ memcpy(&dev->VolCatInfo, &devVolCatInfo, sizeof(dev->VolCatInfo)); - bstrncpy(dev->BadVolName, dev->VolHdr.VolumeName, sizeof(dev->BadVolName)); - Jmsg(jcr, M_WARNING, 0, _("Director wanted Volume \"%s\".\n" - " Current Volume \"%s\" not acceptable because:\n" - " %s"), - VolCatInfo.VolCatName, dev->VolHdr.VolumeName, - jcr->dir_bsock->msg); ask = true; goto mount_next_vol; } @@ -278,17 +255,49 @@ read_volume: } /* Fall through wanted */ case VOL_NO_LABEL: - switch (try_autolabel(dcr)) { - case try_next_vol: + /* + * If permitted, we label the device, make sure we can do + * it by checking that the VolCatBytes is zero => not labeled, + * once the Volume is labeled we don't want to label another + * blank tape with the same name. For disk, we go ahead and + * label it anyway, because the OS insures that there is only + * one Volume with that name. + * As noted above, at this point dcr->VolCatInfo has what + * the Director wants and dev->VolCatInfo has info on the + * previous tape (or nothing). + */ + if (dev_cap(dev, CAP_LABEL) && (dcr->VolCatInfo.VolCatBytes == 0 || + (!dev->is_tape() && strcmp(dcr->VolCatInfo.VolCatStatus, + "Recycle") == 0))) { + Dmsg0(150, "Create volume label\n"); + /* Create a new Volume label and write it to the device */ + if (!write_new_volume_label_to_dev(dcr, dcr->VolumeName, + dcr->pool_name)) { + Dmsg0(150, "!write_vol_label\n"); + mark_volume_in_error(dcr); + goto mount_next_vol; + } + Dmsg0(150, "dir_update_vol_info. Set Append\n"); + /* Copy Director's info into the device info */ + memcpy(&dev->VolCatInfo, &dcr->VolCatInfo, sizeof(dev->VolCatInfo)); + if (!dir_update_volume_info(dcr, true)) { /* indicate tape labeled */ + return false; + } + Jmsg(jcr, M_INFO, 0, _("Labeled new Volume \"%s\" on device %s.\n"), + dcr->VolumeName, dev->print_name()); + goto read_volume; /* read label we just wrote */ + } + if (!dev_cap(dev, CAP_LABEL) && dcr->VolCatInfo.VolCatBytes == 0) { + Jmsg(jcr, M_INFO, 0, _("Warning device %s not configured to autolabel Volumes.\n"), + dev->print_name()); + } + /* If not removable, Volume is broken */ + if (!dev_cap(dev, CAP_REM)) { + Jmsg(jcr, M_WARNING, 0, _("Volume \"%s\" not on device %s.\n"), + dcr->VolumeName, dev->print_name()); + mark_volume_in_error(dcr); goto mount_next_vol; - case try_read_vol: - goto read_volume; - case try_error: - return false; - case try_default: - break; } - /* NOTE! Fall-through wanted. */ case VOL_NO_MEDIA: default: @@ -301,7 +310,7 @@ read_volume: ask = true; /* Needed, so the medium can be changed */ if (dev->requires_mount()) { - dev->close(); + close_device(dev); } goto mount_next_vol; } @@ -333,9 +342,9 @@ read_volume: Dmsg0(200, "Device previously written, moving to end of data\n"); Jmsg(jcr, M_INFO, 0, _("Volume \"%s\" previously written, moving to end of data.\n"), dcr->VolumeName); - if (!dev->eod()) { + if (!eod_dev(dev)) { Jmsg(jcr, M_ERROR, 0, _("Unable to position to end of data on device %s: ERR=%s\n"), - dev->print_name(), dev->bstrerror()); + dev->print_name(), strerror_dev(dev)); mark_volume_in_error(dcr); goto mount_next_vol; } @@ -395,60 +404,10 @@ read_volume: empty_block(block); /* we used it for reading so set for write */ } dev->set_append(); - Dmsg1(150, "set APPEND, normal return from mount_next_write_volume. dev=%s\n", - dev->print_name()); - + Dmsg0(150, "set APPEND, normal return from read_dev_for_append\n"); return true; } -/* - * If permitted, we label the device, make sure we can do - * it by checking that the VolCatBytes is zero => not labeled, - * once the Volume is labeled we don't want to label another - * blank tape with the same name. For disk, we go ahead and - * label it anyway, because the OS insures that there is only - * one Volume with that name. - * As noted above, at this point dcr->VolCatInfo has what - * the Director wants and dev->VolCatInfo has info on the - * previous tape (or nothing). - */ -static int try_autolabel(DCR *dcr) -{ - DEVICE *dev = dcr->dev; - if (dev->has_cap(CAP_LABEL) && (dcr->VolCatInfo.VolCatBytes == 0 || - (!dev->is_tape() && strcmp(dcr->VolCatInfo.VolCatStatus, - "Recycle") == 0))) { - Dmsg0(150, "Create volume label\n"); - /* Create a new Volume label and write it to the device */ - if (!write_new_volume_label_to_dev(dcr, dcr->VolumeName, - dcr->pool_name)) { - Dmsg0(150, "!write_vol_label\n"); - mark_volume_in_error(dcr); - return try_next_vol; - } - Dmsg0(150, "dir_update_vol_info. Set Append\n"); - /* Copy Director's info into the device info */ - memcpy(&dev->VolCatInfo, &dcr->VolCatInfo, sizeof(dev->VolCatInfo)); - if (!dir_update_volume_info(dcr, true)) { /* indicate tape labeled */ - return try_error; - } - Jmsg(dcr->jcr, M_INFO, 0, _("Labeled new Volume \"%s\" on device %s.\n"), - dcr->VolumeName, dev->print_name()); - return try_read_vol; /* read label we just wrote */ - } - if (!dev->has_cap(CAP_LABEL) && dcr->VolCatInfo.VolCatBytes == 0) { - Jmsg(dcr->jcr, M_INFO, 0, _("Warning device %s not configured to autolabel Volumes.\n"), - dev->print_name()); - } - /* If not removable, Volume is broken */ - if (!dev->is_removable()) { - Jmsg(dcr->jcr, M_WARNING, 0, _("Volume \"%s\" not on device %s.\n"), - dcr->VolumeName, dev->print_name()); - mark_volume_in_error(dcr); - return try_next_vol; - } - return try_default; -} /* @@ -512,12 +471,13 @@ void release_volume(DCR *dcr) dcr->VolumeName[0] = 0; if (dev->is_open() && (!dev->is_tape() || !dev_cap(dev, CAP_ALWAYSOPEN))) { - dev->close(); + offline_or_rewind_dev(dev); + close_device(dev); } /* If we have not closed the device, then at least rewind the tape */ if (dev->is_open()) { - dev->offline_or_rewind(); + offline_or_rewind_dev(dev); } Dmsg0(190, "release_volume\n"); } @@ -535,7 +495,8 @@ bool mount_next_read_volume(DCR *dcr) * End Of Tape -- mount next Volume (if another specified) */ if (jcr->NumVolumes > 1 && jcr->CurVolume < jcr->NumVolumes) { - dev->close(); + close_device(dev); + dev->clear_read(); if (!acquire_device_for_read(dcr)) { Jmsg2(jcr, M_FATAL, 0, _("Cannot open Dev=%s, Vol=%s\n"), dev->print_name(), dcr->VolumeName); diff --git a/bacula/src/stored/protos.h b/bacula/src/stored/protos.h index 7b7da1390e..ea2367e2b8 100644 --- a/bacula/src/stored/protos.h +++ b/bacula/src/stored/protos.h @@ -23,7 +23,7 @@ uint32_t new_VolSessionId(); /* From acquire.c */ DCR *acquire_device_for_append(DCR *dcr); -bool acquire_device_for_read(DCR *dcr); +DCR *acquire_device_for_read(DCR *dcr); bool release_device(DCR *dcr); DCR *new_dcr(JCR *jcr, DEVICE *dev); void free_dcr(DCR *dcr); @@ -91,6 +91,7 @@ void clrerror_dev(DEVICE *dev, int func); bool update_pos_dev(DEVICE *dev); bool rewind_dev(DEVICE *dev); bool load_dev(DEVICE *dev); +bool offline_dev(DEVICE *dev); int flush_dev(DEVICE *dev); int weof_dev(DEVICE *dev, int num); int write_block(DEVICE *dev); @@ -98,9 +99,12 @@ uint32_t status_dev(DEVICE *dev); bool eod_dev(DEVICE *dev); bool fsf_dev(DEVICE *dev, int num); bool bsf_dev(DEVICE *dev, int num); +bool bsr_dev(DEVICE *dev, int num); void attach_jcr_to_device(DEVICE *dev, JCR *jcr); void detach_jcr_from_device(DEVICE *dev, JCR *jcr); JCR *next_attached_jcr(DEVICE *dev, JCR *jcr); +bool offline_or_rewind_dev(DEVICE *dev); +bool reposition_dev(DEVICE *dev, uint32_t file, uint32_t block); void init_device_wait_timers(DCR *dcr); void init_jcr_device_wait_timers(JCR *jcr); bool double_dev_wait_time(DEVICE *dev); @@ -114,16 +118,18 @@ uint32_t dev_file(DEVICE *dev); int dvd_open_next_part(DCR *dcr); bool dvd_write_part(DCR *dcr); bool dvd_close_job(DCR *dcr); -bool mount_dvd(DEVICE* dev, int timeout); -bool unmount_dvd(DEVICE* dev, int timeout); +bool mount_dev(DEVICE* dev, int timeout); +bool unmount_dev(DEVICE* dev, int timeout); void update_free_space_dev(DEVICE *dev); void make_mounted_dvd_filename(DEVICE *dev, POOL_MEM &archive_name); void make_spooled_dvd_filename(DEVICE *dev, POOL_MEM &archive_name); -bool truncate_dvd(DCR *dcr); +bool truncate_dvd_dev(DCR *dcr); bool check_can_write_on_non_blank_dvd(DCR *dcr); /* From device.c */ bool open_device(DCR *dcr); +void close_device(DEVICE *dev); +void force_close_device(DEVICE *dev); bool first_open_device(DCR *dcr); bool fixup_device_block_write_error(DCR *dcr); void _lock_device(const char *file, int line, DEVICE *dev); @@ -144,7 +150,7 @@ void *handle_connection_request(void *arg); /* From fd_cmds.c */ void run_job(JCR *jcr); -bool get_bootstrap_file(JCR *jcr, BSOCK *bsock); +bool bootstrap_cmd(JCR *jcr); /* From job.c */ void stored_free_jcr(JCR *jcr); @@ -208,12 +214,16 @@ bool read_records(DCR *dcr, bool mount_cb(DCR *dcr)); /* From reserve.c */ +void init_reservations_lock(); +void term_reservations_lock(); +void lock_reservations(); +void unlock_reservations(); void release_volume(DCR *dcr); VOLRES *new_volume(DCR *dcr, const char *VolumeName); VOLRES *find_volume(const char *VolumeName); bool free_volume(DEVICE *dev); void free_unused_volume(DCR *dcr); -void init_volume_list(); +void create_volume_list(); void free_volume_list(); void list_volumes(BSOCK *user); bool is_volume_in_use(DCR *dcr); @@ -222,7 +232,6 @@ bool find_suitable_device_for_job(JCR *jcr, RCTX &rctx); int search_res_for_device(RCTX &rctx); void release_msgs(JCR *jcr); - /* From spool.c */ bool begin_data_spool (DCR *dcr); bool discard_data_spool (DCR *dcr); diff --git a/bacula/src/stored/read.c b/bacula/src/stored/read.c index 412b4a20b7..2eb3518665 100644 --- a/bacula/src/stored/read.c +++ b/bacula/src/stored/read.c @@ -6,7 +6,7 @@ * Version $Id$ */ /* - Copyright (C) 2000-2006 Kern Sibbald + Copyright (C) 2000-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -75,7 +75,7 @@ bool do_read_data(JCR *jcr) /* Send end of data to FD */ bnet_sig(fd, BNET_EOD); - if (!release_device(jcr->read_dcr)) { + if (!release_device(dcr)) { ok = false; } diff --git a/bacula/src/stored/read_record.c b/bacula/src/stored/read_record.c index f450574132..a3cdbbfbe0 100644 --- a/bacula/src/stored/read_record.c +++ b/bacula/src/stored/read_record.c @@ -14,7 +14,7 @@ * Version $Id$ */ /* - Copyright (C) 2000-2006 Kern Sibbald + Copyright (C) 2000-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -86,11 +86,6 @@ bool read_records(DCR *dcr, break; } jcr->mount_next_volume = false; - /* - * The Device can change at the end of a tape, so refresh it - * from the dcr. - */ - dev = dcr->dev; /* * We just have a new tape up, now read the label (first record) * and pass it off to the callback routine, then continue @@ -107,10 +102,10 @@ bool read_records(DCR *dcr, } else if (dev->at_eof()) { if (verbose) { - Jmsg(jcr, M_INFO, 0, _("Got EOF at file %u on device %s, Volume \"%s\"\n"), + Jmsg(jcr, M_INFO, 0, _("End of file %u on device %s, Volume \"%s\"\n"), dev->file, dev->print_name(), dcr->VolumeName); } - Dmsg3(200, "Got EOF at file %u on device %s, Volume \"%s\"\n", + 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()) { @@ -210,7 +205,7 @@ bool read_records(DCR *dcr, Dmsg2(300, "All done=(file:block) %u:%u\n", dev->file, dev->block_num); break; } else if (stat == 0) { /* no match */ - Dmsg4(300, "BSR no match: clear rem=%d FI=%d before set_eof pos %u:%u\n", + Dmsg4(300, "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 &= ~REC_PARTIAL_RECORD; @@ -228,7 +223,7 @@ bool read_records(DCR *dcr, break; /* read second part of record */ } ok = record_cb(dcr, rec); - if (crypto_digest_stream_type(rec->Stream) != CRYPTO_DIGEST_NONE) { + if (rec->Stream == STREAM_MD5_SIGNATURE || rec->Stream == STREAM_SHA1_SIGNATURE) { Dmsg3(300, "Done FI=%u before set_eof pos %u:%u\n", rec->FileIndex, dev->file, dev->block_num); if (match_set_eof(jcr->bsr, rec) && try_repositioning(jcr, rec, dev)) { @@ -285,7 +280,7 @@ static bool try_repositioning(JCR *jcr, DEV_RECORD *rec, DEVICE *dev) Dmsg4(300, "Try_Reposition from (file:block) %u:%u to %u:%u\n", dev->file, dev->block_num, bsr->volfile->sfile, bsr->volblock->sblock); - dev->reposition(bsr->volfile->sfile, bsr->volblock->sblock); + reposition_dev(dev, bsr->volfile->sfile, bsr->volblock->sblock); rec->Block = 0; } return false; @@ -309,7 +304,7 @@ static BSR *position_to_first_file(JCR *jcr, DEVICE *dev) bsr->volfile->sfile, bsr->volblock->sblock); Dmsg2(300, "Forward spacing to file:block %u:%u.\n", bsr->volfile->sfile, bsr->volblock->sblock); - dev->reposition(bsr->volfile->sfile, bsr->volblock->sblock); + reposition_dev(dev, bsr->volfile->sfile, bsr->volblock->sblock); } } return bsr; diff --git a/bacula/src/stored/record.c b/bacula/src/stored/record.c index 130a2884b7..522c50a49b 100644 --- a/bacula/src/stored/record.c +++ b/bacula/src/stored/record.c @@ -115,18 +115,6 @@ const char *stream_to_ascii(char *buf, int stream, int fi) 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_WIN32_DATA: - return "ENCRYPTED-WIN32-DATA"; - case STREAM_ENCRYPTED_WIN32_GZIP_DATA: - return "ENCRYPTED-WIN32-GZIP"; - case STREAM_ENCRYPTED_MACOS_FORK_DATA: - return "ENCRYPTED-MACOS-RSRC"; case -STREAM_UNIX_ATTRIBUTES: return "contUATTR"; case -STREAM_FILE_DATA: @@ -161,18 +149,6 @@ const char *stream_to_ascii(char *buf, int stream, int fi) 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_WIN32_DATA: - return "contENCRYPTED-WIN32-DATA"; - case -STREAM_ENCRYPTED_WIN32_GZIP_DATA: - return "contENCRYPTED-WIN32-GZIP"; - case -STREAM_ENCRYPTED_MACOS_FORK_DATA: - return "contENCRYPTED-MACOS-RSRC"; default: sprintf(buf, "%d", stream); return buf; diff --git a/bacula/src/stored/reserve.c b/bacula/src/stored/reserve.c index dd38158e44..1859001811 100644 --- a/bacula/src/stored/reserve.c +++ b/bacula/src/stored/reserve.c @@ -26,10 +26,8 @@ #include "bacula.h" #include "stored.h" - static dlist *vol_list = NULL; static pthread_mutex_t vol_list_lock = PTHREAD_MUTEX_INITIALIZER; -static pthread_mutex_t search_lock = PTHREAD_MUTEX_INITIALIZER; /* Forward referenced functions */ static int can_reserve_drive(DCR *dcr, RCTX &rctx); @@ -67,6 +65,45 @@ static int my_compare(void *item1, void *item2) return strcmp(((VOLRES *)item1)->vol_name, ((VOLRES *)item2)->vol_name); } +static brwlock_t reservation_lock; + +void init_reservations_lock() +{ + int errstat; + if ((errstat=rwl_init(&reservation_lock)) != 0) { + berrno be; + Emsg1(M_ABORT, 0, _("Unable to initialize reservation lock. ERR=%s\n"), + be.strerror(errstat)); + } + +} + +void term_reservations_lock() +{ + rwl_destroy(&reservation_lock); +} + +/* This applies to a drive and to Volumes */ +void lock_reservations() +{ + int errstat; + if ((errstat=rwl_writelock(&reservation_lock)) != 0) { + berrno be; + Emsg2(M_ABORT, 0, "rwl_writelock failure. stat=%d: ERR=%s\n", + errstat, be.strerror(errstat)); + } +} + +void unlock_reservations() +{ + int errstat; + if ((errstat=rwl_writeunlock(&reservation_lock)) != 0) { + berrno be; + Emsg2(M_ABORT, 0, "rwl_writeunlock failure. stat=%d: ERR=%s\n", + errstat, be.strerror(errstat)); + } +} + /* * Put a new Volume entry in the Volume list. This @@ -81,6 +118,12 @@ VOLRES *new_volume(DCR *dcr, const char *VolumeName) VOLRES *vol, *nvol; Dmsg1(400, "new_volume %s\n", VolumeName); + /* + * We lock the reservations system here to ensure + * when adding a new volume that no newly scheduled + * job can reserve it. + */ + lock_reservations(); P(vol_list_lock); if (dcr->dev) { again: @@ -100,16 +143,27 @@ again: vol->vol_name = bstrdup(VolumeName); vol->dev = dcr->dev; vol->dcr = dcr; + Dmsg2(100, "New Vol=%s dev=%s\n", VolumeName, dcr->dev->print_name()); nvol = (VOLRES *)vol_list->binary_insert(vol, my_compare); if (nvol != vol) { free(vol->vol_name); free(vol); vol = NULL; if (dcr->dev) { - nvol->dev = dcr->dev; + DEVICE *dev = nvol->dev; + if (!dev->is_busy()) { + Dmsg3(100, "Swap vol=%s from dev=%s to %s\n", VolumeName, + dev->print_name(), dcr->dev->print_name()); + nvol->dev = dcr->dev; + dev->VolHdr.VolumeName[0] = 0; + } else { + Dmsg3(100, "!!!! could not swap vol=%s from dev=%s to %s\n", VolumeName, + dev->print_name(), dcr->dev->print_name()); + } } } V(vol_list_lock); + unlock_reservations(); return vol; } @@ -122,6 +176,7 @@ again: VOLRES *find_volume(const char *VolumeName) { VOLRES vol, *fvol; + /* Do not lock reservations here */ P(vol_list_lock); vol.vol_name = bstrdup(VolumeName); fvol = (VOLRES *)vol_list->binary_search(&vol, my_compare); @@ -140,8 +195,9 @@ bool free_volume(DEVICE *dev) { VOLRES vol, *fvol; - P(vol_list_lock); + P(vol_list_lock); if (dev->VolHdr.VolumeName[0] == 0) { + Dmsg1(100, "free_volume: no vol on dev %s\n", dev->print_name()); /* * Our device has no VolumeName listed, but * search the list for any Volume attached to @@ -151,6 +207,7 @@ bool free_volume(DEVICE *dev) if (fvol && fvol->dev == dev) { vol_list->remove(fvol); if (fvol->vol_name) { + Dmsg2(100, "free_volume %s dev=%s\n", fvol->vol_name, dev->print_name()); free(fvol->vol_name); } free(fvol); @@ -164,6 +221,7 @@ bool free_volume(DEVICE *dev) fvol = (VOLRES *)vol_list->binary_search(&vol, my_compare); if (fvol) { vol_list->remove(fvol); + Dmsg2(100, "free_volume %s dev=%s\n", fvol->vol_name, dev->print_name()); free(fvol->vol_name); free(fvol); } @@ -184,6 +242,7 @@ void free_unused_volume(DCR *dcr) if (vol->dcr == dcr && (vol->dev == NULL || strcmp(vol->vol_name, vol->dev->VolHdr.VolumeName) != 0)) { vol_list->remove(vol); + Dmsg1(100, "free_unused_olume %s\n", vol->vol_name); free(vol->vol_name); free(vol); break; @@ -198,6 +257,7 @@ void free_unused_volume(DCR *dcr) void list_volumes(BSOCK *user) { VOLRES *vol; + P(vol_list_lock); for (vol=(VOLRES *)vol_list->first(); vol; vol=(VOLRES *)vol_list->next(vol)) { if (vol->dev) { bnet_fsend(user, "%s on device %s\n", vol->vol_name, vol->dev->print_name()); @@ -205,10 +265,11 @@ void list_volumes(BSOCK *user) bnet_fsend(user, "%s\n", vol->vol_name); } } + V(vol_list_lock); } /* Create the Volume list */ -void init_volume_list() +void create_volume_list() { VOLRES *dummy = NULL; if (vol_list == NULL) { @@ -223,29 +284,36 @@ void free_volume_list() if (!vol_list) { return; } + P(vol_list_lock); for (vol=(VOLRES *)vol_list->first(); vol; vol=(VOLRES *)vol_list->next(vol)) { Dmsg3(000, "Unreleased Volume=%s dcr=0x%x dev=0x%x\n", vol->vol_name, vol->dcr, vol->dev); } delete vol_list; vol_list = NULL; + V(vol_list_lock); } bool is_volume_in_use(DCR *dcr) { VOLRES *vol = find_volume(dcr->VolumeName); if (!vol) { + Dmsg1(100, "Vol=%s not in use.\n", dcr->VolumeName); return false; /* vol not in list */ } if (!vol->dev) { /* vol not attached to device */ + Dmsg1(100, "Vol=%s has no dev.\n", dcr->VolumeName); return false; } if (dcr->dev == vol->dev) { /* same device OK */ + Dmsg1(100, "Vol=%s on same dev.\n", dcr->VolumeName); return false; } if (!vol->dev->is_busy()) { + Dmsg2(100, "Vol=%s dev=%s not busy.\n", dcr->VolumeName, vol->dev->print_name()); return false; } + Dmsg2(100, "Vol=%s used by %s.\n", dcr->VolumeName, vol->dev->print_name()); return true; } @@ -320,11 +388,11 @@ static bool use_storage_cmd(JCR *jcr) /* ***FIXME**** remove after 1.38 release */ char *device_name; foreach_alist(store, jcr->dirstore) { - Dmsg5(100, "Storage=%s media_type=%s pool=%s pool_type=%s append=%d\n", + Dmsg5(110, "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(100, " Device=%s\n", device_name); + Dmsg1(110, " Device=%s\n", device_name); } } #endif @@ -341,9 +409,10 @@ static bool use_storage_cmd(JCR *jcr) */ if (ok) { bool first = true; /* print wait message once */ + bool fail = false; rctx.notify_dir = true; - for ( ; !job_canceled(jcr); ) { - P(search_lock); /* only one thread at a time */ + lock_reservations(); + for ( ; !fail && !job_canceled(jcr); ) { while ((msg = (char *)msgs->pop())) { free(msg); } @@ -357,7 +426,7 @@ static bool use_storage_cmd(JCR *jcr) rctx.PreferMountedVols = false; rctx.exact_match = false; rctx.autochanger_only = true; - Dmsg5(100, "PrefMnt=%d exact=%d suitable=%d chgronly=%d any=%d\n", + Dmsg5(110, "PrefMnt=%d exact=%d suitable=%d chgronly=%d any=%d\n", rctx.PreferMountedVols, rctx.exact_match, rctx.suitable_device, rctx.autochanger_only, rctx.any_drive); if ((ok = find_suitable_device_for_job(jcr, rctx))) { @@ -372,7 +441,7 @@ static bool use_storage_cmd(JCR *jcr) rctx.try_low_use_drive = false; } rctx.autochanger_only = false; - Dmsg5(100, "PrefMnt=%d exact=%d suitable=%d chgronly=%d any=%d\n", + Dmsg5(110, "PrefMnt=%d exact=%d suitable=%d chgronly=%d any=%d\n", rctx.PreferMountedVols, rctx.exact_match, rctx.suitable_device, rctx.autochanger_only, rctx.any_drive); if ((ok = find_suitable_device_for_job(jcr, rctx))) { @@ -383,7 +452,7 @@ static bool use_storage_cmd(JCR *jcr) rctx.PreferMountedVols = true; rctx.exact_match = true; rctx.autochanger_only = false; - Dmsg5(100, "PrefMnt=%d exact=%d suitable=%d chgronly=%d any=%d\n", + Dmsg5(110, "PrefMnt=%d exact=%d suitable=%d chgronly=%d any=%d\n", rctx.PreferMountedVols, rctx.exact_match, rctx.suitable_device, rctx.autochanger_only, rctx.any_drive); if ((ok = find_suitable_device_for_job(jcr, rctx))) { @@ -391,7 +460,7 @@ static bool use_storage_cmd(JCR *jcr) } /* Look for any mounted drive */ rctx.exact_match = false; - Dmsg5(100, "PrefMnt=%d exact=%d suitable=%d chgronly=%d any=%d\n", + Dmsg5(110, "PrefMnt=%d exact=%d suitable=%d chgronly=%d any=%d\n", rctx.PreferMountedVols, rctx.exact_match, rctx.suitable_device, rctx.autochanger_only, rctx.any_drive); if ((ok = find_suitable_device_for_job(jcr, rctx))) { @@ -399,53 +468,47 @@ static bool use_storage_cmd(JCR *jcr) } /* Try any drive */ rctx.any_drive = true; - Dmsg5(100, "PrefMnt=%d exact=%d suitable=%d chgronly=%d any=%d\n", + Dmsg5(110, "PrefMnt=%d exact=%d suitable=%d chgronly=%d any=%d\n", rctx.PreferMountedVols, rctx.exact_match, rctx.suitable_device, rctx.autochanger_only, rctx.any_drive); if ((ok = find_suitable_device_for_job(jcr, rctx))) { break; } - /* Unlock before possible wait */ - V(search_lock); + /* Keep reservations locked *except* during wait_for_device() */ + unlock_reservations(); if (!rctx.suitable_device || !wait_for_device(jcr, first)) { - break; /* Get out, failure ... */ + Dmsg0(100, "Fail. !suitable_device || !wait_for_device\n"); + fail = true; } + lock_reservations(); first = false; bnet_sig(dir, BNET_HEARTBEAT); /* Inform Dir that we are alive */ } - /* Note if !ok then search_lock is already cleared */ - if (ok) { - V(search_lock); - goto all_done; - } - - /* - * If we get here, there are no suitable devices available, which - * means nothing configured. If a device is suitable but busy - * with another Volume, we will not come here. - */ - if (verbose) { + unlock_reservations(); + if (!ok) { + /* + * If we get here, there are no suitable devices available, which + * means nothing configured. If a device is suitable but busy + * with another Volume, we will not come here. + */ unbash_spaces(dir->msg); pm_strcpy(jcr->errmsg, dir->msg); Jmsg(jcr, M_INFO, 0, _("Failed command: %s\n"), jcr->errmsg); - } - Jmsg(jcr, M_FATAL, 0, _("\n" - " Device \"%s\" with MediaType \"%s\" requested by DIR not found in SD Device resources.\n"), - dev_name.c_str(), media_type.c_str()); - bnet_fsend(dir, NO_device, dev_name.c_str()); + Jmsg(jcr, M_FATAL, 0, _("\n" + " Device \"%s\" with MediaType \"%s\" requested by DIR not found in SD Device resources.\n"), + dev_name.c_str(), media_type.c_str()); + bnet_fsend(dir, NO_device, dev_name.c_str()); - Dmsg1(100, ">dird: %s", dir->msg); + Dmsg1(100, ">dird: %s", dir->msg); + } } else { unbash_spaces(dir->msg); pm_strcpy(jcr->errmsg, dir->msg); - if (verbose) { - Jmsg(jcr, M_INFO, 0, _("Failed command: %s\n"), jcr->errmsg); - } + Jmsg(jcr, M_FATAL, 0, _("Failed command: %s\n"), jcr->errmsg); bnet_fsend(dir, BAD_use, jcr->errmsg); Dmsg1(100, ">dird: %s", dir->msg); } -all_done: release_msgs(jcr); return ok; } @@ -458,13 +521,13 @@ void release_msgs(JCR *jcr) if (!msgs) { return; } - P(search_lock); + lock_reservations(); while ((msg = (char *)msgs->pop())) { free(msg); } delete msgs; jcr->reserve_msgs = NULL; - V(search_lock); + unlock_reservations(); } /* @@ -480,7 +543,7 @@ bool find_suitable_device_for_job(JCR *jcr, RCTX &rctx) * For each storage device that the user specified, we * search and see if there is a resource for that device. */ - Dmsg4(100, "PrefMnt=%d exact=%d suitable=%d chgronly=%d\n", + Dmsg4(110, "PrefMnt=%d exact=%d suitable=%d chgronly=%d\n", rctx.PreferMountedVols, rctx.exact_match, rctx.suitable_device, rctx.autochanger_only); ok = false; @@ -495,10 +558,10 @@ bool find_suitable_device_for_job(JCR *jcr, RCTX &rctx) ok = true; break; } else if (stat == 0) { /* device busy */ - Dmsg1(100, "Suitable device found=%s, not used: busy\n", device_name); + Dmsg1(110, "Suitable device found=%s, not used: busy\n", device_name); } else { /* otherwise error */ - Dmsg0(100, "No suitable device found.\n"); + Dmsg0(110, "No suitable device found.\n"); } } if (ok) { @@ -520,7 +583,7 @@ int search_res_for_device(RCTX &rctx) bool ok; int stat; - Dmsg1(100, "Search res for %s\n", rctx.device_name); + Dmsg1(110, "Search res for %s\n", rctx.device_name); /* Look through Autochangers first */ foreach_res(changer, R_AUTOCHANGER) { Dmsg1(150, "Try match changer res=%s\n", changer->hdr.name); @@ -528,7 +591,7 @@ int search_res_for_device(RCTX &rctx) if (fnmatch(rctx.device_name, changer->hdr.name, 0) == 0) { /* Try each device in this AutoChanger */ foreach_alist(rctx.device, changer->device) { - Dmsg1(100, "Try changer device %s\n", rctx.device->hdr.name); + Dmsg1(110, "Try changer device %s\n", rctx.device->hdr.name); stat = reserve_device(rctx); if (stat != 1) { /* try another device */ continue; @@ -592,7 +655,7 @@ static int reserve_device(RCTX &rctx) const int name_len = MAX_NAME_LENGTH; /* Make sure MediaType is OK */ - Dmsg2(100, "MediaType device=%s request=%s\n", + Dmsg2(110, "MediaType device=%s request=%s\n", rctx.device->media_type, rctx.store->media_type); if (strcmp(rctx.device->media_type, rctx.store->media_type) != 0) { return -1; @@ -616,7 +679,7 @@ static int reserve_device(RCTX &rctx) } rctx.suitable_device = true; - Dmsg2(100, "Try reserve %s JobId=%u\n", rctx.device->hdr.name, + Dmsg2(110, "Try reserve %s JobId=%u\n", rctx.device->hdr.name, rctx.jcr->JobId); dcr = new_dcr(rctx.jcr, rctx.device->dev); if (!dcr) { @@ -659,7 +722,7 @@ static int reserve_device(RCTX &rctx) } if (!ok) { free_dcr(dcr); - Dmsg0(100, "Not OK.\n"); + Dmsg0(110, "Not OK.\n"); return 0; } return 1; @@ -679,7 +742,10 @@ static bool reserve_device_for_read(DCR *dcr) ASSERT(dcr); + /* Get locks in correct order */ + unlock_reservations(); P(dev->mutex); + lock_reservations(); if (is_device_unmounted(dev)) { Dmsg1(200, "Device %s is BLOCKED due to user unmount.\n", dev->print_name()); @@ -741,7 +807,7 @@ static bool reserve_device_for_append(DCR *dcr, RCTX &rctx) if (dev->can_read()) { Mmsg(jcr->errmsg, _("3603 JobId=%u device %s is busy reading.\n"), jcr->JobId, dev->print_name()); - Dmsg1(100, "%s", jcr->errmsg); + Dmsg1(110, "%s", jcr->errmsg); queue_reserve_message(jcr); goto bail_out; } @@ -750,16 +816,16 @@ static bool reserve_device_for_append(DCR *dcr, RCTX &rctx) if (is_device_unmounted(dev)) { Mmsg(jcr->errmsg, _("3604 JobId=%u device %s is BLOCKED due to user unmount.\n"), jcr->JobId, dev->print_name()); - Dmsg1(100, "%s", jcr->errmsg); + Dmsg1(110, "%s", jcr->errmsg); queue_reserve_message(jcr); goto bail_out; } - Dmsg1(100, "reserve_append device is %s\n", dev->is_tape()?"tape":"disk"); + Dmsg1(110, "reserve_append device is %s\n", dev->is_tape()?"tape":"disk"); /* Now do detailed tests ... */ if (can_reserve_drive(dcr, rctx) != 1) { - Dmsg0(100, "can_reserve_drive!=1\n"); + Dmsg0(110, "can_reserve_drive!=1\n"); goto bail_out; } @@ -784,7 +850,7 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx) DEVICE *dev = dcr->dev; JCR *jcr = dcr->jcr; - Dmsg5(100, "PrefMnt=%d exact=%d suitable=%d chgronly=%d any=%d\n", + Dmsg5(110, "PrefMnt=%d exact=%d suitable=%d chgronly=%d any=%d\n", rctx.PreferMountedVols, rctx.exact_match, rctx.suitable_device, rctx.autochanger_only, rctx.any_drive); @@ -797,7 +863,7 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx) * helps spread the load to the least used drives. */ if (rctx.try_low_use_drive && dev == rctx.low_use_drive) { - Dmsg3(100, "OK dev=%s == low_drive=%s. JobId=%u\n", + Dmsg3(110, "OK dev=%s == low_drive=%s. JobId=%u\n", dev->print_name(), rctx.low_use_drive->print_name(), jcr->JobId); return 1; } @@ -807,13 +873,13 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx) if ((dev->num_writers + dev->reserved_device) < rctx.num_writers) { rctx.num_writers = dev->num_writers + dev->reserved_device; rctx.low_use_drive = dev; - Dmsg2(100, "set low use drive=%s num_writers=%d\n", dev->print_name(), + Dmsg2(110, "set low use drive=%s num_writers=%d\n", dev->print_name(), rctx.num_writers); } else { - Dmsg1(100, "not low use num_writers=%d\n", dev->num_writers+ + Dmsg1(110, "not low use num_writers=%d\n", dev->num_writers+ dev->reserved_device); } - Dmsg1(100, "failed: !prefMnt && busy. JobId=%u\n", jcr->JobId); + Dmsg1(110, "failed: !prefMnt && busy. JobId=%u\n", jcr->JobId); Mmsg(jcr->errmsg, _("3605 JobId=%u wants free drive but device %s is busy.\n"), jcr->JobId, dev->print_name()); queue_reserve_message(jcr); @@ -825,7 +891,7 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx) Mmsg(jcr->errmsg, _("3606 JobId=%u wants mounted, but drive %s has no Volume.\n"), jcr->JobId, dev->print_name()); queue_reserve_message(jcr); - Dmsg1(100, "failed: want mounted -- no vol JobId=%u\n", jcr->JobId); + Dmsg1(110, "failed: want mounted -- no vol JobId=%u\n", jcr->JobId); return 0; /* No volume mounted */ } @@ -836,7 +902,7 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx) jcr->JobId, rctx.VolumeName, dev->VolHdr.VolumeName, dev->print_name()); queue_reserve_message(jcr); - Dmsg2(100, "failed: Not exact match have=%s want=%s\n", + Dmsg2(110, "failed: Not exact match have=%s want=%s\n", dev->VolHdr.VolumeName, rctx.VolumeName); return 0; } @@ -871,7 +937,7 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx) Mmsg(jcr->errmsg, _("3608 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" on drive %s.\n"), jcr->JobId, dcr->pool_name, dev->pool_name, dev->print_name()); queue_reserve_message(jcr); - Dmsg2(100, "failed: busy num_writers=0, reserved, pool=%s wanted=%s\n", + Dmsg2(110, "failed: busy num_writers=0, reserved, pool=%s wanted=%s\n", dev->pool_name, dcr->pool_name); return 0; /* wait */ } @@ -914,7 +980,7 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx) Mmsg(jcr->errmsg, _("3609 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" on drive %s.\n"), jcr->JobId, dcr->pool_name, dev->pool_name, dev->print_name()); queue_reserve_message(jcr); - Dmsg2(100, "failed: busy num_writers>0, can_append, pool=%s wanted=%s\n", + Dmsg2(110, "failed: busy num_writers>0, can_append, pool=%s wanted=%s\n", dev->pool_name, dcr->pool_name); return 0; /* wait */ } @@ -929,7 +995,7 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx) Mmsg(jcr->errmsg, _("3911 JobId=%u failed reserve drive %s.\n"), jcr->JobId, dev->print_name()); queue_reserve_message(jcr); - Dmsg2(100, "failed: No reserve %s JobId=%u\n", dev->print_name(), jcr->JobId); + Dmsg2(110, "failed: No reserve %s JobId=%u\n", dev->print_name(), jcr->JobId); return 0; } @@ -972,10 +1038,10 @@ void send_drive_reserve_messages(JCR *jcr, BSOCK *user) alist *msgs; char *msg; - P(search_lock); + lock_reservations(); msgs = jcr->reserve_msgs; if (!msgs || msgs->size() == 0) { - V(search_lock); + unlock_reservations(); return; } for (i=msgs->size()-1; i >= 0; i--) { @@ -986,5 +1052,5 @@ void send_drive_reserve_messages(JCR *jcr, BSOCK *user) break; } } - V(search_lock); + unlock_reservations(); } diff --git a/bacula/src/stored/scan.c b/bacula/src/stored/scan.c deleted file mode 100644 index 5700ec2142..0000000000 --- a/bacula/src/stored/scan.c +++ /dev/null @@ -1,148 +0,0 @@ -/* - * - * scan.c scan a directory (on a removable file) for a valid - * Volume name. If found, open the file for append. - * - * Kern Sibbald, MMVI - * - * Version $Id$ - */ -/* - Copyright (C) 2006 Kern Sibbald - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as amended with additional clauses defined in the - file LICENSE in the main source directory. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - the file LICENSE for additional details. - - */ - -#include "bacula.h" -#include "stored.h" - -/* Forward referenced functions */ -static bool is_volume_name_legal(char *name); - - -bool DEVICE::scan_dir_for_volume(DCR *dcr) -{ - DIR* dp; - struct dirent *entry, *result; - int name_max; - char *mount_point; - VOLUME_CAT_INFO dcrVolCatInfo, devVolCatInfo; - struct stat statp; - bool found = false; - POOL_MEM fname(PM_FNAME); - bool need_slash = false; - int len; - - - name_max = pathconf(".", _PC_NAME_MAX); - if (name_max < 1024) { - name_max = 1024; - } - - if (device->mount_point) { - mount_point = device->mount_point; - } 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", - mount_point, print_name(), be.strerror()); - goto get_out; - } - - len = strlen(mount_point); - if (len > 0) { - need_slash = mount_point[len - 1] != '/'; - } - entry = (struct dirent *)malloc(sizeof(struct dirent) + name_max + 1000); - 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", - mount_point, print_name()); - break; - } - if (strcmp(result->d_name, ".") == 0 || - strcmp(result->d_name, "..") == 0) { - continue; - } - - if (!is_volume_name_legal(result->d_name)) { - continue; - } - pm_strcpy(fname, mount_point); - if (need_slash) { - pm_strcat(fname, "/"); - } - pm_strcat(fname, result->d_name); - if (lstat(fname.c_str(), &statp) != 0 || - !S_ISREG(statp.st_mode)) { - continue; /* ignore directories & special files */ - } - - /* - * OK, we got a different volume mounted. First save the - * requested Volume info (dcr) structure, then query if - * this volume is really OK. If not, put back the desired - * volume name, mark it not in changer and continue. - */ - memcpy(&dcrVolCatInfo, &dcr->VolCatInfo, sizeof(dcrVolCatInfo)); - memcpy(&devVolCatInfo, &VolCatInfo, sizeof(devVolCatInfo)); - /* Check if this is a valid Volume in the pool */ - bstrncpy(dcr->VolumeName, result->d_name, sizeof(dcr->VolumeName)); - if (!dir_get_volume_info(dcr, GET_VOL_INFO_FOR_WRITE)) { - continue; - } - /* This was not the volume we expected, but it is OK with - * the Director, so use it. - */ - memcpy(&VolCatInfo, &dcr->VolCatInfo, sizeof(VolCatInfo)); - found = true; - break; /* got a Volume */ - } - free(entry); - closedir(dp); - -get_out: - sm_check(__FILE__, __LINE__, false); - return found; -} - -/* - * Check if the Volume name has legal characters - * If ua is non-NULL send the message - */ -static bool is_volume_name_legal(char *name) -{ - int len; - const char *p; - const char *accept = ":.-_"; - - /* Restrict the characters permitted in the Volume name */ - for (p=name; *p; p++) { - if (B_ISALPHA(*p) || B_ISDIGIT(*p) || strchr(accept, (int)(*p))) { - continue; - } - return false; - } - len = strlen(name); - if (len >= MAX_NAME_LENGTH) { - return false; - } - if (len == 0) { - return false; - } - return true; -} diff --git a/bacula/src/stored/spool.c b/bacula/src/stored/spool.c index 9cf930447b..cd73dea27b 100644 --- a/bacula/src/stored/spool.c +++ b/bacula/src/stored/spool.c @@ -246,7 +246,7 @@ static bool despool_data(DCR *dcr, bool commit) ok = write_block_to_device(dcr); if (!ok) { Jmsg2(jcr, M_FATAL, 0, _("Fatal append error on device %s: ERR=%s\n"), - dcr->dev->print_name(), dcr->dev->bstrerror()); + dcr->dev->print_name(), strerror_dev(dcr->dev)); } Dmsg3(800, "Write block ok=%d FI=%d LI=%d\n", ok, block->FirstIndex, block->LastIndex); } diff --git a/bacula/src/stored/status.c b/bacula/src/stored/status.c index eff170455e..596bbafc14 100644 --- a/bacula/src/stored/status.c +++ b/bacula/src/stored/status.c @@ -155,7 +155,7 @@ bool status_cmd(JCR *jcr) } else { if (dev) { - bnet_fsend(user, _("Device %s is not open.\n"), dev->print_name()); + bnet_fsend(user, _("Device %s is not open or does not exist.\n"), dev->print_name()); } else { bnet_fsend(user, _("Device \"%s\" is not open or does not exist.\n"), device->hdr.name); } diff --git a/bacula/src/stored/stored.c b/bacula/src/stored/stored.c index 71d180a6bf..e0e30c1519 100644 --- a/bacula/src/stored/stored.c +++ b/bacula/src/stored/stored.c @@ -193,6 +193,8 @@ int main (int argc, char *argv[]) Jmsg((JCR *)NULL, M_ERROR_TERM, 0, _("Please correct configuration file: %s\n"), configfile); } + init_reservations_lock(); + if (test_config) { terminate_stored(0); } @@ -228,7 +230,7 @@ int main (int argc, char *argv[]) /* * Start the device allocation thread */ - init_volume_list(); /* do before device_init */ + create_volume_list(); /* do before device_init */ if (pthread_create(&thid, NULL, device_initialization, NULL) != 0) { Emsg1(M_ABORT, 0, _("Unable to create thread. ERR=%s\n"), strerror(errno)); } @@ -449,7 +451,7 @@ void *device_initialization(void *arg) foreach_res(device, R_DEVICE) { Dmsg1(90, "calling init_dev %s\n", device->device_name); - dev = init_dev(NULL, device); + device->dev = dev = init_dev(NULL, device); Dmsg1(10, "SD init done %s\n", device->device_name); if (!dev) { Jmsg1(NULL, M_ERROR, 0, _("Could not initialize %s\n"), device->device_name); @@ -548,8 +550,7 @@ void terminate_stored(int sig) Dmsg1(10, "Term device %s\n", device->device_name); if (device->dev) { free_volume(device->dev); - device->dev->term(); - device->dev = NULL; + term_dev(device->dev); } else { Dmsg1(10, "No dev structure %s\n", device->device_name); } @@ -564,6 +565,7 @@ void terminate_stored(int sig) if (debug_level > 10) { print_memory_pool_stats(); } + term_reservations_lock(); term_msg(); stop_watchdog(); cleanup_crypto(); diff --git a/bacula/src/stored/stored_conf.c b/bacula/src/stored/stored_conf.c index 6d3db5e30e..03699ff0e4 100644 --- a/bacula/src/stored/stored_conf.c +++ b/bacula/src/stored/stored_conf.c @@ -36,7 +36,6 @@ RES **res_head = sres_head; /* Forward referenced subroutines */ static void store_devtype(LEX *lc, RES_ITEM *item, int index, int pass); - /* We build the current resource here statically, * then move it to dynamic memory */ URES res_all; @@ -61,9 +60,9 @@ static RES_ITEM store_items[] = { {"scriptsdirectory", store_dir, ITEM(res_store.scripts_directory), 0, 0, 0}, {"maximumconcurrentjobs", store_pint, ITEM(res_store.max_concurrent_jobs), 0, ITEM_DEFAULT, 10}, {"heartbeatinterval", store_time, ITEM(res_store.heartbeat_interval), 0, ITEM_DEFAULT, 0}, - {"tlsenable", store_bit, ITEM(res_store.tls_enable), 1, 0, 0}, - {"tlsrequire", store_bit, ITEM(res_store.tls_require), 1, 0, 0}, - {"tlsverifypeer", store_bit, ITEM(res_store.tls_verify_peer), 1, ITEM_DEFAULT, 1}, + {"tlsenable", store_yesno, ITEM(res_store.tls_enable), 1, 0, 0}, + {"tlsrequire", store_yesno, ITEM(res_store.tls_require), 1, 0, 0}, + {"tlsverifypeer", store_yesno, ITEM(res_store.tls_verify_peer), 1, ITEM_DEFAULT, 1}, {"tlscacertificatefile", store_dir, ITEM(res_store.tls_ca_certfile), 0, 0, 0}, {"tlscacertificatedir", store_dir, ITEM(res_store.tls_ca_certdir), 0, 0, 0}, {"tlscertificate", store_dir, ITEM(res_store.tls_certfile), 0, 0, 0}, @@ -79,10 +78,10 @@ static RES_ITEM dir_items[] = { {"name", store_name, ITEM(res_dir.hdr.name), 0, ITEM_REQUIRED, 0}, {"description", store_str, ITEM(res_dir.hdr.desc), 0, 0, 0}, {"password", store_password, ITEM(res_dir.password), 0, ITEM_REQUIRED, 0}, - {"monitor", store_bit, ITEM(res_dir.monitor), 1, ITEM_DEFAULT, 0}, - {"tlsenable", store_bit, ITEM(res_dir.tls_enable), 1, 0, 0}, - {"tlsrequire", store_bit, ITEM(res_dir.tls_require), 1, 0, 0}, - {"tlsverifypeer", store_bit, ITEM(res_dir.tls_verify_peer), 1, ITEM_DEFAULT, 1}, + {"monitor", store_yesno, ITEM(res_dir.monitor), 1, ITEM_DEFAULT, 0}, + {"tlsenable", store_yesno, ITEM(res_dir.tls_enable), 1, 0, 0}, + {"tlsrequire", store_yesno, ITEM(res_dir.tls_require), 1, 0, 0}, + {"tlsverifypeer", store_yesno, ITEM(res_dir.tls_verify_peer), 1, ITEM_DEFAULT, 1}, {"tlscacertificatefile", store_dir, ITEM(res_dir.tls_ca_certfile), 0, 0, 0}, {"tlscacertificatedir", store_dir, ITEM(res_dir.tls_ca_certdir), 0, 0, 0}, {"tlscertificate", store_dir, ITEM(res_dir.tls_certfile), 0, 0, 0}, @@ -99,28 +98,28 @@ static RES_ITEM dev_items[] = { {"mediatype", store_strname,ITEM(res_dev.media_type), 0, ITEM_REQUIRED, 0}, {"devicetype", store_devtype,ITEM(res_dev.dev_type), 0, 0, 0}, {"archivedevice", store_strname,ITEM(res_dev.device_name), 0, ITEM_REQUIRED, 0}, - {"hardwareendoffile", store_bit, ITEM(res_dev.cap_bits), CAP_EOF, ITEM_DEFAULT, 1}, - {"hardwareendofmedium", store_bit, ITEM(res_dev.cap_bits), CAP_EOM, ITEM_DEFAULT, 1}, - {"backwardspacerecord", store_bit, ITEM(res_dev.cap_bits), CAP_BSR, ITEM_DEFAULT, 1}, - {"backwardspacefile", store_bit, ITEM(res_dev.cap_bits), CAP_BSF, ITEM_DEFAULT, 1}, - {"bsfateom", store_bit, ITEM(res_dev.cap_bits), CAP_BSFATEOM, ITEM_DEFAULT, 0}, - {"twoeof", store_bit, ITEM(res_dev.cap_bits), CAP_TWOEOF, ITEM_DEFAULT, 0}, - {"forwardspacerecord", store_bit, ITEM(res_dev.cap_bits), CAP_FSR, ITEM_DEFAULT, 1}, - {"forwardspacefile", store_bit, ITEM(res_dev.cap_bits), CAP_FSF, ITEM_DEFAULT, 1}, - {"fastforwardspacefile", store_bit, ITEM(res_dev.cap_bits), CAP_FASTFSF, ITEM_DEFAULT, 1}, - {"removablemedia", store_bit, ITEM(res_dev.cap_bits), CAP_REM, ITEM_DEFAULT, 1}, - {"randomaccess", store_bit, ITEM(res_dev.cap_bits), CAP_RACCESS, 0, 0}, - {"automaticmount", store_bit, ITEM(res_dev.cap_bits), CAP_AUTOMOUNT, ITEM_DEFAULT, 0}, - {"labelmedia", store_bit, ITEM(res_dev.cap_bits), CAP_LABEL, ITEM_DEFAULT, 0}, - {"alwaysopen", store_bit, ITEM(res_dev.cap_bits), CAP_ALWAYSOPEN, ITEM_DEFAULT, 1}, - {"autochanger", store_bit, ITEM(res_dev.cap_bits), CAP_AUTOCHANGER, ITEM_DEFAULT, 0}, - {"closeonpoll", store_bit, ITEM(res_dev.cap_bits), CAP_CLOSEONPOLL, ITEM_DEFAULT, 0}, - {"blockpositioning", store_bit, ITEM(res_dev.cap_bits), CAP_POSITIONBLOCKS, ITEM_DEFAULT, 1}, - {"usemtiocget", store_bit, ITEM(res_dev.cap_bits), CAP_MTIOCGET, ITEM_DEFAULT, 1}, - {"checklabels", store_bit, ITEM(res_dev.cap_bits), CAP_CHECKLABELS, ITEM_DEFAULT, 0}, - {"requiresmount", store_bit, ITEM(res_dev.cap_bits), CAP_REQMOUNT, ITEM_DEFAULT, 0}, - {"offlineonunmount", store_bit, ITEM(res_dev.cap_bits), CAP_OFFLINEUNMOUNT, ITEM_DEFAULT, 0}, - {"autoselect", store_bit, ITEM(res_dev.autoselect), 1, ITEM_DEFAULT, 1}, + {"hardwareendoffile", store_yesno, ITEM(res_dev.cap_bits), CAP_EOF, ITEM_DEFAULT, 1}, + {"hardwareendofmedium", store_yesno, ITEM(res_dev.cap_bits), CAP_EOM, ITEM_DEFAULT, 1}, + {"backwardspacerecord", store_yesno, ITEM(res_dev.cap_bits), CAP_BSR, ITEM_DEFAULT, 1}, + {"backwardspacefile", store_yesno, ITEM(res_dev.cap_bits), CAP_BSF, ITEM_DEFAULT, 1}, + {"bsfateom", store_yesno, ITEM(res_dev.cap_bits), CAP_BSFATEOM, ITEM_DEFAULT, 0}, + {"twoeof", store_yesno, ITEM(res_dev.cap_bits), CAP_TWOEOF, ITEM_DEFAULT, 0}, + {"forwardspacerecord", store_yesno, ITEM(res_dev.cap_bits), CAP_FSR, ITEM_DEFAULT, 1}, + {"forwardspacefile", store_yesno, ITEM(res_dev.cap_bits), CAP_FSF, ITEM_DEFAULT, 1}, + {"fastforwardspacefile", store_yesno, ITEM(res_dev.cap_bits), CAP_FASTFSF, ITEM_DEFAULT, 1}, + {"removablemedia", store_yesno, ITEM(res_dev.cap_bits), CAP_REM, ITEM_DEFAULT, 1}, + {"randomaccess", store_yesno, ITEM(res_dev.cap_bits), CAP_RACCESS, 0, 0}, + {"automaticmount", store_yesno, ITEM(res_dev.cap_bits), CAP_AUTOMOUNT, ITEM_DEFAULT, 0}, + {"labelmedia", store_yesno, ITEM(res_dev.cap_bits), CAP_LABEL, ITEM_DEFAULT, 0}, + {"alwaysopen", store_yesno, ITEM(res_dev.cap_bits), CAP_ALWAYSOPEN, ITEM_DEFAULT, 1}, + {"autochanger", store_yesno, ITEM(res_dev.cap_bits), CAP_AUTOCHANGER, ITEM_DEFAULT, 0}, + {"closeonpoll", store_yesno, ITEM(res_dev.cap_bits), CAP_CLOSEONPOLL, ITEM_DEFAULT, 0}, + {"blockpositioning", store_yesno, ITEM(res_dev.cap_bits), CAP_POSITIONBLOCKS, ITEM_DEFAULT, 1}, + {"usemtiocget", store_yesno, ITEM(res_dev.cap_bits), CAP_MTIOCGET, ITEM_DEFAULT, 1}, + {"checklabels", store_yesno, ITEM(res_dev.cap_bits), CAP_CHECKLABELS, ITEM_DEFAULT, 0}, + {"requiresmount", store_yesno, ITEM(res_dev.cap_bits), CAP_REQMOUNT, ITEM_DEFAULT, 0}, + {"offlineonunmount", store_yesno, ITEM(res_dev.cap_bits), CAP_OFFLINEUNMOUNT, ITEM_DEFAULT, 0}, + {"autoselect", store_yesno, ITEM(res_dev.autoselect), 1, ITEM_DEFAULT, 1}, {"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}, @@ -160,7 +159,7 @@ static RES_ITEM changer_items[] = { }; -// {"mountanonymousvolumes", store_bit, ITEM(res_dev.cap_bits), CAP_ANONVOLS, ITEM_DEFAULT, 0}, +// {"mountanonymousvolumes", store_yesno, ITEM(res_dev.cap_bits), CAP_ANONVOLS, ITEM_DEFAULT, 0}, /* Message resource */ @@ -266,7 +265,7 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm res->res_dev.hdr.name, res->res_dev.media_type, res->res_dev.device_name, res->res_dev.label_type); - sendit(sock, " rew_wait=%" lld " min_bs=%d max_bs=%d chgr_wait=%" lld "\n", + sendit(sock, " rew_wait=%d min_bs=%d max_bs=%d chgr_wait=%d\n", res->res_dev.max_rewind_wait, res->res_dev.min_block_size, res->res_dev.max_block_size, res->res_dev.max_changer_wait); sendit(sock, " max_jobs=%d max_files=%" lld " max_size=%" lld "\n", diff --git a/bacula/src/stored/stored_conf.h b/bacula/src/stored/stored_conf.h index 93e37f3117..e1db10d0bc 100644 --- a/bacula/src/stored/stored_conf.h +++ b/bacula/src/stored/stored_conf.h @@ -114,7 +114,7 @@ public: 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 */ - uint32_t max_open_wait; /* maximum secs to wait for open */ + 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 */ diff --git a/bacula/src/stored/wait.c b/bacula/src/stored/wait.c index 8555561818..a4c4351441 100644 --- a/bacula/src/stored/wait.c +++ b/bacula/src/stored/wait.c @@ -9,7 +9,7 @@ * Version $Id$ */ /* - Copyright (C) 2000-2006 Kern Sibbald + Copyright (C) 2000-2005 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -190,7 +190,7 @@ bool wait_for_device(JCR *jcr, bool first) struct timespec timeout; int stat = 0; bool ok = true; - const int wait_time = 5 * 60; /* wait 5 minutes */ + const int wait_time = 5 * 60; /* wait 5 minutes */ Dmsg0(100, "Enter wait_for_device\n"); P(device_release_mutex); diff --git a/bacula/src/tools/Makefile.in b/bacula/src/tools/Makefile.in index 2debf389cb..d961440392 100644 --- a/bacula/src/tools/Makefile.in +++ b/bacula/src/tools/Makefile.in @@ -38,7 +38,7 @@ EXTRAOBJS = @OBJLIST@ DIRCONFOBJS = ../dird/dird_conf.o ../dird/run_conf.o ../dird/inc_conf.o NODIRTOOLS = bsmtp -DIRTOOLS = bsmtp dbcheck fstype testfind testls +DIRTOOLS = bsmtp dbcheck fstype testfind testls regex TOOLS = $(@DIR_TOOLS@) INSNODIRTOOLS = bsmtp @@ -75,6 +75,11 @@ testls: ../findlib/libfind.a ../lib/libbac.a testls.o $(CXX) -g $(LDFLAGS) -L. -L../lib -L../findlib -o $@ testls.o \ $(DLIB) -lfind -lbac -lm $(LIBS) $(GETTEXT_LIBS) $(OPENSSL_LIBS) +regex: ../findlib/libfind.a ../lib/libbac.a regex.o + $(CXX) -g $(LDFLAGS) -L. -L../lib -o $@ regex.o \ + $(DLIB) -lbac -lm $(LIBS) $(GETTEXT_LIBS) $(OPENSSL_LIBS) + + Makefile: $(srcdir)/Makefile.in $(topdir)/config.status cd $(topdir) \ && CONFIG_FILES=$(thisdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status diff --git a/bacula/src/tools/bsmtp.c b/bacula/src/tools/bsmtp.c index ab6883db73..5c22b0c830 100644 --- a/bacula/src/tools/bsmtp.c +++ b/bacula/src/tools/bsmtp.c @@ -1,5 +1,5 @@ /* - Copyright (C) 2001-2005 Kern Sibbald + Copyright (C) 2001-2006 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -125,6 +125,8 @@ _("\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 that should be sent (default: unlimited)\n" " -? print this message.\n" "\n"), MY_NAME); @@ -142,18 +144,20 @@ int main (int argc, char *argv[]) struct sockaddr_in sin; struct hostent *hp; int s, r, i, ch; + unsigned long maxlines, lines; struct passwd *pwd; char *cp, *p; time_t now = time(NULL); struct tm tm; - setlocale(LC_ALL, ""); + setlocale(LC_ALL, "en_US"); bindtextdomain("bacula", LOCALEDIR); textdomain("bacula"); my_name_is(argc, argv, "bsmtp"); + maxlines = 0; - while ((ch = getopt(argc, argv, "c:d:f:h:r:s:?")) != -1) { + while ((ch = getopt(argc, argv, "c:d:f:h:r:s:l:?")) != -1) { switch (ch) { case 'c': Dmsg1(20, "cc=%s\n", optarg); @@ -191,6 +195,11 @@ int main (int argc, char *argv[]) reply_addr = optarg; break; + case 'l': + Dmsg1(20, "maxlines=%s\n", optarg); + maxlines = (unsigned long) atol(optarg); + break; + case '?': default: usage(); @@ -313,42 +322,58 @@ hp: * Send message header */ fprintf(sfp, "From: %s\r\n", from_addr); + Dmsg1(10, "From: %s\r\n", from_addr); if (subject) { fprintf(sfp, "Subject: %s\r\n", subject); + Dmsg1(10, "Subject: %s\r\n", subject); } if (reply_addr) { fprintf(sfp, "Reply-To: %s\r\n", reply_addr); + Dmsg1(10, "Reply-To: %s\r\n", reply_addr); } if (err_addr) { fprintf(sfp, "Errors-To: %s\r\n", err_addr); + Dmsg1(10, "Errors-To: %s\r\n", err_addr); } if ((pwd = getpwuid(getuid())) == 0) { fprintf(sfp, "Sender: userid-%d@%s\r\n", (int)getuid(), my_hostname); + Dmsg2(10, "Sender: userid-%d@%s\r\n", (int)getuid(), my_hostname); } else { fprintf(sfp, "Sender: %s@%s\r\n", pwd->pw_name, my_hostname); + Dmsg2(10, "Sender: %s@%s\r\n", pwd->pw_name, my_hostname); } fprintf(sfp, "To: %s", argv[0]); + Dmsg1(10, "To: %s", argv[0]); for (i = 1; i < argc; i++) { fprintf(sfp, ",%s", argv[i]); + Dmsg1(10, ",%s", argv[i]); } fprintf(sfp, "\r\n"); + Dmsg0(10, "\r\n"); if (cc_addr) { fprintf(sfp, "Cc: %s\r\n", cc_addr); + Dmsg1(10, "Cc: %s\r\n", cc_addr); } /* Add RFC822 date */ localtime_r(&now, &tm); strftime(buf, sizeof(buf), "%a, %d %b %Y %H:%M:%S %z", &tm); fprintf(sfp, "Date: %s\r\n", buf); + Dmsg1(10, "Date: %s\r\n", buf); fprintf(sfp, "\r\n"); /* * Send message body */ + lines = 0; while (fgets(buf, sizeof(buf), stdin)) { + if (maxlines > 0 && ++lines > maxlines) { + Dmsg1(20, "skip line because of maxlines limit: %lu\n", maxlines); + continue; + } buf[strlen(buf)-1] = 0; if (strcmp(buf, ".") == 0) { /* quote lone dots */ fprintf(sfp, "..\r\n"); @@ -357,6 +382,11 @@ hp: } } + if (lines > maxlines) { + Dmsg1(10, "hit maxlines limit: %lu\n", maxlines); + fprintf(sfp, "\r\n[maximum of %lu lines exceeded, skipped %lu lines of output]\r\n", maxlines, lines-maxlines); + } + /* * Send SMTP quit command */ diff --git a/bacula/src/tools/regex.c b/bacula/src/tools/regex.c new file mode 100644 index 0000000000..c2dcd58f9c --- /dev/null +++ b/bacula/src/tools/regex.c @@ -0,0 +1,137 @@ +/* + * Test program for testing regular expressions. + */ +/* + Copyright (C) 2006 Kern Sibbald + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + version 2 as amended with additional clauses defined in the + file LICENSE in the main source directory. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + the file LICENSE for additional details. + + */ + +#include "bacula.h" +#ifdef HAVE_REGEX_H +#include +#endif + + +static void usage() +{ + fprintf(stderr, +"\n" +"Usage: regex [-d debug_level] -f \n" +" -f specify file of data to be matched\n" +" -l suppress line numbers\n" +" -n print lines that do not match\n" +" -? print this message.\n" +"\n\n"); + + exit(1); +} + + +int main(int argc, char *const *argv) +{ +#ifndef HAVE_REGEX_H + printf("The regex libraries don't seem to be available.\n"); + exit(1); +#else + regex_t preg; + char prbuf[500]; + char *fname = NULL; + int rc, ch; + char data[1000]; + char pat[500]; + FILE *fd; + bool match_only = true; + int lineno; + bool no_linenos = false; + + + setlocale(LC_ALL, ""); + bindtextdomain("bacula", LOCALEDIR); + textdomain("bacula"); + + while ((ch = getopt(argc, argv, "d:f:n?")) != -1) { + switch (ch) { + case 'd': /* set debug level */ + debug_level = atoi(optarg); + if (debug_level <= 0) { + debug_level = 1; + } + break; + + case 'f': /* data */ + fname = optarg; + break; + + case 'l': + no_linenos = true; + break; + + case 'n': + match_only = false; + break; + + case '?': + default: + usage(); + + } + } + argc -= optind; + argv += optind; + + if (!fname) { + printf("A data file must be specified.\n"); + usage(); + } + + for ( ;; ) { + printf("Enter regex pattern: "); + if (fgets(pat, sizeof(pat)-1, stdin) == NULL) { + break; + } + strip_trailing_newline(pat); + if (pat[0] == 0) { + exit(0); + } + rc = regcomp(&preg, pat, REG_EXTENDED); + if (rc != 0) { + regerror(rc, &preg, prbuf, sizeof(prbuf)); + printf("Regex compile error: %s\n", prbuf); + continue; + } + fd = fopen(fname, "r"); + if (!fd) { + printf(_("Could not open data file: %s\n"), fname); + exit(1); + } + lineno = 0; + while (fgets(data, sizeof(data)-1, fd)) { + const int nmatch = 30; + regmatch_t pmatch[nmatch]; + strip_trailing_newline(data); + lineno++; + rc = regexec(&preg, data, nmatch, pmatch, 0); + if ((match_only && rc == 0) || (!match_only && rc != 0)) { + if (no_linenos) { + printf("%s\n", data); + } else { + printf("%5d: %s\n", lineno, data); + } + } + } + fclose(fd); + regfree(&preg); + } + exit(0); +#endif +} diff --git a/bacula/src/tray-monitor/tray_conf.c b/bacula/src/tray-monitor/tray_conf.c index 18cfdf04f4..7614c2052a 100644 --- a/bacula/src/tray-monitor/tray_conf.c +++ b/bacula/src/tray-monitor/tray_conf.c @@ -8,14 +8,14 @@ * 1. The generic lexical scanner in lib/lex.c and lib/lex.h * * 2. The generic config scanner in lib/parse_config.c and -* lib/parse_config.h. -* These files contain the parser code, some utility -* routines, and the common store routines (name, int, -* string). +* lib/parse_config.h. +* These files contain the parser code, some utility +* routines, and the common store routines (name, int, +* string). * * 3. The daemon specific file, which contains the Resource -* definitions as well as any specific store routines -* for the resource records. +* definitions as well as any specific store routines +* for the resource records. * * Nicolas Boichat, August MMIV * @@ -69,12 +69,12 @@ int res_all_size = sizeof(res_all); /* * Monitor Resource * -* name handler value code flags default_value +* name handler value code flags default_value */ static RES_ITEM mon_items[] = { {"name", store_name, ITEM(res_monitor.hdr.name), 0, ITEM_REQUIRED, 0}, {"description", store_str, ITEM(res_monitor.hdr.desc), 0, 0, 0}, - {"requiressl", store_bit, ITEM(res_monitor.require_ssl), 1, ITEM_DEFAULT, 0}, + {"requiressl", store_yesno, ITEM(res_monitor.require_ssl), 1, ITEM_DEFAULT, 0}, {"password", store_password, ITEM(res_monitor.password), 0, ITEM_REQUIRED, 0}, {"refreshinterval", store_time,ITEM(res_monitor.RefreshInterval), 0, ITEM_DEFAULT, 5}, {"fdconnecttimeout", store_time,ITEM(res_monitor.FDConnectTimeout), 0, ITEM_DEFAULT, 60 * 30}, @@ -88,14 +88,14 @@ static RES_ITEM dir_items[] = { {"description", store_str, ITEM(res_dir.hdr.desc), 0, 0, 0}, {"dirport", store_int, ITEM(res_dir.DIRport), 0, ITEM_DEFAULT, 9101}, {"address", store_str, ITEM(res_dir.address), 0, 0, 0}, - {"enablessl", store_bit, ITEM(res_dir.enable_ssl), 1, ITEM_DEFAULT, 0}, + {"enablessl", store_yesno, ITEM(res_dir.enable_ssl), 1, ITEM_DEFAULT, 0}, {NULL, NULL, NULL, 0, 0, 0} }; /* * Client or File daemon resource * -* name handler value code flags default_value +* name handler value code flags default_value */ static RES_ITEM cli_items[] = { @@ -104,13 +104,13 @@ static RES_ITEM cli_items[] = { {"address", store_str, ITEM(res_client.address), 0, ITEM_REQUIRED, 0}, {"fdport", store_pint, ITEM(res_client.FDport), 0, ITEM_DEFAULT, 9102}, {"password", store_password, ITEM(res_client.password), 0, ITEM_REQUIRED, 0}, - {"enablessl", store_bit, ITEM(res_client.enable_ssl), 1, ITEM_DEFAULT, 0}, + {"enablessl", store_yesno, ITEM(res_client.enable_ssl), 1, ITEM_DEFAULT, 0}, {NULL, NULL, NULL, 0, 0, 0} }; /* Storage daemon resource * -* name handler value code flags default_value +* name handler value code flags default_value */ static RES_ITEM store_items[] = { {"name", store_name, ITEM(res_store.hdr.name), 0, ITEM_REQUIRED, 0}, @@ -120,7 +120,7 @@ static RES_ITEM store_items[] = { {"sdaddress", store_str, ITEM(res_store.address), 0, 0, 0}, {"password", store_password, ITEM(res_store.password), 0, ITEM_REQUIRED, 0}, {"sdpassword", store_password, ITEM(res_store.password), 0, 0, 0}, - {"enablessl", store_bit, ITEM(res_store.enable_ssl), 1, ITEM_DEFAULT, 0}, + {"enablessl", store_yesno, ITEM(res_store.enable_ssl), 1, ITEM_DEFAULT, 0}, {NULL, NULL, NULL, 0, 0, 0} }; @@ -131,7 +131,7 @@ static RES_ITEM store_items[] = { * NOTE!!! keep it in the same order as the R_codes * or eliminate all resources[rindex].name * -* name items rcode res_head +* name items rcode res_head */ RES_TABLE resources[] = { {"monitor", mon_items, R_MONITOR}, @@ -152,7 +152,7 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm sendit(sock, _("No %s resource defined\n"), res_to_str(type)); return; } - if (type < 0) { /* no recursion */ + if (type < 0) { /* no recursion */ type = - type; recurse = false; } @@ -194,7 +194,7 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm */ void free_resource(RES *sres, int type) { - RES *nres; /* next resource if linked */ + RES *nres; /* next resource if linked */ URES *res = (URES *)sres; if (res == NULL) @@ -258,14 +258,14 @@ void save_resource(int type, RES_ITEM *items, int pass) */ for (i=0; items[i].name; i++) { if (items[i].flags & ITEM_REQUIRED) { - if (!bit_is_set(i, res_all.res_monitor.hdr.item_present)) { - Emsg2(M_ERROR_TERM, 0, _("%s item is required in %s resource, but not found.\n"), - items[i].name, resources[rindex]); - } + if (!bit_is_set(i, res_all.res_monitor.hdr.item_present)) { + Emsg2(M_ERROR_TERM, 0, _("%s item is required in %s resource, but not found.\n"), + items[i].name, resources[rindex]); + } } /* If this triggers, take a look at lib/parse_conf.h */ if (i >= MAX_RES_ITEMS) { - Emsg1(M_ERROR_TERM, 0, _("Too many items in %s resource\n"), resources[rindex]); + Emsg1(M_ERROR_TERM, 0, _("Too many items in %s resource\n"), resources[rindex]); } } @@ -282,22 +282,22 @@ void save_resource(int type, RES_ITEM *items, int pass) case R_CLIENT: case R_STORAGE: case R_DIRECTOR: - break; + break; default: - Emsg1(M_ERROR, 0, _("Unknown resource type %d in save_resource.\n"), type); - error = 1; - break; + Emsg1(M_ERROR, 0, _("Unknown resource type %d in save_resource.\n"), type); + error = 1; + break; } /* Note, the resource name was already saved during pass 1, * so here, we can just release it. */ if (res_all.res_monitor.hdr.name) { - free(res_all.res_monitor.hdr.name); - res_all.res_monitor.hdr.name = NULL; + free(res_all.res_monitor.hdr.name); + res_all.res_monitor.hdr.name = NULL; } if (res_all.res_monitor.hdr.desc) { - free(res_all.res_monitor.hdr.desc); - res_all.res_monitor.hdr.desc = NULL; + free(res_all.res_monitor.hdr.desc); + res_all.res_monitor.hdr.desc = NULL; } return; } @@ -330,21 +330,21 @@ void save_resource(int type, RES_ITEM *items, int pass) memcpy(res, &res_all, size); if (!res_head[rindex]) { res_head[rindex] = (RES *)res; /* store first entry */ - Dmsg3(900, "Inserting first %s res: %s index=%d\n", res_to_str(type), - res->res_monitor.hdr.name, rindex); + Dmsg3(900, "Inserting first %s res: %s index=%d\n", res_to_str(type), + res->res_monitor.hdr.name, rindex); } else { RES *next; /* Add new res to end of chain */ for (next=res_head[rindex]; next->next; next=next->next) { if (strcmp(next->name, res->res_monitor.hdr.name) == 0) { - Emsg2(M_ERROR_TERM, 0, - _("Attempt to define second %s resource named \"%s\" is not permitted.\n"), - resources[rindex].name, res->res_monitor.hdr.name); + Emsg2(M_ERROR_TERM, 0, + _("Attempt to define second %s resource named \"%s\" is not permitted.\n"), + resources[rindex].name, res->res_monitor.hdr.name); } } next->next = (RES *)res; - Dmsg4(900, "Inserting %s res: %s index=%d pass=%d\n", res_to_str(type), - res->res_monitor.hdr.name, rindex, pass); + Dmsg4(900, "Inserting %s res: %s index=%d pass=%d\n", res_to_str(type), + res->res_monitor.hdr.name, rindex, pass); } } } diff --git a/bacula/src/version.h b/bacula/src/version.h index 6b8ec0a68a..62dd8fce67 100644 --- a/bacula/src/version.h +++ b/bacula/src/version.h @@ -3,9 +3,9 @@ */ #undef VERSION -#define VERSION "1.39.6" -#define BDATE "27 February 2006" -#define LSMDATE "27Feb06" +#define VERSION "1.38.6" +#define BDATE "28 March 2006" +#define LSMDATE "28Mar06" /* Debug flags */ #undef DEBUG @@ -15,7 +15,7 @@ #define TRACE_FILE 1 /* If this is set stdout will not be closed on startup */ -#define DEVELOPER 1 +/* #define DEVELOPER 1 */ /* #define USE_BSNPRINTF */ diff --git a/bacula/src/win32/baculafd/baculafd.mak b/bacula/src/win32/baculafd/baculafd.mak index df2c8f7f8d..7afb9dca66 100644 --- a/bacula/src/win32/baculafd/baculafd.mak +++ b/bacula/src/win32/baculafd/baculafd.mak @@ -57,11 +57,11 @@ CLEAN : -@erase "$(INTDIR)\bsys.obj" -@erase "$(INTDIR)\btime.obj" -@erase "$(INTDIR)\btimers.obj" + -@erase "$(INTDIR)\chksum.obj" -@erase "$(INTDIR)\compat.obj" -@erase "$(INTDIR)\cram-md5.obj" -@erase "$(INTDIR)\crc32.obj" -@erase "$(INTDIR)\create_file.obj" - -@erase "$(INTDIR)\crypto.obj" -@erase "$(INTDIR)\daemon.obj" -@erase "$(INTDIR)\dlist.obj" -@erase "$(INTDIR)\edit.obj" @@ -154,11 +154,11 @@ LINK32_OBJS= \ "$(INTDIR)\bsys.obj" \ "$(INTDIR)\btime.obj" \ "$(INTDIR)\btimers.obj" \ + "$(INTDIR)\chksum.obj" \ "$(INTDIR)\compat.obj" \ "$(INTDIR)\cram-md5.obj" \ "$(INTDIR)\crc32.obj" \ "$(INTDIR)\create_file.obj" \ - "$(INTDIR)\crypto.obj" \ "$(INTDIR)\daemon.obj" \ "$(INTDIR)\dlist.obj" \ "$(INTDIR)\edit.obj" \ @@ -271,6 +271,8 @@ CLEAN : -@erase "$(INTDIR)\btime.sbr" -@erase "$(INTDIR)\btimers.obj" -@erase "$(INTDIR)\btimers.sbr" + -@erase "$(INTDIR)\chksum.obj" + -@erase "$(INTDIR)\chksum.sbr" -@erase "$(INTDIR)\compat.obj" -@erase "$(INTDIR)\compat.sbr" -@erase "$(INTDIR)\cram-md5.obj" @@ -279,8 +281,6 @@ CLEAN : -@erase "$(INTDIR)\crc32.sbr" -@erase "$(INTDIR)\create_file.obj" -@erase "$(INTDIR)\create_file.sbr" - -@erase "$(INTDIR)\crypto.obj" - -@erase "$(INTDIR)\crypto.sbr" -@erase "$(INTDIR)\daemon.obj" -@erase "$(INTDIR)\daemon.sbr" -@erase "$(INTDIR)\dlist.obj" @@ -430,11 +430,11 @@ BSC32_SBRS= \ "$(INTDIR)\bsys.sbr" \ "$(INTDIR)\btime.sbr" \ "$(INTDIR)\btimers.sbr" \ + "$(INTDIR)\chksum.sbr" \ "$(INTDIR)\compat.sbr" \ "$(INTDIR)\cram-md5.sbr" \ "$(INTDIR)\crc32.sbr" \ "$(INTDIR)\create_file.sbr" \ - "$(INTDIR)\crypto.sbr" \ "$(INTDIR)\daemon.sbr" \ "$(INTDIR)\dlist.sbr" \ "$(INTDIR)\edit.sbr" \ @@ -520,11 +520,11 @@ LINK32_OBJS= \ "$(INTDIR)\bsys.obj" \ "$(INTDIR)\btime.obj" \ "$(INTDIR)\btimers.obj" \ + "$(INTDIR)\chksum.obj" \ "$(INTDIR)\compat.obj" \ "$(INTDIR)\cram-md5.obj" \ "$(INTDIR)\crc32.obj" \ "$(INTDIR)\create_file.obj" \ - "$(INTDIR)\crypto.obj" \ "$(INTDIR)\daemon.obj" \ "$(INTDIR)\dlist.obj" \ "$(INTDIR)\edit.obj" \ @@ -944,98 +944,97 @@ SOURCE=..\lib\btimers.cpp !ENDIF -SOURCE=..\compat\compat.cpp +SOURCE=..\filed\chksum.cpp !IF "$(CFG)" == "baculafd - Win32 Release" -"$(INTDIR)\compat.obj" : $(SOURCE) "$(INTDIR)" +"$(INTDIR)\chksum.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "baculafd - Win32 Debug" -"$(INTDIR)\compat.obj" "$(INTDIR)\compat.sbr" : $(SOURCE) "$(INTDIR)" +"$(INTDIR)\chksum.obj" "$(INTDIR)\chksum.sbr" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ENDIF -SOURCE="..\lib\cram-md5.cpp" + +SOURCE=..\compat\compat.cpp !IF "$(CFG)" == "baculafd - Win32 Release" -"$(INTDIR)\cram-md5.obj" : $(SOURCE) "$(INTDIR)" +"$(INTDIR)\compat.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "baculafd - Win32 Debug" -"$(INTDIR)\cram-md5.obj" "$(INTDIR)\cram-md5.sbr" : $(SOURCE) "$(INTDIR)" +"$(INTDIR)\compat.obj" "$(INTDIR)\compat.sbr" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ENDIF -SOURCE=..\lib\crc32.cpp +SOURCE="..\lib\cram-md5.cpp" !IF "$(CFG)" == "baculafd - Win32 Release" -"$(INTDIR)\crc32.obj" : $(SOURCE) "$(INTDIR)" +"$(INTDIR)\cram-md5.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "baculafd - Win32 Debug" -"$(INTDIR)\crc32.obj" "$(INTDIR)\crc32.sbr" : $(SOURCE) "$(INTDIR)" +"$(INTDIR)\cram-md5.obj" "$(INTDIR)\cram-md5.sbr" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ENDIF -SOURCE=..\findlib\create_file.cpp +SOURCE=..\lib\crc32.cpp !IF "$(CFG)" == "baculafd - Win32 Release" -"$(INTDIR)\create_file.obj" : $(SOURCE) "$(INTDIR)" +"$(INTDIR)\crc32.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "baculafd - Win32 Debug" -"$(INTDIR)\create_file.obj" "$(INTDIR)\create_file.sbr" : $(SOURCE) "$(INTDIR)" +"$(INTDIR)\crc32.obj" "$(INTDIR)\crc32.sbr" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ENDIF - -SOURCE=..\lib\crypto.cpp +SOURCE=..\findlib\create_file.cpp !IF "$(CFG)" == "baculafd - Win32 Release" -"$(INTDIR)\crypto.obj" : $(SOURCE) "$(INTDIR)" +"$(INTDIR)\create_file.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "baculafd - Win32 Debug" -"$(INTDIR)\crypto.obj" "$(INTDIR)\crypto.sbr" : $(SOURCE) "$(INTDIR)" +"$(INTDIR)\create_file.obj" "$(INTDIR)\create_file.sbr" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ENDIF - SOURCE=..\lib\daemon.cpp !IF "$(CFG)" == "baculafd - Win32 Release" diff --git a/bacula/src/win32/compat/compat.cpp b/bacula/src/win32/compat/compat.cpp index 70e6e53efa..4fc0e6b874 100644 --- a/bacula/src/win32/compat/compat.cpp +++ b/bacula/src/win32/compat/compat.cpp @@ -34,7 +34,6 @@ #define USE_WIN32_COMPAT_IO 1 -#define USE_WIN32_32KPATHCONVERSION 1 extern void d_msg(const char *file, int line, int level, const char *fmt,...); extern DWORD g_platform_id; @@ -92,188 +91,6 @@ void conv_unix_to_win32_path(const char *name, char *win32_name, DWORD dwSize) #endif } -POOLMEM* -make_wchar_win32_path(POOLMEM* pszUCSPath, BOOL* pBIsRawPath /*= NULL*/) -{ - /* created 02/27/2006 Thorsten Engel - - This function expects an UCS-encoded standard WCHAR in pszUCSPath and - will complete the input path to an absolue path of the form \\?\c:\path\file - - With this trick, it is possible to have 32K characters long paths. - - Optionally one can use pBIsRawPath to determine id pszUCSPath contains a path - to a raw windows partition */ - - if (pBIsRawPath) - *pBIsRawPath = FALSE; - - if (!p_GetCurrentDirectoryW) - return pszUCSPath; - - WCHAR* name = (WCHAR*) pszUCSPath; - - /* if it has already the desired form, exit without changes */ - if (wcslen(name) > 3 && wcsncmp (name, L"\\\\?\\", 4) == 0) - return pszUCSPath; - - POOLMEM* pwszBuf = get_pool_memory (PM_FNAME); - POOLMEM* pwszCurDirBuf = get_pool_memory (PM_FNAME); - DWORD dwCurDirPathSize = 0; - - /* get buffer with enough size (name+max 6. wchars+1 null terminator */ - DWORD dwBufCharsNeeded = (wcslen(name)+7); - pwszBuf = check_pool_memory_size(pwszBuf, dwBufCharsNeeded*sizeof(WCHAR)); - - /* add \\?\ to support 32K long filepaths - it is important to make absolute paths, so we add drive and - current path if necessary */ - - BOOL bAddDrive = TRUE; - BOOL bAddCurrentPath = TRUE; - BOOL bAddPrefix = TRUE; - - /* does path begin with drive? if yes, it is absolute */ - if (wcslen(name) > 3 && (iswalpha (*name) && *(name+1) == ':' - && (*(name+2) == '\\' || *(name+2) == '/'))) { - bAddDrive = FALSE; - bAddCurrentPath = FALSE; - } - - /* is path absolute? */ - if (*name == '/' || *name == '\\') - bAddCurrentPath = FALSE; - - /* is path relative to itself?, if yes, skip ./ */ - if (wcslen(name) > 2 && ((wcsncmp (name, L"./", 2) == 0) || (wcsncmp (name, L".\\", 2) == 0))) { - name+=2; - } - - /* is path of form '//./'? */ - if (wcslen(name) > 3 && ((wcsncmp (name, L"//./", 4) == 0) || (wcsncmp (name, L"\\\\.\\", 4) == 0))) { - bAddDrive = FALSE; - bAddCurrentPath = FALSE; - bAddPrefix = FALSE; - if (pBIsRawPath) - *pBIsRawPath = TRUE; - } - - int nParseOffset = 0; - - /* add 4 bytes header */ - if (bAddPrefix) { - nParseOffset = 4; - wcscpy ((WCHAR*) pwszBuf,L"\\\\?\\"); - } - - /* get current path if needed */ - if (bAddDrive || bAddCurrentPath) { - dwCurDirPathSize = p_GetCurrentDirectoryW(0, NULL); - if (dwCurDirPathSize > 0) { - /* get directory into own buffer as it may either return c:\... or \\?\C:\.... */ - pwszCurDirBuf = check_pool_memory_size(pwszCurDirBuf, (dwCurDirPathSize+1)*sizeof(WCHAR)); - p_GetCurrentDirectoryW(dwCurDirPathSize,(WCHAR*)pwszCurDirBuf); - } - else - { - /* we have no info for doing so */ - bAddDrive = FALSE; - bAddCurrentPath = FALSE; - } - } - - - /* add drive if needed */ - if (bAddDrive && !bAddCurrentPath) { - WCHAR szDrive[3]; - - if (dwCurDirPathSize > 3 && wcsncmp ((LPCWSTR)pwszCurDirBuf, L"\\\\?\\", 4) == 0) - /* copy drive character */ - wcsncpy ((WCHAR*) szDrive, (LPCWSTR)pwszCurDirBuf+4,2); - else - /* copy drive character */ - wcsncpy ((WCHAR*) szDrive, (LPCWSTR)pwszCurDirBuf,2); - - szDrive[2] = 0; - - wcscat ((WCHAR*) pwszBuf, szDrive); - nParseOffset +=2; - } - - /* add path if needed */ - if (bAddCurrentPath) { - /* the 1 add. character is for the eventually added backslash */ - dwBufCharsNeeded += dwCurDirPathSize+1; - pwszBuf = check_pool_memory_size(pwszBuf, dwBufCharsNeeded*sizeof(WCHAR)); - /* get directory into own buffer as it may either return c:\... or \\?\C:\.... */ - - if (dwCurDirPathSize > 3 && wcsncmp ((LPCWSTR)pwszCurDirBuf, L"\\\\?\\", 4) == 0) - /* copy complete string */ - wcscpy ((WCHAR*) pwszBuf, (LPCWSTR)pwszCurDirBuf); - else - /* append path */ - wcscat ((WCHAR*) pwszBuf, (LPCWSTR)pwszCurDirBuf); - - nParseOffset = wcslen ((LPCWSTR) pwszBuf); - - /* check if path ends with backslash, if not, add one */ - if (*((WCHAR*) pwszBuf+nParseOffset-1) != L'\\') { - wcscat ((WCHAR*) pwszBuf, L"\\"); - nParseOffset++; - } - } - - - WCHAR* win32_name = (WCHAR*) pwszBuf+nParseOffset; - - while (*name) { - /* Check for Unix separator and convert to Win32 */ - if (*name == '/') { - *win32_name++ = '\\'; /* convert char */ - /* If Win32 separated that is "quoted", remove quote */ -/* HELPME (Thorsten Engel): I don't understand the following part - and it removes a backslash from e.g. "\\.\c:" which I need for - RAW device access. So I took it out */ -/* } else if (*name == '\\' && name[1] == '\\') { - *win32_name++ = '\\'; - name++; */ /* skip first \ */ - } else { - *win32_name++ = *name; /* copy character */ - } - name++; - } - - /* null terminate string */ - *win32_name = 0; - -#ifdef WIN32_VSS - /* here we convert to VSS specific file name which - can get longer because VSS will make something like - \\\\?\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy1\\bacula\\uninstall.exe - from c:\bacula\uninstall.exe - */ - if (g_pVSSClient && enable_vss && g_pVSSClient->IsInitialized()) { - /* is output buffer large enough? */ - pwszBuf = check_pool_memory_size(pwszBuf, (dwBufCharsNeeded+MAX_PATH)*sizeof(WCHAR)); - /* create temp. buffer */ - POOLMEM* pszBuf = get_pool_memory (PM_FNAME); - pszBuf = check_pool_memory_size(pszBuf, (dwBufCharsNeeded+MAX_PATH)*sizeof(WCHAR)); - if (bAddPrefix) - nParseOffset = 4; - else - nParseOffset = 0; - wcsncpy ((WCHAR*) pszBuf, (WCHAR*) pwszBuf+nParseOffset, wcslen((WCHAR*)pwszBuf)+1-nParseOffset); - g_pVSSClient->GetShadowPathW((WCHAR*)pszBuf,(WCHAR*)pwszBuf,dwBufCharsNeeded+MAX_PATH); - free_pool_memory(pszBuf); - } -#endif - - free_pool_memory (pszUCSPath); - free_pool_memory (pwszCurDirBuf); - - return pwszBuf; -} - int wchar_2_UTF8(char *pszUTF, const WCHAR *pszUCS, int cchChar) { @@ -334,23 +151,6 @@ wchar_win32_path(const char *name, WCHAR *win32_name) } } -int -make_win32_path_UTF8_2_wchar(POOLMEM **pszUCS, const char *pszUTF, BOOL* pBIsRawPath /*= NULL*/) -{ - /* helper to convert from utf-8 to UCS-2 and to complete a path for 32K path syntax */ - int nRet = UTF8_2_wchar(pszUCS, pszUTF); - -#ifdef USE_WIN32_32KPATHCONVERSION - /* add \\?\ to support 32K long filepaths */ - *pszUCS = make_wchar_win32_path(*pszUCS, pBIsRawPath); -#else - if (pBIsRawPath) - *pBIsRawPath = FALSE; -#endif - - return nRet; -} - #ifndef HAVE_VC8 int umask(int) { @@ -472,7 +272,7 @@ statDir(const char *file, struct stat *sb) // use unicode or ascii if (p_FindFirstFileW) { POOLMEM* pwszBuf = get_pool_memory (PM_FNAME); - make_win32_path_UTF8_2_wchar(&pwszBuf, file); + UTF8_2_wchar(&pwszBuf, file); h = p_FindFirstFileW((LPCWSTR) pwszBuf, &info_w); free_pool_memory(pwszBuf); @@ -539,7 +339,7 @@ stat2(const char *file, struct stat *sb) if (p_GetFileAttributesW) { POOLMEM* pwszBuf = get_pool_memory(PM_FNAME); - make_win32_path_UTF8_2_wchar(&pwszBuf, tmpbuf); + UTF8_2_wchar(&pwszBuf, tmpbuf); attr = p_GetFileAttributesW((LPCWSTR) pwszBuf); free_pool_memory(pwszBuf); @@ -550,7 +350,7 @@ stat2(const char *file, struct stat *sb) if (attr == -1) { const char *err = errorString(); d_msg(__FILE__, __LINE__, 99, - "GetFileAttributes(%s): %s\n", tmpbuf, err); + "GetFileAttrubtes(%s): %s\n", tmpbuf, err); LocalFree((void *)err); errno = b_errno_win32; return -1; @@ -633,7 +433,7 @@ stat(const char *file, struct stat *sb) if (p_GetFileAttributesExW) { /* dynamically allocate enough space for UCS2 filename */ POOLMEM* pwszBuf = get_pool_memory (PM_FNAME); - make_win32_path_UTF8_2_wchar(&pwszBuf, file); + UTF8_2_wchar(&pwszBuf, file); BOOL b = p_GetFileAttributesExW((LPCWSTR) pwszBuf, GetFileExInfoStandard, &data); free_pool_memory(pwszBuf); @@ -879,8 +679,7 @@ opendir(const char *path) // convert to WCHAR if (p_FindFirstFileW) { POOLMEM* pwcBuf = get_pool_memory(PM_FNAME);; - make_win32_path_UTF8_2_wchar(&pwcBuf,rval->spec); - + UTF8_2_wchar(&pwcBuf,rval->spec); rval->dirh = p_FindFirstFileW((LPCWSTR)pwcBuf, &rval->data_w); free_pool_memory(pwcBuf); @@ -1095,10 +894,9 @@ win32_chdir(const char *dir) { if (p_SetCurrentDirectoryW) { POOLMEM* pwszBuf = get_pool_memory(PM_FNAME); - make_win32_path_UTF8_2_wchar(&pwszBuf, dir); + UTF8_2_wchar(&pwszBuf, dir); BOOL b=p_SetCurrentDirectoryW((LPCWSTR)pwszBuf); - free_pool_memory(pwszBuf); if (!b) { @@ -1122,7 +920,7 @@ win32_mkdir(const char *dir) { if (p_wmkdir){ POOLMEM* pwszBuf = get_pool_memory(PM_FNAME); - make_win32_path_UTF8_2_wchar(&pwszBuf, dir); + UTF8_2_wchar(&pwszBuf, dir); int n=p_wmkdir((LPCWSTR)pwszBuf); free_pool_memory(pwszBuf); @@ -1143,8 +941,7 @@ win32_getcwd(char *buf, int maxlen) pwszBuf = check_pool_memory_size (pwszBuf, maxlen*sizeof(WCHAR)); n = p_GetCurrentDirectoryW(maxlen, (LPWSTR) pwszBuf); - if (n!=0) - n = wchar_2_UTF8 (buf, (WCHAR*)pwszBuf, maxlen)-1; + n = wchar_2_UTF8 (buf, (WCHAR*)pwszBuf, maxlen)-1; free_pool_memory(pwszBuf); } else if (p_GetCurrentDirectoryA) @@ -1266,8 +1063,7 @@ win32_unlink(const char *filename) int nRetCode; if (p_wunlink) { POOLMEM* pwszBuf = get_pool_memory(PM_FNAME); - make_win32_path_UTF8_2_wchar(&pwszBuf, filename); - + UTF8_2_wchar(&pwszBuf, filename); nRetCode = _wunlink((LPCWSTR) pwszBuf); /* special case if file is readonly, @@ -1731,7 +1527,7 @@ utime(const char *fname, struct utimbuf *times) if (p_CreateFileW) { POOLMEM* pwszBuf = get_pool_memory(PM_FNAME); - make_win32_path_UTF8_2_wchar(&pwszBuf, tmpbuf); + UTF8_2_wchar(&pwszBuf, tmpbuf); h = p_CreateFileW((LPCWSTR) pwszBuf, FILE_WRITE_ATTRIBUTES, @@ -1776,7 +1572,7 @@ open(const char *file, int flags, int mode) { if (p_wopen) { POOLMEM* pwszBuf = get_pool_memory(PM_FNAME); - make_win32_path_UTF8_2_wchar(&pwszBuf, file); + UTF8_2_wchar(&pwszBuf, file); int nRet = p_wopen((LPCWSTR) pwszBuf, flags|_O_BINARY, mode); free_pool_memory(pwszBuf); @@ -1857,7 +1653,7 @@ open(const char *file, int flags, int mode) if (p_CreateFileW) { POOLMEM* pwszBuf = get_pool_memory(PM_FNAME); - make_win32_path_UTF8_2_wchar(pwszBuf, file); + UTF8_2_wchar(pwszBuf, file); foo = p_CreateFileW((LPCWSTR) pwszBuf, access, shareMode, NULL, create, msflags, NULL); free_pool_memory(pwszBuf); diff --git a/bacula/src/win32/compat/vss.cpp b/bacula/src/win32/compat/vss.cpp index 4278a18acb..8234aad317 100644 --- a/bacula/src/win32/compat/vss.cpp +++ b/bacula/src/win32/compat/vss.cpp @@ -143,35 +143,6 @@ BOOL VSSClient::GetShadowPath(const char *szFilePath, char *szShadowPath, int nB return FALSE; } -BOOL VSSClient::GetShadowPathW(const WCHAR *szFilePath, WCHAR *szShadowPath, int nBuflen) -{ - if (!m_bBackupIsInitialized) - return FALSE; - - /* check for valid pathname */ - BOOL bIsValidName; - - bIsValidName = wcslen(szFilePath) > 3; - if (bIsValidName) - bIsValidName &= iswalpha (szFilePath[0]) && - szFilePath[1]==':' && - szFilePath[2] == '\\'; - - if (bIsValidName) { - int nDriveIndex = towupper(szFilePath[0])-'A'; - if (m_szShadowCopyName[nDriveIndex][0] != 0) { - wcsncpy(szShadowPath, CA2W(m_szShadowCopyName[nDriveIndex]), nBuflen); - nBuflen -= (int)strlen(m_szShadowCopyName[nDriveIndex]); - wcsncat(szShadowPath, szFilePath+2, nBuflen); - return TRUE; - } - } - - wcsncpy(szShadowPath, szFilePath, nBuflen); - errno = EINVAL; - return FALSE; -} - const size_t VSSClient::GetWriterCount() { diff --git a/bacula/src/win32/compat/vss.h b/bacula/src/win32/compat/vss.h index ec10bfd3e7..65ae9380eb 100644 --- a/bacula/src/win32/compat/vss.h +++ b/bacula/src/win32/compat/vss.h @@ -47,8 +47,7 @@ public: virtual BOOL CreateSnapshots(char* szDriveLetters) = 0; virtual BOOL CloseBackup() = 0; virtual const char* GetDriverName() = 0; - BOOL GetShadowPath (const char* szFilePath, char* szShadowPath, int nBuflen); - BOOL GetShadowPathW (const WCHAR* szFilePath, WCHAR* szShadowPath, int nBuflen); /* nBuflen in characters */ + BOOL GetShadowPath (const char* szFilePath, char* szShadowPath, int nBuflen); const size_t GetWriterCount(); const char* GetWriterInfo(size_t nIndex); diff --git a/bacula/src/win32/compat/vss_generic.cpp b/bacula/src/win32/compat/vss_generic.cpp index 75387df272..11c7b33d9c 100644 --- a/bacula/src/win32/compat/vss_generic.cpp +++ b/bacula/src/win32/compat/vss_generic.cpp @@ -67,6 +67,8 @@ using namespace std; #ifdef B_VSS_XP #pragma message("compile VSS for Windows XP") #define VSSClientGeneric VSSClientXP + // wait is not available under XP... + #define VSS_TIMEOUT #include "vss/inc/WinXP/vss.h" #include "vss/inc/WinXP/vswriter.h" @@ -85,6 +87,8 @@ using namespace std; #ifdef B_VSS_W2K3 #pragma message("compile VSS for Windows 2003") #define VSSClientGeneric VSSClient2003 + // wait x ms for a VSS asynchronous operation (-1 = infinite) + #define VSS_TIMEOUT (DWORD) 300000 #include "vss/inc/Win2003/vss.h" #include "vss/inc/Win2003/vswriter.h" @@ -278,7 +282,7 @@ BOOL VSSClientGeneric::Initialize(DWORD dwContext, BOOL bDuringRestore) void VSSClientGeneric::WaitAndCheckForAsyncOperation(IVssAsync* pAsync) { // Wait until the async operation finishes - HRESULT hr = pAsync->Wait(); + HRESULT hr = pAsync->Wait(VSS_TIMEOUT); // Check the result of the asynchronous operation HRESULT hrReturned = S_OK; diff --git a/bacula/src/win32/console/console.mak b/bacula/src/win32/console/console.mak index 4a117ec1f9..7d0c98213b 100644 --- a/bacula/src/win32/console/console.mak +++ b/bacula/src/win32/console/console.mak @@ -54,7 +54,6 @@ CLEAN : -@erase "$(INTDIR)\console_conf.obj" -@erase "$(INTDIR)\cram-md5.obj" -@erase "$(INTDIR)\crc32.obj" - -@erase "$(INTDIR)\crypto.obj" -@erase "$(INTDIR)\dlist.obj" -@erase "$(INTDIR)\edit.obj" -@erase "$(INTDIR)\getopt.obj" @@ -107,7 +106,6 @@ LINK32_OBJS= \ "$(INTDIR)\console_conf.obj" \ "$(INTDIR)\cram-md5.obj" \ "$(INTDIR)\crc32.obj" \ - "$(INTDIR)\crypto.obj" \ "$(INTDIR)\dlist.obj" \ "$(INTDIR)\edit.obj" \ "$(INTDIR)\getopt.obj" \ @@ -165,7 +163,6 @@ CLEAN : -@erase "$(INTDIR)\console_conf.obj" -@erase "$(INTDIR)\cram-md5.obj" -@erase "$(INTDIR)\crc32.obj" - -@erase "$(INTDIR)\crypto.obj" -@erase "$(INTDIR)\dlist.obj" -@erase "$(INTDIR)\edit.obj" -@erase "$(INTDIR)\getopt.obj" @@ -219,7 +216,6 @@ LINK32_OBJS= \ "$(INTDIR)\console_conf.obj" \ "$(INTDIR)\cram-md5.obj" \ "$(INTDIR)\crc32.obj" \ - "$(INTDIR)\crypto.obj" \ "$(INTDIR)\dlist.obj" \ "$(INTDIR)\edit.obj" \ "$(INTDIR)\getopt.obj" \ @@ -370,13 +366,6 @@ SOURCE=..\lib\crc32.cpp $(CPP) $(CPP_PROJ) $(SOURCE) -SOURCE=..\lib\crypto.cpp - -"$(INTDIR)\crypto.obj" : $(SOURCE) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - - SOURCE=..\lib\dlist.cpp "$(INTDIR)\dlist.obj" : $(SOURCE) "$(INTDIR)" diff --git a/bacula/src/win32/filed/chksum.cpp b/bacula/src/win32/filed/chksum.cpp new file mode 100644 index 0000000000..de3fd34fb5 --- /dev/null +++ b/bacula/src/win32/filed/chksum.cpp @@ -0,0 +1 @@ +#include "../../filed/chksum.c" diff --git a/bacula/src/win32/lib/crypto.cpp b/bacula/src/win32/lib/crypto.cpp deleted file mode 100644 index 961ae75983..0000000000 --- a/bacula/src/win32/lib/crypto.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "../../lib/crypto.c" diff --git a/bacula/src/win32/wx-console/filelist b/bacula/src/win32/wx-console/filelist index 9f044978ae..f97c202452 100644 --- a/bacula/src/win32/wx-console/filelist +++ b/bacula/src/win32/wx-console/filelist @@ -13,7 +13,6 @@ ..\lib\btime ..\lib\cram-md5 ..\lib\crc32 -..\lib\crypto ..\lib\daemon ..\lib\dlist ..\lib\edit diff --git a/bacula/src/win32/wx-console/wx-console.mak b/bacula/src/win32/wx-console/wx-console.mak index 863dd927c8..f5c116914e 100644 --- a/bacula/src/win32/wx-console/wx-console.mak +++ b/bacula/src/win32/wx-console/wx-console.mak @@ -55,7 +55,6 @@ CLEAN : -@erase "$(INTDIR)\btime.obj" -@erase "$(INTDIR)\cram-md5.obj" -@erase "$(INTDIR)\crc32.obj" - -@erase "$(INTDIR)\crypto.obj" -@erase "$(INTDIR)\daemon.obj" -@erase "$(INTDIR)\dlist.obj" -@erase "$(INTDIR)\edit.obj" @@ -133,7 +132,6 @@ LINK32_OBJS= \ "$(INTDIR)\btime.obj" \ "$(INTDIR)\cram-md5.obj" \ "$(INTDIR)\crc32.obj" \ - "$(INTDIR)\crypto.obj" \ "$(INTDIR)\daemon.obj" \ "$(INTDIR)\dlist.obj" \ "$(INTDIR)\edit.obj" \ @@ -227,8 +225,6 @@ CLEAN : -@erase "$(INTDIR)\cram-md5.sbr" -@erase "$(INTDIR)\crc32.obj -@erase "$(INTDIR)\crc32.sbr" - -@erase "$(INTDIR)\crypto.obj - -@erase "$(INTDIR)\crypto.sbr" -@erase "$(INTDIR)\daemon.obj -@erase "$(INTDIR)\daemon.sbr" -@erase "$(INTDIR)\dlist.obj @@ -346,7 +342,6 @@ BSC32_SBRS= \ "$(INTDIR)\btime.sbr" \ "$(INTDIR)\cram-md5.sbr" \ "$(INTDIR)\crc32.sbr" \ - "$(INTDIR)\crypto.sbr" \ "$(INTDIR)\daemon.sbr" \ "$(INTDIR)\dlist.sbr" \ "$(INTDIR)\edit.sbr" \ @@ -419,7 +414,6 @@ LINK32_OBJS= \ "$(INTDIR)\btime.obj" \ "$(INTDIR)\cram-md5.obj" \ "$(INTDIR)\crc32.obj" \ - "$(INTDIR)\crypto.obj" \ "$(INTDIR)\daemon.obj" \ "$(INTDIR)\dlist.obj" \ "$(INTDIR)\edit.obj" \ @@ -803,25 +797,6 @@ SOURCE=..\lib\crc32.cpp !ENDIF -FILENAME=crypto -SOURCE=..\lib\crypto.cpp -!IF "$(CFG)" == "wx-console - Win32 Release" - - -"$(INTDIR)\$(FILENAME).obj" : $(SOURCE) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -!ELSEIF "$(CFG)" == "wx-console - Win32 Debug" - - -"$(INTDIR)\$(FILENAME).obj" "$(INTDIR)\$(FILENAME).sbr" : $(SOURCE) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -!ENDIF - - FILENAME=daemon SOURCE=..\lib\daemon.cpp !IF "$(CFG)" == "wx-console - Win32 Release" diff --git a/bacula/src/wx-console/Makefile.in b/bacula/src/wx-console/Makefile.in index 214887256d..293f49699c 100644 --- a/bacula/src/wx-console/Makefile.in +++ b/bacula/src/wx-console/Makefile.in @@ -126,7 +126,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) $(CONS_CPPFLAGS) -I$(srcdir) -I$(basedir) $(CONSSRCS) >> Makefile + @$(CXX) -S -M $(CPPFLAGS) $(CONS_CPPFLAGS) -I$(srcdir) -I$(basedir) $(OPENSSL_INC) $(CONSSRCS) >> Makefile @if test -f Makefile ; then \ $(RMF) Makefile.bak; \ else \ diff --git a/bacula/src/wx-console/console_conf.c b/bacula/src/wx-console/console_conf.c index b6c05f7151..c13abcac29 100644 --- a/bacula/src/wx-console/console_conf.c +++ b/bacula/src/wx-console/console_conf.c @@ -81,8 +81,8 @@ static RES_ITEM cons_items[] = { {"rcfile", store_dir, ITEM(res_cons.rc_file), 0, 0, 0}, {"historyfile", store_dir, ITEM(res_cons.hist_file), 0, 0, 0}, {"password", store_password, ITEM(res_cons.password), 0, ITEM_REQUIRED, 0}, - {"tlsenable", store_bit, ITEM(res_cons.tls_enable), 1, 0, 0}, - {"tlsrequire", store_bit, ITEM(res_cons.tls_require), 1, 0, 0}, + {"tlsenable", store_yesno, ITEM(res_cons.tls_enable), 1, 0, 0}, + {"tlsrequire", store_yesno, ITEM(res_cons.tls_require), 1, 0, 0}, {"tlscacertificatefile", store_dir, ITEM(res_cons.tls_ca_certfile), 0, 0, 0}, {"tlscacertificatedir", store_dir, ITEM(res_cons.tls_ca_certdir), 0, 0, 0}, {"tlscertificate", store_dir, ITEM(res_cons.tls_certfile), 0, 0, 0}, @@ -98,8 +98,8 @@ static RES_ITEM dir_items[] = { {"dirport", store_int, ITEM(res_dir.DIRport), 0, ITEM_DEFAULT, 9101}, {"address", store_str, ITEM(res_dir.address), 0, 0, 0}, {"password", store_password, ITEM(res_dir.password), 0, ITEM_REQUIRED, 0}, - {"tlsenable", store_bit, ITEM(res_dir.tls_enable), 1, 0, 0}, - {"tlsrequire", store_bit, ITEM(res_dir.tls_require), 1, 0, 0}, + {"tlsenable", store_yesno, ITEM(res_dir.tls_enable), 1, 0, 0}, + {"tlsrequire", store_yesno, ITEM(res_dir.tls_require), 1, 0, 0}, {"tlscacertificatefile", store_dir, ITEM(res_dir.tls_ca_certfile), 0, 0, 0}, {"tlscacertificatedir", store_dir, ITEM(res_dir.tls_ca_certdir), 0, 0, 0}, {"tlscertificate", store_dir, ITEM(res_dir.tls_certfile), 0, 0, 0}, diff --git a/gui/.cvsignore b/gui/.cvsignore deleted file mode 100644 index e1649d8074..0000000000 --- a/gui/.cvsignore +++ /dev/null @@ -1,6 +0,0 @@ -diff -config.status -config.out -config.log -autom4te.cache -kernsconfig diff --git a/gui/Makefile b/gui/Makefile deleted file mode 100644 index a026ecc2c6..0000000000 --- a/gui/Makefile +++ /dev/null @@ -1,140 +0,0 @@ -# -# gui Makefile.in -# -# Version $Id$ -# - -# autoconf/Make.common.in -*- Makefile -*- -# release date (man), LSM date, version number/name, current maintainer -DATE="18 January 2006" -LSMDATE=@LSMDATE@ -VERSION=1.38.5 -VERNAME=bacula-$(VERSION)# -MAINT=Kern Sibbald# -MAINTEMAIL=# -#------------------------------------------------------------------------- - -SHELL = /bin/sh - -# Installation target directories & other installation stuff -prefix = /usr/local -exec_prefix = ${prefix} -binprefix = -manprefix = -sbindir = ${exec_prefix}/sbin -sysconfdir = ${prefix}/etc -scriptdir = @scriptdir@ -mandir = ${prefix}/man/man1 -manext = 1 - -# Tools & program stuff -MV = /bin/mv -RM = /bin/rm -RMF = /bin/rm -f -CP = /bin/cp -SED = @SED@ -AWK = /usr/bin/gawk -ECHO = /bin/echo -CMP = @CMP@ -INSTALL = /usr/bin/install -c -# add the -s to the following in PRODUCTION mode -INSTALL_PROGRAM = /usr/bin/install -c -m @SBINPERM@ -INSTALL_DATA = /usr/bin/install -c -m 644 -INSTALL_SCRIPT = /usr/bin/install -c -m @SBINPERM@ -INSTALL_CONFIG = /usr/bin/install -c -m 640 - - -# End of common section of the Makefile -#------------------------------------------------------------------------- - -srcdir = . - -.PATH: . -topdir = . -thisdir = . - - -first_rule: all -dummy: - -MKDIR = $(topdir)/autoconf/mkinstalldirs - -#------------------------------------------------------------------------- - -all: Makefile - - -depend: - - -#------------------------------------------------------------------------- - - -install: - -uninstall: - -configure: autoconf/configure.in autoconf/aclocal.m4 autoconf/acconfig.h autoconf/config.h.in - cd $(srcdir); - ${RMF} -f config.cache config.log config.out config.status src/config.h - autoconf --prepend-include=$(srcdir)/autoconf \ - autoconf/configure.in > configure - chmod 755 configure - -Makefile: Makefile.in - cd $(topdir) \ - && CONFIG_FILES=$(thisdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - -Makefiles: - $(SHELL) config.status - -clean: - @$(RMF) *~ 1 2 3 diff */diff *.tar.gz - @$(RMF) config.log config.out config.status - @rm -rf autom4te.cache - -# clean for distribution -distclean: clean - @$(RMF) -rf CVS - -devclean: clean - @for subdir in freebsd linux solaris; do \ - if [ -f $${subdir}/Makefile ]; then \ - (cd $${subdir}; $(MAKE) devclean) \ - fi; \ - -release-bacula-web: - (cwd=`pwd`; rm -rf /tmp/bacula-web-$(VERSION); \ - cd ..; cp -rp $$cwd/bacula-web /tmp/bacula-web-$(VERSION); \ - cd /tmp/bacula-web-$(VERSION); \ - make clean; \ - find . -name ".#*" -exec rm -rf {} \; ; \ - find . -name "CVS" -exec rm -rf {} \; ; \ - find . -name ".cvsignore" -exec rm -rf {} \; ; \ - rm -rf autom4te.cache; \ - cd ..; \ - tar cvfz $$cwd/bacula-web-$(VERSION).tar.gz bacula-web-$(VERSION); \ - rm -rf /tmp/bacula-web-$(VERSION); \ - echo " "; \ - echo "bacula-web release is in: $$cwd/bacula-web-$(VERSION).tar.gz"; \ - echo " ") - -release-bimagemgr: - (cwd=`pwd`; rm -rf /tmp/bimagemgr-$(VERSION); \ - cd ..; cp -rp $$cwd/bimagemgr /tmp/bimagemgr-$(VERSION); \ - cd /tmp/bimagemgr-$(VERSION); \ - make clean; \ - find . -name ".#*" -exec rm -rf {} \; ; \ - find . -name "CVS" -exec rm -rf {} \; ; \ - find . -name ".cvsignore" -exec rm -rf {} \; ; \ - rm -rf autom4te.cache; \ - cd ..; \ - tar cvfz $$cwd/bimagemgr-$(VERSION).tar.gz bimagemgr-$(VERSION); \ - rm -rf /tmp/bimagemgr-$(VERSION); \ - echo " "; \ - echo "bimagemgr release is in: $$cwd/bimagemgr-$(VERSION).tar.gz"; \ - echo " ") - -release: clean release-bacula-web release-bimagemgr - -# ------------------------------------------------------------------------ diff --git a/gui/Makefile.in b/gui/Makefile.in deleted file mode 100755 index abc5de3b30..0000000000 --- a/gui/Makefile.in +++ /dev/null @@ -1,98 +0,0 @@ -# -# gui Makefile.in -# -# Version $Id$ -# -@MCOMMON@ - -srcdir = @srcdir@ -VPATH = @srcdir@ -.PATH: @srcdir@ -topdir = . -thisdir = . - - -first_rule: all -dummy: - -MKDIR = $(topdir)/autoconf/mkinstalldirs - -#------------------------------------------------------------------------- - -all: Makefile - - -depend: - - -#------------------------------------------------------------------------- - - -install: - -uninstall: - -configure: autoconf/configure.in autoconf/aclocal.m4 autoconf/acconfig.h autoconf/config.h.in - cd $(srcdir); - ${RMF} -f config.cache config.log config.out config.status src/config.h - autoconf --prepend-include=$(srcdir)/autoconf \ - autoconf/configure.in > configure - chmod 755 configure - -Makefile: Makefile.in - cd $(topdir) \ - && CONFIG_FILES=$(thisdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - -Makefiles: - $(SHELL) config.status - -clean: - @$(RMF) *~ 1 2 3 diff */diff *.tar.gz - @$(RMF) config.log config.out config.status - @rm -rf autom4te.cache - -# clean for distribution -distclean: clean - @$(RMF) -rf CVS - -devclean: clean - @for subdir in freebsd linux solaris; do \ - if [ -f $${subdir}/Makefile ]; then \ - (cd $${subdir}; $(MAKE) devclean) \ - fi; \ - -release-bacula-web: - (cwd=`pwd`; rm -rf /tmp/bacula-web-$(VERSION); \ - cd ..; cp -rp $$cwd/bacula-web /tmp/bacula-web-$(VERSION); \ - cd /tmp/bacula-web-$(VERSION); \ - make clean; \ - find . -name ".#*" -exec rm -rf {} \; ; \ - find . -name "CVS" -exec rm -rf {} \; ; \ - find . -name ".cvsignore" -exec rm -rf {} \; ; \ - rm -rf autom4te.cache; \ - cd ..; \ - tar cvfz $$cwd/bacula-web-$(VERSION).tar.gz bacula-web-$(VERSION); \ - rm -rf /tmp/bacula-web-$(VERSION); \ - echo " "; \ - echo "bacula-web release is in: $$cwd/bacula-web-$(VERSION).tar.gz"; \ - echo " ") - -release-bimagemgr: - (cwd=`pwd`; rm -rf /tmp/bimagemgr-$(VERSION); \ - cd ..; cp -rp $$cwd/bimagemgr /tmp/bimagemgr-$(VERSION); \ - cd /tmp/bimagemgr-$(VERSION); \ - make clean; \ - find . -name ".#*" -exec rm -rf {} \; ; \ - find . -name "CVS" -exec rm -rf {} \; ; \ - find . -name ".cvsignore" -exec rm -rf {} \; ; \ - rm -rf autom4te.cache; \ - cd ..; \ - tar cvfz $$cwd/bimagemgr-$(VERSION).tar.gz bimagemgr-$(VERSION); \ - rm -rf /tmp/bimagemgr-$(VERSION); \ - echo " "; \ - echo "bimagemgr release is in: $$cwd/bimagemgr-$(VERSION).tar.gz"; \ - echo " ") - -release: clean release-bacula-web release-bimagemgr - -# ------------------------------------------------------------------------ diff --git a/gui/README b/gui/README deleted file mode 100644 index 16540a97ce..0000000000 --- a/gui/README +++ /dev/null @@ -1,50 +0,0 @@ - -This is the Bacula GUI directory. It contains graphical tools for -Bacula, and consists of the following subdirectories: - - Directory Contents - bacula-web A management level tool for reporting Backup - job status. It is a Web based application that - uses php. - bimagemgr A web based tool for managing and burning CD - images of Volumes created by Bacula. - -Build instructions: - -First, you must do: - - cd - ./configure --with-bacula= - - This will find the current Bacula version, and create - all the Makefiles from Makefile.in - - Do not edit the Makefiles or your changes will be lost. Always - edit Makefile.in - -For bacula-web: - cd bacula-web - examine the README - or alternatively use the html document released as - bacula-docs-nn.mm.xx.tar.gz - -For bimagemgr: - There are a number of additional configuration options that - you may specify on the ./configure line shown above. To see - them enter: ./configure --help - cd bimagemgr - make - make install - ... - -To create a distribution tar file - cd - ./configure --with-bacula= - make clean - make - make release - - The output will be two .tar.gz files in the current directory - with the names bacula-web-.tar.gz and - bimagemgr-.tar.gz - It will print the name. diff --git a/gui/autoconf/.cvsignore b/gui/autoconf/.cvsignore deleted file mode 100644 index 2ab7eba232..0000000000 --- a/gui/autoconf/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -config.log -Make.common -config.h.in diff --git a/gui/autoconf/Make.common.in b/gui/autoconf/Make.common.in deleted file mode 100644 index dfd552bac8..0000000000 --- a/gui/autoconf/Make.common.in +++ /dev/null @@ -1,42 +0,0 @@ -# autoconf/Make.common.in -*- Makefile -*- -# release date (man), LSM date, version number/name, current maintainer -DATE="@DATE@" -LSMDATE=@LSMDATE@ -VERSION=@VERSION@ -VERNAME=bacula-$(VERSION)# -MAINT=Kern Sibbald# -MAINTEMAIL=# -#------------------------------------------------------------------------- - -SHELL = /bin/sh - -# Installation target directories & other installation stuff -prefix = @prefix@ -exec_prefix = @exec_prefix@ -binprefix = -manprefix = -sbindir = @sbindir@ -sysconfdir = @sysconfdir@ -scriptdir = @scriptdir@ -mandir = @mandir@/man1 -manext = 1 - -# Tools & program stuff -MV = @MV@ -RM = @RM@ -RMF = @RM@ -f -CP = @CP@ -SED = @SED@ -AWK = @AWK@ -ECHO = @ECHO@ -CMP = @CMP@ -INSTALL = @INSTALL@ -# add the -s to the following in PRODUCTION mode -INSTALL_PROGRAM = @INSTALL@ -m @SBINPERM@ -INSTALL_DATA = @INSTALL@ -m 644 -INSTALL_SCRIPT = @INSTALL@ -m @SBINPERM@ -INSTALL_CONFIG = @INSTALL@ -m 640 - - -# End of common section of the Makefile -#------------------------------------------------------------------------- diff --git a/gui/autoconf/acconfig.h b/gui/autoconf/acconfig.h deleted file mode 100644 index 1d86c66dec..0000000000 --- a/gui/autoconf/acconfig.h +++ /dev/null @@ -1,24 +0,0 @@ -/* ------------------------------------------------------------------------- */ -/* -- CONFIGURE SPECIFIED FEATURES -- */ -/* ------------------------------------------------------------------------- */ - - -/* ------------------------------------------------------------------------- */ -/* -- CONFIGURE DETECTED FEATURES -- */ -/* ------------------------------------------------------------------------- */ - -/* 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 diff --git a/gui/autoconf/aclocal.m4 b/gui/autoconf/aclocal.m4 deleted file mode 100644 index eb5b2c8656..0000000000 --- a/gui/autoconf/aclocal.m4 +++ /dev/null @@ -1,196 +0,0 @@ -dnl - -AC_DEFUN(BA_CONDITIONAL, -[AC_SUBST($1_TRUE) -AC_SUBST($1_FALSE) -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi]) - - -AC_DEFUN(BA_CHECK_OPSYS, -[ -AC_CYGWIN -if test $HAVE_UNAME=yes -a x`uname -s` = xSunOS -then - BA_CONDITIONAL(HAVE_SUN_OS, $TRUEPRG) - AC_DEFINE(HAVE_SUN_OS) -else - BA_CONDITIONAL(HAVE_SUN_OS, $FALSEPRG) -fi - -if test $HAVE_UNAME=yes -a x`uname -s` = xOSF1 -then - BA_CONDITIONAL(HAVE_OSF1_OS, $TRUEPRG) - AC_DEFINE(HAVE_OSF1_OS) -else - BA_CONDITIONAL(HAVE_OSF1_OS, $FALSEPRG) -fi - -if test $HAVE_UNAME=yes -a x`uname -s` = xAIX -then - BA_CONDITIONAL(HAVE_AIX_OS, $TRUEPRG) - AC_DEFINE(HAVE_AIX_OS) -else - BA_CONDITIONAL(HAVE_AIX_OS, $FALSEPRG) -fi - -if test $HAVE_UNAME=yes -a x`uname -s` = xHP-UX -then - BA_CONDITIONAL(HAVE_HPUX_OS, $TRUEPRG) - AC_DEFINE(HAVE_HPUX_OS) -else - BA_CONDITIONAL(HAVE_HPUX_OS, $FALSEPRG) -fi - -if test $HAVE_UNAME=yes -a x`uname -s` = xLinux -then - BA_CONDITIONAL(HAVE_LINUX_OS, $TRUEPRG) - AC_DEFINE(HAVE_LINUX_OS) -else - BA_CONDITIONAL(HAVE_LINUX_OS, $FALSEPRG) -fi - -if test $HAVE_UNAME=yes -a x`uname -s` = xFreeBSD -then - BA_CONDITIONAL(HAVE_FREEBSD_OS, $TRUEPRG) - AC_DEFINE(HAVE_FREEBSD_OS) -else - BA_CONDITIONAL(HAVE_FREEBSD_OS, $FALSEPRG) -fi - -if test $HAVE_UNAME=yes -a x`uname -s` = xNetBSD -then - BA_CONDITIONAL(HAVE_NETBSD_OS, $TRUEPRG) - AC_DEFINE(HAVE_NETBSD_OS) -else - BA_CONDITIONAL(HAVE_NETBSD_OS, $FALSEPRG) -fi - -if test $HAVE_UNAME=yes -a x`uname -s` = xOpenBSD -then - BA_CONDITIONAL(HAVE_OPENBSD_OS, $TRUEPRG) - AC_DEFINE(HAVE_OPENBSD_OS) -else - BA_CONDITIONAL(HAVE_OPENBSD_OS, $FALSEPRG) -fi - -if test $HAVE_UNAME=yes -a x`uname -s` = xBSD/OS -then - BA_CONDITIONAL(HAVE_BSDI_OS, $TRUEPRG) - AC_DEFINE(HAVE_BSDI_OS) -else - BA_CONDITIONAL(HAVE_BSDI_OS, $FALSEPRG) -fi - -if test $HAVE_UNAME=yes -a x`uname -s` = xSGI -then - BA_CONDITIONAL(HAVE_SGI_OS, $TRUEPRG) - AC_DEFINE(HAVE_SGI_OS) -else - BA_CONDITIONAL(HAVE_SGI_OS, $FALSEPRG) -fi - -if test $HAVE_UNAME=yes -a x`uname -s` = xIRIX -then - BA_CONDITIONAL(HAVE_IRIX_OS, $TRUEPRG) - AC_DEFINE(HAVE_IRIX_OS) -else - BA_CONDITIONAL(HAVE_IRIX_OS, $FALSEPRG) -fi - -if test $HAVE_UNAME=yes -a x`uname -s` = xDarwin -then - AM_CONDITIONAL(HAVE_DARWIN_OS, $TRUEPRG) - AC_DEFINE(HAVE_DARWIN_OS) -else - AM_CONDITIONAL(HAVE_DARWIN_OS, $FALSEPRG) -fi -]) - -AC_DEFUN(BA_CHECK_OPSYS_DISTNAME, -[AC_MSG_CHECKING(for Operating System Distribution) -if test "x$DISTNAME" != "x" -then - echo "distname set to $DISTNAME" -elif test $HAVE_UNAME=yes -a x`uname -s` = xOSF1 -then - DISTNAME=alpha -elif test $HAVE_UNAME=yes -a x`uname -s` = xAIX -then - DISTNAME=aix -elif test $HAVE_UNAME=yes -a x`uname -s` = xHP-UX -then - DISTNAME=hpux -elif test $HAVE_UNAME=yes -a x`uname -s` = xSunOS -then - DISTNAME=solaris -elif test $HAVE_UNAME=yes -a x`uname -s` = xFreeBSD -then - DISTNAME=freebsd -elif test $HAVE_UNAME=yes -a x`uname -s` = xNetBSD -then - DISTNAME=netbsd -elif test $HAVE_UNAME=yes -a x`uname -s` = xOpenBSD -then - DISTNAME=openbsd -elif test $HAVE_UNAME=yes -a x`uname -s` = xIRIX -then - DISTNAME=irix -elif test $HAVE_UNAME=yes -a x`uname -s` = xBSD/OS -then - DISTNAME=bsdi -elif test -f /etc/SuSE-release -then - DISTNAME=suse -elif test -d /etc/SuSEconfig -then - DISTNAME=suse5 -elif test -f /etc/mandrake-release -then - DISTNAME=mandrake -elif test -f /etc/whitebox-release -then - DISTNAME=redhat -elif test -f /etc/redhat-release -then - DISTNAME=redhat -elif test -f /etc/gentoo-release -then - DISTNAME=gentoo -elif test -f /etc/debian_version -then - DISTNAME=debian -elif test -f /etc/slackware-version -then - DISTNAME=slackware -elif test $HAVE_UNAME=yes -a x`uname -s` = xDarwin -then - DISTNAME=darwin -elif test -f /etc/engarde-version -then - DISTNAME=engarde -elif test "$CYGWIN" = yes -then - DISTNAME=cygwin - AC_DEFINE(HAVE_CYGWIN) -else - DISTNAME=unknown -fi -AC_MSG_RESULT(done) -]) - -AC_DEFUN(AM_CONDITIONAL, -[AC_SUBST($1_TRUE) -AC_SUBST($1_FALSE) -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi]) diff --git a/gui/autoconf/config.guess b/gui/autoconf/config.guess deleted file mode 100755 index 7d0185e019..0000000000 --- a/gui/autoconf/config.guess +++ /dev/null @@ -1,1447 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. - -timestamp='2004-09-07' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit 0 ;; - --version | -v ) - echo "$version" ; exit 0 ;; - --help | --h* | -h ) - echo "$usage"; exit 0 ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit 0 ;; - amd64:OpenBSD:*:*) - echo x86_64-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - amiga:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - cats:OpenBSD:*:*) - echo arm-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - hp300:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - luna88k:OpenBSD:*:*) - echo m88k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mac68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - macppc:OpenBSD:*:*) - echo powerpc-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme88k:OpenBSD:*:*) - echo m88k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvmeppc:OpenBSD:*:*) - echo powerpc-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - sgi:OpenBSD:*:*) - echo mips64-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - sun3:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - *:OpenBSD:*:*) - echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit 0 ;; - macppc:MirBSD:*:*) - echo powerppc-unknown-mirbsd${UNAME_RELEASE} - exit 0 ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit 0 ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit 0 ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit 0 ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit 0 ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit 0;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit 0 ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit 0 ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit 0 ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit 0 ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit 0;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit 0;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit 0 ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit 0 ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit 0 ;; - DRS?6000:UNIX_SV:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7 && exit 0 ;; - esac ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - i86pc:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit 0 ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit 0 ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit 0 ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit 0 ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit 0 ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit 0 ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit 0 ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit 0 ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit 0 ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit 0 ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit 0 ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit 0 ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit 0 ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c \ - && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ - && exit 0 - echo mips-mips-riscos${UNAME_RELEASE} - exit 0 ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit 0 ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit 0 ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit 0 ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit 0 ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit 0 ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit 0 ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit 0 ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit 0 ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit 0 ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit 0 ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit 0 ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit 0 ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit 0 ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit 0 ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit 0 ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 - echo rs6000-ibm-aix3.2.5 - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit 0 ;; - *:AIX:*:[45]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit 0 ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit 0 ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit 0 ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit 0 ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit 0 ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit 0 ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit 0 ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit 0 ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - # avoid double evaluation of $set_cc_for_build - test -n "$CC_FOR_BUILD" || eval $set_cc_for_build - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit 0 ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit 0 ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 - echo unknown-hitachi-hiuxwe2 - exit 0 ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit 0 ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit 0 ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit 0 ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit 0 ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit 0 ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit 0 ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit 0 ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit 0 ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit 0 ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit 0 ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit 0 ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit 0 ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit 0 ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit 0 ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit 0 ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; - *:FreeBSD:*:*) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit 0 ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit 0 ;; - i*:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit 0 ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit 0 ;; - x86:Interix*:[34]*) - echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' - exit 0 ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit 0 ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit 0 ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit 0 ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit 0 ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit 0 ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit 0 ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit 0 ;; - arm*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit 0 ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit 0 ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit 0 ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - mips:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips - #undef mipsel - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` - test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 - ;; - mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips64 - #undef mips64el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mips64el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips64 - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` - test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 - ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit 0 ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit 0 ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit 0 ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit 0 ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit 0 ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit 0 ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit 0 ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit 0 ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit 0 ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit 0 ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #ifdef __INTEL_COMPILER - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` - test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 - test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 - ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit 0 ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit 0 ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit 0 ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit 0 ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit 0 ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit 0 ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit 0 ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit 0 ;; - i*86:*:5:[78]*) - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit 0 ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit 0 ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp - exit 0 ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit 0 ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit 0 ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit 0 ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit 0 ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit 0 ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit 0 ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4.3${OS_REL} && exit 0 - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4 && exit 0 ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit 0 ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit 0 ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit 0 ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit 0 ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit 0 ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit 0 ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit 0 ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit 0 ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit 0 ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit 0 ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit 0 ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit 0 ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit 0 ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit 0 ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit 0 ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit 0 ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit 0 ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit 0 ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - *86) UNAME_PROCESSOR=i686 ;; - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit 0 ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit 0 ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit 0 ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit 0 ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit 0 ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit 0 ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit 0 ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit 0 ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit 0 ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit 0 ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit 0 ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit 0 ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit 0 ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit 0 ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit 0 ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit 0 ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms && exit 0 ;; - I*) echo ia64-dec-vms && exit 0 ;; - V*) echo vax-dec-vms && exit 0 ;; - esac -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit 0 ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit 0 ;; - c34*) - echo c34-convex-bsd - exit 0 ;; - c38*) - echo c38-convex-bsd - exit 0 ;; - c4*) - echo c4-convex-bsd - exit 0 ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/gui/autoconf/config.h.in b/gui/autoconf/config.h.in deleted file mode 100644 index e15bcecaaa..0000000000 --- a/gui/autoconf/config.h.in +++ /dev/null @@ -1,32 +0,0 @@ -/* autoconf/config.h.in. Generated from autoconf/configure.in by autoheader. */ -/* ------------------------------------------------------------------------- */ -/* -- CONFIGURE SPECIFIED FEATURES -- */ -/* ------------------------------------------------------------------------- */ - - -/* ------------------------------------------------------------------------- */ -/* -- CONFIGURE DETECTED FEATURES -- */ -/* ------------------------------------------------------------------------- */ - -/* Define if you have GCC */ -#undef HAVE_GCC - -/* General libs */ -#undef LIBS - -/* 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 - diff --git a/gui/autoconf/config.sub b/gui/autoconf/config.sub deleted file mode 100755 index edb6b663ca..0000000000 --- a/gui/autoconf/config.sub +++ /dev/null @@ -1,1555 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. - -timestamp='2004-08-29' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit 0 ;; - --version | -v ) - echo "$version" ; exit 0 ;; - --help | --h* | -h ) - echo "$usage"; exit 0 ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit 0;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ - kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray) - os= - basic_machine=$1 - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | m32r | m32rle | m68000 | m68k | m88k | mcore \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64vr | mips64vrel \ - | mips64orion | mips64orionel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | msp430 \ - | ns16k | ns32k \ - | openrisc | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ - | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ - | v850 | v850e \ - | we32k \ - | x86 | xscale | xstormy16 | xtensa \ - | z8k) - basic_machine=$basic_machine-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* \ - | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | mcore-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | msp430-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tron-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ - | xtensa-* \ - | ymp-* \ - | z8k-*) - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16c) - basic_machine=cr16c-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - or32 | or32-*) - basic_machine=or32-unknown - os=-coff - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tic55x | c55x*) - basic_machine=tic55x-unknown - os=-coff - ;; - tic6x | c6x*) - basic_machine=tic6x-unknown - os=-coff - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -kaos*) - os=-kaos - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit 0 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/gui/autoconf/configure.in b/gui/autoconf/configure.in deleted file mode 100644 index 66f93a7dd2..0000000000 --- a/gui/autoconf/configure.in +++ /dev/null @@ -1,288 +0,0 @@ -lal# -dnl# -dnl# Process this file with autoconf to produce a configure script. -dnl# -AC_INIT(autoconf/configure.in) -BUILD_DIR=`pwd` -cd .. -TOP_DIR=`pwd` -cd ${BUILD_DIR} -AC_SUBST(BUILD_DIR) -AC_CONFIG_AUX_DIR(${BUILD_DIR}/autoconf) - -dnl require a recent autoconf -AC_PREREQ(2.13) - - -# ------------------------------------------ -# Where to get Bacula source -# ------------------------------------------ -AC_ARG_WITH(bacula, - [ --with-bacula=PATH specify path to Bacula source], - [ - if test "x$withval" != "xno" ; then - bacula=$withval - fi - ] -) - -AC_SUBST(bacula) -if test "x$bacula" = "x" ; then - AC_MSG_ERROR(The Bacula source directory must be specified. Use --with-bacula=) -fi - -dnl Bacula version -VERSION=`sed -n -e 's/^.*VERSION.*"\(.*\)"$/\1/p' ${bacula}/src/version.h` -DATE=`sed -n -e 's/^.*[ \t]*BDATE.*"\(.*\)"$/\1/p' ${bacula}/src/version.h` -AC_SUBST(VERSION)dnl -AC_SUBST(DATE)dnl -if test "x$VERSION" = "x" ; then - AC_MSG_ERROR(Bacula version not found) -fi -echo "configuring for Bacula source $VERSION ($DATE)" - - -dnl search for true and false programs. -AC_PATH_PROGS(TRUEPRG, true, :) -AC_PATH_PROGS(FALSEPRG, false, :) - -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 ((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 - might want to install GNU AWK. - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!]) -fi -THE_AWK=$AWK -AC_PATH_PROG(AWK, $THE_AWK, $THE_AWK) - - -dnl ------------------------------------------------------- -dnl# Check for programs. -dnl ------------------------------------------------------ -AC_PROG_INSTALL -AC_PATH_PROG(MV, mv, mv) -AC_PATH_PROG(RM, rm, rm) -AC_PATH_PROG(CP, cp, cp) -AC_PATH_PROG(ECHO, echo, echo) -AC_PATH_PROG(AR, ar, ar) - -dnl -------------------------------------------------- -dnl OP Sys determination (see aclocal.m4) -dnl -------------------------------------------------- -BA_CHECK_OPSYS - -# ----------------------------------------------------------- -dnl OPSys Distribution determination (see aclocal.m4) -# ---------------------------------------------------------- -BA_CHECK_OPSYS_DISTNAME - -# ------------------------------------------------------------------------- -# If the user has not set --exec-prefix, we default to ${prefix} -# ------------------------------------------------------------------------- -if test x${exec_prefix} = xNONE ; then - exec_prefix=${prefix} -fi - - -dnl# -------------------------------------------------------------------------- -dnl# CHECKING COMMAND LINE OPTIONS -dnl# -------------------------------------------------------------------------- - - -# ------------------------------------------------------------------------- -# Set variables for bimagemgr installation -# ------------------------------------------------------------------------- -bimagemgr_cgidir=/var/www/cgi-bin -AC_ARG_WITH(bimagemgr-cgidir, - [ --with-bimagemgr-cgidir=DIR specify bimagemgr cgi-bin dir], - [ - if test "x$withval" != "xno" ; then - bimagemgr_cgidir=$withval - fi - ] -) - -bimagemgr_docdir=/var/www/html -AC_ARG_WITH(bimagemgr-docdir, - [ --with-bimagemgr-docdir=DIR specify bimagemgr doc root dir], - [ - if test "x$withval" != "xno" ; then - bimagemgr_docdir=$withval - fi - ] -) - -bimagemgr_binowner=root -AC_ARG_WITH(bimagemgr-binowner, - [ --with-bimagemgr-binowner=USER specify bimagemgr binary file owner], - [ - if test "x$withval" != "xno" ; then - bimagemgr_binowner=$withval - fi - ] -) - -bimagemgr_bingroup=root -AC_ARG_WITH(bimagemgr-bingroup, - [ --with-bimagemgr-bingroup=USER specify bimagemgr binary file group], - [ - if test "x$withval" != "xno" ; then - bimagemgr_bingroup=$withval - fi - ] -) - -bimagemgr_dataowner=apache -AC_ARG_WITH(bimagemgr-dataowner, - [ --with-bimagemgr-dataowner=USER specify bimagemgr data file owner], - [ - if test "x$withval" != "xno" ; then - bimagemgr_dataowner=$withval - fi - ] -) - -bimagemgr_datagroup=apache -AC_ARG_WITH(bimagemgr-datagroup, - [ --with-bimagemgr-datagroup=USER specify bimagemgr data file group], - [ - if test "x$withval" != "xno" ; then - bimagemgr_datagroup=$withval - fi - ] -) - -AC_SUBST(bimagemgr_cgidir) -AC_SUBST(bimagemgr_docdir) -AC_SUBST(bimagemgr_binowner) -AC_SUBST(bimagemgr_bingroup) -AC_SUBST(bimagemgr_dataowner) -AC_SUBST(bimagemgr_datagroup) - - -AC_SUBST(bacula) - -# -# Finally we set appropriate distribution specific -# variables and defaults -# -# PFILES are platform specific files -PFILES="" -WIN32= -MACOSX= -hostname=`uname -n | cut -d '.' -f 1` -case "$DISTNAME" in -aix) - DISTVER=`uname -r` - ;; -alpha) - DISTVER=`uname -r` - ;; -bsdi) - DISTVER=`uname -a |awk '{print $3}'` - ;; -cygwin) - DISTVER=`uname -a |awk '{print $3}'` - WIN32=win32 - ;; -darwin) - DISTVER=`uname -r` - ;; -debian) - DISTVER=`cat /etc/debian_version` - ;; -freebsd) - DISTVER=`uname -a |awk '{print $3}'` - ;; -hpux) - DISTVER=`uname -r` - ;; -irix) - DISTVER=`uname -r` - ;; -netbsd) - DISTVER=`uname -a |awk '{print $3}'` - ;; -openbsd) - DISTVER=`uname -a |awk '{print $3}'` - ;; -redhat) - if test -f /etc/whitebox-release ; then - f=/etc/whitebox-release - else - f=/etc/redhat-release - fi - if test `cat $f | grep release |\ - cut -f 3 -d ' '`x = "Enterprise"x ; then - DISTVER="Enterprise "`cat $f | grep release |\ - cut -f 6 -d ' '` - else - DISTVER=`cat /etc/redhat-release | grep release |\ - cut -f 5 -d ' '` - fi - hostname=`hostname -s` - ;; -mandrake) - DISTVER=`cat /etc/mandrake-release | grep release |\ - cut -f 5 -d ' '` - ;; -gentoo) - DISTVER=`awk '/version / {print $5}' < /etc/gentoo-release` - ;; -slackware) - DISTVER=`cat /etc/slackware-version` - ;; -solaris) - DISTVER=`uname -r` - ;; -suse) - DISTVER=`cat /etc/SuSE-release |grep VERSION|\ - cut -f 3 -d ' '` - ;; -suse5) - DISTNAME=suse - DISTVER=5.x - ;; -unknown) - DISTVER=unknown - ;; -*) - echo " === Something went wrong. Unknown DISTNAME $DISTNAME ===" - ;; -esac - -AC_SUBST(hostname) - -AC_SUBST(DISTNAME) -AC_SUBST(DISTVER) - -dnl# common parts of the Makefile -MCOMMON=./autoconf/Make.common -AC_SUBST_FILE(MCOMMON) - - -AC_OUTPUT([ \ - autoconf/Make.common \ - Makefile \ - bimagemgr/Makefile \ - bimagemgr/bacula-bimagemgr.spec \ - $PFILES ], - [ ] -) - - -echo " -Configuration on `date`: - - Host: $host -- ${DISTNAME} ${DISTVER} - Source code location: ${bacula} - - " > config.out - -cat config.out diff --git a/gui/autoconf/install-sh b/gui/autoconf/install-sh deleted file mode 100755 index 11870f1b01..0000000000 --- a/gui/autoconf/install-sh +++ /dev/null @@ -1,251 +0,0 @@ -#!/bin/sh -# -# install - install a program, script, or datafile -# This comes from X11R5 (mit/util/scripts/install.sh). -# -# Copyright 1991 by the Massachusetts Institute of Technology -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of M.I.T. not be used in advertising or -# publicity pertaining to distribution of the software without specific, -# written prior permission. M.I.T. makes no representations about the -# suitability of this software for any purpose. It is provided "as is" -# without express or implied warranty. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. It can only install one file at a time, a restriction -# shared with many OS's install programs. - - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" - - -# put in absolute paths if you don't have them in your path; or use env. vars. - -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" -mkdirprog="${MKDIRPROG-mkdir}" - -transformbasename="" -transform_arg="" -instcmd="$mvprog" -chmodcmd="$chmodprog 0755" -chowncmd="" -chgrpcmd="" -stripcmd="" -rmcmd="$rmprog -f" -mvcmd="$mvprog" -src="" -dst="" -dir_arg="" - -while [ x"$1" != x ]; do - case $1 in - -c) instcmd="$cpprog" - shift - continue;; - - -d) dir_arg=true - shift - continue;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; - - -s) stripcmd="$stripprog" - shift - continue;; - - -t=*) transformarg=`echo $1 | sed 's/-t=//'` - shift - continue;; - - -b=*) transformbasename=`echo $1 | sed 's/-b=//'` - shift - continue;; - - *) if [ x"$src" = x ] - then - src=$1 - else - # this colon is to work around a 386BSD /bin/sh bug - : - dst=$1 - fi - shift - continue;; - esac -done - -if [ x"$src" = x ] -then - echo "install: no input file specified" - exit 1 -else - : -fi - -if [ x"$dir_arg" != x ]; then - dst=$src - src="" - - if [ -d $dst ]; then - instcmd=: - chmodcmd="" - else - instcmd=$mkdirprog - fi -else - -# Waiting for this to be detected by the "$instcmd $src $dsttmp" command -# might cause directories to be created, which would be especially bad -# if $src (and thus $dsttmp) contains '*'. - - if [ -f "$src" ] || [ -d "$src" ] - then - : - else - echo "install: $src does not exist" - exit 1 - fi - - if [ x"$dst" = x ] - then - echo "install: no destination specified" - exit 1 - else - : - fi - -# If destination is a directory, append the input filename; if your system -# does not like double slashes in filenames, you may need to add some logic - - if [ -d $dst ] - then - dst="$dst"/`basename $src` - else - : - fi -fi - -## this sed command emulates the dirname command -dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` - -# Make sure that the destination directory exists. -# this part is taken from Noah Friedman's mkinstalldirs script - -# Skip lots of stat calls in the usual case. -if [ ! -d "$dstdir" ]; then -defaultIFS=' - ' -IFS="${IFS-${defaultIFS}}" - -oIFS="${IFS}" -# Some sh's can't handle IFS=/ for some reason. -IFS='%' -set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` -IFS="${oIFS}" - -pathcomp='' - -while [ $# -ne 0 ] ; do - pathcomp="${pathcomp}${1}" - shift - - if [ ! -d "${pathcomp}" ] ; - then - $mkdirprog "${pathcomp}" - else - : - fi - - pathcomp="${pathcomp}/" -done -fi - -if [ x"$dir_arg" != x ] -then - $doit $instcmd $dst && - - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi -else - -# If we're going to rename the final executable, determine the name now. - - if [ x"$transformarg" = x ] - then - dstfile=`basename $dst` - else - dstfile=`basename $dst $transformbasename | - sed $transformarg`$transformbasename - fi - -# don't allow the sed command to completely eliminate the filename - - if [ x"$dstfile" = x ] - then - dstfile=`basename $dst` - else - : - fi - -# Make a temp file name in the proper directory. - - dsttmp=$dstdir/#inst.$$# - -# Move or copy the file name to the temp name - - $doit $instcmd $src $dsttmp && - - trap "rm -f ${dsttmp}" 0 && - -# and set any options; do chmod last to preserve setuid bits - -# If any of these fail, we abort the whole thing. If we want to -# ignore errors from any of these, just make sure not to ignore -# errors from the above "$doit $instcmd $src $dsttmp" command. - - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi && - -# Now rename the file to the real destination. - - $doit $rmcmd -f $dstdir/$dstfile && - $doit $mvcmd $dsttmp $dstdir/$dstfile - -fi && - - -exit 0 diff --git a/gui/autoconf/install.sh b/gui/autoconf/install.sh deleted file mode 100755 index ea88212bb5..0000000000 --- a/gui/autoconf/install.sh +++ /dev/null @@ -1,235 +0,0 @@ -#!/bin/sh -# -# install - install a program, script, or datafile -# This comes from X11R5. -# -# $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ -# -# This script is compatible with the BSD install script, but was written -# from scratch. -# - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" - - -# put in absolute paths if you don't have them in your path; or use env. vars. - -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" -mkdirprog="${MKDIRPROG-mkdir}" - -tranformbasename="" -transform_arg="" -instcmd="$mvprog" -chmodcmd="$chmodprog 0755" -chowncmd="" -chgrpcmd="" -stripcmd="" -rmcmd="$rmprog -f" -mvcmd="$mvprog" -src="" -dst="" -dir_arg="" - -while [ x"$1" != x ]; do - case $1 in - -c) instcmd="$cpprog" - shift - continue;; - - -d) dir_arg=true - shift - continue;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; - - -s) stripcmd="$stripprog" - shift - continue;; - - -t=*) transformarg=`echo $1 | sed 's/-t=//'` - shift - continue;; - - -b=*) transformbasename=`echo $1 | sed 's/-b=//'` - shift - continue;; - - *) if [ x"$src" = x ] - then - src=$1 - else - # this colon is to work around a 386BSD /bin/sh bug - : - dst=$1 - fi - shift - continue;; - esac -done - -if [ x"$src" = x ] -then - echo "install: no input file specified" - exit 1 -else - true -fi - -if [ x"$dir_arg" != x ]; then - dst=$src - src="" - - if [ -d $dst ]; then - instcmd=: - else - instcmd=mkdir - fi -else - -# Waiting for this to be detected by the "$instcmd $src $dsttmp" command -# might cause directories to be created, which would be especially bad -# if $src (and thus $dsttmp) contains '*'. - - if [ -f $src -o -d $src ] - then - true - else - echo "install: $src does not exist" - exit 1 - fi - - if [ x"$dst" = x ] - then - echo "install: no destination specified" - exit 1 - else - true - fi - -# If destination is a directory, append the input filename; if your system -# does not like double slashes in filenames, you may need to add some logic - - if [ -d $dst ] - then - dst="$dst"/`basename $src` - else - true - fi -fi - -## this sed command emulates the dirname command -dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` - -# Make sure that the destination directory exists. -# this part is taken from Noah Friedman's mkinstalldirs script - -# Skip lots of stat calls in the usual case. -if [ ! -d "$dstdir" ]; then -defaultIFS=' -' -IFS="${IFS-${defaultIFS}}" - -oIFS="${IFS}" -# Some sh's can't handle IFS=/ for some reason. -IFS='%' -set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` -IFS="${oIFS}" - -pathcomp='' - -while [ $# -ne 0 ] ; do - pathcomp="${pathcomp}${1}" - shift - - if [ ! -d "${pathcomp}" ] ; - then - $mkdirprog "${pathcomp}" - else - true - fi - - pathcomp="${pathcomp}/" -done -fi - -if [ x"$dir_arg" != x ] -then - $doit $instcmd $dst && - - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi -else - -# If we're going to rename the final executable, determine the name now. - - if [ x"$transformarg" = x ] - then - dstfile=`basename $dst` - else - dstfile=`basename $dst $transformbasename | - sed $transformarg`$transformbasename - fi - -# don't allow the sed command to completely eliminate the filename - - if [ x"$dstfile" = x ] - then - dstfile=`basename $dst` - else - true - fi - -# Make a temp file name in the proper directory. - - dsttmp=$dstdir/#inst.$$# - -# Move or copy the file name to the temp name - - $doit $instcmd $src $dsttmp && - - trap "rm -f ${dsttmp}" 0 && - -# and set any options; do chmod last to preserve setuid bits - -# If any of these fail, we abort the whole thing. If we want to -# ignore errors from any of these, just make sure not to ignore -# errors from the above "$doit $instcmd $src $dsttmp" command. - - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && - -# Now rename the file to the real destination. - - $doit $rmcmd -f $dstdir/$dstfile && - $doit $mvcmd $dsttmp $dstdir/$dstfile - -fi && - - -exit 0 diff --git a/gui/autoconf/mkinstalldirs b/gui/autoconf/mkinstalldirs deleted file mode 100755 index 8ab885ec92..0000000000 --- a/gui/autoconf/mkinstalldirs +++ /dev/null @@ -1,99 +0,0 @@ -#! /bin/sh -# mkinstalldirs --- make directory hierarchy -# Author: Noah Friedman -# Created: 1993-05-16 -# Public domain - -errstatus=0 -dirmode="" - -usage="\ -Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." - -# process command line arguments -while test $# -gt 0 ; do - case "${1}" in - -h | --help | --h* ) # -h for help - echo "${usage}" 1>&2; exit 0 ;; - -m ) # -m PERM arg - shift - test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } - dirmode="${1}" - shift ;; - -- ) shift; break ;; # stop option processing - -* ) echo "${usage}" 1>&2; exit 1 ;; # unknown option - * ) break ;; # first non-opt arg - esac -done - -for file -do - if test -d "$file"; then - shift - else - break - fi -done - -case $# in -0) exit 0 ;; -esac - -case $dirmode in -'') - if mkdir -p -- . 2>/dev/null; then - echo "mkdir -p -- $*" - exec mkdir -p -- "$@" - fi ;; -*) - if mkdir -m "$dirmode" -p -- . 2>/dev/null; then - echo "mkdir -m $dirmode -p -- $*" - exec mkdir -m "$dirmode" -p -- "$@" - fi ;; -esac - -for file -do - set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` - shift - - pathcomp= - for d - do - pathcomp="$pathcomp$d" - case "$pathcomp" in - -* ) pathcomp=./$pathcomp ;; - esac - - if test ! -d "$pathcomp"; then - echo "mkdir $pathcomp" - - mkdir "$pathcomp" || lasterr=$? - - if test ! -d "$pathcomp"; then - errstatus=$lasterr - else - if test ! -z "$dirmode"; then - echo "chmod $dirmode $pathcomp" - - lasterr="" - chmod "$dirmode" "$pathcomp" || lasterr=$? - - if test ! -z "$lasterr"; then - errstatus=$lasterr - fi - fi - fi - fi - - pathcomp="$pathcomp/" - done -done - -exit $errstatus - -# Local Variables: -# mode: shell-script -# sh-indentation: 3 -# End: -# mkinstalldirs ends here diff --git a/gui/bacula-web/.cvsignore b/gui/bacula-web/.cvsignore deleted file mode 100644 index 75790c67fc..0000000000 --- a/gui/bacula-web/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -%%*.php diff --git a/gui/bacula-web/CONTACT b/gui/bacula-web/CONTACT deleted file mode 100644 index edc09b93b8..0000000000 --- a/gui/bacula-web/CONTACT +++ /dev/null @@ -1,2 +0,0 @@ - -Juan Luis Francés, bacula_list AT veloxia.com diff --git a/gui/bacula-web/COPYING b/gui/bacula-web/COPYING deleted file mode 100644 index 960fe7469f..0000000000 --- a/gui/bacula-web/COPYING +++ /dev/null @@ -1,280 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS diff --git a/gui/bacula-web/ChangeLog b/gui/bacula-web/ChangeLog deleted file mode 100644 index 295de189ae..0000000000 --- a/gui/bacula-web/ChangeLog +++ /dev/null @@ -1,40 +0,0 @@ -26-01-2006 Bacula-web 1.3 - - (0000019,0000021) Fixed psql querys. - - Fixed XTicks (Graphs). - -06-10-2005 Bacula web 1.2 - - Human redable Y-axis of graphs - - Updated French translation - - Initial support for PostgreSQL (thanks to Dan Langille) - - Upgrade Phplot to 5.0rc2 version. - - Added templates_c to cvs repository. - - Added German translation - - Fix mysql database size (reported by Roland Arendes) - - Added JobID column in report template. (thanks to Stephan Ebeit) - - Upgraded Smarty to 2.6.10 version. - - Added multicatalog support - -25-10-2004 Bacula web 1.1 - - Add array_fill function (as Mikael suggested) - - Fix url encode of links. (reported by Phil Stracchino) - - Upgraded Smarty to 2.6.6 version. - - Add French translation - -04-08-2004 Bacula web 1.0 - - Add Italian translation - - Change some colors of graphs. More clear now (I hope). - - (0000012) Fix, don't load config in report.php - - (0000015) Fix, error date in When expire? field. - -14-06-2004 Bacula web 1.0 Beta2 - - (0000009) Fix incorrect date of "select report". - - (0000010) Fix incorrect symbolic link (Add paths.php). - - (0000008) Fix elapsed time of execution of jobs more than 24h in Lite mode. - -11-06-2004 Bacula-web 1.0 Beta1 - - Check connection error (reported by Thomas Contamine) - - register_globals on/off compatible (reported by Thomas Contamine) - - Fix bug in graph type=69. The data now is correct. - - Fix config system. - - Very internal fixes. - + Add "Last report". diff --git a/gui/bacula-web/README b/gui/bacula-web/README deleted file mode 100644 index dfd6bccce2..0000000000 --- a/gui/bacula-web/README +++ /dev/null @@ -1,64 +0,0 @@ -This is my little contribution to the bacula community and the -best backup software (http://www.bacula.org). - -Juan Luis Francés Jiménez (bacula_list [at] veloxia.com) - -News and bugs: http://indpnday.com/bacula_stuff/bacula-web/mantisbt/login_page.php - -REQUIREMENTS: -************** - - - Web server (Tested with apache) - - PHP (Tested with php.4.3.4) - - Gettext (Optional) - - GD 2.x - - TrueType (optional) - - Pear DB (http://pear.php.net/package/DB) - - MySQL or PostgreSQL - - Sessions - - If you use PostgreSQL - - dbsize contrib package - - Bacula (Oh!, yes, you need this ;-) ) http://www.bacula.org - - -INSTALL -******* -- Copy this distribution to root directory or a subdirectory of your webroot. -- Edit configs/bacula.conf with your preferences -- Run "test.php" from your browser. - - -NOTES -***** -- Best resolution: 1024x768 -- Best viewed with Firefox. -- Tested with Microsoft Explorer. -- Restart web server if language changes isn't showing itself. - -KNOWN BUGS -********** -- In Pie graphs, the margins don't work. It is a phplot bug. -- The total elapsed time "calculation" is rudimentary. If you have 2 or more concurrency jobs this is not real. - -Send your bugs at this link: http://indpnday.com/bacula_stuff/bacula-web/mantisbt/login_page.php - -TEMPLATES -********* -- In this version you will have to edit code pages (*.php) to show diferent templates. -- Bacula-web needs a good designer!!! ;-) - -TRANSLATIONS -************ -- Edit "messages.po" and send me, please, with your LANGUAGE code. - -- You can extract strings with this command: -$ ./tsmarty2c.php templates > lang.c -$ xgettext lang.c -- Now you must have this file: messages.po -- Edit and send me, please. - - -PS: Feel free to make improvements to the code. All suggestions are welcome. - - -Bacula®is a registered trademark of Kern Sibbald and John Walker diff --git a/gui/bacula-web/TODO b/gui/bacula-web/TODO deleted file mode 100644 index 98ceb42343..0000000000 --- a/gui/bacula-web/TODO +++ /dev/null @@ -1,17 +0,0 @@ -- Improve check errors routines. -- Improve security. (stats.php mainly) -- Optimize database querys (Very poor now) (TO_DAYS,etc.). -- Improve PostgreSQL support. -- Autoresolution of web and graphics (Now only 1024x768) -- SQLPrepareData - type = ALL_CLIENTS_PERIOD_REPORT -- Elapsed time of full execution of clients. (rudimentaryly done) -- Graph generator for "General data". -- Change template from bacula.config -- Show clients and their jobs in a selectable menu. - -LOW PRIORITY ------------- -- WebConsole!!! -- Add support to PDF creation. -- Build documentation of classes. -- Best icons and design ;-) \ No newline at end of file diff --git a/gui/bacula-web/array_fill.func.php b/gui/bacula-web/array_fill.func.php deleted file mode 100644 index d6c23c823b..0000000000 --- a/gui/bacula-web/array_fill.func.php +++ /dev/null @@ -1,14 +0,0 @@ - \ No newline at end of file diff --git a/gui/bacula-web/classes.inc b/gui/bacula-web/classes.inc deleted file mode 100644 index ec57f26f71..0000000000 --- a/gui/bacula-web/classes.inc +++ /dev/null @@ -1,503 +0,0 @@ -dbs = array(); - $i = 2; - $sections = $conf->get(CONFIG_FILE,"DATABASE","host"); - array_push($this->dbs, "DATABASE"); - while ( !empty($sections) ) { - $sections = $conf->get(CONFIG_FILE,"DATABASE".$i,"host"); - if ( !empty($sections) ) - array_push($this->dbs,"DATABASE".$i); - $i++; - } - - if ( $i < 4) - $sec = "DATABASE"; - else { - if ( !empty($_POST['sel_database']) ) { - $_SESSION['DATABASE'] = $_POST['sel_database']; - $sec = $_POST['sel_database']; - } else { - if (isset($_SESSION['DATABASE']) ) - $sec = $_SESSION['DATABASE']; - else - $sec = "DATABASE"; - } - } - - $this->dsn['hostspec'] = $conf->get(CONFIG_FILE,$sec,"host"); - $this->dsn['username'] = $conf->get(CONFIG_FILE,$sec,"login"); - $this->dsn['password'] = $conf->get(CONFIG_FILE,$sec,"pass"); - $this->dsn['database'] = $conf->get(CONFIG_FILE,$sec,"db_name"); - $this->dsn['phptype'] = $conf->get(CONFIG_FILE,$sec,"db_type"); // mysql, pgsql - if ( $conf->get(CONFIG_FILE,$sec,"db_port") ) - $this->dsn[port] = $conf->get(CONFIG_FILE,$sec,"db_port"); - - $this->link =& $this->connect($this->dsn); - - if (DB::isError($this->link)) - die($this->link->getMessage()); - $this->driver = $this->dsn[phptype]; - register_shutdown_function(array(&$this,'close')); - $this->dbs_name = $this->dsn['database']; - } - - function close() { - - $this->link->disconnect(); - } - - - - function CalculateBytesPeriod($server,$StartDate,$EndPeriod) { // Bytes transferred in a period. - - $result =& $this->link->query("select SUM(JobBytes) from Job WHERE EndTime < '$EndPeriod' and EndTime > '$StartDate' and Name='$server'") - or die("classes.inc: Error query: 1"); - $return =& $result->fetchRow(); - return $return[0]; - }//end function - - - - function CalculateFilesPeriod($server,$StartDate,$EndPeriod) { // Number of files transferred in a period. - - $result =& $this->link->query("select SUM(JobFiles) from Job WHERE EndTime < '$EndPeriod' and EndTime > '$StartDate' and Name='$server'") - or die("classes.inc: Error query: 2"); - $return =& $result->fetchRow(); - return $return[0]; - }//end function - - - - function PrepareDate($StartDateMonth,$StartDateDay,$StartDateYear,$EndDateMonth,$EndDateDay,$EndDateYear) { // Convert date for Smarty. Check if only works with Mysql. - - $this->StartDate=$StartDateYear."-".$StartDateMonth."-".$StartDateDay." 00:00:00"; - $this->EndDate=$EndDateYear."-".$EndDateMonth."-".$EndDateDay." 23:59:59"; // last day full - - }//end function - - - - function GetDataVolumes() { - - $volume = array(); - $res = $this->link->query("SELECT Name FROM Pool"); - while ( $tmp =& $res->fetchRow() ) { - if ($this->driver == "mysql" ) - $result = $this->link->query("select Media.VolumeName, Media.VolBytes,Media.VolStatus,Pool.Name,Media.MediaType,Media.LastWritten,FROM_UNIXTIME(UNIX_TIMESTAMP(Media.LastWritten)+Media.VolRetention ) as expire from Pool LEFT JOIN Media ON Media.PoolId=Pool.PoolId where Name='$tmp[0]' order by Media.VolumeName"); - else if ($this->driver == "pgsql") - $result = $this->link->query("select Media.VolumeName, Media.VolBytes,Media.VolStatus,Pool.Name,Media.MediaType,Media.LastWritten, Media.LastWritten + Media.VolRetention * interval '1 second' as expire from Pool LEFT JOIN Media ON Media.PoolId=Pool.PoolId where Name='$tmp[0]' order by Media.VolumeName"); - while ( $tmp1 = $result->fetchRow() ) { - $pos = array_key_exists($tmp[0],$volume); - if ($pos != FALSE) - array_push($volume["$tmp[0]"],$tmp1); - else - $volume += array($tmp[0]=>array($tmp1)); - } - } - - $res->free(); - $result->free(); - return $volume; - } - - function GetDbSize() { - if ( $this->driver == "mysql") { - $dbsize = $this->link->query("show table status") - or die ("classes.inc: Error query: 3"); - if ( $dbsize->numRows() ) { - while ( $res = $dbsize->fetchRow(DB_FETCHMODE_ASSOC) ) - $database_size += $res["Data_length"]; - } - else - return 0; - } - else if ( $this->driver == "pgsql") { - $dbsize = $this->link->query("select pg_database_size('$this->dbs_name')") - or die ("classes.inc: Error query: 4"); - if (PEAR::isError($dbsize)) - die($dbsize->getMessage()); - if ( $dbsize->numRows() ) { - while ( $res = $dbsize->fetchRow() ) - $database_size += $res[0]; - } - else - return 0; - } - $dbsize->free(); - return $database_size; - } - -} - -class BGraph { - - var $type; - var $sizex; - var $sizey; - var $MarginBottom; - var $MarginLeft; - var $Leg; - - - - function BShowGraph($datos,$title,$xlabel,$ylabel,$leyenda,$tipo="lines") { - - global $type; - - require_once ("external_packages/phplot/phplot.php"); - - if ( empty($this->sizex) || empty($this->sizey) ) { //Default size - $this->sizex = "600"; - $this->sizey = "400"; - } - if ( empty($this->MarginBottom) ) { - $this->MarginBottom = 120; - } - - $legend = $leyenda; -// $bgcolor = array(222,206,215); // Background color of graph - $bgcolor = array(207,231,231); - $fgcolor = array(110,41,57); - - - - $graph = new PHPlot($this->sizex,$this->sizey,"",""); - - if ( !empty($type) ) - $graph->setDataType($type); - - $graph->SetDataValues($datos); - $graph->SetPlotType($tipo); -// $graph->SetUseTTF(1); - $graph->SetBackgroundColor($bgcolor); - - $graph->SetLegendPixels(1,20); - $graph->SetDataColors(array('SkyBlue','purple','PeachPuff','aquamarine1','#2CB04B','beige','#9F865F','#135568','orchid','navy','red', 'black', 'blue', 'green', 'brown', 'yellow','cyan','orange','#B9F5A7','#AFAFAF')); - $graph->SetTitle($title); - $graph->SetXLabel($xlabel); - $graph->SetYLabel($ylabel); - $graph->SetPlotAreaWorld("","","",""); - - if ( count($datos) > 5 ) - $graph->SetXDataLabelAngle(90); - else - $graph->SetXDataLabelAngle(0); - $graph->SetNumXTicks(1); -// $graph->SetXDataLabelPos('none'); -// $graph->SetXTickLabelPos('plotdown'); - -// $graph->SetXGridLabelType("time"); -// $graph->SetXTimeFormat("%b ") ; - - if ( $this->Leg == 1 ) { - $this->MarginLeftWithLegend($legend); - $graph->SetMarginsPixels($this->MarginLeft,10,35,$this->MarginBottom); - $graph->SetLegend($legend); - } - else - $graph->SetMarginsPixels(90,35,35,$this->MarginBottom); -// $graph->SetDataColors(array($fgcolor),array( "black")); - $graph->SetFileFormat( "png"); -// $graph->DoScaleData(1,1); -// $graph->DoMovingAverage(1,1,1); - -// FIX ME -- to round y axis. - $vtick = strlen (round ($graph->max_y)); - $res = 1; - for ($i=1;$i < $vtick; $i++) - $res = $res*10; - if (strlen($graph->max_y-$res) != $vtick ) - $res = $res/10; - $graph->SetVertTickIncrement($res); - $graph->DrawGraph(); - - }//end Crear - - -//Estupidez que tengo que cambiar. !!!!!!!!!!! - function SetDataType($typ) { - - global $type; - $type = $typ; - } - - function MarginLeftWithLegend($clients) { - - $maxlen = 0; - - while (next($clients)) { - $tmp = strlen(current($clients)); - if ( $tmp > $maxlen ) - $maxlen = $tmp; - } - $this->MarginLeft = $maxlen * 9; - } - -}//end class - - - - - -class BCreateGraph extends BGraph { - - var $BD_bacula; - var $izquierda; - var $derecha; - var $StartDate; - var $EndDate; - var $elapsed; // Default elapsed time to show complex graphs - - - - function BCreateGraph() { - - $this->StartDate = "1900-01-01"; - $this->EndDate = "4000-01-01"; - $this->elapsed = "86400"; // 24 hours in seconds. - - } - - - - function BCreate($server,$tipo_dato,$title,$tipo="bars",$xlabel="",$ylabel="") { - - global $DB_bacula; - global $izquierda; - global $derecha; - global $clientes; - - $this->clientes=array(); - $DB_bacula = new Bweb(); - $datos = $this->SQLPrepareData($server,$tipo_dato); - - if ( empty($datos) ) { //No data = No stats = Empty graph - header("Content-type: image/png"); - $img= @ImageCreate(200,100) or die ("Cannot intialize GD stream"); - $bgc= ImageColorAllocate($img, 0, 255,255); - $txc= ImageColorAllocate($img, 0,0,0); - ImageString($img, 5, 4, 4, "None data to process", $txc); - ImagePng($img); - ImageDestroy($img); - return; - } - - if ( empty ($xlabel) ) { // If no label, table names like leyends - $xlabel=$derecha; $ylabel=$izquierda; - } - - $this->SetDataType("text-data"); - $this->BShowGraph($datos,$title,$xlabel,$ylabel,$this->clientes,$tipo); - - } - - - - function SQLPrepareData($servidor,$tipo_dato=0) { // Prepare bytes data from database. - - global $DB_bacula; - global $izquierda; - global $derecha; - - if ( $tipo_dato<30 ) { // Simple graph. Only 2 data - - switch ($tipo_dato) - { - case BACULA_TYPE_BYTES_FILES: - $izquierda="jobbytes"; - $derecha="jobfiles"; - break; - case BACULA_TYPE_FILES_JOBID: - $izquierda="jobfiles"; - $derecha="jobid"; - break; - default: - $izquierda="jobbytes"; - $derecha="endtime"; - break; - } - $result = $DB_bacula->link->query("select $derecha,$izquierda from Job where Name='$servidor' and EndTime < '$this->EndDate' and EndTime > '$this->StartDate' order by SchedTime asc") - or die ("classes.inc: Error at query: 5"); - while ( $row = $result->fetchRow(DB_FETCHMODE_ASSOC) ) { - $whole_result[] = $this->array_merge_php4($row["$derecha"],$row[$izquierda]); - } - $result->free(); - } else { // Complex graph. 3 or more data. - - switch ( $tipo_dato ) - { - case '30': // Unused, at this time. - $result = $DB_bacula->link->query("select JobBytes,JobFiles,Jobid from Job where Name='$servidor' order by EndTime asc") - or die ("classes.inc: Error at query: 6"); - while ( $row = $result->fetchRow(DB_FETCHMODE_ASSOC) ) - $whole_result[] = array_merge($row["Jobid"],$row["JobFiles"],$row["JobBytes"]); - $result->free(); - break; - case BACULA_TYPE_BYTES_ENDTIME_ALLJOBS: // Special: Generic graph from all clientes. - $i = -1; // Counter of number of jobs of one client. SP: Contador del nmero de jobs totales de un cliente. - $i2 = 0; // Counter of number of keys of array. SP: Contador del nmero de valores del array. - - if ($DB_bacula->driver == "mysql") { - $res = $DB_bacula->link->query("select Name from Job where UNIX_TIMESTAMP(EndTime) > UNIX_TIMESTAMP(NOW())-$this->elapsed group by Name order by Name desc") - or die ("classes.inc: Error at query: 7"); - $resdata = $DB_bacula->link->query("select date_format(EndTime,\"%Y-%m-%d\") from Job where UNIX_TIMESTAMP(EndTime) > UNIX_TIMESTAMP(NOW())-$this->elapsed group by date_format(EndTime, \"%Y-%m-%d\") order by EndTime") - or die ("classes.inc: Error at query: 8"); - } - else if ($DB_bacula->driver == "pgsql") { - $res = $DB_bacula->link->query("select Name from Job where EndTime > now() - 1*interval'$this->elapsed s' group by Name order by Name desc") - or die ("classes.inc: Error at query: 8"); - $resdata = $DB_bacula->link->query("select to_char(EndTime,'YY-MM-DD') from Job where EndTime > NOW() - 1*interval'$this->elapsed s' group by EndTime order by EndTime") - or die ("classes.inc: Error at query: 9"); - } - - if (PEAR::isError($resdata)) - die("classes.inc: Error at query: 9.1
".$resdata->getMessage()); - while ( $tmpdata = $res->fetchRow() ) - array_push($this->clientes,$tmpdata[0]); - -// echo "
";
-//                                      print_r ($this->clientes);
-//                                      echo "
"; - - - $spr = array(); // Temporal array - $spr2 = array(); // Temporal array - $whole_result = array(); - - while ( $tmpdata = $resdata->fetchRow() ) { - $count++; - array_push($spr,$tmpdata[0]); - if ($DB_bacula->driver == "mysql") - $result = $DB_bacula->link->query("select date_format(EndTime,\"%Y-%m-%d\"),SUM(JobBytes) as sum,Name as name,count(Name) as Nname from Job WHERE EndTime like '$tmpdata[0]%' group by Name order by Name desc") - or die ("classes.inc: Error at query: 10"); - else if ($DB_bacula->driver == "pgsql") { - $query = "select to_char(EndTime,'YY-MM-DD'),SUM(JobBytes) as sum,Name,count(Name) as Nname from Job WHERE EndTime like '%$tmpdata[0]%' group by EndTime,Name order by Name desc"; - $result = $DB_bacula->link->query($query) - or die ("classes.inc: Error at query: 11"); - } - while ( $row = $result->fetchRow(DB_FETCHMODE_ASSOC) ) { - $spr2 = array_merge($spr2,array($row["name"]=>$row["sum"])); - $i = $result->numRows(); - } - - -// echo "
";
-//                                              print_r ($spr2);
-//                                              echo "
"; - - reset ($this->clientes); - do { - if ( $spr2[current($this->clientes)] != NULL) - array_push($spr,$spr2[current($this->clientes)]); - else - array_push($spr,0); - } while ( next($this->clientes) ); - - if ( $i2 < $i ) - $i2 = $i; - - if ( $tmpdata[0] != $row["EndTime"] ) - array_push($whole_result,$spr); - - $spr = array(); - $spr2 = array(); - } - - for ( $i = 0; $i < count($whole_result); $i++ ) { // To equal the arrays so that the graph is not unsquared. SP:Igualamos las matrices para que la gr�ica no se descuadre - $tmp = count($whole_result[$i]); - if ( $i2 < $tmp ) // Estupidez?. Check this code later... - continue; - $tmp = $i2 - $tmp; - for ( $a = 0; $a <= $tmp; $a++ ) - array_push($whole_result[$i],"0"); // Fill the array - } - $resdata->free(); -// echo "DEBUG:
"; -// echo "
";
-//                                      print_r ($whole_result);
-//                                      echo "
"; - break; - - default: - break; - } - } -// $result->free(); - return $whole_result; - }//end function - - - - //Convert date from mysql to smarty. THE SAME FUNCTION AT 2 CLASSES. THIS WAY IS BUGGY. TO SOLVE LATER. - function PrepareDate($StartDateMonth,$StartDateDay,$StartDateYear,$EndDateMonth,$EndDateDay,$EndDateYear){ - - $this->StartDate = $StartDateYear."-".$StartDateMonth."-".$StartDateDay." 00:00:00"; - $this->EndDate = $EndDateYear."-".$EndDateMonth."-".$EndDateDay." 23:59:00"; - - }//end function - - - function array_merge_php4($array1,$array2) { - $return=array(); - - foreach(func_get_args() as $arg) { - if(!is_array($arg)){ - $arg=array($arg); - } - foreach($arg as $key=>$val){ - if(!is_int($key)){ - $return[$key]=$val; - }else{ - $return[]=$val; - } - } - } - return $return; - } - -}//end class - -?> diff --git a/gui/bacula-web/configs/.htaccess b/gui/bacula-web/configs/.htaccess deleted file mode 100644 index 8d2f25636d..0000000000 --- a/gui/bacula-web/configs/.htaccess +++ /dev/null @@ -1 +0,0 @@ -deny from all diff --git a/gui/bacula-web/configs/bacula.conf b/gui/bacula-web/configs/bacula.conf deleted file mode 100644 index a48d3e7580..0000000000 --- a/gui/bacula-web/configs/bacula.conf +++ /dev/null @@ -1,87 +0,0 @@ -# This is the config file. -# Please, modify with your preferences - -# Title of main window -title = Bacula-Web 1.2 - -# If http://www.domain.com/bacula/ -# root = /bacula -root = /bacula-web - -# Show a box with a detailed report at index or Status report -# I'll remove this in future versions. -IndexReport = 0 - -# Secs since last run. Default 24h. -# Unused in this version -# LastRun = 86400 - - -# Mode of index page: Full or Lite -# Only useful if IndexReport = 0 -# -# Lite: Only shows a little report for the last 24h. -# Maybe you would want this if you have very much jobs. -# Full: This shows a full table with detailed data -# Maybe you would want this if you have a bit of jobs. -mode = Lite - - - -# LANGUAGE: -# en_EN -> English -# es_ES -> Spanish, Mantained by Juan Luis Francés Jiménez. -# it_IT -> Italian, Mantained by Gian Domenico Messina (gianni.messina AT c-ict.it). -# fr_FR -> Frech, Mantained by Morgan LEFIEUX (comete AT daknet.org). -# de_DE -> German, Mantained by Florian Heigl. -lang = en_EN - - - -# DATABASE INFORMATION AND MULTICATALOG SUPPORT -# --------------------------------------------- -# This section contains the database configuration. -# You must create a user or to give it permissions to access -# from web machine. - -[.DATABASE] -# Your database host or IP -host = localhost - -# Your database login -login = bacula - -# Your database password. -# For empty passwords use this: -# pass = -pass = - -# Your database name -db_name = bacula - -# Your database type: mysql,sqlite,pgsql -db_type = mysql - -# Uncomment this and modify it if your database runs on a non standard port. -# db_port = 3306 - -# MULTICATALOG SUPPORT -# --------------------- -# If you have only one catalog don't remove the comments. -# If you have 2 or more catalogs, please remove the coments of this section -# and configure with your preferences. -# You can add so many as you want. - -#[.DATABASE2] -#host = 192.168.2.55 -#login = bacula -#pass = -#db_name = bacula -#db_type = mysql - -#[.DATABASE3] -#host = 192.168.20.40 -#login = bacula -#pass = -#db_name = bacula -#db_type= pgsql diff --git a/gui/bacula-web/external_packages/phplot/ChangeLog b/gui/bacula-web/external_packages/phplot/ChangeLog deleted file mode 100644 index b1c6d91afb..0000000000 --- a/gui/bacula-web/external_packages/phplot/ChangeLog +++ /dev/null @@ -1,1610 +0,0 @@ -2004-10-24 18:40 migueldb - - * phplot.php: - - + array_merge_php4(): added to cope with the bug introduced by - the change in array_merge() from PHP4 to PHP5 (I haven't verified - this) - - + Fixed some divisions by zero, thanks to an old bug report. - -2004-10-24 17:44 migueldb - - * README.txt, doc/quickstart.html, examples/create_chart.php, - examples/format_chart.php, examples/inline_image.php: - - + Updated to the latest changes in phplot - -2004-10-24 17:40 migueldb - - * doc/index.php: - - + Minimal change - -2004-09-09 20:27 migueldb - - * phplot.php: - - + SetPointSize(): deprecated - - + SetPointSizes(): added as replacement for SetPointSize().Now - able to set point sizes on a per line basis. - - + SetPointShape(): deprecated. - - + SetPointShapes(): added as replacement for SetPointShape(). Now - able to set point shape on a per line basis. - - + DrawDot(): now needs record number to decide which dot shape - and size to draw. - - + CalcMargins(): dirty fix for x data label placing. - - + tile_img(): fixed tile placement. - -2004-06-14 14:19 migueldb - - * phplot.php: - - + SetXTickLabelPos() and others: more on the bug reported by Jo - Demol. - -2004-06-14 11:35 migueldb - - * phplot.php: - - + Fixed bug reported by Jo Demol. - -2004-05-11 14:14 migueldb - - * phplot.php: - - + SetBgImage(): added. - - + SetPlotAreaBgImage(): added. - - + SetInputFile(): deprecated. - - + DrawBackground(): now accepts images as backgrounds. - - + DrawPlotAreaBackground(): now accepts images as backgrounds. - - + tile_img(): internal method added. - -2004-04-14 13:26 migueldb - - * phplot.php: - - + DrawXAxis(): No more horizontal tick nor label at X-axis' - sides. - -2004-03-21 18:01 migueldb - - * phplot.php: - - + x/y_label_type automaticaally set to 'data' when setting label - precision. - - + minor corrections. - -2004-03-03 08:17 afan - - * phplot.php: PlotAreaWorld - last fix - -2004-03-03 02:40 migueldb - - * phplot.php: - - + SetPlotAreaWorld(): fixed. - -2004-03-01 21:14 afan - - * phplot.php: Needed one more = in ($ymin === NULL) - -2004-02-29 11:21 afan - - * phplot.php: phplot.php SetPlotAreaWorld - changed ($!ymin) to - ($ymin == NULL) for cases where $ymin = 0. (also done for ymax, - xmin, xmax) afan - -2004-02-23 10:34 migueldb - - * phplot.php: - - + SetPlotAreaWorld(): Fixed the calculation of max and min y. - -2004-02-14 12:29 migueldb - - * phplot.php: - - + SetPlotAreaWorld(): Fine grained control over which values are - auto-calculated. Should fix some trouble with y-scaling. - - + DrawGraph(): yet another fix to drawing order... - - + CheckOption(): fixes problems with mixedcase arguments. - - + SetFileFormat(), FormatLabel(): typos fixed. - -2004-01-30 12:56 migueldb - - * examples/data_sample1.php: - - + Added "stacked bars" plot type. - -2004-01-30 12:50 migueldb - - * phplot.php: - - + DrawStackedBars(): added plot type. - - + SetEqualXCoord(): renamed to more intuitive CalcBarWidths(). - Modified for stacked bars. - - + Changed graphing order. The grids are again at the background, - as they should. Added var $grid_at_foreground (bool) to alter - this. - - + text-data-pie renamed to text-data-single. - - + SetPlotAreaWorld(): fixed min_y bug. - -2004-01-29 17:10 migueldb - - * phplot.php: - - + SetPlotAreaWorld(): default behaviour is to adjust Y axis to Y - min/max. - - + SetSkipLeftTick(), SetSkipRightTick(): added. - - + SetFileFormat(): fixed silly bug that prevented selections from - being made. - -2004-01-28 20:00 migueldb - - * phplot.php, doc/quickstart.html: - - + Merged final changes to rel-5-0 into main trunk. - -2004-01-28 19:12 migueldb - - * phplot.php: - - + DrawGraph(): Fixed graph drawing order for default plots - (bars). Removed some redundat lines of code. - -2004-01-28 18:58 migueldb - - * doc/quickstart.html: - - + More stuff... - -2004-01-28 18:49 migueldb - - * phplot.php: - - + DrawPieChart(): fixed use of old variable. - - + First steps for data labels autoadjustement and skipping. - -2004-01-27 12:12 migueldb - - * phplot.php: - - + Added missing SetSkipTopTick() - - + Some comments. - - + Fixed option checking for a couple of functions. Added some - more. - -2004-01-27 00:03 migueldb - - * doc/index.php: [no log message] - -2004-01-25 20:28 migueldb - - * doc/index.php: - - + Fixed typo. - -2004-01-25 19:57 migueldb - - * doc/index.php: - - + Commit for 5.0rc1. - -2004-01-25 19:50 migueldb - - * README.txt, doc/index.php, doc/quickstart.html, doc/schema.html: - - + Commit for 5.0rc1. - -2004-01-25 19:44 migueldb - - * phplot.php: - - + Added missing SetDrawXDataLabelLines() and - SetDrawYDataLabelLines(). - - + Added some parameter checking with CheckOption(). - - + Added some comments. - -2004-01-25 19:32 migueldb - - * examples/: create_chart.php, example3.php, format_chart.php: - - + Commiting for 5.0rc1 - -2004-01-25 18:21 migueldb - - * examples/example8.php: [no log message] - -2004-01-25 18:20 migueldb - - * doc/style.css: - - + Added 'box' style. - -2004-01-25 17:11 migueldb - - * phplot.php: - - + Set*Colors(): should be faster when using default values. - - + array_pad_array() non class-member function added. - - + PadArrays(): now pads arrays with themselves, to mimic previous - behaviour, uses array_pad_array() - - + DrawAxisLegend(): skeleton added. To do. - -2004-01-24 23:18 migueldb - - * phplot_data.php: - - + DoMovingAverage(): some corrections. The legend isn't correctly - updated yet. - -2004-01-24 23:16 migueldb - - * phplot.php: - - + PadArrays(): added. Formerly in SetDataValues(), now called - from DrawGraph(). Fixes SetLineWidths() buggy behaviour. - - + Added MINY and MAXY constants, for DrawXDataLine(). - - + DrawGraph(): changed order when drawing axis, to avoid - overwriting. - -2004-01-21 20:08 migueldb - - * doc/quickstart.html: - - + More corrections - - + Some links - - + $Id$ tag - -2004-01-21 19:55 migueldb - - * doc/quickstart.html: - - + HTML heavily cleaned - - + Some corrections - -2004-01-21 18:47 migueldb - - * doc/index.php: - - + Added quickstart. - - + More things in whishlist. - -2004-01-21 18:46 migueldb - - * doc/quickstart.html: - - + Doc by Afan. With slight corrections. - -2004-01-21 18:44 migueldb - - * examples/rgb.inc.php, doc/index.html: [no log message] - -2004-01-21 18:43 migueldb - - * phplot.php: - - + Small changes to functions' documentation. - -2004-01-21 18:06 migueldb - - * phplot_data.php: - - + renamed tedious data_values to data - - + work still in progress - -2004-01-21 18:03 migueldb - - * phplot.php: - - + Added check for __FUNCTION__ for old PHP versions. - - + DrawPieChart(): 'data-data' support added. - - + DrawGraph(): added check to avoid calling FindDataLimits() - twice. - - + DrawXDataLine(): Added. - - + DrawXDataLabels(): Added support for vertical lines to data - points via DrawXDataLine() - - + FindDataLimits(): Added calculation of per-row min_y and max_y, - for DrawDataLine() - -2003-12-30 13:26 migueldb - - * phplot.php: - - + SetDataValues(). Now reads a reference and copies it to - $this->data, a numeric array. All indices are converted to - numeric. num_recs[] holds the number of records per data row. - - + FindDataLimits(). Works with new $this->data - - + The following functions now work with the new data set and use - faster loops: - - + DrawDots() - - + DrawDotsError() - - + DrawThinBarLines() - - + DrawPieChart(). Minimum changes. - - + DrawLines() - - + DrawArea(). Other optimizations too. - - + DrawBars(). Other things too. - -2003-12-30 00:01 migueldb - - * phplot_data.php: - - + Fixed constructor. Added parameters to fit PHPlot()'s - - + Fixed many "undefined index" errors. - - + DoMovingAverage(): puts data in a new row, and sets colors and - legend. Won't work for the moment. - -2003-12-29 21:58 migueldb - - * phplot_data.php: - - + Formatted after phplot.php style (PEAR) - - + Added Doxygen comments. - - + DoScaleData(): Optimized with for loops. Needs testing. - - + DoMovingAverage(): Optimized. Changed behaviour with first - elements in dataset. Needs testing. - - + DoExponentialMovingAverage(): added. Needs testing. - -2003-12-27 14:53 migueldb - - * benjamingothic.ttf: - - + The TTFont is only needed in 'examples/'. - -2003-12-27 14:52 migueldb - - * phplot.php: - - + Removed some (done) TODO marks. - -2003-12-27 14:06 migueldb - - * examples/test_setup.php: [no log message] - -2003-12-27 14:06 migueldb - - * examples/nav.html: - - + This was unnecessary. - -2003-12-27 14:01 migueldb - - * README.txt, LICENSE.GPL, LICENSE.PHP_3_0: [no log message] - -2003-12-27 13:46 migueldb - - * doc/index.php: - - + Added all the examples. - - + Added 5.0 version number. - - + Added myself as author. - -2003-12-27 13:44 migueldb - - * examples/example9.php: - - + Changed to follow phplot function renaming (again!) - -2003-12-24 13:39 migueldb - - * examples/: create_chart.php, format_chart.php: - - + New data type: randfunction, using data-data-error. - -2003-12-24 13:38 migueldb - - * examples/: data_sample1.php, data_sample2.php, data_sample3.php, - data_sample4.php: - - + Moved data type selection links to format_chart.php - -2003-12-24 13:36 migueldb - - * phplot.php: - - + Fixed spurious ticks bug. - - + Corrected some comments. - -2003-12-24 12:52 migueldb - - * examples/example5.php: - - + Now in format_chart.php - -2003-12-24 12:47 migueldb - - * examples/example4.php: Ooops! I deleted the wrong file! - -2003-12-24 12:39 migueldb - - * examples/data_sample5.php: - - + New 'randfunction' data type in example-o-matic. Taken from - deleted example4.php and test1.php. - -2003-12-24 12:37 migueldb - - * examples/example4.php: - - + Inserted example in example-o-matic as 'randfunction' - -2003-12-24 12:35 migueldb - - * examples/test1.php: inserted example in example-o-matic as - 'randfunction' - -2003-12-24 10:38 migueldb - - * phplot.php: - - + Fixed silly typo. - -2003-12-23 17:40 migueldb - - * phplot.php: - - + All renaming with leading underscores undone for compatibility. - It was a mess. - - + Fixed a couple function call typos. - - + Fixed axis position calculation. - -2003-12-17 16:28 migueldb - - * examples/create_chart.php: - - + Fixed to work with phplot.php v1.69 - -2003-12-17 16:28 migueldb - - * phplot.php: - - + Added skip_left_tick and skip_right tick for x axis. - - + Added y_label_angle (last commit) - - + Fixed automatic axis positioning for plots with negative values - or log scales. - - + Deleted messy SetGridParams(), SetTickParams() and - SetDataLabelParams(). I realized they were a bad idea of mine... - :( - - + Some more code grouping and reorganisation. - -2003-12-15 16:52 migueldb - - * examples/: create_chart.php, format_chart.php: - - + Added x/y tick crossing lenghts. - - + Added x axis and y axis positioning. - - + Corrected some label placement options. - -2003-12-15 16:50 migueldb - - * examples/: example4.php, example5.php, example9.php, test1.php: - - + Updated examples to work with new PHPlot. - - + Fixed some things. - -2003-12-15 16:48 migueldb - - * phplot.php: - - + x_tick_pos: added support for 'xaxis' position. - - + x_tick_label_pos: added support for 'xaxis' position. - - + DrawYTick(): fixed 'yaxis' - - + Set[X|Y]TickCrossing(): added. Draw ticks crossing axis by a - specified length in pixels. - - + DrawText(): improved vertical centering for TTF. - - + SetDrawBrokenLines(): fixed silly thing. - - + _DrawPlotBorder(): new option 'right' and 'sides' - - + DrawLinesError(): removed some 'ifs' for speed. - - + DrawDotsError(): removed some 'ifs' for speed. - - + Minor corrections here and there. - -2003-12-13 04:58 migueldb - - * phplot.php: - - + DrawGraph(): Fixed drawing order error. - -2003-12-13 04:44 migueldb - - * phplot.php: - - + _SetIndexColors(): removed. When sessions were not set, indexes - were being calculated twice - - + Centralized color and style defaults in _SetDefaultStyles() - (former _SetDefaultColors()) - - + SetLineWidth(): superseded by new SetLineWidths(). Now using an - array of values for per-line setting. - - + DrawDashedLine(): added again for backward compatibility. - - + DrawBars(): Faster shading. - - + DrawYTicks(): slightly improved, DrawYTick() modified too. - - + DrawGraph(): plot borders now drawn after plots. - - + Added color and style variable declarations for easier - modification. - - + More formatting. Some renaming undone for backwards - compatibility. - -2003-12-10 04:04 migueldb - - * examples/: data_sample1.php, data_sample2.php: - - + New plot type 'squared' added. - -2003-12-10 04:03 migueldb - - * examples/: create_chart.php, format_chart.php: - - + New option 'Draw broken lines' added. - -2003-12-10 04:00 migueldb - - * phplot.php: - - + Better available graph room usage. - - + More renaming and formatting... - - + Parameter validation with _CheckOption(), but I might drop it - if it slows everything down. - - + DrawBinary() is again DrawSquared()... ooops. :) It is at least - now working. - - + DrawSquared() done, quite silly thing, though. - - + SetBrokenLines() added. Tells whether to draw lines for missing - Y data. - -2003-12-10 01:32 migueldb - - * doc/schema.html: - - + Simple [go to index] link. - - + Typos fixed. - -2003-12-10 00:56 migueldb - - * phplot.php: - - + Reworking PEAR coding standards conformance, I had quite - screwed it up. Vim regexes are proving veeeery useful ;) - - + Important comment about the destructor and class instantiation. - - + Internal methods will now have a prepended underscore. I'm - renaming them little by little. - - + SetDefaultDashedStyle(): now accepts any string as style. - - + DrawSquared() renamed to DrawBinary() - - + _CalcMargins(): corrected [x|y]_tick_label_width calculation. - -2003-12-07 18:58 migueldb - - * examples/: example6.php, example7.php: - - + SetDrawXDataLabels(false); - -2003-12-07 18:30 migueldb - - * phplot.php: - - + DrawDotsError(): doesn't fail anymore if data type isn't - data-data-error (might include text-data-error in the future). - - + More variables changed to bool. - - + SetNewPlotAreaPixels(): removed, SetPlotAreaPixels() now does - the same work. - - + SetMarginsPixels(): now updates margin variables. - - + SetTitle(): fixed wrong height calc for empty title. - - + Removed many internal variable declarations. See the beggining - of the class declaration for comments on this. This might be a - bit stupid... :-? - - + DrawSquared(): plot type on the works, addressing Feature - Request [558302]. Just the skeleton for now. - -2003-12-07 02:12 migueldb - - * phplot.php: - - + SetInputFile(): deallocates previously allocated 'img' - - + Added 'line_spacing' and SetLineSpacing() - - + InitImage(): deleted, moved into the constructor - - + DrawError(): shows plain text message if 'img' unavailable. - - + SetXTitle(): Fixed x_title_height calculation for TTF. - - + More code reorganisation. As I seem to be alone in this, that - should be no problem... - -2003-12-07 01:12 migueldb - - * phplot.php: - - + TTF font provided with package now works (it wasn't being - found). - - + TTF placement a bit adjusted. - - + SetTitle(): Fixed wrong title height calculation for TTFonts. - - + DrawLegend(): TTF support added. - - + DrawDot(): renamed dot type 'crosshair' to 'plus'. Added - 'cross' and 'trianglemid'. - - + FormatTickLabel(): now used for tick and data labels. Renamed - to FormatLabel(). - - + draw_x_data_label: variable removed, now using - [x/y]_data_label_pos for both x and y data labels. - - + draw_x_data_label_lines: parameter added. - - + line_width: minor usage fixes. - - + SetXDataLabelAngle() renamed to SetXLabelAngle(). Old function - kept in 'deprecated' section. - - + Changed some options to bool format. - - + Tried to make better decisions on Set*LabelParams() regarding - placement. - - + Removed superfluous DrawLabels() function. - - + Moved CalcXHeights() and CalcYWidths() into CalcMargins() for - speed (unperceptible I must admit) and clarity. - - + Other changes here and there... - -2003-12-07 01:06 migueldb - - * examples/data_sample2.php: - - + Added missing data. - -2003-12-07 01:05 migueldb - - * examples/: create_chart.php, data_sample1.php: [no log message] - -2003-12-07 01:04 migueldb - - * examples/format_chart.php: - - + Added a check to see if we are being called from the right - place. - - + New data label angle option. - - + New line and error bar line width options. - - + New data label options. - - + New point types. - - + Some corrections. - -2003-12-06 21:12 migueldb - - * examples/nav.html: [no log message] - -2003-12-06 21:09 migueldb - - * examples/test_setup.php: - - + Added nav. bar - -2003-12-06 21:08 migueldb - - * examples/nav.html: - - + Simple navigation bar, not very useful yet. - -2003-12-06 20:43 migueldb - - * doc/style.css: - - + New "nav" class. - -2003-12-06 20:42 migueldb - - * doc/index.php: - - + New index, now calls some php. - -2003-12-06 20:41 migueldb - - * doc/php_test.php: - - + Added the test for php functionality in index.php, so this file - is no longer necessary. - -2003-12-05 19:13 migueldb - - * examples/inline_image.php: - - + Added warning message when called on its own. - -2003-11-28 01:21 migueldb - - * phplot.php: - - + Default title position='none' for better positioning of - elements. - - + xtr(), yrt(): return value round()ed - - + DrawLines(): better (?) management of incomplete data sets. No - begin or end points forced. No more "undefined offset x in ..." - - + DrawArea(): more modifications when working with incomplete - data sets. No extra beginning or ending points. - -2003-11-26 17:52 migueldb - - * phplot.php: [no log message] - -2003-11-26 17:16 migueldb - - * examples/: create_chart.php, format_chart.php: - - + Added shading option - -2003-11-26 16:43 migueldb - - * phplot.php: - - + Added spaces after every comma, around every equal sign for - prettier code. :) - - + DrawXTitle(): Another fix. Removed the check for tick_pos I - just introduced. Works better now. - - + _PHPlot(): destructor added. - - + Comments, indenting, and a couple of minor corrections here and - there. - -2003-11-26 12:19 migueldb - - * phplot.php: l - - + DrawXTitle(): check for tick_label_pos when calculating title - position (before the title would be misplaced under certain - circumstances) - - + Added SetIndexDarkColor() and $ndx_data_dark_color[] calculated - from $data_colors[], for shadows. - - + New data type (one value per data row) 'text-data-once' for pie - charts - - + DrawPieChart(): some optimisations. Shading added. - -2003-11-25 17:30 migueldb - - * examples/create_chart.php: - - + Now accepts point size from format_chart.php. - -2003-11-25 17:29 migueldb - - * examples/format_chart.php: - - + New point type 'crosshair' added to the options. - - + Link to the documentation index at the bottom of the page. - -2003-11-25 17:28 migueldb - - * examples/data_sample1.php: - - + Fixed wrong comment. - -2003-11-25 17:28 migueldb - - * phplot.php: - - + DrawDot(): added new variables to avoid calls to ytr() and - xtr(), replaced imagefilledrectangle() with imageline() in - "halfline" and "line" modes. - - + DrawDot(): added point type 'crosshair' - - + DrawArea(): modified to follow the structure of the other plot - drawing methods. Removed obsolete DrawAreaSeries() - - + DrawLines(): same modifications as with other plot drawing - methods. - - + Removed dummy DrawLineSeries() - - + More use of imagesetthickness() - -2003-11-25 01:34 migueldb - - * phplot.php: Right now working on richer data label placement, but - in the meantime: - - + Removed unnecessary (and wrong) right alignment option in - FormatTickLabel() - - + Removed unused (thought it better :) DrawPlotLabel - - + DrawYErrorBar(): uses imagesetthickness() - - + DrawDots() optimised and cleaned. - - + DrawThinBarLines() optimised and cleaned. - - + DrawDotsError() optimised (I hope!) - - + DrawLinesError() optimised. Fixed a bug with multiple lines - - + Other small things, as usual... - -2003-11-25 01:27 migueldb - - * examples/data_sample2.php: - - + Removed bogus tag. - -2003-11-25 00:49 migueldb - - * examples/data_sample4.php: - - + Added 'thinbarline' data plot option. - -2003-11-25 00:48 migueldb - - * examples/data_sample1.php: - - + Added thinbarline plot mode. - - + Added comment on 'text-data' data type. - -2003-11-24 23:32 migueldb - - * examples/: data_sample1.php, data_sample2.php, data_sample4.php, - format_chart.php: - - + Replaced old data type "linear" with new "data" everywhere. - -2003-11-24 23:32 migueldb - - * examples/create_chart.php: - - + Accepts new $data_row format from data_sample3.php - (data-data-error format) - - + Replaced old data type "linear" with new "data". - -2003-11-24 23:30 migueldb - - * examples/data_sample3.php: - - + Replaced old "linear" with new "data" everywhere. - - + Modified code and $data_row organization to allow for easier - changes. - - + Added another set of values (to have two lines in the example) - -2003-11-24 21:06 migueldb - - * examples/data_sample3.php: - - + Removed bogus tag - - + Added slashes to input tags end - -2003-11-24 17:44 migueldb - - * phplot.php: - - + Fixed a typo. - -2003-11-24 17:03 migueldb - - * doc/: examples.html, function_reference.html, quick_start.php: - - + Inserted into index.html (some time ago) - -2003-11-24 17:00 migueldb - - * doc/style.css: - - + Added new classes for the docs. - -2003-11-24 16:37 migueldb - - * phplot.php: - - + Added SetDefaultDashedStyle() - - + Replaced outdated call to imagesetstyle() with SetDashedStyle() - - + Moved the check for dashed_grid from constructor (where it - could lead to strange behaviour) into DrawXTicks() and - DrawYticks() (BTW, shouldn't these be renamed?) - -2003-11-24 16:12 migueldb - - * examples/: data_sample1.php, data_sample2.php, data_sample3.php, - data_sample4.php: - - + HTML tags to lowercase. - - + Added missing closing tags. - - + Indented code. - -2003-11-24 16:05 migueldb - - * examples/create_chart.php: - - + Modified to work with the new format_chart.php - -2003-11-24 16:04 migueldb - - * examples/format_chart.php: - - + New layout - - + Many new options - - + Some introductory words - - + Removed "you have to reload" warning (the default behaviour for - PHPlot now is to send no-cache header) - - + Small corrections - -2003-11-24 14:46 migueldb - - * phplot.php: - - + Added checks for tick placement in CalcMargins() - - + Uninportant renaming of some internal variables. - -2003-11-24 14:25 migueldb - - * phplot.php: - - + Some more renaming for consistency: vtick, vert_tick, etc are - now y_tick_ - - + Same for htick -> x_tick_ - - + + Draw*Ticks() renamed following the same scheme - - + Grouped tick label parameter setting functions in - SetTickLabelParams(). Left original ones in 'deprecated' - - + Grouped grid parameter setting functions in SetGridParams(). - Left original ones in 'deprecated' - - + Grouped Title setting and positioning in Set*Title(). Left - original ones in 'deprecated' - - + Slight modifications to data label placement - -2003-11-24 11:30 migueldb - - * doc/index.html: - - + More reorganisation - -2003-11-23 23:53 migueldb - - * phplot.php: - - + Corrected a typo. - -2003-11-23 23:39 migueldb - - * phplot.php: - - + Restructured internal font management: font variables are now - hashes with all associated info. DrawText() now only needs that - and chooses whether to draw TrueType or not. Almost every "if - ($this->use_ttf)" check removed as a result. - - + Added SetDefaultTTFont() - - + When drawing pie charts (no axis titles nor labels), maximize - plot area. - -2003-11-23 21:48 migueldb - - * doc/index.html: - - + Included function_reference.html links here. - -2003-11-23 21:42 migueldb - - * doc/: index.html, schema.html: [no log message] - -2003-11-23 21:39 migueldb - - * doc/index.html: - - + New welcome page, some text. - - + Some features listed. - - + Uses stylesheet - -2003-11-23 21:37 migueldb - - * doc/: style.css, php_test.php: - - + First commit - -2003-11-23 21:36 migueldb - - * examples/test_setup.php: - - + Added stylesheet - - + Silly change - -2003-11-23 21:35 migueldb - - * examples/inline_image.php: - - + Silly change - -2003-11-23 21:34 migueldb - - * examples/create_chart.php: - - + Renamed SetYLabel() and SetXLabel() to SetYTitle() and - SetXTitle() - -2003-11-23 21:33 migueldb - - * examples/format_chart.php: - - + Added file format option - - + Added stylesheet - -2003-11-23 20:00 migueldb - - * phplot.php: - - + DrawText(): horizontal (left, center and right) and vertical - (top, center, bottom) alignment finished. - - + Replaced all outdated ocurrences of ImageString() with calls to - DrawText(). - - + Removed redundant text placement calculations. - - + DrawLegend() now draws the legend box more accurately (final - solution to bug #527867) - -2003-11-23 02:02 migueldb - - * phplot.php: - - + tick_length and tick_length2 now are htick_length and - vtick_length. - - + Included SetHTickLength() and SetVTickLength() - - + Fixed silly bug with SetDefaultFonts() - - + SetUseTTF() now resets the fonts. - - + More room for title - -2003-11-22 23:40 migueldb - - * phplot.php: - - + Somewhat clearer naming convention for labels, ticks, titles - and fonts. - - + X tick labels and X Title can be: plotdow, plotup, both, none - - + Y tick labels and Y Title can be: plotleft, plotright, both, - none - - + Renamed some Set*() internal functions to Calc*() (Set - - + is to be left for "public" methods) - - + More doxygen comments - - + Optimised FindDataLimits() - - + A few bugfixes - -2003-11-22 18:04 migueldb - - * examples/test_setup.php: - - + Added wbmp format - - + Now using imagetypes() instead of function_exists() - -2003-11-22 13:57 migueldb - - * examples/test_setup.php: - - + Graphic formats availability checks now use function_exists() - - + HTML code restructured. - -2003-11-22 13:55 migueldb - - * examples/create_chart.php: - - + Using $_GET and $_POST - - + SetImageFormat() option added - -2003-11-22 13:54 migueldb - - * examples/format_chart.php: - - + HTML code rewritten, better layout - - + Image format option - -2003-11-22 03:02 migueldb - - * phplot.php: - - + Improved datalabel_font - - + + Added SetDatalabelFontSize() - - + Added many more doxygen comments. - - + Other micro-changes. - -2003-11-22 02:06 migueldb - - * examples/inline_image.php: - - + register_globals default (PHP4) setting taken into account - -2003-11-22 01:46 migueldb - - * phplot.php: - - + Bug #790745 fixed. Thx. to the poster. - - + DrawError() now accepts position and centers text - - + '[423202] Catch error on empty arrays' solved. No more 'divide - by zero's - - + Some (random) doxygen comments inserted. It might be a good - idea for auto-docs. - -2003-11-21 22:27 migueldb - - * phplot.php: My first commit, here are the changes (that I - remember) - - + Y axis tick and label options now work - - + X axis tick and label options: plotdown,plotup,both,none - - + Implemented tick_length2 for rightmost/upper side - - + More default data colors assigned to data_color and error_color - arrays - - + Deprecated draw_vert_ticks and SetDrawVertTicks() in favor of - 'none' value in vert_tick_position - - + Better? upper,lower, rightmost margin calculation - - + Dashed grid lines - - + Added FormatTickLabel(). Removed redundant code in - DrawHorizontalTicks() - - + Removed all calls left to DrawDataLabel(), moved to - "deprecated"... - - + Moved some code and functions around. - - + Attempted correction for Bug [440065] "Pie labels not centered - correctly" - - + Corrected '$which_pt not an acceptable plot type' typo [682068] - - + Now using SetFileFormat() for PHP4 - - + Bug [484235] might be solved by now (not sure!) - -2003-11-21 20:42 migueldb - - * examples/create_chart.php: Now works with register_globals off - -2002-06-21 01:35 afan - - * examples/test_setup.php: Testing update: (Moved GIF to last - check) - -2002-04-30 15:25 afan - - * phplot.php: Fixed error in pie graphs with data=0. Changed - functions and tabs to PEAR standards - - Afan - -2002-02-22 03:15 afan - - * phplot.php: No changes - just settting up new server - -2001-04-19 03:03 afan - - * phplot.php, examples/inline_image.php: fix error on function - -2001-04-19 00:18 mdj_guardian - - * phplot.php: Fixed problem with example 8. Also modified the - default y_padding value so the examples with zero on the bottom - turn out that way. - -2001-04-18 07:18 mdj_guardian - - * phplot.php: Made the following changes: - - + Fixed the case of built in functions to match PHP documentation - - + Modified SetFileFormat to work in PHP3 & 4 with no changes - - + Improved auto-scaling signifcantly (SetVertPadding, y_padding, - SetPlotAreaWorld) (needs docs and examples) - - + Fixed a problem in DrawDashedLine when the line segments were - zero length - - + Modified DrawLegend to fix positioning of lower right corner of - box. Was cutting through text - - + Removed a duplicated line in FindDataLimits - -2001-04-08 15:58 afan - - * phplot.php: Minor change to formatting - -2001-03-27 07:42 afan - - * phplot.php, phplot_data.php, examples/data.php, - examples/data_sample1.php, examples/data_sample3.php, - examples/example1.php, examples/example2.php, - examples/example3.php, examples/example4.php, - examples/example6.php, examples/example7.php, - examples/example8.php, examples/example9.php, - examples/format_chart.php, examples/inline_image.php, - examples/test_setup.php: Committing 4.4.6 - -2001-03-19 16:08 afan - - * phplot.php, doc/user_functions.html: Cleaned up Shading Function - for Bars Bug Fix in Placement of Datalabels. - -2001-03-17 16:40 afan - - * examples/: data.php, data_date.php, data_date2.php, - data_sample1.php, data_sample2.php, data_sample3.php, - example1.php, example2.php, example3.php, example6.php, - example7.php, example8.php, example9.php, format_chart.php, - inline_image.php, test_setup.php: changed examples from ? to ?php - format. - -2001-03-16 13:59 afan - - * phplot.php: Error in line 361 corrected. - -2001-03-16 03:10 afan - - * phplot.php: Major updates to DrawDots and DrawBars to make it - easy to put labels and dots overwriting bars. Code optimizations - and checks to make sure you don't need to set error_reporting(0). - -2001-03-09 19:58 afan - - * phplot.php: Minor bug fixes - -2001-03-01 17:47 afan - - * README.txt, phplot.php, rgb_small.inc.php, examples/example8.php: - Bug on line 164 corrected Removed rgb_small.inc.php - -2001-02-27 17:49 afan - - * phplot.php: Added ability to use background Images with plots - Changed Image Color Allocation to work even with background - Images Note: this change requires usage of PHPLOT 3.0.2 or later. - -2001-02-23 21:22 afan - - * phplot.php, phplot_data.php, examples/example3.php, - examples/example6.php, examples/example9.php: DrawText, - SetRGBColor, Sessions fixes - -2001-02-16 16:40 afan - - * phplot.php, examples/example1.php: Added output_file and - input_file Added Constructor Added check to see if an image index - has already been added for smaller files - -2001-02-14 21:06 afan - - * phplot.php, examples/example1.php: Added Function SetColorIndex - for operating on image color indexes directly Also checks to see - if the color has already been defined for image size - optimization. - -2001-02-13 20:50 afan - - * phplot.php, examples/example1.php: Minor Bugfix - -2001-02-13 18:16 afan - - * phplot.php, examples/data.php, examples/example2.php, - examples/example3.php, examples/example4.php: Title - modifications, added movable Y axis - -2001-02-12 14:54 afan - - * examples/example8.php: Adding example8: two plots on one image - -2001-02-09 18:56 afan - - * phplot.php: Added SetYAxisPosition and changed DrawYAxisCode - -2001-02-09 10:14 afan - - * phplot.php: Added Title return lines - -2001-02-08 05:35 afan - - * README.txt, phplot.php, doc/user_functions.html, - doc/user_internal_functions.html, examples/data.php, - examples/example1.php, examples/example4.php: Added Error Bar - Widths, Missing Data Handling, Minor bugfix, More docs - -2001-01-29 05:51 afan - - * phplot.php, examples/create_chart.php, examples/example7.php: - Added NumHorizTicks, fixed bug in example 7 - -2001-01-23 05:09 afan - - * doc/user_functions.html: Doc Fix - -2001-01-23 05:04 afan - - * phplot.php: Minor Changes - -2001-01-23 05:03 afan - - * phplot.php, doc/internal_functions.html, doc/user_functions.html: - Updated Documentation - -2001-01-23 04:36 afan - - * phplot.php, examples/example3.php: Minor bug fixes. - -2001-01-23 01:33 afan - - * phplot.php: Minor fix to phplot after major update - -2001-01-23 01:06 afan - - * README.txt, phplot.php, phplot_data.php, - examples/create_chart.php, examples/data.php, - examples/data_date.php, examples/data_date2.php, - examples/example2.php, examples/example4.php, - examples/example6.php, examples/example7.php, examples/test1.php: - Lots changed: easier to make multiple images, logs, etc. - -2001-01-17 04:05 afan - - * phplot.php: [no log message] - -2001-01-17 03:42 afan - - * phplot.php: Implemented Log Plots. Very little error checking - -2001-01-17 03:41 afan - - * phplot.php: Log plots implemented. Very little data error - checking. - -2001-01-14 03:02 extensive - - * phplot.php, phplot_data.php, doc/internal_functions.html, - doc/user_functions.html: Changed ReportError to DrawError - respectively PrintError, added new functionality to PHPlot_data - and added some documentation of PHPlot_data - -2001-01-11 18:43 afan - - * phplot.php, doc/internal_functions.html: Added documentation. - -2001-01-11 17:07 afan - - * create_chart.php, data_sample1.php, data_sample2.php, - data_sample3.php, data_sample4.php, doc.htm, format_chart.php, - phplot.php, doc/examples.html, doc/function_reference.html, - doc/index.html, doc/internal_functions.html, doc/quick_start.php, - doc/user_functions.html, doc/user_internal_functions.html, - examples/benjamingothic.ttf, examples/create_chart.php, - examples/data_sample1.php, examples/data_sample2.php, - examples/data_sample3.php, examples/data_sample4.php, - examples/format_chart.php, examples/inline_image.php, - examples/test_setup.php: Major change to structure of PHPLOT. Doc - directory, moved examples to examples directory. - -2001-01-11 16:25 extensive - - * phplot.php: just added ReportError() and changed all DrawError() - calls to use ReportError(). phplot seems to be broken on my - system but I don't think it is my fault (this was the first time - I was testing a 3.7.x version), let's address that later. Is it - broken on your system, too, Afan? - -2001-01-11 02:14 extensive - - * phplot.php, phplot_data.php: I just corrected some typos (mostly - my name being misspelled ;-) - -2001-01-08 00:53 afan - - * doc.htm, phplot.php, phplot_data.php: Added Plot Border types - -2001-01-07 00:35 afan - - * doc.htm, phplot_data.php: Adding phplot_data for release 3.7.0 - -2001-01-07 00:30 afan - - * examples/: data.php, example1.php, example2.php, example3.php, - example4.php, example5.php, rgb.inc.php, test1.php: Adding - PHPLOT_DATA routines. Defining the first sub-class. Added - examples: Afan - -2001-01-07 00:23 afan - - * README.txt, create_chart.php, data_sample3.php, doc.htm, - phplot.php, stocks.php, stocks1.php, test1.php: 3.6.4 Committed - -2000-12-13 22:02 afan - - * phplot.php: Allowing data in time_format but printed using - strftime - -2000-12-13 04:47 afan - - * doc.htm, phplot.php, stocks.php: ver 3.2.1 and New Docs - -2000-12-11 18:03 afan - - * create_chart.php, data_sample2.php, format_chart.php, phplot.php: - Release version 3.2.0 - -2000-11-29 17:12 afan - - * README.txt, benjamingothic.ttf, create_chart.php, - data_sample1.php, data_sample2.php, data_sample3.php, - data_sample4.php, doc.htm, format_chart.php, phplot.php, - rgb.inc.php, rgb_small.inc.php, stocks.php, stocks1.php, - test1.php: Initial revision - -2000-11-29 17:12 afan - - * README.txt, benjamingothic.ttf, create_chart.php, - data_sample1.php, data_sample2.php, data_sample3.php, - data_sample4.php, doc.htm, format_chart.php, phplot.php, - rgb.inc.php, rgb_small.inc.php, stocks.php, stocks1.php, - test1.php: The first upload! Afan Ottenheimer - diff --git a/gui/bacula-web/external_packages/phplot/LICENSE.GPL b/gui/bacula-web/external_packages/phplot/LICENSE.GPL deleted file mode 100644 index 5b6e7c66c2..0000000000 --- a/gui/bacula-web/external_packages/phplot/LICENSE.GPL +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/gui/bacula-web/external_packages/phplot/LICENSE.PHP_3_0 b/gui/bacula-web/external_packages/phplot/LICENSE.PHP_3_0 deleted file mode 100644 index ffc1ab71f3..0000000000 --- a/gui/bacula-web/external_packages/phplot/LICENSE.PHP_3_0 +++ /dev/null @@ -1,68 +0,0 @@ --------------------------------------------------------------------- - The PHP License, version 3.0 -Copyright (c) 1999 - 2003 The PHP Group. All rights reserved. --------------------------------------------------------------------- - -Redistribution and use in source and binary forms, with or without -modification, is permitted provided that the following conditions -are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - 3. The name "PHP" must not be used to endorse or promote products - derived from this software without prior written permission. For - written permission, please contact group@php.net. - - 4. Products derived from this software may not be called "PHP", nor - may "PHP" appear in their name, without prior written permission - from group@php.net. You may indicate that your software works in - conjunction with PHP by saying "Foo for PHP" instead of calling - it "PHP Foo" or "phpfoo" - - 5. The PHP Group may publish revised and/or new versions of the - license from time to time. Each version will be given a - distinguishing version number. - Once covered code has been published under a particular version - of the license, you may always continue to use it under the terms - of that version. You may also choose to use such covered code - under the terms of any subsequent version of the license - published by the PHP Group. No one other than the PHP Group has - the right to modify the terms applicable to covered code created - under this License. - - 6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes PHP, freely available from - ". - -THIS SOFTWARE IS PROVIDED BY THE PHP DEVELOPMENT TEAM ``AS IS'' AND -ANY EXPRESSED 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 PHP -DEVELOPMENT TEAM OR ITS 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. - --------------------------------------------------------------------- - -This software consists of voluntary contributions made by many -individuals on behalf of the PHP Group. - -The PHP Group can be contacted via Email at group@php.net. - -For more information on the PHP Group and the PHP project, -please see . - -This product includes the Zend Engine, freely available at -. diff --git a/gui/bacula-web/external_packages/phplot/README b/gui/bacula-web/external_packages/phplot/README deleted file mode 100644 index b571f13ee3..0000000000 --- a/gui/bacula-web/external_packages/phplot/README +++ /dev/null @@ -1,45 +0,0 @@ -This is a class for creating scientific and business charts. -To start extract the files with - - tar -zxvf phplot-5.0rc1.tar.gz - -and then point your browser to - - doc/index.php. - -There are some configuration settings that you will need to make -based on your setup. - -1. File Type: Depending on the version of GD you are using, - you may or may not have GIF or PNG file ability. That is - set with the function. - - SetFileFormat("") where is png, gif, jpeg, ... - - or edit the file phplot.php and change the line - - var $file_format = ""; - -2. TTF: If you have TTF installed then use (and read the docs) - - SetUseTTF(TRUE); - - otherwise use - - SetUseTTF(FALSE); - -Everything else should be independent of what version you are using. -This has been tested with PHP3, PHP4, GD1.2 and GD 3.8. - -To start please see doc/index.php. There you'll find examples, tests and -some introductory documents. - --------------------------- - -This is distributed with NO WARRANTY and under the terms of the GNU GPL -and PHP licenses. If you use it - a cookie or some credit would be nice. - -You can get a copy of the GNU GPL at http://www.gnu.org/copyleft/gpl.html -You can get a copy of the PHP License at http://www.php.net/license.html - -See http://www.sourceforge.net/projects/phplot/ for the latest changes. diff --git a/gui/bacula-web/external_packages/phplot/doc/imgs/graph1.png b/gui/bacula-web/external_packages/phplot/doc/imgs/graph1.png deleted file mode 100644 index 3b5a1c205aa4cfb7ff9a734e74092979f0ef67c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35562 zcmbrmhd&(O8#YWtTRsuJL=aZ*y@o^=ErK9gv>-!9_dd@*@J>FH$e2BI=FFMc?E@)_YME5)T$UN)@9K?22QkBCV#Um%7qe%AbA+C-FYOq*IKed-=G@Xbx65co2)ug&z1#_aLDC zvNYc!<$P}1a&X>d;7@8*i~hT_UTk-LeQ~b;w!-!xTy4+UnVF&=EQLQ<*y^SJJDiuH z#ij~QGV-_52wGX8ANF;20vqM})YQMT?l?J*&MvU6SA~ju)!lCyLPo<+9i2o;jbL85 z(F#;Ym#84=m$1XnEn=34{r&B~w0B3@m*bl1S;rnEau&Td4nx!9su~(!xP7-wx}%Cj z7_QZyp9=V)CjGqR7u}o)gF(YSOg$gqH>c+<%6fX%w~J!p4HQx^>JXDSMJVX)Mo+xF zmbTekU8Q2e*y0C{%*^>esV;>r>@jTWlAOhj0O z4-D8B7qhXlvNC19a;dJwRh>+I?)~>tBASb91K;D=@$%0h()cFi1y8H5ab3Fd-+^TU zKhLkUs7-8FH@B*f<5XlEDT8gFPp6XZM|G7Qk%(OH`QW0G$`{U{Kou@a?{hQEC+RUS z=<4cv{Iy&{+R5qYvAEsOJ&tR0Oj6QyFz9tBF|(;WmD@qSBW_QX62fGqB~Y`Ltel({ zKIn?-$=|f(o}C_eLXb zJG;F(pA$&1NG2DTW$^Vt$2xz<;?0t`#O;Nd0iVYswDWlnfyvbrn@u0uxD$2pH8Ire&Cz)SbRRVKabt|nP35dI$u<7Jz!4O44DpRUIB*{6uhy2 zd7l%icPi{^qS|C`c3N)5p9tHdFNymdSKLtrE0=m|B+{$H_kPUZG!=%-O8Mb=pYN|8 zE;EdcKV8a={NS{aS*xkv;MaMuH(Q%+Q`WTo9npN1R#JB|FpCx@uP_jhCVoKlVIT$8 zKBzKkz8*1tv+hA_(G{VcQjl8fH>$cn8jQ4ja^4HZq^<7A?6SW++vI44`Lc@}2JtW0 z`I8~~Io+W-z8-~Lw_k5FUFXElEpbQW!qptcYsQB2@J1y?1l?@E_?Lce*cq_0?g+0pExBqHQA{m@gQ<4V)WNFGY%6hrKE{2ePs%AW)I zCrvQX7`0tXQUB7*OBBt}@HvOk4K&%aRx5-BQwg*s86)htvk zSgUh0CQrVLC^c*d@L#+uQm5I7+{p5dzdmR=kMj8NyDp3=Ud6e(a@w%Q`FBN%q}?`d zHWbqJRmVt8gqrNbV%NICvKkE+IZ0xn3em?!ucCvM<7tHN#_|f-oM-A1LnFb4v|a@# z-EW1_|1SdUul@f%$p>=Kh?0zsR<)h2#~7`K*!$hxiY0Lws_~_oFE-Z)&en27TKb(! zq^gAUr`M9r!5kc-$c=q4UxfMkpD&=|LPF%-Z5M;fo?zDcEw#Qp8{fACp@wWuNMys; zcn>D2S0f#UYHk*}{&;?}dyvJP-VfR8_}j0qSM}j}gZmz#sh_}#8V&REYOIt=-&pVN z!mrR|qfewrKD>p{*xS0O;^J5L0Zwq-8_)i($oP4`48i=M_<>Jr!-3Ch$7^oXvi5%6 zs*sWAE#uo#T|>ufWO8}#M`=buL2s|i^~oW(rX}Bt!;V;MTicZpW%9$nPYy`N?t^hC zf#A^8R1j2YcdEJM+Zno%&k-rrlXTC`oNKQ$4{nmV+wF0it^NIHBoMe8()~@5Yuhys zl@oJpqT}g!q?N^R~$aMo|Bjr+BsCertO zzGJLN6JmeYonBU0SeV>!(EK@^Sj|A;#>aX6Yx3yybQgKEqcHym6@?@`zg`39Uh1;u z4}=O-v1E9)&^{LWje|y)uHV1f(q$$kin;mAM*hpBXtUlkOt>ke+`%2CIB$)t==mBaz6d z8awP3)Lzw``*pwcuHV05zAV3G3mVTuJj`0!aM{hRt@UtbSX<+z3+}@k%mW!OFUrB^ z=k(DEF>kaCv|i5|l_%$}(35e)h_tnFg99;t5xjo;wr|9OUAM~pxrK$reJep*JCP?R z*>`CPBc{)UALkLCb7Ta87(DD6Z6(lmi*mc98VmmJ?!Y;0MS_HjxNbVO?H$bg3bhh= zB|w$`t`$C=^<2>Fy1_$-eC~EQPn9J?T7YW3HQ+Oa{PLpL?$7Du@;un#QcmEES|Pu{ zQ#&TA=#feC!o0kyZ)YY}_`8IUF;rDK&8zfshgnWfLx%-^F8NYK*I8Ie1=|WmTIgM% z&~ISIZF@WQF~!A-2`W(ff(M3Td!+6)3o*vxYYSo!3q1Jx3C$87@@#!h15gWyyC*>{ud@uE(=nH-av88%dSz3II zowu_Gje`oboW!P2GAtUjOD5jvc)Zr7UGS7K!0$BW1utg8*9Y$Pki!A-gOg#}WJr~< zpnfLiCjI>U^Gm3pM&rrZ^?giiaNj30y<2LN*`3zx zxIVbk2t#F~b~j{hYlp_hb}cTM*)LBu2jh_ILI0MU&L!8tBzo!VyDY4VCUL!s*SU)O ztY-4(d@Bg*9ryd)zDeyv6E}fwR$S@7}dh&G@fm`|C{N3xSv3oWvP-{2e zmNvfg`(kC9A z9xy`&GDI^YxzqZajO!v-R!jri+FJxN`8Vi`ZO)uW`-O45tPS42l^4r2Ios9K($*%E zz@mz!w%D#_ol5Fz^m3u(FUSQ^37(1{@WTJ->nh&uiqCTUrGJox9>82qZHfN?hFgkY z=du|7s>8F95P5WslI{)|4lFJPP~^OKbySf_6F?gxe5_z5?4P>7-=*x?&AP{_6nI|M z4nivLh82)jA3y#*A8cajgz4LetKXf8PLvuca20~kcPi`?^K{mOP#rqm>}%P!hao^? zN1ysi>y97s)!R@Zqd>&|Fp%tiP z{(H?E1okVTMn?)q1<+a5|HaG?Ch(@w=fc-*%}RJ$gO|2zI`*8AfsFOZLi}7efK}^H{4|f z&SG!wZkrx|Q3COg^Wx#!HMQhiD?_YAk6rD&ip9F;vonX5J+fB4ZVmyk0-a!-@6|58 zalBrV@QR|;Z;PTF4d$4Sk)H#LLWR@nhn1s;v$Y4N-BDZ8G}DvivprvW6G7N4HEJqb zI!os8!fRO^9Ank=RByE}5jOIRd{5T{n!qb#!K<)93eA9wpt#h0FYWY4@w-FG#?!wI zjo163(o8Y?`!o~aWdWg&gp^!ETU+l?@*Zp)ts;2Mx?LAOoy-T$E;joz_xE#Z#n29R zL(+qL+hc|9yTxN7O*&h%_r0nr@z;(}#bz-(B+CLtAa%*RH1;Ls*;1Lq*>0*At1F>0 z6PWW``&*bVH1Wz=Ng_`xO;AjIeaIj44Y3Y)m%?Bj&=o+Mr7X(fU71#1-}QSdGdleuWQ* zq(e9VgExJ3N`e2O8p}U=sx$y1|2sQNP=tb$dvatTGLjC~*7;@obRb(W=cA;eib2CL zb@|y5Q^>*=E_-ZS?`pIed3tn&$i~_0VCUv0{OGqaFfVer%p;RC^=^HK zrpU=viD&wvSd|{R~O;^QRp^ z4yu={oW{)&dC>~L4{p6Fr2^p{lu}+QDX+W0w8tSbkl3KV2|#OV;zc_P-9zLe}L?96zHLe4CN0q zD>+qRetX|3t6p6J&k0`|n+C zVQupKxL|cnt%yG^edX%!L02-No7-C!hyg>H7|l0E z-B;1+EKf9FD%(5>rJ@pf?HBf50JW^LHPBjN} zN|qi3qS~0Tp}%$}G!5Q%r~TRqp%yPGc0F}ng*=>UHpA|r5wfS+4&93{lA3GHwJFQ3 z++rzG3Hdo&LtsrDAwN}VBivKyW7=?o;eqsd{K?~J-<+;&2zbX=p)2Go4o=)~Rk z+Y{c87WB)^C>n8NZ|~relUBBr#dz{{)$ECfRO6D9SK1*Sz3S_;lKAwcAnEPLkLPa; z-bLi@81Nk=JlkljDoLL~U0d0H#M0{y0@ob17P6a`=E$N;RbudNvYo3Ae+})cKb1iZ zseDeValgrV+~9uDR-qzfw~*lA(%Y!K8QwLe<-E6iIw<@drY6@=0 z&bYo#ZD(I_WJP?veMZd6B`+9d;=8-QmGjAgv;XJM6d~OaN2!ri{3c&s6&aYFY*2C03Mbie zA=2D-lq~uGopl{uplqk>A;zszwj6wwqRwN#LrQGU6125pmnVz&+7c}L{g+M1Zl-)Qx15|mA3i|uj(OU#+yRMtDxL($ zEwLH#AEm{zqpsUK1iTIljF-pJU%#%N#NLe-s6LBVTsiW*=ba*Qzp+5_^E*yh$)t`R z#@@x!X1dc3V%FH1QIgSQi@X$&;Xk_SnyyvBi;H`1D&UJh-?@59_v%egjh#wIyEi(* z-|D)+p5EKSr2b6}q`(9c9nf|64>WYXy!xJFLV@k8>Gl|Fb*%@TQUd?PS!@>?Ho+Lb z^@uEZDZpCJ$k?@+rY4jO2ru3XAK2B^Rf?o9RcqYAqYv+E$Mx2|@Zah^&G3Exe(2!* z{wDkrxp`XOJGCf66Yj(*@MHRRRYxm&I!Rx3%S$#LdC?Ci=9mW7?Tx*XmpSWs$YA=N za>Q3OqOZfV(NqZMU4d#nx58H4W}&d8dRPql@Y(1Q_3%hsMY_l=JP6UM2pA0wBO@#x zXuQkelHYJw6*`VWyGn-0au9-*^LbK-OK!LskA1=tE1mNYHJt&++tVrXL;Bv8FS4IC zq~I^E;T(ifMpL|WGccYNh2t3>(-(iC=rL#5CExvahe=(_Ia`rVU#3HcD@T3p*K}e4 z1#nZcpWPs7j(GofKj_Hnp8PH@J#(U9Za*;!Ro)>%Cy%V()oiZQeQ;Z6>q=#^|CV2a zcU^pPT!u4i54q=~nYhB3V<&G9u~Z?P(zcdWdd-)a<-9Iu)8i|To8*Re&T;0qh;S}5 zp6Ud~F^0cTw0(*_d_U}TYsB?C8VQUKOlp%5XqJLrx=CLb+eIsAd~e*sI*Al?!m-s@-W2{U ziBI+3y6`nl2_u47$t%t*-!se){b{1#yALBsOQx#|L!LO)#dPN>fFR&=J-fKJRhTU^ z=}L1sB6B&CrmEV14@^nO|7O){V!Ui~{!>g|9wOu0K86^kZx6{0U2QoA%;EP5cG&<| zcgz!HpSF!|gZpz3x{AuBWJ}9qU-0z&Rnb(B>962H1EE;6wiaMzF#?#&l`g^<(Wql!e}UltGSemx1EUERC$dBwo4b zOH}l?52t3ZizZp+&zC>rQ-h>gwiR?B^o%c846Wn7nX7y;c-6LZ9v2~6FO_6Lh;yyf z1=kIc)3YE1r_!x43@1J_pnj3W*eFRbT^*6c|KkT6Q=%4*JgQTC^dSRGAx75O=nFe# z^hyNJtG5jAsOTrM=pP>wMqTkj@Q@WfGzSU_kaBgVcU02-TZ(X5rn1*sG~Gk^?OiC? z((d;@CelWj!`+DNV)LYW ziEKGPvYTO2H!qnxv2R$O&@v`Zgppux*{QD(c;PBwP}B!o=z+5s&FFuKB4V3kNNCDc zsyWuy(o%%BJY#Z?ABTJ(;(`zzD1F|$h*x5{_-vHWq({#<@JP^aNLehaV@Rd1BqDQ> zVV7Yz^O+V&D}OF6`jwdGLk7v4m$daC-dlB7OdZ%MuMm8~CC45Xv=p}yDtaTq6ezT$ zUtWG@2$pCX>B$P^6R|;tCTXt&DrjfnJkBL=T>m!X&!+H z0y9Jc1(QWer-aC{tT0cfcfm^uQHPj~=82HB8QN>y;P;*CjqIu{+a3!Cy+j}1D)euE z(I$&m7Hv@gGvqr|k!SaS_Bz9+&eitex@Orjx)fHKiBjMSFQGFlY5AZ`@gf1T0!RJ^ zYNp3=l0q907ptqD(G{8f@cs6eUY|?$ShNbC%U6BKzRm4jz|4~R9zCotb2)tfJd{BA za5Hbwv_I|CfN#UJQIeaONvjf2lQf?$V8!QSLr)?ry++?olo<|!jOi(mP=<*V5_~Hb z#@`RT()PHn$pq=J(@|HI-mj0GX~oWy^B%7?o02i{HWK?k=+)R_5=eT|f>|N@g>BtFxb%FHp<;^My4rbXx3*_I%gfBC*76o*4*CtLk;v z`{F--&Z|2)@g_3U5_{U(*je`OI2=ux`JEIY<||BylMVPnK|V)LyN}sS&|0eJ*PAez z8TdBa2cA%=$yT@9r#$%M0K)%U!-#6d$3$oROowUtPFrpLknpbt4V zjbq+j9WjG69P>U39=0jWxeR8SSBc&uv!?R}ITua5XprR{73@scmOs+g{(W=2ygDJO zF>dHOPI}qm&~&OxS{yJC(qTgLX%mLl9ZQ>Bt|(|T5#`g>hUC&uxm$=9Hu4af7q$3U zeC`aysiB#X2o39@A;+MO&_^fH4zOrk;*udjOa1+}&!H6j1%WSG)n#NDB(r0qp9nc2 zp4N`eObjSYZ$nAz(4{yDlta6D>i^A3Mg&H%z+A<4SU#0 z`XV7D_~I0ZP0Q_GbFQnWm^&_d78-4~nPIOrUTh-U6L<-8u1rBx=%uI(&;4&rTZssJ zZO1yzAc-YUOun`Ta!w7BukevKY3ce_Vl#iHoXmPZz?p3qhwl~`A0P5N+#1~e(>G?O zenkEcvutw>YADF-8Zh%#uX5&Xl0_cQgfQ{_+Rd(~>Y4D(%C~B`6Ehy_Dbe=cKVgL) z@c#2Xa9O@oX$_M0<;Osr+?~}y0QKbeaUas_I`bR{>oW;Csnb?FCWm2t1~=>o{cV{+ z$CcX?(bqbI{k3yw8H){k@kmB6>#*ZzGXqUphJLmKB#4h!w((2^03!0I81~O&a}44V zv0H_kFUM~d{VwOFXpg5|TJBVD4_Z*OEt1RUmIE1WfDyxgVP-}=Pn&vpzDZ0v2QFeE5Au3hB$w-`SZ0r0*YK{0^@9Tt2$uQab)48v(9w-sf zVC3O?9E)JzYkL=~WQSyEjQJ-6zaa`X@^fhR`ZYtleuXigqkGP|q-~V`BYkQ)^&N4h zq)q7gsP6xI0V*ZQCZ%w*U2gA6zw)1W7Y>q!d{`lfXxQOZ zeG&kdrl@Dt%I&Oa8{;(b;`*;qVMs{}btRoG^CP@emTRYBX6jSHBdf*Q!|A-8qK&}0 z;_Iqx6t(|)cIo$m4+n9BGw)_E_dWa$ix5))Sb@N}mfUgy$;`}j#6CPn-Kjo5_a!q_ z?;OI<(RUj!<*LKqW0@*uzkfJ7Ra7;tACqeA@;;mfPJKN4b?CfhqcX;PNbb8x<3@~~ z(X|$@R(OdzxNF@hZ;=Bly*g^!8Zi5&ichq)FO&T)S!?WwW0^fyETs@Nwm_vx$iC^2 zdZVeC?(ihC>tfF#%L2#~mizszd^yDlfB%w!6cuRkQm_l&NOGy(fcnoWDY{*|di?0R zzfA>!NC-r6&+~bL`(3y3Lg{UpZvS^BVy~McM2e6dTT@fz$%5suxJ2Nv|IjBgxpfnX zKyy|!37XX0-nxNWB!RpWYe8QD4QbQ59uGx!T z*S-KM9&BxHuH`2it*$30e=C+baW?Wkg`Dk`bO@+s`5Y%hiInbB(c5)nSl^EFLSOBu zTc(b&@8^74Kj$~;mOg^-lKSU87GHXJa04<6&|rmrkNeH}{{8!RIAh~50)m*QF*Opt zxxfE1fsw}Vh8Gb3-D|yx$B5bAE(9R;>s$@z-y2~)Y5jbDw9r61;&_3R$fQc2-j7~k zK7{*FF@MA=EyRQZx)Oe~flT`OEjKsgEBoYYJ<+V+F5IFAzGRsh=2lE0&-Qy|G+j9Y z1pjc(%4Tsp zGn_|H2#1EtKIq^Xa{CNKC7^Mtx}6${iHV_a?rn7ms5T!(m-7G?806%|Hy_1h7R zTsJ^eN)`0R%Fk!y(67&UKSW5SoIh$iQ}$bR{9HEMp~#VSdckgYj_y zw0NMVDaQ0l$n62?T1B=iN2H1Fm+aU5dflsuy{9Fj$vUKos%(X>kkH7_00oBF6GdS0 zD7=0d4EbNHOU0WW&6xC2Mb1TNwi$mj0G0{~Tkf(X0lI5_EJFF$$TGWAx^nziJ+&9%%o$5uc!ZoTozqxY zVXMT+KIjg&RRMQTSE?tG?aCWfj%_~e@jO8Pec*^XogA5%d6duz79_93oNLe9bHDd( zftM)-z4^&p@9+H^E9A6j8Mx-_eS!vV9 z^ydQhsx4MyEgC|vssgc-GO+6P_|B$+1QJkf&Swb^>pwg?@1UiB_lZwR;^K32BkiS- zb_a?=@ddT#Gtnsm&O%Ks8k!F+=DWNot--aYpt6B&qYYf&(V zO0k7pYY0h-L6r`*%9neNK;zMa9SI4-tU{5O?u)`X#vbt9AlL;9t!Cfq9f~)`5?Eq% zYx@6C@&g?8Kracnjv_$*dop;p;fH?stK2WuktL|Wy7OwqcCI2-E|P1bk3BS|iqzWCoOiNXrVC#ceyw6hv?+7J@jL-k-Nd!Bs=#zXWtZJ7(X@?8(>KSBaK&lEY- zm+-|8BJwmL3+jz=J@t42zZGisfWLYRZ7#Jr)2VyPWoA$s_+K{Alpfrr!#24CH*G}D z8xmamd$m2nghz_xqo`ynGyr&nuTg6CoScY`CXGIk29gn_Z*TAU-1<5 zB~o5An8NDx*U?EtA%$fWid)>t|9b5x^`$E&|L_iK7#>$ao{t7s=sPGS48Ernq~1_T zlhxU>^d2jjeH)+bP8t%@(p%>?^HUolyN=oPacNVb*>ZgsW+a^tD8S;i-2E~Njv--C4Z{jMR|`-4&4d9$KZaSEhB~H(u+$m+ zmrpr3$UE1Z`cHL^R&2^4RV|x;*$1vD=xf6swC_-4^l~M;gmYw1tEIby-}lb=-(|8n zYc}oZ*4|2!DKqO#I|%iIldHyL(@lXcFI8xS=iM>D-a+ZNIHt;{WTCk7I%jJ~5u!xR zCNTXaVwX@SLJ$y~ic2G3t#!YzismQ_{|A@N9YPe9HZ%4;ZT`_(C|ilEHvd((vzZmD z|F}eOMd1*&io|7Zn02_u)iX^NkaGlAvW$k}8aiMHm7NB+$}%q zksURQtdp*9)~hik=2uq->9+WrYB&)}E>>pXbnx)1etz*{cXbOGIh>75Uy$UI8pB$;k~Q znh2#cQqx>{cU`Z@=4k+W&9_qW74nr*;VAHwu~5^KP;KiAB{EV|UJ6UC_U3`q?tJ0; z@htrEM4_civ*n8Og#6Fy8BCSk@gb4;jChKmH`7l}yNeqb4eSC2yIIY4?0{si?tAZ> zw+ET^#RD(S1K@RVxx+ZmvaTJ#OImMaAr|#7)>GX~E6+()ghO|OD~mTDKAfni;e4V! z9GqlIdXLg=B4W5V#clEfgd-Q1uXf#3CYZA(&TVJq`?uOXXtKh{v;1(ClJ4z$z&B-j zUGwy2KGrYg&IhQgyEDJjfuDhmtagRBFrmQsNHz$HIy?W~&-Pwo@uR6yJp>6hx>$ zAYu&vot_R)d42)*u-xLAxWX7Qv;-*b&u3i92~)c~ zo&V#hCB=OMn%aCNjL)#``{#USh!JSHgKdg8mwA4Dz(pk>AaD#U4?I?Gp1t^ytcEyL9j%;ZF6@#FQ> zpg`!$M)qh9Wr}(i%Z%_1MTARGWQGt(M~xLAwohhjGR@1sykbjYpg2lYExx#+G2LV3 z7zOT5{C-(&d_Yw_c&U)3r=tp2!ZhSR!j$+S`cy_(>7V)G<#QHF2%xY)<7wl7ELwZR zR%1bYFtBvgcWDRfUEugV#w%s6ms>s>zvpiL;tI7X{#QXP%VnE&N~mTJ=aiK)T8l%O zXO|)U%@O7miig9zJgO{p69oednX`3aY-J1-yx(}98dYK;CJCDZOQ(=incj~NJ792D z%+U%(*Fpf+Hj4ugJI}_`855~{37B)Z6SWl2*Ky=9054^fty0PmY&WgeKzy~#IFZ#U zK+TF{DA=1n4(oMWq?3BH84UDh}YL5A#Nk z7#{!2`N!yU~@ zj11BVYoRr1x$j1f4b#jw8_!Dw`*gD#Gw=l${L268b+Yl`aJPyZjc5|EO!uDJtE-Ot z>8W)vtt>$U+{Gz;7DWC1KeeJ*3!QI7()8c4va?%E?50-#su>-g?mfuz%DQ(ort(`l z9=>>9y9i@nScNzi6~Cg-l5o+UH|Oh(dD?(pw^gvCls~drKQL8k_M=?t&+aro0KTf} zHO@#*;SutkyxSp@dub6cDPag=4qcvD4D9VAuckjKqM5E@s$!WraOWEyZ_B)5@0zKk zXp@wSo0T(ik&#JjeRBlTY&h(14=Vi^G9@2zpJlh zjb&O|_z85jDi+rRslKDej>}La8-C39h}Qo7L}}_}CB^&IZce}?h34k6*i70lUF}GP z=CWw%OoG5WIXpakZ%xqox7bK8z@Yk5i!Qas5Q9Dx0*ns$kcPgnXa= zIO#;?5-{UUkfBKyc*ZAyX#q5kHN>yS;~o4)Jy{Bo4W%g<<9Kd!jp4Q{*X_^VdrK*E zR_8otpYZJh`tp9wxqT5|tZCwF&X6vxe`#`Xel)xBcjl}7OZ+G%1Cvh8RsoJTm8C>d@MMMK}QbFvFjEt7tx82o_%~)~XcVQPvqx3^|*s8;@Mhp|HCNTnS%LUwF};xKwWH7cj`>f7QVf z26VvdH77_)ft=8@vly9w$ajJzIVB-H*Qr5#yJb~zx&^9C&&~$)?}??wGIys|ef6e0 zo&&NL^?1_t=CS9&sUnV960(R^t9IXG5ljgh(ehR92&YM3ptQNTBwgL|{hzA+AA>=tZ!UwV%cCH|L9F4HHmjA=q@SRg01y=q{hOQb z3nfB)vXJY#^{&7957B^E3r%EZs+;+Y`bEfIqO6*hVr^z;q(=}(&1=vm# z;8(ml1UMA5)ai03)5l9=%EDk9&$yI^_&Aq$=5x)yy*@j~+!ooDYX7;FUc|?Ca+jsV zmYoLml&s`Pcco|kbK5)B=*12Il9tZFeKmp4MVo?*c)fkaztwfCv~DR>%bhfE zSxOBIzwRi`+2?ww4%+ih)WZzf|I7IM=2)C*#lJ@!8InX6+XFs5>RBd%zaQy+&s@vHYzt>JnCQA!TOQV2`>*L3dMMXvH z!Q@7{4Grnl&{5^+fF{3D zI{Q#*_k=NT9clcRkE+04REYnb5uX_yw)u;KX#q~xt{2+WN>-yhCw6aqMfrL&G!0lL zxrd+k5X>@hw`HBn)KcSGcfCMT>Vh~^6u0~QZ>aS<8GtK@8J~|4AmN~SjS;p2`@eQf z-c>1x>v%1mYs_bYUGZf!akhik@jdH!Yn#O`G;ZVZ?KO6mmamErQfLbn?!4FV1=iPK zEP5N~PYz`g7|r#hdqs$*y`-WNuj5tOyiAliH!^HAr6!o>lNl0UQ%k{_5A$07SqbI8 z;bU6)H%t-6{#2EhM>TTp2&M~G{PZ;}({5)N!7R--!oS}H)=4e(3L$^I!3BiCq1Y~M zu`Gs6N9YE&tr&~~aijQGu?q`D^V!U=HTHID(3lpZMM3_ay(-d2-0*~6#mAyx=>Q*2 zEKMDpn=MgI#59EX8Q$WDinjOn*NU8BU*}Lfq=!LcZ&)V}UrX6~gJvYpjMXtV?0W=l zvzMrVWhg|j>zldl7p>hon~RIe9?3S{@3g{XsROz|fA)dshiFE;KNKuobH3ztI^A}= ztUN|Y-Qohz0SFo(S&#+n=bIuD{aV|NHtYjnZlnWt&S%Sx6o!-2a5wQMLbj$`BkQ({ zHHjk$L`j_b1Af=DEez@XN2nH9lonfXK{SVwz<(SZJxy$05fu=RsNPad2&g)XZmfan z>nv(X2a3af6u+W-+zRJ_Pji5(gbp5!F9x?FAtpo+Obu<)xI<5K5;=5e?(ni+My|Ho zc*e_3fuQLD!PFr7YW(87;z%C7D}#58kI(S*PiO$QnQOM>GrdSP^HSB3+gQyfK8*Aw z&2pAd@>`%|x4X|zqY|5YGLwPaS1>xD>cKg98@R4FtcY$d`5v!kK{{L!787O z9NbXQa0b0}oo^j-3(R?cTf{{Dhyf|%7pty4?t3~u`TMGv{XS*en}JANWja7E=T?s% zN7E#-Qy6f2e5-B~jHPpob- zqebzu*J7sSqN_$@w@{p26Sj_ zodSVUl3GbYkDr@-hJ^d>RBxH#IGTYU>X(7X{4dO%F)Nt|m9a=V*Ci~=*oGb&#RRCp zOP)pS_%po67(4V&rX{2a^8?b(a^uXGp8@_to|r+61{6;$AGLTG{o%N+W#-!K#ZV&R z3S)x9#Qb-^1{>AUWMjvVCNsob8Vh69H_q=u_H#PfXpVYcxZ;2Eq1jkZq=Ro4{Eq?Jw2xEZgKYt`^fVQ15C1Xy>h!S!ewFzkeuY+fB$g zs6|t_NNi`jUw4he(JV_!6;(Q<$vj8%OPJciM4Z@X<$o0OWMotH^iUeHdwo{8ZVsN5 zyo?40Edc?H+2ep8BD?Bj?oJd=kUNwMcRjI!lu@?ArW*STu=_hYz1}Pc7;)0bnRy4i zI6le!zheUI9SD?PEvz(DDoDAlh|r#?Cnr>DHZJgZ zRTo6sO|QMNXKX_Uj}{bluyC{I<>!CZ<#2BoDzGMsMSyHYK!7@@sK~2ltrqWm+(-G^PPQ-NpyKNCb(2Y*bAkPu-kLSeU*#axf+F_|~wnHVsp zokQjeC~)w~*6Ea`U8tA-nJ)b(58voBS}QuX47oXfwY762w^%#)!?k3S0zas0uR8Gd z6HOo@AinPASeccZoslZ~_^^Y32X-UEr1FEFM*T39+;}-R(o)mNXyCq57W7%w*f;|e zNWRh2?w$MX67sa%{Xmj_7$;oTR5qQVtgG>C`-#9QH^1-BV6#)Z5H`Vt%SFY>MHOsb z{ysROzd!kFcOO+i#SWkSoUXavhk=YpPy-aG%OS6+$qyGN>mCB`?@e-0vgp(GLP?N$*lftknH z5~7#HLPPv4c>;)B0NUhQJmct~2Mkh_C|kP4YGeXuHav+%= zA1B6G@+LXK)&H*-z%?=#9yf{z%a--%W>wz#dgN*Gr8*>Sl(n3VK3xmk`M=X^-ilwI zt+DVU4QFf1S+{%FRgba=RqGI^LJ$AekB#F0XC(VB5L6%r15|iKpA1EsQXPw8BQvCC zRe>pIiQp4}hbOb2P%pW+JRiyMgZ2mRvcmWAb8^wL2vImgld0f|EE8NE7Y`v2Fb91i zK-SfXC`M}`n<2Mws4- zNI~_sbz%jNVGlbbS5Pp(G{F_*dq4ir%RKI*hqHctt>NE%J4FzLno7!3dHyH%40`Lo ziU=<=`Hvb5My%#|s-zga>li&ysOAW=)(xV+g{_;~$V&MH+}h~w#iC3mE3lQ4URQ~I zd|Oxw4>RZsFOl`Y8m+(yK@I4R`9YFnqQCj{2}*c!M0n)KLo+H_@>fp1B;7b5K|YeJ z$dm}uwxOXRMG)t1FP7iH&N^H8Tqf{mX2sNso!q3g=XH#XfXmb?&Oj{(q#^hJn{2*a zH!-%im3ReS(_lREp@oG3U|cwf0cC@Ps-u8zih3fPWX`9gto#HdI5{OH=|F4;60MT4 zF?IQ52l&Q@HMl7JH#PWTfDYSmt?^%Wg-L-u;tv0Fpws?frNgT~;ddpDon+upu&qYC zc&BzE-#Z({+wBy~XI@Q&Xv3Mk^B~kDhcG6#c<^hD*{10sb_J z=g%{*yBBF|8!SJW#ugMFO#Qo-_yl#!Zg$&V5G&jlE!_S&vbI5^UTEne@>C>)fg4>x zTdVWO_mW}RjtBN7uyc75^C&BYSa-Eq48E2`kAw$@1;6Xx85xAui#u# z`j2yo+zT;3tA*$ODBc$uBEMgjImfenjgo_3IGn(H&CUP*VMpUh@9*`)AR#3^yP91X zDmnR4R<<0y&JGraoc#P?M|1Neqd#OMa&lp>>W?oF?YU*CKjAESX;Hea^_bFHBOk4H zT=#Q|(;y;lDsG$h7*Cm`$~U+-RyMnQX0K06k%K~=Kf?O$CpeWHp;N7j(&YoImUkz_ zTEF<=j2hmniIA!;S))o=H9ndgDdjhTrw;@WMT-G$uyEx`9@WHYMOb)qc&?${`_DG~ z8=R*SLr%1p&Wridp~}rPJ?s;cSW!$UyZ6wX$>(8>5(Jl*m%UPkc+dY2O=lStR~MvV z2m!)`!rdK$yGw8g5+t}waCesw+}&+(clY4#?(Xismv47}Pz43d%(Zj6-+uaSPn2w1 zjYG_Q5YikMmt@$W1lUXR&tzqmdyFo4rAk|3q0>F%-j>RVf476qJR+yWqYVl4wV4u* z;>Xe6#LrqKgmlJ~u!UQM*;(6R_=&a{@T%$TeVP5|zei7@p1j%@)D5s!n_H^m7eku? zYwU#$AgnN$RaA0u6o+z!%S2z1OE=;~ zm|cd_5RTW(Q$sT+!o)hvt0l3ad_S3>nhq|O=|CCpl+UEeM0f}OrA*0V1so`WhD<<4>b&PykEm`XkGRA}st27X|Arqc6sa(699;BUKm`6tXZ1QjGM2 zZ~A)3C98iVE6BPUL7Xc^8sd+SDER#L9b*P+Z=hm2Hq${hq>S-~Rz!o7-{M^OxC<>j zk%yT6Hry=Um8A`!K9WBex5iWbFiLgKxLDsLMkq)HbTuH@ibMuDc3b}UUra1{@bcgDV7rv|5>IlPGqtk<97a5UfE1K5i!w3^cRi$Z^4@-5S7upec+hCI#lUY^6p zk`bej#>&j)JB%Ra3nrJsfJ#X;v$E1V?LUSbHEq3_GN)B*PI`SttTr5U1k(HwjIWU1 z5NZiFEm}Y|d1Z%N6y1mK2L zl9!JkW5F0s|=HlTGQ;Y!eUIJs)HH6KTwY(tbV zLyDoul>F=D4$G?pj?I*1$?>z2uK%^=o|q96H!F8uq*i7i3C-XsQq@mB)>Jr0k*66_ z6!t0uDgIE5hWsV3`Tgu-$z;Baz$h1jn@3)hkxsswsOL%H(<1Tl{pd9;geR~%{`Fb? zdMLqa|HXzy$2}9Ri0D6G)g=Sf)BZaK2YM9IZ(Nk@Y;2VKL!Zgr-CH6(-S2DM@AW5RcO`&DBtnB{F}tDS_V5zQMgmaCf$Dlu%bF!5|8|ub zVLJk#R-`+ea0+B1ARX@q;)FFDJ_zwh{QWT=>)lzEgv+y*k|J)64_Xp3 z?7y>H{$;$HBLSc2}KSr=n!}l_;7nwK&kI7LKG-1lO<2XV7A1spmYr?=ikue9QIAv3{faY~+?=K?7LuHmh51Yu+uKhZf}W#CTzs_4eq~uhYpyVUfq#i=|{el+TR> zV4|Fu3DUVt;hYqUuau**lbXNC1>45oVJSn-xTpnK z88oI6RMESU_1Wn2-f{=z(Hp29xWkJJlVFrIB{Ho95-4Eup}Ez)_9UG!VLB3a+wy@o zRqbR?)CoM++o4XDoudGMllRvxVCex&@{V5u z+Nt$!0=+pm?qYi0zlLk)4_Er<@p=?@X6Q6k6KbjLg3D6Hy}5k}UmKhII|O;QlW>!} zKkI2m9^-Kx7_D2Ka%tOJ^2Fxn{^VXt1hw91lFzSi{GLh5xFODt3f|Aa>vbk9I=x)g z%?9?r+RwI_oQ#J(W+ellxBANRWoJ+MYGc$_h3fq%5U~64@CB|7N>bFcOa4)}rRGEJ zIY9nx-{+PP?|NRj|CNA%?vhgAUAo^h47H!)y~ENT^1PfXFH2%)YS@pqEiasfG98a= zham3yU=&7{z&R$9L0+5dB~8k0IcqWBJ0o!I8i>L^cHT1hvi3A~+0~}98=0w^mQwD- z>{Ct0blyGiP0V$vv*lJ`+4_DrY2L3VeNFxv=cfoLcfOZt?_ZmP$7Bg3zrUdA6WX~G{i^1?!iDg%@2gtPC+%nUpq|f zR!T9DAw=8?ZEa{V41k^3vv7Y|dgBlw1qd6k+gO?q!@#4Vg*+@hdm(;(kogt?)p-~L z7YNJo(!AtDi@Q)=oczDVJcV#iFG2ORK3)499Ma6jXSS zxmvv615yub$ylrlDFzpu`-~Y^diL2_5wZmr{o8@`wtw(Rm100N`o-UgTM@@%Zl&94 z$q*{qYw^c~>@~aHUV}gL*^bnjp5|Dwoj?vvnKH5GE5FJq|%%o(n z>Di}OW^>3@nxsW7Wi83g6@P@)qXH-_8JK^0g8%xy8G6J&EwKhIzU1L9>x6z%6PMg+c z-J+l2P;((8cGk^+`2__3gPabu9)zJmNseF`$S4tLKjbh9Pie6*(;KSApvD*wvtUmB ztizC7fMa<$M4VI}@5BvPMs0q>rD)+cSm>!|XoZ!h& zs!giH!BW&$e2_n0r|57$K4rFg{bh7yplV4imh*#Ezvm3gg{Lpx+W5HdQ@PsCaL~)y zLK|sj(=|`bJ0T1GP`+dOP8je&tfeWybjwMawOK;A*e5mNVTqV3qPcyEg z#sVRQ=X1cfg+ta`)9b$di}1yD?wY|SmQ6o+x7clq&(pMXje?8i9+&S63sq2A=2APd z^z%wDk)*EvQ$fzsh3E~!in)#=3kD(*h(BFK{5r+*U;lKrdjeHzw;RsqJNzs_SOxkE z#xlx|Y}*tme@@S_^X6I!|LO9P?0IQ zPB^Bth%G?8wEbLy=~U?{B{*bUl?0heXCIpmPO4Ik7u;XgY{^XzH~;!l{A zpiWPRY8pIGJGlzu$a@Y^>-zni|HiMm`C993mF0f_Vl(HnpP<>;Y&8(j6_<=7BLs4} zT-Zd`*>mwpy*Mx{|{?{+^ghuH|s^9!F_AdbZ zr;yFy6y?O*>`m0(eW*eOjIP#Pw&~2wj}^+%zkGH%U%dxvMfn1Tf0Zz^nwqe6TIw;~ zA1093fI|&LB+P3n@(1Cv+n<7=Kl>2_(Wk|7eJrVXM4m%)Q;`(mps=%Ky)c0c|rXIK_;Ih5pb}ioWA}iOQ#^n~H z5IUAlM6_ zTc$%uXe45U$dGcfW<<%TbRCl}*&moRMjOALe6ck~ISPtVIS~o^(Rg(Vyb>0Cl*$&6 zq3hKreW?|JaBkAM5?Sz0PxB3TZnM!dG8l|%(B>&4omPXJTOHzTV_&^4clp-`*f-wLonyPq& z^dxf2M#Iz^)Ft{q z(PPLCM0qYRi8+sF0yD@*2Swthl2HN8prxZ%w74d&+WyYmZ+gHFz_m$pbqeoQk%xOW z*hy@RaqIaKTp?j{vtSD2Qx8q#H-kR^DHnryqqkXp*W*7i-p3P)VYi2s5sUsaWt6B&y}D7n*37 zS%b+*E$Huy{MC=NFUX@tOR1mKM?*;{C!>5OEyxxKx)cw-$DrX^(Y(zeg@6$_1A0{p z2!fd`m~rLhnNnpW`JV8*ZS(j3Fmp^sWi3kk5!Q@`(TrypR-W<)ET?|L3Wu?ThlL(7 zBK5udQtrV6yzHpeAyYsZ0?XSR;}|aw45_Lcc6X7zygq!Wh%kx&E&)kbh8x*}E9oT@ z9(;hy&163WmVgy4qQ@RT#D~Ceb6CU5&TjjNo+z)V7&^Uccz@P5(qe`XLk8Sy(PY88 zjDMH6#gIN5jVJp{^KN5UIi9nf6DGwQv-M4b$bg~5^Efq0_^M*FsZ!hDKQZ761#|Je(*56+p zK6&3)%woawB|ANLqeh1BhU%2`pB}pB*_m{tlDd=gKhI|D)0qxF+^V)e%w{knoZU~z z8E^0Ls6W4)9y2J}%(CG(TFP)KuObf>AKyQlT3Y6S!Ji7IqtpCQy`g{}Vg+U8kXf_5 z<|jO$SATk}3^xT!Ko74=7pX&_vrsyol$btXbp^DG^_Z~gH!RyW z)ef>vs?{ux0O=p34L3eetb_3Z5`rO`AxNrk-?9rOct&v9imO%nvpIl(NjAM3jZf4q z(^b_GH1D{(%#;$~Wk|p#!ez$O#~|h9r;GHEe{T-Ojo>3UAf%VfRt9xp(i6lNZXf-b zLOMjwv;Mv9#;L-e36b;(dT8kvL!`%im`qlf z{_0q;_nu4Qj5+n4Uh;y0M$#tM{HwS{zf10|I~GgS(9DwlZaR9N$LaF^vn7XldFDsj zQv#bD$b>YO=D_S~Mz+mf=^YtJW0dC%Az)+?b{FwU^AWS&G68NU=Ce44nAOD97a?#+ zT80GP%aOlCt4M|RMT37W_ac;Tx;d%x?2upkxKWR-5Bs3DlPK(4{f&k0x)mbJetySQ z<5_?cyNBk?{yprSX)F+qZkW$;NHT7Kj?>5rk1}X^W1{Q{4u$%KBuIt$50(ObIm=q} zoxIepG86K;H` zj})OwYF@8#HYTXq&)eTA?-(2&OZTJEzMT(_W<(N)v0GL)?KEWHn&c9s?hsl3{;912 zp4WeDr!gKL1qAB1pnRBkWr7g3BNi}uMxbD`$K9&7(7liF@Ol`Z^^rgBhA1oyyTxU5 zBrfDLHa>ZvDt6msue{*Stk0YC$1Euu6|$9dD;W$K!di2p4Ef}Setm2P<<@D!993XH z@qfvg=v<874M-6>=rfqpal{T2tiTH^nmIirK^3rSnm4-CSKZ2i3{QgDn_m!xVT4kZ z6b)pVqs|0HkhN|ELaIF(eTyp1`(Lz}Z0-IQPa{w`(VW#53?C82vfJ#%IYlsIX*#K) z@-$#DdT(AJu^{|4QSCgcJP?b`p{53O^5@W*|I}IE&lS-b6R{xNPDAD_V`Tf9-X4v| z^DUO=hab<0l_lLgKAEl_tU7OEo_5cJx)6#uE3(d>&Ctit7iuycR6W54@GqKTH?C48!b=hQFnIVWh^6eYv}9-z*S@Ffk$lWkhJS?kI= z3iD&y2CLF8-7=d(9Zq#R_a@2H;qicVz!nRHGBhUojak%(i=C9v|D{tDIcLOfKx_%O zSc(uze|cJ$z|HSeVcg6aZu&2-bl~J7d2sxvW1Luyo@xWAKP*&UW!m-CUI_u=?AB(# zExk@SzziyJ9Nx|*QyIGwc~Z6%f7{C*0LH6XA)j(x9f1g!fkuCQzY&1Ek_QrjxZw8;`=xU z{lr>xKx|SaN9(T(YM!(f*NJvd_Sa!?H zo_IV?pL~jokH}IVfovm4#H}3cmYVo1B$n3S1Jn#Q1IRzW6v6rf+l<%sF{PYRJb+0k zDk+TurlX@k`y;4C*)wXYzN#u%;APWP7LU+%tlNb3K)nNZ;m%k8l=s26U=dRgi;(|P62)M1yHHh~SYUy+v{nxa`hrY%BZp#$re;nm1*)d%{}!KT zSe;5XKo#=8)3-qwJds z@k+iwNa*edf*gE1e+i27#c4$m>#kjM53*OyD^|uZp4nwXXK5`vGD1wa#1{Wj4Lqp- z8GI`?YmKx`Sn6pzE*9^0#kHnmn7Wah%^f*o&pAXs&!MXEl;W>3Y9N+cVpCEIWexpo z07UNJ*kdb&>o8L#XEWn||33=AADKH^$Y&{b+BzQsR!~6M-QY(o3kSs(z_jopp0*a{ z(9IMO2yyT=FL?+o{-7@=C z>UD1+F>z_AEf_PgWWgr1eYK{FzW6ks*{l>`?*RgZ4^)TInnKA2TW3pv z)6#frQ*-2t{OWsTO>+vfVpxMjaJOKx1}-hJ>+G2oW@p%|OS6iXFk~ay9c019#adFq z!zwK|^0=(bSrotX53>Kz=HD@GnxKfSrxKWP@Bz1>q%>aPH&5x>`7>TBX0r}v5sRXEc;Zc*=3%}@^ z-hZKL-*LF(b?%sO|a_*Nfnlr?XG*hphCPocf1nL|ADP^PSDNJtnU+TaY@@GoukWwVLBMniRb0k4xYEw}k<}gtCC?^_^j`_PnM+7NK zSe}+BJr?Vx-8alQIL`y0z~SgbJ&0Q2S39~}_}h3sA&`hewiftUi7#`sO>Hu)`Q@s}t$%7E-ZI|gI4+MiKr z(tV(+-DT3LKh424a5TY@Ic>**tiLCMI+X0QaWz6P~2EredGHvNGBcm0KEoCHTKGvcsmSwE8`ngPy1n*|1@wlg)fgcp4ayc zN5e*(^{ zoVXtjUiGaS7nhHnLrPIB<~ih9P}yznUq_)heh9zGG}M8Xm=Mv4bv~0rl{Nz*8XfLe zH9N)q8g`9eWJT`{s7mr*o&x4!Qc_DrNGbYcupS44KH`!v3Ip{tv2M7wV^`Iay|4*` zQYY`u{xe69$$KumAN%ZGsl!7Ht=U=Q>s%}Kwf|UA$^Kyeu~%~H`+4GN2dEXz_Bg-) z!Q{(!*udsCfRhD81KAyQ)`e}3&Vbh1p~7s*8jV~oq`L}cPIhGahP@@b9=oag zT#e&?OZ{VUy=FL-`LLa1Wse@a8tLfo6hFg(h&Fa;^7WihoK#F-p7hbb&3Y6Y9!6^z z$?uJQLd(lGSVB?wPIs@G(e9qLKZA3Zf_PyvXuzv}g+;u*Q7>?IwZ7JE z>mvrz{za>xN@lkh4~cMk&bLL4C&92pjmN&_fY6>10LGD163)yG2m!;p*Uo;QScYjH z?$B5EfwCcd%t7CUPgy^bH47;mS$dlE3ZBItlIwkmhV-hf+kAND?O<^ ztW&fx4OkK+m?L6-5FSwyYm=zmy(TSp-6Z82OKbbN->^iyv|ikQ_~pe>lVg`4OyOYVXR0$h$Cb{WBcrmmalFOLD#P*VqDh;)5(HF;9vrpbC|! zNkGP+v%b%xx}!{B+G)WQtpg@RXZtSyd+$C$m>88ZvT0%UYsI*$6yG>{`v9uw&#Rod zj@|47%toz7uAHmH4u!4)fy}3RHb?a&MM^hia~djpL{-Jz6I0mOW^~2k!m!DtzPX`n zs59+r9u&spaJ0B1jZs@p3*EviO4(pJw(njd6hy-?32p4@u+I|cF2vB3da3=`M<`T6WOFdT+U=PLe;wF^l$SEK++1zqj|I=(6^k##F+!7NuQx15H5` zcjk(Y+4s86Nn~=u!27W}SrFmm_9h4v^4VY^ZO)6dym*|u@j4@czk?8j@*?RbrU?oJ z!7H^d)1ks6oU6%EndtYL@2+^RbEP4W>UJ6`GvRzkgCEokZ?CjY3{19%;SXX@{*@-1 z{Jrz<^sK#qHjv{*MNMA8kH232lb~+detC2QjFlQ+LWW~9>wpvlfJp$k0+ljien{}EZz%nuDZPi0bbp|)tOnUuQ)vpzR=OpmAak3#*HTeF?U~p zn1wQKMSF8vJv)O@Y%*PHgY8w%w+KRkXbX4X8$kYUt>X1m?ziaDW!0}cZs|65HcA*} z`9Cnh`a(heTV+mNumEQ32=cRhIf72_z9%9XKCDRzLk*XGY|j##sHV5UxFt!6l3>uS z1CnwJw1EKZUKt(6)mO5SgbdWd7~Hnf*UG~2^|{#vY?ku(HVZ$!&x|z23oy*Y9d-^d zIg4(BzyL&esp;0cQA}|M161hQfED~y z`)h$Lr|a3^WEeJKZ!E{nX|W7$gAH)DipP{G1$Y1{oTvUAXc-4M`hgGGV^l2gn? zYBXemLHV9yF`bN){EPX+=O~slUP}-Xe?%(VY7k$CRA8t3Z$9Gb=QD#8H?s1wVjG*x z)Zy|AQljeHvrL;x7ak6nM7zXugg%gg+W|6MZ&07wkLkIbME7tI*d(j0S4dQ}Hju!e zPppv3_}n%fP?cxm!|1(6d#rW5%45a_W+slWsY;N5-TTf}044C`^)Pz?1ZmAl*K&00 zdUIVmU03oKq*5H82U?tZmiKxO?WQ)5iIBeN)~G*jlD!g&1eJ`T}1->Ut38pCrOcwqcGyB9$&L*PcK`oT;3z5cH*oL>*T?F2?f3 zlK9i9-Y+E$uMj3lb5!);09NjEK>d$k4}YdanK6V}CS6Fw_#2dz8*s-48*6DO*)@+x zhB9OFk6fMtC1}$ep^qz?^~p@fKB`gx!0LjSsuU6BWhaG)^Ob`{KmQF1s^AJ*G&`H= z#+8*doXqk;nimcV0i^w6Fv^YSfypU2kZK!v5z{KsInSg>>&szYJ@*vrdCyF6B4IAA zatiSKACi0{Mg}o!E5JLiAd6z`KD13gQ8`ZL#_psK&;yrreKp7ZeQPW=&tsd+@S zDvCV-YPG+TXnGSww%-F7>67gb3Gh7|t7|M*s?q{oBC+NbT0Y&IS)<3jhRnc1aar$L zrCwJ0>cZ#kwTVs={iQ!5eWPCE9A*R1{0n}imx&=wh0=~%z zv&-<}>h!nYvrmKGj=T74aCP)E05_s?4YTjp>8 z(Bs&y$KlLYZ6)M~oJ3ZBs{~!>HJ^ANTbR^WA3vR*0E#y6A3?d#vi7*~SMQCzx7G=Nl( z5C%hx$yNR~fc%Q_2xDQ)Xae5=_XQbQNvWu$>iRNJRMSZ`3V^Xv0y{MNcUhpIjBt7I zK+zIE?bkc{W0hawm59}_Wf|amVFEPX9Ho{QE7@5Xy!VSwRB1su%~hXz!0G$=TDGI$ zF?*08WA$(0O=unjh(ryF8I8}$#S}CK`B0)vl~3s?ABmm;O?C9&v}*~d5HQKn2`|bn zHEbx5tGpClK+7)3UP&C^7rsBvKkPZaM4#^e&{JjZPVlw-mg#rYXYch_Jy6GcZ)4o}-T5V>l}8+S%lF(8{I@EjQ4V(? z;AK#;JB^F&#v>9a=DR!Z-VVJ1*{*iFxSIcW`&c6yhS#DP29LY~Ped40N^ws2<^uX+ z?nc)Qzxxnu9{Qo)L=fMUIT=Z!UIxqv2C6GLAL@K{FgRq*ln5Zd?Pi=>=g)CyLDHcz zyThl5`YM)yfX125?DV{m?$d2>?mT_u=PY$_z-Zsz*N1;!e>1e!Y%KnyA+j2+a|CW5 zlO?mzAF9n(jHLMp*_#z^_h%o2i3A_n3_EdZx!Rveh^%SJd%vM@ODd1 z6uUKNaO&=-&zC7n$t2QS;Ds>l3VSUVVpqF;GyUCa=CkIGrtunIjWd(&S7)il-G~er zhCVk6xD4Ji!~HoAoFmH>4{=-;dN_H9f`Jl-UyPSC0p6rr3Ou zCru?WVPK1>o3{_l<7oI`)E8i@ep4_ek#+4dBwqJcy#AIe(V_Y{BCK#R3qR=z5Ehh3 z7!>MadR4~n8hec)V}jmMG(Ec^;~(umW@fkw&n~?~NVs01%7HtGm!N6Ap*lvv7s%KO zbPlv7ZGp#fY<@}2Ei`dRzQ}!A%IfZF?uz;BRhs&CU{cuXOo9cfwNWIuY#4iFZZs!} zm2Jt-i%bg(K7F4X0Mco+X|@C3)4V`dIg>u4Mb=3YcsO>T4tJ#+~b&O0aW~KT1AH2g}HYT2z*;{k$yvide8#$H(xS=q6xj zk_qRDiVg>^rxvVw*;QjDBcHih7F!UoSX&;IU__JmJ3X+pj4mPW9r3Tcf&R?=BGor^ zuG;Y)4sV;yz$^%-0wFRBaLy|4!4J#oTyi+0lw}h}6KfFs;Ky@cC$;2yQ-B)ti^H#r z(3>Se{H>{32i*N#@D>O3$lWFOEGU6lo0XMy1Hqc0oLw>1eHx{Yz8B`ynpz@IWpR9%9kR*H#^ZsAW#33 zlq`C{aRyvls|wy4n&#PX;fp- z^EtXDu@s~M{OMlIa2?dS?|~$V9x4OB#vr2Cuh@A0qwo&SecK^7mg6Z1Nor@yg-(2kJ;>R4eMs96%RGiZL|D z>RexrK>9?tYtje>@CN6tYF&JYtcWhkx~#<`EzN$X8du33S$?{mf0y|he|yMRNt|-= zII^*~U#^e5w#ZPwl#l2RdPr)?RfEJ33y!eT1L+OnD*^ zGLyH(H9ZV`5|Jm)yzA2fyC68$*M^?Y6LcA~M5VFeRiCSX77vX9 z5C~*dJjnZ0T*-l?+@bi7JP{hUPR4+}L?Q;#zM=axwm&^C4rEFgq|MLLS={iWX{Q5-pmzQM_6GzIMw?tlZ}II zdSz+|u<2ddKc^3o30$}l90c&mj+aFjh#$iunpRxDf7(sn;v{@iH-St*gr%0&0Z2X=Ii5PI_jB-?*l0SGsJX`Gu>V^;m#{H3v}R9I(aIr(oFneW`# z4U~>V(&+>QGjobwzCBYKOAlQfMi*u0I;sJu-RorrK)+6OR@k6Ejvd^g_tSmx*QfMi zlm^JxwFdegm})xjp<2d|Qh-`h=bz&zol}B^V`2<8yVa>1Gc}1ne+LbFqjo_)uJaC+ zKqQ4q5#XLz$ORnrqdHH+0bauLa@x||lGy5_Tls;|Y{s_({a}Xn2VlHGa5|4Oi}hOC z&i=T-JIZ&UafaygCyF(#?D&{4v9Q{Db;jhGT7*h~%OD$vW-p`Jxzq{&{nV>ht}zvc zgdCgQ+~pJOyu~aQ9&Echm5sks&#LwaD74>cCT7mqVlx>oa|l&xtepuuUOQ~#;%l#y z17Ys_T7fVrQ46`p41b0B$zJCy*%19seESB?Z`qlF2J_)+eq6`KOMJ_@sY$w2-IkVNK%R?S!Mrv=7~%~d`hphUGDuvT-c>MPrSbAA+Ou0*d>B|;)I z_2JTsw*=c1B2`OEuA7HH&YGWD5hBCqFlfw`9U~T7&Tv;;wev5Z%&m!NKpOQH23>!~ z%ASogJs~$L`duA*KjeheQD8((cE9uUJt5h~JjKYhBgjI%0Xhlv>&~Rbx*;)Ad478= zw&^+}9Rdw)P&&EXvdTi8T9W;IRz2pk_NNHB5IQ75($_8`|(Cbqq?d0OUmTlVSx zz5DfEMW5MGPJzO1y9@{0z_e-PGKZu;62Y5rY@V&sbQ=Q#=;3KPxsr0P<+6XGh4J&1 zjHN^{*Kx2V0Nj*}fO_so5>t4hju(Ez@@P*mYNOR9iFyi8q8COe*Wj6nf{f~JkB0R) z$6<*POp}?>eJ&o<0471UzGLT$ntc9G?y)_#x)qmghdr%iYJ;hRFJJdXx2oxXczNxY z@t?KUxqDj>Ib*1*R~Pz`hr*oI%z`Kp+WIa1*F5# zfm@hRr4j+%Niej_%G2MWCn(5ztHnOLhLzk<51;wOvJGF@v)9lVfqXQo_{IkvH>o5R zgdu)`hYQm3W;1%|$49>-;e5F*IAHi%&5G@F*=jrX5-$su$C>YQ>^r+NaeNzafc$SJ z_=%c!OxCnI!9b(u)K2h6H`KLbcWh~4=yhRf>BhCr13bj~ld|!G`8*x1j}-mkO8XKp z(oJPF6Zc)m+IELP*NPz%5g%}iVdW^>EPkwkjhd{}$=ULLGFL=-XJO>NC6tDLU3kdM zCdGr>zH~`qF;*5U=TODtcKEwkV@!ely#{2RnwXNZM9-e&nH%BzGvmde|0kpQT>Q7Z z@)|f`fFp2MJGQ}kX1BJ|aus-;ZZc2`Wb(OF)EJNBVI*_u_u$zL5C`JHgomN~;aCBb z@d~%4+J6&kyAScW%@6#Ae!dFQz*(^3C>~W9qHfAzwRA_=W=U7;{V{@)Pm_K9!VE0j zZM%WpdM8e=7T;;q@Va)V63LXT4O_8hY=nR2u;GL^b0bWsctfPh=xCD{j6o^aKzcrB zHGmH2bk3ix8L{{;BXVc}Ac$)xN*I9)9><$$Y8mD~#PA1i>$*bOV5p9k9Do zV~!-?>N}bxoSNJO=DQoHC00;@K5&mN-JmiJXG1M7b8}q4W|YK-{t9x<r5V z+%HvoeZ%>fA2tlklGqd$ucm*$@9>U+<+msNz_bAmj6}yrhPDT4z>Mna$45P$vl?iA zVFP9tHdYyM**#D(bi8nblRTe-l}h-t00x4~-l*DQF;y*IOJ^N$u3)RHb5y0pa5`U0 zReFQ~CW`}Z+hpDJo)8cqNl6jGUyi&N$PKMjn=v_CnpwQ9N*1ITk` z8rG~3T-2d&n4{&6*I|ED@^sU?_`_}BK;nM}< zHh`}qp!n+Tji$zqv<+db&|?xbq~`biH}f_mghi2tPYdX!mbWiYcvKnB0bm$lXoqTp z@N={e;64#JE>NvP5JOhwxQsyHdBZeUv78ix77OA`N5H|sbv>zCw;v?O{OvgfF)%#5 zeQ2EVfnL*UaxxlR*bJ-#%l-I;GU#>K_OHD0>r%*nP~TD(sO1|lT#={Museux4_-F>4wyT3co zD!TOwMvr$JI$oiy8lF*4Ih*xG*8T6C2uEe;IPnkw3+#h~0cp4?2ir4Ex++!p!0xU~ zRLbbx6Kf58J}11uZeQBLG(L@V$Hzbfg1$|g4I55QJF>4YUsr7&E+%tdgt;x2XXoYs z4a$ZS4-ijrB&Rl4jth;TioteIH;bi12!TQ~Gjm%uoF>-R1x;LSKcbRFLO^(9?V!2Y zSyYg}E%0w#_85W#Z%y+OJwfBwNS`6q5}1;u)pY2gL~@vZDRt>r9aLXMk-^EM0lNFb z=~L8}C<%^Q?x@l5lSU$#sz)CuzGc;_KMSf#o)$w`p1+BmD1-#yaamIw)Lg^Ja2ZqS zRI3{u`B9<=uCXR*BIT&!JdUTjZ9kZ-@+UlmK;cA5C{{ZOKK%YBdtkz)8}ON$Y3F}t z@TPklPa8~`m|rV6)~l=Fa=L6F`Ovc?h4yk*z9RwuhuIHlb2Nkfrz^^eedD&?eoq=5 zA#fY@{NpV1L^e0Ov0E*Su%`>L-k+_G@6j!DI$qU&ED&DDeEd&TP_>PiL9-?NhQoVh zl1|$e+pEqh*IlrLha|WgoxZ{rYpvni{XdW90vmvVsF8CA22k48|5nYx{4vZk<^z#0QIa4uP3fGcjr2KYj2>O^8rDr zB`yPV2wHn{BKiB;+nybxy|;S4A>eWLEL;B;7>C-xe7`@A>!=C$gGH>_>y89wS5U$Q zk~ZILmc^f6mFT=B#8Un|BzaFR$n4(7h0n3ys|5New7pM3A75TinF8~9h`^_%lug?y zqRbRU`mFWDIK{Y?9@wid7LC5-iQjxNR7eeQX@ANz>T{@{(4z0^>lD@01Vw*~&i$@X zt4Vl&ePmF3+~Wz$WTZd7g6s>!9-X6G#%62g2zlNN>_5$~8x8H!oyfzQxwGV11jY<0 z=F1xGkMXG`BHFxpKmpcg)4jf|GaNRvFHM?k-t>wEGGomzzzMxNcz+97e|drvi^MKl zUYwWc4w6OrT&Z5BT807CVv<-*KjqUVX2p?XD=7hY0ze^)B|^141;B_1<~HUgZP8Ln z$Yk(FA5Q1nEuV61J2lyGR{uoe0&EW>2)M@n`KxT(HC5AhR95=PQS|^V&%l;E&GG6cH2YmBtI(iUry z*gZk)sWOSKy15$+B$7zAjFTT5!FIo_&7HK;-0m|sH?Tnfh`-)MkyrhoiT>*o@tiIG zC%|UNZ=G<$ALoHlE62AHX~D-p*vIHdsMLORyea?d$MG0(h|kpRO!=Pb^cc%P}Z;T2&Xe z^R|1zIa4?Yb#-+vuanOetuNd>PA5an9ur$96@X3cs>CLJvkMHN#|5%MfB2+md-vhS z!K8t7a?C5;*NMW$ipDMGyHma_jl#XZ!P}1)-H}ZP;KSyD^)`0~ppfzd(~AW{GA7w| zcXxpMV%S$qaawNui_a`Kv$JV+IC6*U$HxS?@|V&34pB8V)45&ooJqsO*~94?oep=v zNfGb`04{11^Kh$d7J4V#=Rce$P8bZ@agL7wlMb-vf6Vvnfy-#D#s6K{lN8wQ^$w?w z9lr%Q0?#$jfKQ)5uT?sX#p!qi|53t&V9EbE-24Lco=?pz0NK#i({aTpaIDIiz$_GC zzBybA-#)MI-wIw}Y32e}i+FT&VD$vdr7V?qtrx4qbs2jy+MbiS9YK$ei#pZkD^;n0 z|GWNhFl0;JhgRisd&v*d~88u@Ed=?|tkM^j&e51Lt^??yJ6~oug zH^R3|WQaAdXFmG2o2}9zm?Yat2Vgwk*UnzdaUh0JEEtpl#PpvJ0mZPE#c=U zU~@3kxb9Ab(?f$U9pO&5oj;#R1MhuTud8opm;YxpF=GmF!cPu(*6G8x*OmYOngVx& zkOotr0tZ&04LYqm%M=75|Sb%Ry5f37c<%CPnr2f#;6xYn&ce z)eAh6y|d{MlS6XNS`Gc=@AGP}T)p=3Y5S)6E;B$TPFDd^pjfzdLY4Cws7?K(;Gh9B z3$r3mO;Pu3a4Y-C1i7Y00fuLRi?vp+&tISmyqy4|hwpFVl@(t9>Kj`<7e91W`NRMO Mp00i_>zopr0Q7F+k^lez diff --git a/gui/bacula-web/external_packages/phplot/doc/imgs/graph2.png b/gui/bacula-web/external_packages/phplot/doc/imgs/graph2.png deleted file mode 100644 index ff0e80beb8f5e02f40509a98bffddce7a242cf4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16749 zcmZ8}V|1Kt)NYJPR&3ji)mV*fG;Yw?wv#rt-PpEmr?J^s6QAcj=X`&@l@-ja$<4j5 zt!qD#%8F7T0uTfQ1V~0&LKOl6G8Xvz009p8X|z>34*Y^Mk&}{u`26oHud5^xcn8rz zTE`gz0tw^4Z^-#gzc=7bco!LkZ}1C9xL907O8%(g5D;V#G7_Td9$6Qgt}a+B+aovb z8~V~vY!p;zd958C9m!((SakP4%RXfF#pxTBb@RSOSv$HTRm%jB$po}^*yRYPKtYPx zxLfde8y+9j^7HdQLEGF;O=f%7On*T0|0*abK!*`U3#oT-bd(fkU?AY<*JEOuES{!B z2qG(OyT3;UJ~0Q++QK?8KQDGBA4G-_l)+dKF*r!&Qj9_Ye8`eSMc}^?oEB2~0?5<{ zGq?y5dPrje^T}ywhUGIKQ~G0wNpWY6bNwf-ejO!03x56DW~1E`x!URhOoT7s0rB|g zhHd3PS3oVFerq1O#fVT&5fz>nU(eoKP?t*z1OiDbC=5(br@TH5 zj7?1q%*{a(6K9XS@}dzE#^&a-;Nzzs93P_tFRH3QF)=8-ynH*Srv{Z>C#86*3-h)0 zje~!OPD2IC%E}-nGq@7(?_GY>Q<#|UvvP8hadVSst(>K$r^hEH$$$SYASoH<;pH`2 zLwtVr-|!6$n3|d?KZ-2S&`D$r{Dg#r494FqutGqXL*ldANVsp2@pb53-mW7(&7>8Y zRr{OnCFr=gGx3xorFuL8>n#Ix3E1e^*a}=FRzEB(5|fjoGxb21+o&UxlfS#X9~TPD zI801T@VRZ!Qc_Ze)*`*IraqvQ>mo?2t(>uh;W(T}nD%0_7ALVZXt}L$yCUPq%rygZyM(1Hq!3~bEG?y@pd^K0^_oO@ zxj&V$ihBE3-0c4)44GK^6~z{@!&fT)^G8q~>)xbzDSNekmtx8EMVljKNQe8C^WD)G zAK$LiwIKmYQ~{cDH)8)zE3fYRrv8306jHwN z%*3so*?dYY92}vaJ+^v|Zse9Yjz{E{R3la>Z_gvDP|(M9Mt!6Z2ZzV|hZ>1)7i$h2 z_c&klxR38o$uz6AqYb|p{=2wfWoI8OZbu>`rA8uSWT0SmATd8OUtL?PwcDft?h+9> zOG?umCnqNd5Xw4_8+OHPf#95+EhJCinpin_5=lqoh3w9H_CKYxv~cb1S^PeI*-eTgc*(jAj3qcO->JV#M~yCkXB7Ie?nLTl{1*)L&b z=VW@A6xT`l@)|DW>!k^vW)f9yT5RN`=qHVs&$0Wu^$pGuzkYcezXn!>w_*5I4L)Jx;W$)(!V>jg-2B~tALrgW;l<%cS~pooMn*Qk zqoPC5h@>MCOIA@=50R(Y-@f2S=y1jjz&qEDSrK~Pn+^`(D<t z*js0+|8i2-ex7(d5Qf}8wWKl6MjezV4XlyC_UY1>ikb$}A=?PW0dE+(oJfdmZ%E;^ zs3CAlDaT&B5&s?YrE?&Oc3rpGN^uI~s1F0il@`DlmHGMkHsD@LFlHQRPMHvEXcMlI zSp4URYJCsai#cFHQJ}Qfofg{6kF_?8g># zyQlkKyF;*FG$35~VG2N^$`mH&qU=20|2$hSD@qvuRP>9~X~h5NS%M9X~xi{jJ^u5~A#=jOeE)(MJMr8hcZiJbN4K0R{waKXaYwh}~MH zJ*-IA8sz=SDmEo0CA}I*jLk$-U({AYQpo5%f2y)+3&Kz~TQWK;oFKEDL)V>GJRFq3 z7oB(bk*T4Dg(|9=p01N6;F*DRn!0-B5qGbGPi9W*uR?MXc5WiLo$<73zGGysL^&r# zAuS?5#w<-kLz4nPeM*kL;%`x=7PxIV3(gu;@nmGtBSy-f#u&LUzA;14NCLR+3x7+X z>n-sGz1;@3`V7vJf^g7>#Ff(l1Hyf=K8~`m8PXxu+Y%7ESjMUBEN!1N-9*mQ>UIgo zc|M(7vF_pf-TLiKkd2cwi7!77R^kRt-DGUftg>NS`gRrTI+;%a8>0leb7GEC|Et#z zY}+*(G!m=C%VlC4+QaX#RAD&SMHKK5uZQZ!4@ zJ1!s~`VFi``|sbP>&~ydQ(%&$y|blrrjA?GRQ~VercPmtj^%$AXdE1toe332C(Z|o z27JoTH|IdIj=vg?bF2DaxgpJoXJ|U|qMBE%=FI#X?v+$d;EBU7|EEFKz$v6aFiDRBuacnHmgV93eb!*s{T?R2c;KaCV zeE*O5{tLbB>w(yJHda<;O+Hbih@rd?(8T2A!QI0)>zCKhQM@mp@Nof%6j0Hd8vHp_ zGtt*uwt+CagX>+ns2Lhd5CD5gdR|_9$3ZN$M~`sKpW7Ox8~@x2;+g?H)si_?!)Q^VDu=_OVvx~Q zj-7;*@9_1mrpx(O@$FxjDspB$M6>409hwYVn~|m7^I7pTPTeyYF`C{BU%ppGg0&cr)6%cxa(|@X6-5%$5jLpnwsq%|y zki7_mUxN*6!BqUR{;+H^V9bI;}jpD=yU* z=ae2j(4u^zPv=UsE38En&*D`eD`c}RlsORI(%|wFue-@deWN>XdhogQdT<~-c678= zL1ZfWXo*a_tCo0#2};HK^}&c^rfZj|%5-IIiI2JY0F4#`wU_ljVoZ`h7|UqZ^C?TZ&1n#5io!=meZFO#{q)Qc1cZ?O%eJNPByy$S<>-f6u0xqKXY^p-GXdQ0+`F`?g(`2v~9Xr$~4Zu zAJQ%4^A$yiH;5NnCG?6wOq8WeEh!#WD#mAY#gLesl2RNvjHrmceCo^XSTdnYwc%JL zX7^oiY#p1A5M1Ra+~AJ$;aB9WEJ$sc>>?tfzYP``&QMP>z_FvN2s92ZRq&rIf9akd zVdDz*_3bmsh7v<$!9^@uPUiattA4y#wg&7Xi7z4#fC$S#1w#LW=o{;arI8y3h0K0q zVF!bfC?k*vBx#=!c$A7HjI&yI5)7W31&pe!vq+omt$LH|QyDN_`4U)u2ttv0A((B$S zjHO84iit_5DZ?#Cv}7+rFQT&Yr*c~s zDRx*V`LQUfFFy@(FwGyBQ>xzPR7(R7?cI;U@)Usip?6ux9C1x4yK;pg-6{I>ke=%s8I)Je0_7_Flf{$zXL%hr|axe0ncqz|YVWpR#%g9@k}| zHF~wXDq?k&w=5U|L>2|Vqh3V-1d|dW*5)M!y1INSDw&qs24_@Cpey+77|I?X=&-?$ zQ+-|^0sb6G+ft`KX%P%PjPfewThI=$So)%OcDT~wR@7e8oTC}cqk&@Ep zz*}R1<}6v4ZmJLPe9srbJgzG*g=6}@nuSTL2!KH;RTT?KlhyNlu{ABk9|eE8J3Fdu0eaNm$N#rAVfV*;Ye` za%ZoCG@ThoTbbolro+qB^o|pW$1yRF7=P&hc6l2&+Bk}x;h8-?D#zId=#-F^BrpD4 z?5)qRJk}X$c&RrTTIaMT35btR6Hr-**t^N{kEx(<$ zezgbicBV1ks1tol0I@NJFFK?e@-qf@qgaumZ6XyO1Is1G?V|A+IzN5!EhyaSzq{}4 z^<;YSMFgzVkYOc?&o#Ir9AD~5(zqGb#@9kIXR^Pf%kgL zRRW)GSq#bMSipxnD@P)q%#cO}T*s^UrvGd=R6UBcm);qcRdHS(_e3gTLRJ=qD^@;H zW4#9vzgG~qt)8*D`S?_33zzwiHhCHVIQiFFX5#r|i#Ce4c+?4y@58+0p+bdBO<*sSJS?#<573r>%fAK&-lcs^W0e(l&CdwW?Bh=9 zOxCKCkX+ld98^623>JTJcp(-ERw7Kcd~fFlf{!@9Fl9+y9RXxy(0{w}eYqdp*no29 z;W3}eh^(utTbz@{0#Y9Xa2i+bwI#G~Mo=Nr*%D*(fu5iMAyrxxQ&XLKaKs{c2>bl_ z-VGB^3jwFyyz&`dF`u6e^gx)IEV1}5GV)IF&GncJYw0-bK_&XXPZ8iirW4dkGB7ZR z7+lfvksG@`1ZH*ug~G1z#(S3W3knM?&l$p~RTI@w%^9efG$jQ;5c_^S`pYBE*eCSE`&vqqADV6@8=(=GoKQ1I0uYY zoggl8bDts6;f6lrRDjrAx>JgF@Dm52=g&-eQpL)Y_Y_uwDQ=nS8{fOWk-|zf^&j*=T%^_pFNq`+WW4!3JI4zA8Wj zR}ekvK&1C9I;)1T81cG7OmvN zjmvaXEx2^zIV6MlF}YR=UGiJd_@*HlOx(USfUreNq3; zs96<7%P6KN<&YX!ldR?LCv1X;#M}uLnd1cElH8_ zS9o;}^Hc^;zWug=dd;rbh~mZE!a|{1$)lxz8m0~&xB?3AJ)v| zq8`r-jK*INpw_zAyiE>_A6=-}u`o^T1P$ zQ1d6*T~8qk{E|4bwPoPpT`^-8_OFt%wN*M>%x)a(dBs2HYCyZ=@pQk};!+-@ybDv$ z&3(O&w%U&OgS4!A6IbG-7v#8{&jbq#%?n)X#d=FJU(|IP0O6$#8ygj?vOOP3l8$a+ z7p|g)<3daBg7LALXi53CwXiGITY#;*MphBXNrZWO1)tYPts6A|BNcj<@TDnPpz8AK zJAA_HzV^Zh@%R5Y@_zN+9@O@n5yWExW`hnE}pMHmN{MlGH7)1Rl> zdbnkkUFGJMN_49rwMS819&B!+RfKx)vRYBwB60IDNcMC-l*>6q0BGVtNCT3Cr!S;GMLkTFvmbYZtR!Y{-)zQ&e{kth*$oMIRbw2YcI_U23 z$dUAUu0j_#FE$p9;PeFn#3!CBRIu=!*zzzP02-l%KMH@$6;OeUcbn5Q0pL5dIvr;G zNN4A0aByf13j9;^w+gPZYPa`ObU`FZ81&vy7XU?jjbV`gg*HY`*ftjM1BWPCgmVE8 zZE$#K|3V*AN(vtE9L56QWr>zFqkLbN*}NKmOlf_^!Kt++YW<>YLWvYOs5Co|=^>LP zyqy9RR{)EWS3EQ@+Z&+MV9pL$sL4rrL{OKEl@-JA@Nj~eY((rIFW0e*8o+ll%3#FH z(dzF@4A_Q<#)gRWYio&)BGCG&s$8 z(<;Le`2_Um3+f+rpb84VKWwz2`y|4Fil@mV3^Nx+B*4%H-e1(u@HA4YnLF8_wuIpX zRC^&=pu#QacSOXVxr}En9RS-4IK)A%MAlmd`@QSdM5``KkiNcxWt4~@c25ZKB^*PC z%|uNTxmg?q1!BP7%&P&$wLEEQ^|0kGfZ4UrNu%z%}VW|NX!z5*}1uI z+p`G1;*>5AgONHK2fEOY$nZz%J5%R+P+VA9(rBEqnmDNN@ZOhOZA!mVrmnB=^MVJh zVKzFOqBX0iqVrs>)Wh8sL_QV2Zr!8CameVzhp>BrYjKaK4FGjqUKrnt&rO}#^nSX& zyBq57Cj!bi2}d$A-Qf)lMd*z&)y$LGAhjn5GkUVqUi+>*kqt_Qrr*e@K;f?_CjSAz z`N?z+R7N?uX1l-B7kb7vTaD4@E5To#CFdx|U|f0Z`6h*sLz3$ENz{0Sq0tg!5uq$k zH#O}QJQD#igQ%>kI-PH#)NgkiTwF{drmZgJoT$0;Kko15H5X{Wu=^F;+nK}>e>Bx+ z;3^lb{xi25B|o=+IDv02F%WhtkhvU*8o}y6ppK5_;^tmf%E`>klu0?v#vJ0ZHW z7wW1wpQIY4JM{JE3<0aA#IbURI<D^lg*6GYrm59
vTW1%`_{R+t}$pPrZ z^g88Uy3K}&kdLIQQsR3oa1P|_jV=C{h>Lhbn&MYEpm`nZdHTxrih*2Z(4}-deLIwk zRScvW;z8Lw(7^#_cGnJBdjx193}TGGMu4=bc842)d(+57tGJk$iL^C;Pyb@BN(y<| zEEQ`26{{2%ywLv&$3i9biC@a##mBjSj-;tSYyF&74Cz#TOkaUWkfWDKd1SqA(7GzD zU}PbJm?G#8IlNvmGl~T8L6~N6Sk_ra$3qsF?r3T~jopl*jQ%H(iLLYhB)8k{9w?G2 zH=NlA*Ciq&#wvSuWaR0bcFZ0*oxT=9>os?Kk){j13Ce!(VvdeO{|PQO!{F287>|=s zE^e}(VZE8^RvnqO0`6rEK&zsDseb0QiA2KvNs-~H`=qzu6hXAb*WsX1dJG6+h1e)(Dvm?dQ z-$);$UE1C|tt4FN^*G$v6cJyumIhQ%=B)lJN0R#`(%T4ag2a}?>pG+yqH9_9^Pip5t?VTignDn3~O3o7$eXCye zl6qpw9yA>Izjt{HaOK|5iA30ur!S`WNO)5PSwoA}YEtR`u%e|H0G4VE`?~QhB z$;{@eh~FLob#>?{F(|96Yx5=k{tyWX2~>*Zy0&pou4&M2z4`~R6sTZ=XS4EHNVzkCtF=eJuEMJ zhn_AjF7&FN6)f}lVEDbi$6hRd4e>+w1<*>6UeAM4`CaVc6_<^4#@LL>W643$89+o{=Qx1#_U0oaEBjx) zmNGncp~BrAIN{=$Kd!d{4m;)eS&boo^n3I9CTl8MxvQn{S!wWV&s z&*Al@o1kJpt}_THYl^|mL8Paww8nhhlu=3*g!T4}3m`q!sZN3w(`q$uBf%jaW(18i zAk3jrAebwXDWsk8_36wN5c1zG$BJ(hqpC%et^(ncTssQaYVE~Ed3x^@yxP2l%`i0! zGIHVXBe`4Z8VbFSu1TGzbvWeT1|f)H0}hAyrnZhA#)T2;4Wg=)N~`mz{j1sm)I$Difl7K*IPrI1Hqx7bA(Ak4D!f7NeBL1Hl3LeaTE z7MmX=``V*H;>9+@uSkoLy-cD$EhI$r(Eq4C>s~j&C zqbA@Ca6Pf#SIqn~EttKKeOl@1JCs5uE zot%lV{E_CZ>uW6<6-}DF?IdmjeKL$t1Ck-2NVsCGg zmnC_xAtHD}P3>k|(HASA2g)b3Hq1CO@5^jj_Nhvl%ZK-_LDhx z8T^@nY8{=QpP?zWTkPcQ?1|==TAi&cOZ?449t)LgZ)ZoOF_ii_GLr80*n{(0gj7>6 zKuX*J1OYGia6aIXd`|>^lhv{bXXzchU84ML78?3p=auLDO<3Hp1uXSuv*k(S;w6`^ z0!s}L&_oRlwOmpv&~JqE&6&1yMyqQ4CD64FRv=R$*F}{F5RY0^dqt^h*$~`{8wX6s zosfUa^}J|~IQR3GnIg;pqCN#M@*D={69O6= zoqBjkpYysJt*%)i!dk*UxRySh7Au&9?WL51lRcJfqpA%~Nmm-dmNr3!Keg>okZSZj zT|)h;3^tfcTMmk-en)eH#lL@x+{-s7;4GaXMR`PKF}*>6?+@VMBHsiJ$HFjTmR5(v zZ{dG+pg|TO?t7)~>D-QjQ-as_!CQOjtDd+`cV@Ku>j}@itpEGm+N@`q_~zJf@+R}S z|B)gp;z2r3GMWGzl}eg|j{(G?HYZhV2b9M};zcTjD(himA+CQSsQLCycP_SQYMV2^ zIjah773N(Jtvu-m3#0V6yC2kCwSge3v8^jg5j6E{_r$u2TRWGVC$Bo(Jy@Wt^l%B0 z!MWJDnyg11H+T^-PNK>PDgukj(TW#seorJbEPq0#qL1zegxT2+gGe)7AIaChSr+ZPiHn?WmoKkJ8K2m z7~`o{)U8&^)ILOl4irg*CEvY3-*r|0--KN`o4mE&EUu)IH-vFNQRkwK9n_X))L$!q z>gPw|`qYzj6F$1UwsqW=$yQ7BURY{-LcMS@J@Znx;ldkkFu(eE(W4%Eg$rQD!sJgA2bc==Cdu zQi#R9xpk+)W$9r=H0&KAB7A znoyz(9+k=|G4Bf)zO`+587(ntVN3M)-B2<(kZel8jjyl9!Aq_jzHW}^?zk`#{n+K38% z@9>G&{6Zk}->O|R-t{~ryClExqMgRddp7jSUA~%r`#TFI@FRFy30{W()qpNFl#2>+k&Y%s}gEAz(p=w+4 z`nSp0Oyat+naL^N-2b=!U??kwhPcrA(+)eDPP(+TG-7kTWv)`k6rfyC1A|0AoGv6L z-Qpd^yCWkZUZ}MNRJfKhoz+CI7oiSYVXz7knQu-?U|j3+I_P!wu^#_Ss(9W4Np} zz`QE?T9)2wxez4@S5(pyGW*qLyb2kq_Hp@nBncRpZ0uMQ&=vgu4Iv_8s~B$WcGF6P z(u4IDqLkah=$dsX9k^sIr8HNeN2n>dCJ8MqpH40n6B7zaxB`z-{+rEW$j*$| zoqO9dHTB6MY4M}O$v>L8ktb&wm+<|Crcx&s>jdIm3CAU}6AJr2AF%BYCn{ylFsGG< z4H?t=d_V19(B;TN8|!yYo%*;<^*g!zAIa7d}frM~ueYSFx<)47&SF$RkQzj$vMSC3nLYS`Uf*;X+7KwFmq{XBK0%?A|&J1%ZgDW1WE&?ZL ziJ+yW#r(rPo^P13*lZwGG`beA1(K3O&S_q)t<{$6k0wjCysPb%Igy~X@zv=-H1y}Z z&ma{OQTguQB89qllbY{E;l^DUw1Pg%eQDw@q-%1<{-mN!+?D!r9nD|nDt>IIUA1-xJ}~wp6j=ty4#^g6FXV;}2*}6LZE~MG6`wJbho^dk|<$QI5XZUsD$2&vJ8` z?%#yugu&p7W7d`$&41imqZP-N9zxlQTg6IKnHh<)?d~`vIXT6bjHM+FB}zMoUp_uL zL+MBe21iCRciyn9YN3FIPNFzF_8*75@;)23iM)HA^EbevAek~emS25pj068kBJNAE zanE|4@4sRCL{WMr&p;vhJaFV<`J|0KcR9N|aQt^+)IQ9+bE4JUwplZxPn)OYi_GQX zdrKLPVr*q4+ko>0q7|PYD!1no>DA1_!g+6%?fd3NtM45RKvmyp_e?|;epg?L$3DBF z{&l)gQUdsNP5|A9Q+dF=>aVL-JAYIHyU{ofsvGZQU*RTMC`kvaa4di3@}1-b`pJ39 zM~8xj(ZFCK)ch0F^-w2^=%6f#stV}UBv-F;8Y`X9+VnpDQ$;fln-yQ&)4I0y~cxcWPd z?cW|Jq$=x8dS44z8R_t+pmr7OBfd~leujI{$VbL6!z}Vp+h4J0!gy|Rh3>H?CPrc{ zx|^-o{=YJ%?Dx)hCSn@(Cy6^nc0JY0j0+{P4vsMiF#2oJDYfrrgjqK2-!kpzJM0a& za@m5b1-*<+OvH?h^P?6RrlYM_;;;{P_Ec{(n1Ws~EJz5(r>AkgzoNe>b6tEZ={@dy zzexk9s>ak57EX}8y4_bTq_+NUHK`#+<{#zR?8#3Fe&gO+A?#5^{{}F1gDYw}RBubi z1ASjt>m4b1strf_`T~hRKPG^h8n5df41}{EIB-Vj1JB#rn}U*J_2#N)5fNbrJXc6X zOWWXkt{M3Whuvavj6%R;N9Ky0A9VkMdh!|ylZ$IDW3N!MA%9q2j(gG1%% zZLzTX3@t9SUrJG@2mFUezvHj``PJHHCitLMRm<62)Sz^1Qq!*8etmb7`_=E0w@OgY zdFK&wZP8|+t<~8jdk)DPeoFt(;>3F9!NCtePA%sv@f{r<0U9$DlAK&tR<@&?8%>^p z;M@6PACO2EOaJW$4ZnA}E1Kzcab2NLC?_XZ_DOJ(IB<)V}B#;xs-r zMa@MG%06UF!D{nvH7PbG71=E-Hbg#JAy+w}2Mefb!c(CB5~czA0sH29$)fAoxOcKyh&2k5zMDBX4((z1 zlA1@f`*hWC|Ma}K{2i2>ks=AyFC71tGn}v<(SGo1DC~~BzgAYwBT2bgv76&w%`Z26 z0Wts_PvGy>-wdI9rx#J61)(1|w?;PhozqucC=_uNT`HEM`wPU({hylVoe;-w$k-FG z#1*@hEKywo1Lrz zkNb11Pr~$0twnb?y+RpTSw@xR(+^ioaa}q^LyW`{J@faAu!1zpR4Xq4IXRDRI|mt%9A?tD zifHz>^PhYA_QOz9VZ`IA{(7*1qdpx^C zb5r9E)>}U2JXtE2Px}Aa^11OZHbHyDUtJK~wQ$)IIzi||g&=_ZZ8W<0_08cA_03N+ z|LrPEFpW8lP+_-*L92xTa<{}Ql#-47c+cX=V-YbjLBVSLMUWG*kVo8lU+T|=KewqG zun*)>QrM=JmeR*6xg5u>T4k?CM*}TVo6mel`T}r%A=M!B;^;Ov#GXxeJl&c%XB9vx zrAOHG*=Dbwvl_<$-EMU_;(x496#E_`K4>`$`kmg7{nJS#0TL-@5d`L-@)I%|P4P=R~Ao z+QSmQ$*6HEa4Ef=Qww|60@i%1(w*JnjhPt|=Cdh4$ z!{eVPoJ2AWpT3pzk3cBBvDO?fBNWUwU!&bK-oE3C{OQN(<>duZq@`O+mP_UBw5JvH zO0s{8$@3gc566*~mZq9%M}%$mW3cC^WW(8Ra9ngQ2L}neCtU96$ssc@z{ugeGlRlY z0Ph>=KOPZn?qolUaDr4{s>ZUN?sv|=a@@Cy=k5$Xzpdw1EWzzgB{Jw(rkAn8ta&}= zH8ylf*>ohjMea|Eydk+{FGm{5jkw;-5nId2dK7LJ8_aOXs{i;-gG{h-aM(YOMb1_p zioINM%k~i%fYv>n|L6t&HO$&!#D{%{3kT-rbX8T}@NNsV{V{*+6y&zsU`i+z7xMf~ zC%+6P;hZtBQv?cY2@ulkwr7T-oh{&L z-+AI%&XqL_wHf9EIX2(%2>Cg4=PTsswe&JuQy znGyEN&A6QQ@F;b&A`}&j+#?s5Yp~$iB3zGU^!JrA(EMw^9}Pmv|N8)S_I0JgCCu6J z*z#+ullxD^DA&_|SViK$BO!>Uj;>YAz+o!@O(0mNCMJ^y9~Z4{{|GO0w+zod>ifkg z+%AktwMg$>8HF|0#zNE@&&l}4mqe{(LEF9$up_7!#dMN>-f2$*6DT;74aGo!9*ZVPkvQFMlro&_;I}%7|sbHTnZ>v7w9g zhH!iH&sZQ*-rXU)^uRPw#6sOo)@`zycE|L(u{;->$27^cQS!qIe2BS2uIAAuzX%x) zHCY*{d3p?kv_2z$glcSNWGTsvh3OiavS)DyAsT`s^y2Z=1+6yDd_ zSH=0oP(-cbcI6s~Gx7*Yl(wdwSaMhE$=wflH(Jgi17QYGzqbMwkS`CE(eRcUK;2_n ze?Ok}?jxLfw^i6uD}ctZF}pH#XN=%!^{U$1IIhpigQsU_`ccI~&xT=DDGbgKVE5_i znVECdwu}bO-1`LvXuqcE%nd39TOMaS42469ZC$ZEJs->Q~_ z9?>RdL5C(rM!i6HXkKBVxQh$2@R#TK>81ABTCV{RF$))MvQeQjTnk~-kV1E;XFl<8!E zCZW4y7!!M2u~?GqZ@Xv=K)Nws70`#1a?+>$HD0w*ENTME$#|z?rF;Od-chAXq)h^GXu1Yiw{8Ph&voORi zvOY7X5etpPn<}C7O|d{@;m*f9(N<6F88eE!m-Fw%c%WVkXpAwyQox*D6@Mm`V@>Kz=EIFlB`2Baj9 z6X7?WsCEQd8lQrH_`&zg-v6*YtzpI*{;>@`y>^Qiwz`GxsX)ZjCeK;e$6Rmt?Fc$&hpE(8oyy^TQ4 zK$8pPl<0BwiqUd-(>zBd(Q)IKl4A|Ci7yVpf@dnK{H0tDsAnw zg$k`F+8Im?jOUkz*t)vZnbvdFEynQTu&+!BpDAak{pLAjRKZ?A>x@F zASG3Q*Vow`_jrN*K?2>a$5U*SH`lkrn+v}H&Yr2Y1+C+F)K}kIs;A4X!^IoQ)iv$8 z9)Ej?`v(v!H+KSWHd$vzs|~efQAh|321Wv}_anv6Q+x=ISMYqL8RMJvie^WU)BcNV z0tSY5%S$fp`q^Sx=&uG$psU;@NKDi;LI^c~-1D9;YIas{aF8Z0JslKKl8P%H=0;XZ z4m>H~;J?QL#CjMT0<3uXsY$GPyYJtLV4t6dnyIO2>hEJq&a+#2`AzKX#KKWbqTNIr zBL5q(%wRM0Y)L=L_7~7yUK6<8Ra;Ztjn3yq&C+CLV$%QF4Gv;VWv+94f6;2zOG}0Q zR&TP-RK=7o@YCk&JW`N3P%$c<|6b0|aruDDpMwMf#f|-7@eKd2sK|^di8?YflbRpw z)m;w)kj?SDGS3z0v208LGJC==VPRpNpC8EB#pp0og{X1yInU#+xWID*U?2}3phUKZ thSEz*Eio_?sbZ-9d#C^uF0RD~X;$~zoetWk8L(dnnQw{`)nZ0L{|5$`k_i9+ diff --git a/gui/bacula-web/external_packages/phplot/doc/imgs/graph3.png b/gui/bacula-web/external_packages/phplot/doc/imgs/graph3.png deleted file mode 100644 index e437c8789ed60654fcdf70cb986e431afc500172..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11392 zcmb_?Wl)^mvMw$|3U^I#32uW22@b*CJ?P*NG&sRSaQEQuZi8EJcX#*UPQFun-@EIa z^Y7Nwyz^GqnqIxE`{`a!xRRn2fEWM+0|StemQaC#fsKZ~@1P(-pE0DpH_#s>6FDgf zn76;5?DnE~s00-xt?dj0gNFV03;So)_XR3Mc9Bu|j697-jEMp~xu0f+fq4%jBO$8h zv2?oX?mauZ`F1%^*33IJwiZYx))UJRkUcmDuv-0Xb=+fOM^;{b+F0(kkcDqI%kQYU zqEkA@FN%w)%?R70_&&DXx%T|&^%9lJe^A=#oaTIgJ5K7XBg^Zo`QB&Z(R-Y)Fh<04 zLQ_pGAS`U~UPex?TSrYz%-fqZE)I(k3k&N}QPEQ9^Jf|@SV}6Yupd9vilObW)HO7W zHQ1qV)k+}flfAkGg?h66bQ8<(Qn@>!mxdrhu$VnF3 zE2^%}ZEn81aLV&^cWQbANK^Qgm>8d$D(2#XdprKk?et^z>@FoIr?^7{Jy3#wI4?#p zTxe!|lxUv~q{M?p&@pV+xGJx$&6nkK$5)ij5mc_*xOx3V&&Wv2N0U-mNJ~tTb}(Ct z{P-x~2qg7>=pINHwtq)MQ=sRz_*vrf=X$Tq+#VBQh#A)9rK6gL2D{G^?w>!Z7_AB{ zNoesyLA_XDRkTbRTH27EU(_A1JfU)|?XivPzDZ3@TGlp4ze`GJ=`7*vx$Dht&Ibq# zKboGc*bJ@K1*@0N8P)4BFf#6y)s9c5F~fd&22#_%-0YDwZ%6AA0qIHnQ#k#)roRYH zm$95$nCu!&5i!~h(SsQm@uRJ^$cR|A$SW>> zjNLCTE;okCWq-&mG<`@)T}nM)DYVmVbUts#xY$i%f^9l`qF}d~YaY$?VYjGFnaYz= zHqa1NR>nd^Y=upBp4}Zyb!DmNmMk@&?E1*kd?QAynA+7)zI-bgp+icUL1Vf4tx!H= zFa*$ivJf}1H>OL-mMt<}^u>4^tg!Ccxw4`VNhI(T7UQ#&JSCqcOynOHc22&|Wp(k1 zxdvBnfXKYv;=kzxE64MQwO#>97I&#<;{xq)$4jQ>#0-kI5o$qNG^p zTU#ccx3jzq3=HOw7v!(DR{0L=9Zh=WAGIz>N0Q3BOsYw1gd82Kfs~}+Z6GOhwa>g> zd?-HFra)dfJx;0-oAm9swzgpCnM#eI3W(U9nyU5fmM!abWMma*(wIfNZ(h*8JU-nV z7Qp&D{dwMs*j=z|IJa|jN!-u$iqozg7doS=l6Wbv7#|wXKs+k>d1l%Zbm{8@v8ia5 zbqGkuol&Quqy(U2VJSn;Y*>J}gaj@rC1vgg=Kmx?3=Io|?(zSp&A%nxAO1@X)_;@y zqxheH{j1G?boIY<{#VU^n)4ru|1t1i66z+c*4_y3t;Hh8xtXj<(HES8s5kp-jr2a$SuM3b7Ww7OCd{~1 zgdw7xY2^GJ?A?fVV`g8z1SKWq;E?vjQvIvd*GJ3c`o^v6N46CC5{AFS7Vkb23R=LyJMExbDPCEaJ|Cz=3hw~QuI%|b6dW2?_r!vTe<>rD|_wN*IoefKKhE>RBDn~+NG*oR`M|2d* zSK=QU#qFO}Zfug5qjggjK(u*jlI(@Hb&R3(z?Z|Hax6x-CG}-`&8c&98qnYY+)w}7 z_O_0pM%6NyxzOWNL?P`#$Z7!Nws1{fgYSNRQFprJ&OebjQCt1CHM0;GopcC4a$nsm9dCB?f9Bnt&5P0{dxyxMofg0YX+6lO0?)oSXR@yW?u zX%1~;ZE5x!LzY?UnSK|M#~yz!Fm}ipnR@sUR*e} z^1J8o9SsAhf8=6zq1WK`;>Dot$pqkd$+EXv<=V<1&nwiK$vy!(=C^rg~3s9LAIuC7i+ zPftu?EdJ&23wZFd^&BbdeAu3hJd2Liyr|qin7vZv>(n z=6LqFYj$s~^cWF91;q(=%Z;4AD_R};N#e@J?EU>TeSH${&j97Adx{mpO9pdMVU_3n zE6BU1JMG^QM>RzsS!!x87S-^D(}sUfA0_*^qN;*R`x!#)1%me{{Om`u>MY$qh=*qM zBsg2RFUw*kJ$=xIuQczwaFmbm4eZn@Au5@WGN{My z|77Tv5PIaJ9FgZGcOC~0xg~+Z2wHyr65aN@rkNP&a4-C{dctYgcz6S3J)|~x!4OAK z%0qW1IS3+v`AM~|vwb|M_dvH$^{*K-n4dqfVGoj~8g<*w)`-ovy*Wiy7=isd2#FijZPtF288$~faJ$$hGdI@+R)HH&s*y#f1zsT(6 zE}H9s?29|p@kpI&2xEl^qz*#1JKmZaIvtjEKES@+R*@1S)WKmi>bn6z7Zqhvuyi20 z3z$jx2PBWdm}TExIdD#+D7Cu}Lh~`z#kbAe6aWUI6tAkXBa3qd$J4W}Zh#j|wvZd| zrSf?^;WfX7s&lB|9_T%V2et?C0$~`dH{ylv24c46@}X;2w~#X{Jk@vV4T>%gBZ7^} zuOq4AQIACsoHjJRRWEl#gKsPe$9s4jrX?1~>L3@KUB0x#dFzi&IAv%sA>dPL;VT~# zN|A00=HrV240wA)7Q{8Av#x_xRKoV}?d$Cp?{T#vt84c@p>`=|V}f9{yDT=uMC|U* zA=oa=QGuR&EMOnaJrUEmK0vk@>{ z)VMB!mt%Wc&s|bsD=Bw%vLJA{)->I$A5l!5NS?PbSxyAmr=*RQp^ZFlpEn*a-%_Hx9?t6&Q5+#0w=jP@*2)pQ@$%4X9 z-NP*VKQDAfzpNP|V8Gh2-QA`6XTj($rz-O4x3wF_1fi|*pmz$Pw%?yi*f$HMsq+yV zmEucbmR6MP-OjJU8Qo`!K>=^mlaywalleu3>^$qWVlJ8CgDXj)$qD&`(1oDy$&mm> z@~qoZ05rmUVy%1SH9o1UuFH6nS~l1JI#$eP9%qRB;2KQV`=Av?A%WRtHf5}y%ARs&7N$i z%Iy3KduN=Sm$MH2mqA_T`gr7}QoR_$z(a9U)=C0jpAnd~N49WD_r{Dmv2Ls~XaqS} zZ6%nRnvwvLF4%q$edK>KTTzfaI_>-HO9)z?!)YRUfFb-|?WcntJ3n!dSt5O)!P>g^ zbu*@OXyb_jW3&8?wv-&9*nUynb@f(c&HdX}KC0*=F_PIEf|QkFmxCqJ1@{Fl8-;13 zSfgRnjAejjMPSd3y)Hr;FMrei{VPbq188Xy+z~#zg&7RaVL{S>d+P@#7wbMh_Fl}d zmr%lYwll~3byg;Z22c&2B0#3^2&^JCg=GA7O227$M) zZ$t&UUOI0!>l;$WzxzBKimV_rJDa*8}0|a~tX=XJ&#%cEQ`18@FfY zu7=N>RA#fn(i*3M-q+oM58fUA3wxtwo^+qBNUc!7pdVlSJ5EFx@A7ZneBtk3vN{|) z#GT_)yxtaKF!1Sqv(0Rw$ag-kX8m1)4<9tJaj*%2^l9JWYheZzgO6#68+8pa376AS zxMRYqT@vZ*YzxEE!j1UL_^x7C5nuWK*Dt z5400h_aIJ?5x(Yl%GkbKB9fMsw`gU)SIevyPB{DZqsj&#(i0_6LzES`-^+pm@W)`^ zi$yk_tGZ_2OIZIld5Q$n*ywZPWkPzcfuu*y*53eix`u0s!6P2A*<1)MjN#0M5Nr6Z5GW<7|w3*4OPLiA&r?*G=`Uc{8ZeDR!oVFJZ z+jVrq^e&^jxGp(DRT+JE7{sP$AC?6HynEsQSV;=82 zq7`2+-TUsei-SDS+pChB()~5g7sC0mER1z;c-_XHo?y&XSm&jv{$!ma2SS^Vh{0{X zl2*3kchg8^y~&!sgpvgKU0F+T+wdD|UEiyDi?O#iuD`%l5YCrHZdDh3JJQwZ#v%kq zk<^~MSXlUlyd&yMaE9C0)YLnAV@p}_T@5Lu{aqg19#y4XyMf{7e*pqDqqp0guWh*X zHaW6+@ko5`t}-TT6zc5K3OzJ7vdY%1nr97W*4BT??}Sff*C>BtzL;+?0#=?r1vF@Y zF(Z9Q89q^hx2WI`o;-JA#v8`aJJxW65%8n7QJU!Qq4Un_yB=A^_OOW&rGf0<4;LeX zPGI=%5P9sEvLS|esF;0)Bcz{T^N*rc+h-V&-h+fUEXgmv;@Rzf7%y;;8)Ol|%Wl`b zj=*sdpRU8e`Fuc4QI5#lk zZ7*cM8AVFOpaj8PYi$gXY|h_{swN9dlRc*B;mC*v7Y?a`5UOCQivA>nc%o1(ZTz!Fb%n>G?p7sz6Ej694G=q1Y_dZ!O>iM-# znY%81&1j8M{r+Zr^6CCLpmahHS;Vsk1@lmerr&Mt+5IPg(%)sIqJ%~+QAJxDwaasV zEW4s2y0FmV+l{nk{Pgh6a+C!m^zFeXiG^&LZkI*OP5?ePQcQePv(wsd(R06Er1SnM zGE&?@z+86T?pPv{{7J;*MEd*+x{+UctiDPYdESM)aMY3{3+Jc==irBC>EOXXIS(_4 zFEqF!L$Rdb-2ohr-I57zSbxB*#ej9KDUbVVrIfQ3Jic?e^^RkW5h-t7-RYZu#kZ|3 zH7zzx<|xIzYtgkk5MEF~uiu|PDvx(*u78if!l@gr0{_VQGA_j%Y)*rINgUm80GUov!@a1=YKD3^O|Ly)v23pd?ii51Tr()liS(_ps zA(tWH!xg!MakzrJo8JO=x78Q)^Bcg!({D#P0ZO2U0dWkWAG6lG2}y>QBZ+q2PeUe& zth%E1XBM5dU!dX8LN&tLl&%SLyK42zLDysD@K2*H><8;IKvTr7H%^Wi3e2k0{=;eG zTY4h?b_72yZ7MW1hWq3q_0CloUD>#lEiFxrL|{toJ%I;|N1AvMM8LYgnC)3z%QY1+ zi;>72uKodWySYl_c9QNzZ$ql9M$HkUPDs>d!!sZh68qZxG zBrpbok@ygjx5#+_tp7aRzFT)htC9#Fx+OYT&7apKQbNQ`BcGS$yG^F5Xt>M%#-MiN z_ZVTwuQJ$_(PU3_{1M3bk8Wl0CWjh!zymMEOQ8+VL32arI8O&!fGG!v5*7=YU`&$wmFEh?)PYN@TML|1uuoF{W#ka?VA-;wXS}(C5Us$^ZqU#D+Td z=AhtSyn7S*Z#;=$?dUm}maO);#Qp(@KyeSczLKkSeQcQ7Lzsg^`5BG!c=d`V&6|G2 z;3D?`n8y9d=vs&E{CM%`ge;^e2IM9JDW8*sg$YvEZbOylG!lXLiOzk15#R88Bk*(4#4W@>NdYYLI+1j zH%2)JuIJL;jK@+dp>=J*Y6E2*TqSHPyPLAS@J0(;q-*E8jlepF7OWnT6>Bc9k&S>5 zifK(rd-v4+WE!sy_FzQv=+OenW%INQi=2hLG)j(TXy9zV12VK9-`-FR^M{L9wAk_X zOPyH+BLIjM+>;y6t}*WnKlNz^wo!LY!%+jCv-KNQ?_#F|6%p{ci#IVZb+)RXv_Ek$ z#hc6v5Nuq8y@*gd_sO;v^?8L&J_i86LX?8JhEwcXZ+#Y9>TrIGc|{9f!#II~L{_t! z3dI7vL#E8@@smaA+%>hoN1y{m0Kjq2v*DA#!Kjw7@;H&~6?;-ApJ7EH4TZ^Zx0^Pw z(1Wa!^x(+4KC&!;s>`-?0UTl2iPE)KGoE!b$?MH_>j0TQ?>0vCjesh4j~ib%A{8=6 zgna8d9k)Xxc9#l~Bn5wH@X~*GA_O<*Yl6`(;Qi6Y#KFjB=iLhJb~m<-@dXQ^8VqeI z>Tf)-`Qgy1Cr(_{KCSf5rdZVidE47uPD&5 zeK(-DjIP&Wf<0M#>OwgAU9N3DIA4|QPYk!?d@a+9eCo$%_eZ+fu1IyvHMj+ZpmdTD zKDnF^xf{TM;bBJTTEj{!D(04y5LeF2si;sM^V;u9%@aQhX8P@=uxRr)5KHHZ57a(t zl0G97qxUb|SMh!gaXnLoF0K}Z4-p@`rjiB4Oh=8E(TT+%y*(PBYi0R|d6>dFf@p3_ zi%xL%#zhRbO-Er{Svnq*hU4w5W^C(MPW;-G?}0Ukt3|xEz7OIs9a=T{at%d@d2;kt z1&#IOcd4TgNCitBB?P}Cx;-Q{b}h8s_lke;B(mreqmSuZh3Jp0eL8&@KDKS!3)fHDbRQww@M4;C*4|mI?dt;nnyN|k0 zG#@mWOb0T-AuFf)ouVQgk>Gv9JQ~ckSi;ClOd}Vj(^H)qqnjecFz*40M7kA4#{+4d zvCu3j#xlgGU)@9`7=S2p4KWJ=T;gtgQf}_Q19)qDxw45Q7y6;!3ZRGH`BYVfRTpJR z>Stu3Uq^6jke6*-2;>N?bbnw2NDIk>NQ-Lt!_Wiqc_o5fS1jg(Z?dPb2Y&Xg$Db#M z&EKrf@)p9P_nDe{GEQX07;%E#z_iaruAvI`h+7-{O)5wBeRqajDX;e#26wwl73h+a;G2-iq_Iq;5BH)>aU*YC8rbg&h zWrR9-2B(vSnCFX8EkFx(lM4&Kq46G}p*)TEvX&$&V{f_9ZosUi%qH_;)64ko*2C?D z8iQ~N{-alGsw8aSvLZA-4xgDQ8%v^X756JCp~9;eIb*#$MeOIkh^qADJ-=;G4v;=&5O zasZ-~|MT)XC#y#ff`_nsKzX69bnWk6OcqzysyS>TG>pmo^kwnWUDC#Hg zcP>4Cv#_d&(gSzGd|y?Y7OYNB)&K@f)QE#0s-{DU{k;15vmySw_O&Weo$X)@;MMkQ z$c>rZ$!%HK+oPl17jLpr9n@&5NMz3blxlsf?+h9^1V|)}%VP~=d>i)4#(x!aAoZ3z zZ+0WX;Npo|(Mx>J5M-?$6;5_#cODGSRH&udOFnnF?8$eXY(%gZ|o zDP>PW@t3BYGa3nR<^pzkaIpT2S*G)2$Hv8Dc0NK+&wJ{ynD?tHWTB1s2paukc|7^Z ziltM?nyPJ~$us0LnhEi(2SVRs2<7@K$lhgg99PBQ9CNi4*4&YP?ux8o;tEhxSI1*^ zEnq}}x*>%uzF_?VL^?f{JgMlTm#F%M&F`(*HwG8=lanx>o|By-S^>8BeHyC3^Rmm! zuDjyVmggb2c|3>3PirL;G6(T8-j%*wv$L_+Q=LTY&UeNXrBaCL?f7E4o%=EhMnqqG z`6UH<1CtQ^@L)ZZ?7Hz`F zK4K;C!7}tPo-D}P#)e_7Sq2dcVI~nnZ5jf&dlld%CNUmB2Q|aF$D{R1UfVBi3ocu- z%i;L;UpWjHGps3iu4xdj4Q6-4z`TR|%LTBB7QAwwO`C{M6slV_cT1|a2OpG65fIN^ z<^;*3RZMDS#rO6Q7-Z+>!udONJ|f+_w+%&zy#7jp+_Li6tql6yuk>0*;9p)vux8@U zwzssT=Dz6poCOB$h7zQ^yUWXSxwWR=!P0P%sXX;$sz1A7x9Cky8l8N^_+`&j#2s8S zsrvBo&_0pwCBE4qrY~bQGd+|v=`mR_XwJak@$1T55=vIE*y@Rz zom9ZG5VHtEoF!F*1}E>QDXDj4!s(j$EYv(aiCN$Rf|iNSXbT8=i6@02U#gH zPO<<*M8q=v_SDjf=8%hvjZET>k`mcfRngpnf`rsm9Ym>5Xvc_At=Ue?9T9pgzbiu* z7JO9o9zVy^B)YO|R?|PSdZ&N{cJD-+Mo&At#HjMZ<)vvWEJbov|FEZwN%YY{tyj>C z=`iAm_k5xjJIVRAZ}-7x5(Nqr_i3*YLiPgl5K~vj1RrPPfwt%!gUtmKH6q>*2iLpS|2kPIn`mk&$ydF}fWGd&{iWwykT@^|0PmJ*ik6%a4?4 z>wNU7!LB{PS`Cb);IFzt8#fh9O-pNjTk~3M`-(Hg&ORfM(RO|Ax9!4zxZWv}kdSaA zE3=v8zBaTsmbO^sE5wo%0pR0%N5UR(%f|=JSpRt4pp?w(tE!4a?)1_VXr645zee=_ z>t_A4np(ar%_MU>nVX;MU_VcqW0Sq5*;~a0=L5&42B23luYcvzmAViX>EwH`UuV=I zk!pCA6iB19_CfI6In&^gYr^nOQ0_WO<>VtR=ZAP2fy7wyjPcA=A-&f;n*$$hq=i6t zyQm*O0K+502h)wLv+C+Ib8~Q$m4+gt_-N2jN9DEg2}*yVr>B2ULxY$#A!Vk9tDcZR zU6hY7d(6ztTu=i1lC}F@U31@Te;h7~6ob)n4cYJoa93vQ?r2l$*r&eU0hV^2M)i&1 zFE8fOHG!U4mMhZu%Vd7b8)I9cQN6FDw#$MKV#K;6U%v`qz87Ff^DLU+^xbXJCHy5A zW?bAGR`oeHe40})!Mc$nQ8*sM*WAS@M4nVXK_aVF1wI%%ncB;*?zPdVMeLdJC zrcVOoJ#c^05LT<5c)@g3J~R`Y@BTzvq~6n98ui_00FO9_wv4mqb`2RAGY~j^I71IY z3`NLS^}`V7=><0$jXWd!c;vJYA055t!2Wi}72W2PLWUcPZmQiwwj)66He|7+$0khh z^o!ij%7|C2_hUhwE8WgXz|cyQW83V{%8I<_XTDoJFEv5{I$!hJtO45rU91pJgD=dnA+lz#vBT2Bf;42@ zn-m>6=T1pQRTa9|x?LjkP!xori5!kI{~k@Umkw(4UP%MfEmr&wC z=^BdGd*rb`ftQU3V5+scoSg3=AxMm+jNvgcbTj0#PEJ?KLJBT{>^!Dcz5{mO1`#)t zDRGG*Gcz+1c6Q9O1+88C>fgfx@|IJsr~@N(7WEDb`cDP66quNzJ}1eJ$U<3Wz4#_n zjEqNBjZwv++IG_+E+{xbqwfZA3&PW0yH6ceH8n$P$7M|GbqI1d4(==p775e#%+;$y zuOwN$j-p?f{+zn0Dk=Fd+JZMhv5Bc6v)29gji#49$zx!}i^0O^k|^4;c=76YjfZ1L zCIA57@AMlqiI<}(gQUH}lT+fXUsBf>c8tG%k2s>G$fV*DYcpVlP5|>bGt`wm>23on zDdT*1_o4+TN8sjUa;H)e%egU-&(5EMS7G2AAMzu&r`zu$lS3}G$$Q}YUs&Ww-7 zlNQyq0EE&vFtkNl^{x7#i1u)D`~qELUFnOA412{B<7q7>VyH_8W>&aMe0b^8;^Nv- zPR-DOX0Uxab4OlF=fHMOadCK0p%`>Gpw^QxW7YP{>sS+8)Do4>{$N;(v~vp*+eWBw zXgDJoYS)yrD+Wm7l5SDF+TlMf8_CxtR9dg%&Urd&ctk%zpa_JEm-k%2P+k4AmKI@L zT-*X!%IK@pPsJ9%la>z7?d@}7^6lny9R+k`UEDlNfT@k>`zdRu?eY692H`vVSSaf+ zH8r&=fp;tHT1nHO>b#|DL5-3WtFOP`^?_8U+iKmo#;cC-C-l%JGbuEo9;=x)=zOV- z+54j3)ZlT+{h;_zomLX@wIt*UzEJFk{DJ2nOdqB$ig8YNySUG}+72?)N;6`cy*igN zXmDr<+q#E+I^;R>wR@A{YN`bsHILe{hl7D**>9hY7ivI`oicgmtz`v7MLlKZOp%vb z;aewy?kX0|XS`B9djcAo{?owTZSbmAo-8#0{jd;^0sM~L&hX$6lYi+)YoFXT2XDm~ z@(Ipi7reI~azXfrOsjomJ0RKMa%*YHH8hO;9Css?Uk^%jf_-nBTkX)de{Ia+srH^yR64Xg%#if>8^wRo(*DKz z`oBcAe@p&FF#BIfXn)yl{}8GE8{h5!0}1Uv75~qCw|}=eG&A&m4*qLTbmsE5#$UQ@ z^?$J9u-})#C|b75LYZIDRt_3k(|=T;gwdRu8rcFU6HN+QF&}_&*`D9^(K2 diff --git a/gui/bacula-web/external_packages/phplot/doc/imgs/phplot-dia.png b/gui/bacula-web/external_packages/phplot/doc/imgs/phplot-dia.png deleted file mode 100644 index eac14eb27d151cc9e1b242b46681e27d5c411591..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47604 zcma&OcUaHw|33U`s8olBXdq1*G)YNQlG4ynZ%u7dXzv};Mnbz(v{OWT5Dgk;yQHaI znyUMJ<@>#l`?&x4{W?CMw}W2e`Mj>jI3MSEUe8c1jkDBj)C2;7`kacAHi1A|j{lQT zk>Xz(v<4dR2bq)NIbA9$s_sF}0Rn-8a85}<*F9mf*F*li*Ouh0xVZXy_EYV1@sp{! z|J{4}LCE2?P<~#TQv8w%--Fp6$0?yh8!sNFaEgmZ$%9diP#DA{{yW>XulQ2LQEqbFq>Y!Z5=g+KkSB_oM(xMMh9JeWsjg2iZsWh)* zWMTR7_3PJGYZ3y%e_Dkq@W+oIwCtx?W>m;O-=;el7#R5E$&Psnl8Q+0H7 z9M()a!q3ktZcQ7iq}V+fCu~YeM%LWieDuf>B_$=6@39XaXe3C+#KoO(oirHvO}vcv z+1c5jl4R86>3IYNX+}iN2D@I`mAlQnDk@@NW-fUCe06Ec@Z7n^jtsT&)(+beujT1> z+me=+^SU2pJr`}Kx?W1VPP(to^Tw)9jg6(W+vZ%%GiP$&+Vt`8@Nje#<35YaCrCa_ zOq9XPSJ>{R4%Xk!%E);4_U(Q---@!bC-NLmv$8aCS*jU*uWt_Zmb)eZ{fJaq*H z1x3ZQt-Rrpk%tc+j7>~jy?S-2`Z!*d5;eBKViry!c#Q4iyLTCxnYVn(ZVc1}n8Y_V zH>+uCW@+(dW@ci`muLEI{?qL|uwbr1eA|{8JK3Sl)zO30)YNiva;&VZOT2DVUGGLZ z3rwqBU0pZ-u73XT;f_2(`HCzb7V|F02qg zqoCF}G~i25kCB#^h~K97+UW}y+D+V)=y&h7cr!orKI+!3Tcy|gv!6eI{P=OvQyQwk z=tj#Qi97MuIE4lgGkhkyobNSTTRs5+)#|kT{J!7DJ4d9l`1$#D1^yshUc7iAcrkY@ zNwAHYRm`$2MS*OO1m4`n94$)gzqGVef1A$k%9T8$H}_W8n&X81{;t$kP5=4*oq_xu z)=m5Q`1m+E>0qne)+E1vir4y*y@rOyRy}c#*LGdhU;2)V`||axprD|ho}SdR&EaNd zd;6*A=xCqyr6Nrxyo_K}Gtm@q^XJ>0Y!OS%&VzL!H2?kgpN!rSA));I{H3`$&ijp# zk&!-{%;x6iCRN^zRpIIB76%Q<2>w+I3kx{~1!wg#^7E(LQcttIBYVB`P}|MvrdYwS zy+^5c?V5gGbB|Z;X+}o5X+du8H9I>&e*VX@K4sO_a$UYQpAtHMx4d6kaxM8tN{}zu zTp5Zot;#FncYg=98`}^rshwd^7Hbnsyf=*qVM0o zpPY<5KG)wX#m~Rfe#W%g7fEu)kOsFeeEj&!^mH=4Sgc}6$+7UCBt7I7w9k;?s4!3B zgnjXcmMw9zCKy|u45x&2yzQ$sCR8&>d5^tX2pqG?% zq?_ef8BiF-`rF&v`H)68+~;X+U0tC19!kpF6&0tD z5O{Q-gt=1OD1@-eQyjSN@CzfXVTQhIsR_-6xOuIYUSLqc*LH*>o-QIYy zGiT0Bu46@Zt*op}_Lj$OupAC6D=TYj)1srJldwXj^vtvoM$GcarH`>q)dY~GrKPou zlLm6Mx3{DAvYmA1^C?hn_#F>&%#pg_QyxV88uC|uMUbon$HA&<$Y1buWk6-sI z``<1LUVFvF#0+0utL0;_QI8f~e1^)Sn&Hr2Rk`kS8_D>8k>~lU~VpE{`QXP-e-AvFH49& z6*q?(W~#R|IOx|rymg(Ok97$gl=c45+G=BJ{XX)*zmM}=ndRKLcAIpw)X_3sX6 z<YG8@!Q?oyHQZRd8x`$Q~o`t{2DsDmh7i>JBHpFdAaOIuf0cgfK391mlcMUTOL$r}XwJ&1ToeQavj0cqD1 zV`F|n!E&ECdG#WU#1FKBD0 zX+KA+-AERiT^!db(Q|Zi3JVMCj8pJRXF%=YLN%J2XhIHtFEF)Wq8m7rx|yw-p`DkP zm!6hpaB(k6A}Vl%Vrs5wbyZeqgtXgqOKWS^^_d^vzAddT5G#zAyL*DI%% zA;2Ra6Qxh^@r`|Xu7h<)`Z?abS@hz?6C__FQakAsV*ZMiRcw5GcTdkXb8|*EHZ~TP zvFT|Cd;7%1#9mZWT&UCNrvpgqj~}O&`~6y5TAph0DJv@v4i4ffU2fj&L=C}4Q;`Rz zrVhRfV~*M{_4C)S5{vhdU%u#yJw62ll%rpOx(U>^At52r*x1O($Vfp!!N9=a>+6fg z1Q>vgK*?TPTZ@T_k(HI*wf!S(Qi1;P`P;WDr_so`xbLV#bo(WVyM={RSO56v5sRj# zrnI!QzW#Sy3%ak8y82NGiEq8Vz1aHt`k~q&%G0-Z>0P|&`*)=XyNjEOi_<@UK0GsX zBt;=8Nyh7y-%gkFcO5YIxZGdi z@%j7r@3pnHeSK))aj0o1dlxQTz`dfkVGVZf+zEtq>Cz>)nZ7^s^IgR@QN_hh-rj!) zYJ;$mTR>1Ku!e@+L6mgJy64Y`KX2c?1HS9*?DTMV@2U1PJ$?H0xpU*#S|A9orOCPZ z`7*beq=ye5R#f~&kz1bXw!w`K4LJd195`@bjmB%HuM%HgRaJH3df$Fg^I(9d-`@+c z4uElfsG@e?^CQ@0F6rtnevChX2zPdLoL^q9b{_9onHvgK`q^E2z0|&YWOCAbajYF* zq50%ksA`7q%Isz28ZsD#Y5jLWb>{iU9qsLN^TW-L#cfVXN$sGZz}mZ_=`03$AirkD z$61+}-nx^uG&dWTyXM8k#bE_E=pyDQ#-^qYFftMgCUQz&U*B(Qvobw>2-OK;({kP4 zu+-t*dI;GjC5b|GZf@>{bmhSVJ4=nroUd%G{Q=%-VV3j#YoMj2WooKvN?BXAgDs+= zs^x`MbEbOy$j_g3nJvhshNy%6%Y_W&{6~-S-fzSbTkB+|rUnEhvIn=}LM0!mlCEgn zxN$>8g{toYRp8|0H5nNh-S?xe&dy9sOyT>b?x{b<?FrZ|e`(E6MFdqRf}QP?-k&JCT#NV3FA_7uqH$lLet zb8>Rhn^;ixhK7bZZD{?4sVo}k+1abi-%&TT)4hB54sezDj-@5Cd*mrU$HzloH39h* z-9cONd{=w&96$(5<8Ioz;|roPG8@GGbDh+>cu|@DX>RTj35lh(Kfh5+kZC=d%=F|% z#l@!$hcQ9yPf$ja+ZY`m|4(24cDAa$J+_0H*Z>$Gic+veU@$o5``3M~j~n+P%+G&L zLqpbkr7$F9M`S=z^6;#hwY7B%%?V6}cGs?5ll)P8WqG=nh$};r8(7xFDQ2g8rBMr! zXe})*@h7e;D=8Tm80?pFB%g{AAQO_6Ww(z-(?L2F2|Eqe?a<&xm1nPXp9>878e2G? zU^X^0I{ft9{l6OC+*`P*mV@*C}&{!FMc-$!&3Qu>uoo&l{%#qc`R@HfPh@r+dpwvBOAH zd^-{-C51y`?yRzM{(r?NX$@!uU!Gm?!$3v&8&A!L4=d5bxHC{gu*lOQ~_i z+@fU-B(_)2)hHB=*2YFo#!!qgRDpj-<+kP)7P#*>E*7l+`SXXIG(b7Mou>Q8kG2Ao z$6`xb6#Fyuzfg48+1VEbTh#GB;Fhk=PDC59lbx-trM0yHAK#a6-*68?rd9hD=siiu z6~^e05&TSdpFQJKYtYisK`)#9{kyxp9rG)fkdUm+r~PhjZYNHZlB|5MlfQOtGI-~1 zExpF3rU@4pUQDxtoy9ijKDPS$hj@6x*=5+upAp;^#a=IBE+QuZ$N324p#OC^M@DUFpspm1PsG z(ciy+@izdGmdD~&mX?gWcaOFvw{Cua8&h5`-6cS?_sFAD9%6fIF;97+cn+G4a8riW z5$GnY!fU&_)_yhKzj6i5(h94%xjuvDwHUC7;&c4iF%Bv;P5~jID*NtNZEbCU=J8LS zpfpVOyt%)6Co?#hoLm9?z&M?bw)Ug=GVfJK3k&W_)S5grMnKtKVB@Z?CrOr;R#q~8 zn+YZZxH781Q$A}Cd^;8~-XmgQ*b{aBqFMd7ZxY9jG3mvQjg2V;Q9OR~ z#GHwdKv;Z>&ez_4K|vvPM(?Vf9kIiYj@~xb^_MQ};w@V*yJZ@Aa`D&r=PZ z#Cpl}tp|yX9WPLLAr-}}tg&$~2$MGC(D?3!RvC4Xi9SV5UcdFJQVja!3KPG7um519 zmpFZkRzceJ3|EY#f$}c*Xn8AIU=Lux#W%q&E-pYLep?$SqUc&2UmZMMkR!Ni?j6EB zyLmot8hLnjOF>^hZq??Y`TlFWT+!H*E|K|17H_ba*~gg;RF^i(o^+Yeb$53^cW$T6 zy6nx5z;^8ySO2a$UAVwNQ3T3I7(sTq^=vAymIZB#x3@Rwkz>b>5r-GosY@00;|!Fe zswja4-^D~4I7$Qr1u^PJ{+*CLqo6>tF`zTTiGIwpXHRTZNy5E*j!ToB+1UbIF?_td zFA-@wX!g?DPWsbL_EqkiVgXLy-@Hr4UvuXq3t1os&>8BB5z0~s4YQ}r9TMUFE!5M^ zov|Q;MnpJjx{;MXO!Y5bta6)SA9C0s4mjYsE2i~n)VQLeVj%i&e7vENkr67mt?k&? z9DP*1=J6Sll|2c@{4L~C7KNpyS*`Schoa zmgo4;)C8E2YW%Bl2aw2F!{N_anmcyvFd!$B*F+6Ia`dRnLZ-@SkD zgeeTjhuCP&nT?9J{by+Sx%3tfJryy_o0@T; zKqdQ+P*9L6tE)#K0%w~TXai3*_;XOjsCZ+97@#L|j3BqnhQOer59roz_#{^awA zK-Qq~N8KcE0ZL~f`?Oew%Lmp|qJLXgr+Deo8YXmn>7o-2=z%wYbs!ncxAu{--$R%8 zUYRv14Zi#hwF!T7=#iXEBkkc_VMToL^73w>3N}RS8>gF^ob2lEuJ+sdRC^$Rq!fU< zL~rcu?cx*2j>tL^Z+ShvKXGcDV~F2+Uy{hw)XUD!i^9oihbd(q%b?PB7O%7L(CY$S zDtYNEYG^nBG;VKW&5UZ>_{2oMK~dmbv^)oBIX^$Y{in?ldx!{RXr;q#F^dM;e+U6s z=w@MA$NTq`#Hn}Z8R8B`C`-FcFb#2rDxGwjHUgRH;UN`yfs?APR%{rFQAdwKml+5M zW9_r-4~>mCXTMU-a$Ig?v9z>gapPqP4-X$3ogNqiEV9i(xO~cULHmu7Jh)3ni~IRulrNorF8bOQcfc^?GJF**ScR( zPZ{rIWqq7ySZYojhzHq-H?5{7$iwq1PV?hq@vMr9gsPll-z6m_Q}R0Eh}@h14$Px# zYo5A#6B82#Bhe(Xyw0p-9Sgful(;ZKg`yVQZn3Wg1z9zPF$*V2*t7lXz?e#a1;8yk z{o9fjmWFUvC$yoY21aypY(cf}MpL4hE%&?-Ba+@n;Qy-p%hqoN``x~$w zekZUKmY^;xg~B8~<}Ja}y6)!0g|}Y>XYK+05mw~4Mqrfar zh7rjS$E_gTzd)>Ndb{m0HlN`gA&Lt0!8c=+(_N}RXoHO?&67zzX!LbqI^8c37BwW>~)$ZW_?8R=~VIFD&BEEaf#!sH$J--x_X?U42=* zdA!H&k7-rkqvoNNs|TaQ7QeSz?oR#x9pq%e_xDx%$yqf$Fj4En6pi8B z*f?=hL|FJbW^T~w$sjTf4GoccsBje(6_E$!*xA^wnwt}uHO%x^uKZ_edXS09dE(1+ z#4?tZdC#7srd2(F>9_|d9)RP>NK`bnhexEq;oZ0~+n#=wS;)u$n}6}*EBCpd+-D=n zDJj?2*9{E}KwG9~XRB&xOatYA&o`EK9*fS%utJ{V!k$0puT%hU5G$yE=+L32#>S6N zjw3yIL`2%UyS*SsVO|HCLpPH{$@R5A?69hoqa99GuWkn=NLF9pHIBQ;G;<;27~y1UoW^MF60V&0310rZAgx3swUwE7oV zQVqY$@87wviB+G!?d*dv371|=D13)W%g6< zvtXO>O1xe(S+=*@uR16w==SaR_$3w_D9N10%3Rb;O-;46=llJ(dSBYbVY>5p28y0$9c}kev8Nuv*4o?R#F|RN|V$ zet{vs>EyHkY6j7Y(dwD*Rcq@JP#itIy=0`M;7<=}CiQ?Q!a(ikx0MdM3~T@fPZ02S zP-o_c!(wCiH19K0P^it;%K=ucsH{XxKs5a@Pr<^%A_>g^H+SzI<66TKh&d?O1|_x^ z&~(vKdzuFhfQ7=R?p+E;`hsJ|d>DB^`k{}gKOvYA<% zPOMe)L-lwG2#O)<#Q;n)Q+!|VLnlEl0p#hvB7n11|8(Kvl{Xh*py_do{d{Bd)Jn2Gi@-sDo%c7)aLo)}m$?#ng5)z7h zb@$F4s;)n61cC?$CdsxWyVD%>T2?InHqd7w!$O|^yFOFx!|#o34Gs2Wy}I0KT+eL}zC`;b3$jSnBfsdI9`S0wa97)>RUUhJq-5`%n1z z`yKiVW*5(+nGn4f$3KIlB9fXAAGbExiHvyc`trh->TX+w}DZ zmd!AEjxS%nEN1)yc}I8Pq^`DhT`fgx?*UnF7W+L;PEJcscW{YIQ~RHW-*y4hTAVqm=`l8Hg=mO8sfpxo)4uB^_CCi%14SfD2abal$S!S3!DkQM@61)C z^d`smT}EhPCr!fex(*#8@4e*om7el9588NF@ep_e`5UtjA?&H}Frvc=1<|oz#FSn+ zt$_w`57!Uu3_)#cy6qxAHeXnH#-XV3?-l>;7J8FA<>yax28I}1 zU!F+?A^2HW0DLClOrfi3=_%XHoGE}1%-qpL`B~~0YJG$W~V|uPt`*1 zLtPi*=U)X~1nB@s1tk=F^js&a?~RiUD9O3GId0`}sMk5Dzhh&sJ^xHxM}&;Er^j%g zeN|F|ss|Ev96^Qm1E?4kn$;31XgfP1_talqeYyS?B^`VCz7zSWsi{>}zNi6Pe-~N- z#qrzgwzdX_hTwA~9e;g5lB*|3iXJ*-4WLC-13rFCSB~%mEs1Y*o#~T7{aI@{3*7}` z9^{ICTw&7#e#i{OY0%RXWz4wL!5C;AnxLwhT6tNSv$HdT5TTDD*52HFeq-HDAT~QA zBlgjw*RE4tNQ?i9t=qd1W!~^VAY?(jjkY{q`14zzG4yGEeo{h0#nrFbp#7daemp!n zdcV;UeAt5r5700{1hyp0$(=Z%51Rc$G$+szbai+x8bE70IXd$2^5Vu5l9H;RQX;eC zDj1%spTD^13?^jf&QJsqCT;jrat(^OKyn;Cs;;a| zF%!pA(=$6*kDeLs#uQl7)x|b-&k@+T-*=sQ8+2MU3=9socXqyk1_rVSLl!C}X+TPT zzJ^@i6D2O}M<^(_(9jFdb@BVPGuU1*wrjINckbK?33>PMs3EQyycL9kJ4#%YJOT1; zU%otmfd1eC6EkyGY2#}?gft-Nq5I>^x2gBJLjOneKuJNOHJm{jFoyDAHUtk=P!Pp& z2Yezl^ca-~4#>SaJP~soHe)%%C z^$D#n{2m54ToYc2zmbyyXC)_9L7};G_bz_J7^(yc5`q)z-t6oR1AZY|zy&JSdjHww zWjAMMIG)D5VsWQBSsJTrYv#;*26m-N>tpAE3FG8B+&w)(d@bo75f+B3RFLfRXV@q- zSf=Yp^{`0_&njQcJ&BT)-h=mlG8ML(- zzv>DI#CCOb)cH!COc1Oc3SKk{1-K)EOyja+M~;N67ePf`zUg(#_ve7+U1SVcd0KO5 zq$XfNI^IjJ=VOEs5cn5O#tkB%(m+*XTgAo2CEkGn*|%@s8~Rq1^7f0YkkvORK-=Hw zL?P*W894G>D{i6cSO>#
M9n5j1t8zbN64hmb(Q41KgPG z-u&ELRC74OYWY}pZAL#l@*ior5=|(A3_l1DY!RZ=+0+X}2HWo4IwmGbF)@hrTJ6`* zpO2#tLxfvhU8M>H$-J8?7^FK$GN5;{QVY;u*RFYEbxdD*k9Y6_mV+Nh&9{ey4w(Zu z1xc;M1;P~+@skW8dNcU1Y~5~XYiSJ(yK=(c;SlxjiBC^dIg{yz+Hj9gp5>+6DndtBEyN6 z9u-AbIg3#|>6C{e2R-nm*VL0YR%@|XcFb-Nl@TX^U286=2zGYAN!CM1TFY+^-2%?b zPSi&5K*oOM(0iB24hIWbj7?4&6B8r`z(Vmro9X6E-? zEHy#MRv=n51i#g55Z0WXOOREdbqYf2>+81`lD9ahI^rJN9XZNP1$7^BRw)##s;;4N z@#4kIcH70@2^+5dGiYGDrY2NHMT=12w}I0jTaN~eI;{l0BS$8^jw0CI+?IWluJ-Px z4heik4F}(!++4^6PHYSVoN+?NfWk|##eoO##F#L><6^$i>Od{o+PQ4VpGQI#=I8TG zD(`Z9K(Kx8=-9u1e|SU$e0?Zq23_bH7DA03VjF#(K+mWfU|kr<=OCs*Ge!9a{zk91 zdsrs#|7UIF^MMHEp@E29vmB}2yle{5G|WQCSNIT8X7rxvW)~MPpxs|^`4VTGhMs9} zV{<#ZQ@_9jJ`s_s)qu@`0^_vuR-vbwS~aEoRrI(LM#ex?iUG76yKlLdtB1wIz_EkN z$LLecUu;%OitUqKvtW`~G)@coolhRf0qBzi*A-Ap_Vb;<{2yYtnW(L5G(F(!+ubFA zw~H)Xkfa{CU1l~)NsvazgHETUcScne?N)C)YsX~W5r1QDCaj-p*Ho00ECKAu*jt5f zKj{pMi1_D}+Arf-lA21Q7YoX!gsjB>#Ln+5^_a5bjv6juQXyBkSYQ(I%2Qsx#$R*( zr0XP0mjGfiL=sq4)Fe2Ow`cy6!kLT`a_4_zVg=%EJ|n2>?99-`SN(I z>Pz@1fNnC>;vm~<@-SkcEVu8Lfb|Bx6G-x29Z%1}nFl%tFvHcwMFwtC1A|BSJk0xB zYrhMq_euQd?*9Je3+jwbSIHGvI>593SL%?Mm1To~R#EwY-$28`a^WkkTUa=OJlK6$ zfY>0mITeS7p0l;JH8V>oFE4-j(gowJm)AOM9<2c1e^+i|B1Z(v zh>PD>Ol4tZ4Y_^$pp54i_!NGB%Og(C^i(iC0=t}Y{B;Ko3ruRD7aJ|-ABkEZXJ8^4 z1fIeR*YPQ_(a|CzBB(;M3ky!j_2Ob!PH+=228Z3fJ3lvf6O74?8<;yofR$dog78&R zTDlAX`+sfL0MhO4m64FRxJ@1qu``ejD1kZXqZq5ev{O*CErKYB0G2g5LmT8 zm8wA6Sf)<8-*uOEvY#~-Zw>@@g>+=qBg;)07-{5adP6l7NGCMo#`|4qAEcm}O zXLeZZlf}4`i9xr-Mju-T6@Hsf z-oAa-R71=nlc;Aji2GCG&1iUi%e(Wvj)NRQ7l$0ORQ(+NszeWQ6bpvB>O2(2fAb_t z_FD|fC@25?R3BKt&+LX5=#@HG40`pCEmxvl`c)HvHBjG=IDP?vpCTNXDOoo}#C7#B zu1iWjWkwbLzyfSc;d*=)lmk6ECp{HdC3}d`Mf2Ls;gcOE(TC*Tj2}nj%fkxH72fng8^!lvM@34rV-dMwwMrNmh5YKoK`<96}@? z=}u68B%+|95jh9+SeTb*|La3cxFAF^^mbUoEO++-M*hbRH1g!pBN5Z{nwmCpL4f8> zKYlz~RfRtt73y*QI_?8PLcB6o92#nygJ4)efXp>o!V(HA#>-ZB109|FaNa|+84*M4 zg$3vu8?5*?9-73=E-DgTn4f`r1%}k6S}1QYPKdH2vM&HldE5rYY6?Rh+}#op;cUlM z;hdclIed5&6$wBq9H#N3qM|WxRE>>|eSKwzrkE6>IZxjbsh$D%n(_2$VQ}2z$Bn+y z<*-45h7fz)l1V!zUE9h6R;>`-*mwF#TVhDa8Qj6b*qLQ!D;t}`&9laahWncR-=j%9 zE}*9(e<($b0ryC}($W83{KD{o0qa_w#g(U6Wv|t;vXe`0CqO0}DYu8y@fudw;#>b&=DkhJ;n2q<-4dr?3DRD=GZ~Lxe${?8ggw z#=B0u@B*AxRGf_rOay*P&r8FF=I2MA5kV>G!yZW)7&kiJ50Qr56*aHg{M}t3oEz0{ z0Xze4yg-)V7c?u<&2C%ODVV}yQ5)fkc8?iM(!jX0Rc|bTRm$-x@;5W{(E2{nlo@jG za8B5dlXDIhU4+#7N>yE*Iyax3FhI16L4UB6lVjr!kF~`pH0V1+damX@i@`<8*%abb zkS7Lj5m!;1F4U>ee~18ShBp~ixQlLsieI9)V8H9!8dzLfQa0p8r{Lwas);8$suLw| z1_l)iuG(HbY<4>OJqt#j_u;HTZcLQ}C}qP?-G%mi96zEZ3%{qzu3|MVu$d zJ;D`?jSox-#;;3CTFwKUqoTayVj&RBgpVAdo${W-BzWug?d`%9@R4P#eE-h_XJ+8` z0WwCL`SRuM_KUAWrNa39EE_}d`DEDx#F8_&rhg+cMulfr2ufxhcY)b_+d)#U6B(9R#OC_$Y{2lM*yW0u#MZIVgk z?(Isfc177<71DUo*=F+qGz6?2kPfJuB`XPs9=y%}I&x?);cRu`RfdzaO&e>pK_Nl8aVlFJxCPF;okFqjGGX1k>F9hr6jDw~N}<=XLq#MH6A$SlQLX1+&`TFjI<#_= zl9HkvYUz0_O+H2jqd+Qil9&|!|K_*2VfYZbAwywO1!e+#{ICwKn`FR&i*g8C%a1efZbd{yz{GL!;$ERj8Wxfk7Pfu+R&D1vDNC2JivdfM zk~LBP?<7|)cP71k?6(z*X*}>d>H`WMHjwq*Gbnt&2ZWQS&MnuW0?KoMChO=1njj8y z?`s_SF1fp}_-!s6gas@lU;u)?1Z9q(&BrI0_bXqNl)!+2%8E99OZ@NJIfD2t+$w0t ziuAFZrY6-AJya3TN={~GX3BkU7G7dgc@H1H9TEb9hN!3j2(+}qDvXAz@kj(5E9hge znm9`{53vQnn=0^aL&GJkQ+)hEDMx70Y7ha|i^DUa%|q0uCx7GlCp#b@0NdjF+hWL07dmITZ`|(lP7H9 zKgZL7tiTMy70cEyvXV%!riC*O*sM+u%3T;5!+}1HLB_z-mIJwu0)SJhy0k@gmp&OnOXx0kfhC&BQ$}?>8K_+P}a4 zBo4Gas^h-KvPzsg0;0HuQuNQn958`GY7{Cf8)nbpV(n=>4_hBl#-W^ z%=%R@*am$mHIMP&!T#S9s%R35H*Sb@Iq?D+Ye3qvDAl zg?$!qlhODMM}d{L&B?v=k~&NU^PE1UNZWo3s4#B<88>Vk95m!guLCJ93WAHyE+GEg zet9Z^;hE?y*t{y1b`G*oTF}BUbWUCUUjd#$FJp-iUCgemJfODHiqr)R%?ECwuqd~*icy+{q5a#|I-Pv&oDu$fT&;ss8O zyqnK}G**c&n8CH+=7Xw9Nl7_k1K5L-`wSrMHIeRz{c5R}oPt73Q%BNm8q_l+=mi#i zxQG%G6Fbjmq_x{ZdApqC3)b}03l)%}FbRm6Li)V2EvnHB#XW(k(1J}kkORyu45^Sa z_BpxZ+!TCb;_;@pmAIr%o)j~MCCLDK9*kqvlk@MLpcvSa5>wgz_N*KjF?j0hs#-wC zwn@at#{L1DzGMYvs!al3;Yv@ixe)xb1%Q1~Gc8Q5!A>EHuTi6C-h}W)^!t4MBaC`o zG(+Qjwx3ijWm**q#LxlKtC*K;bB;+!KzT4@0AeoG2mcDl3YNroNsWi`u=U&vW!B^*>t!riNYCvhY#8O5On1v4+uV z@7}$D?#b%yQ@!OUAowC$`Tl2$e z5+6G>(f0Ci__Mx65T^+GoyK0Tm=rd=>6JtB#4R$n(!tqd*e>WtW4&`@l2{ z`BfuqFaqO>EOZ)rdlQFw1W?qMZg06bI~Pu>!^6^~ee3)oOwS#3=Tb zMS0!DB}tOvXNZm{w__n5uLiCaSjpC(K8m|pIQHz#o5!+EIL&NC^qnp( z#44sjjNYX(gAvKLwQE}M>{-f5($2Gi(W2Or{mb>=r5d~s7ep=o`2%^Uh>C*yuS*9d z;q|_n3vMNzi7ui}Bj>>$;B-y#ci;8bRCREe>CIH4VuNdO*m4V}rw9~@A{uGHIK7vq z-UZ#*4z`bH**G{XZ1lRVu8uT48l~_spsG&h`IrX}CcR<-YB7jl6sA)lfN>`4*j0=_ zFni!Q6RmqQsWQFTEdWV)Tn7&9xDDB-U5FZsVf|kij&FDg3x8do2C|32_K-v64q{QhAJ3k#@VB3Bdo=iC~I*ousdtRfx1 ztK~DD+`LPFjrgCf(Hb@wtX3dgNTZ1pLGe>DK}SF z6P(E|Us`3rYjE_6hjHf&AMr}82~jy?8j6Z_?d?T#=T746#J}eP-~ea2(8?~n8gc{- zG}$MFA(rs56agM99ReT3B!r7IR?K_Oi`>>FB`tVspNHc5x9lg_;r?*}6E^ zpa&1W;57Qbl}`dcf;lC~MHq)i>m4po_zgCPb8>L_%X1*u@C^yXK}t2lyep)%^n@~{ z>D&Q)OKx7?+%7CEVH2<^RH;So1JTO;CwOO7jUQ`0Mhq}>bKAkOX?v^-rKD)u3N6$i z%5rwcW;09?tPi7CHGu_Xu zaGZ;PRqJ02^t}K9Ii2gvbH5R%BG5*S#=dzfS>2c|9lJr zAFS!Hbrg`dLGsIwb}QEG^@xyvw>tx9{L|VE!UMF#)OOoCr-x#G;i5Q7{P@WeXqmX$ zzT-H0Dr{PHqxe0XL-5NuEZq^_{J;Y76~_91n>=&x;X~B*5$hESn7;jjSqK#gJfceyUOR&aN}tfR0j_(Vmq zmKsXdARGb(h5YZk3W{I81eZAITMabXGxJ~_p8*3>&G4R@X4n+_I8$m&+ery4PoRm# zd12%rAt3=5WHcQ|e5JvwYpmOGH$aDTiX*;Rs9D|J@rtQ8s_h(p{t4%V<3LxJX*(5X zZv*(iqvlxM53u&KwA88El=zy|H*fv}IQyU1z=8pYceC1*Gyo^EOiWBZZREeX^6v`g>P3<0r8u4>Z7*UXW;Zi+bNHi}$+%dUo7%6TbzI z6X3$Xjo;i2Z`r+jf%-E5#8^c4KamIe65or!`(2wvBt!|^*j!1Xk!pHq2&e6Fc^B1iOP`^>5WoVTBVC6=ir& zP~qtS$A`te5q{ZhZtT=80IIi;PpsGSC8yOxRWT_|od>76MIWi@M@Nb(-k;s@AG^|l z2bJK!>fElU)$T&@?2>CFV`D@(KqbuX!s9)jVuFWC<$ku^^i-TEdJhhI{!4v@wjV#- zp*&Zl%cJ*BPEFmE3i2Y%88w($S_ZpO;d02|f>gy}X%u+{dKgxI!RLq%60V39#XI=; z`Tte3+6zWTEi~(I;dO)4w2Iw&ATK;MH}|}e(f;lGriujn@%8)np#wYcbQq8mVPQ1F zPlXc(^THJ%R_p2Q`Jb1;(*#Ll@W4C211FvD__+oAO5N_jFn(>XvV7ZsR}Hy1mK3zd zK$XvN8+SX(!%%H-+y@=b)^)n4^IrtHaZm+v0N8;_1wh%!&So(?KmW782r~uY)Ng>K zio%9_8b(Hc!3+_3Ibdve+wj_V?{3bu}rRz*;XxN@5%fkP#&zyv8A2n>X`7{L`(O z85tXYzMFzO=n2cE1Q|8_{0ud+3&Jznu(La_1&f&F2Uymy+`CcMiBtVn1-SC+&9$%$ ze@LK#92g<+gFb@s0DACo35n^=T#!ZZ066vHq};)S2j%3dVJW!08BZVtpDviW1c#Fn zy%L-)viY$4I0H+f_&fVu{C6y(#bwU(`z4%h#jTz2veX2v*3@*jdivc$lW{1rn0g{6 z7JLw<4V*&636qyEUUXG>h^qy_zzlj#l&~;)}<{{85y+<@SSRSf)H3wzu{~=d+1Q~%q5IvBi3$} zI3VQ&0W7`LA&JG}LrY6ZVPTCl^)=`hFCKSYad7bc^??CnE#^6D>Iigyas}vebUtwOTx+ik%m@`O)l`1<#&I_2d6chsNWR@VH%;N+iEgg`3wCrGLIH#0U zC!7#7e1+y_X0vz}3%LR)6R6_78?CLMJ_+&g1h3u&PXNx6mF~YJ$XNTuty_@N4CD}) zd*M+pq&`64c<`gz4(FNhoSmeTE-*#m9jMAIbdQtmw=Kej&_(3l&Kc)ms)RHy+8=l} z0WUP&t3Hq{3JMNTboUIO$b;Fbu5t{n?lFA2(C(eFU*iH3U`@z^|6lH4$MS zlHDyh>Fk%0%G z;#8a-WB7CsHYgWph%3ZLU&*UPH~xa0jb4)j@ma)oq?VJOB0>BXj!}+}jScL>#77v! zlNm6sN4PO^TH;IKDZkiS3NPPWi~`Y!yX^IhHlR@~y*^XDMp z>qYT)LY=ajT24s`+W88j>^2b>Ag=`(3=BOl@%M_qF;=_Zu8Es%WWjNg`W1N9+2cU; z6R5Ia-pk9(q`+J0WQmZOX~+g+s*yQ<$&moBC?HXIc2fiMA(kCMi6l|1r5?259;u59 z48#wfj)pI%^!mYg(q1{c)=w+%8dUjXHMiWabm?$Q{b3dD7g}B{O4MSjAK9Jg)0-tX zy~w+7#j2$`xBGn$>6X*>#pRzn;uUScF3t0`(8F=?#*U3WmvY}*CTubK|J|Z%=Wftv zdUuOQ?^M}6xA}<#9&&{j6McssZit^(-ty9^O{Q?Lc~KdEa^GL^r6b=APUu*PI!RN^ z-@^Y&X|`sJns%vn|GvA@wbT^Ya4qZRVWAQB>a8i&GryzGsfr&Kc>MID%vQUR3J1N_ z2S@9xf(8>}@h6;zhbwmD(oeX4yC0f%v8&u*;+5-haq~}GkN=eYEV>)4ESMoxHe0dr zh?^=<J)9O8MA5+~#Khm`ESlMU# zkTK@U#9vlpci(#*=O32!`t>KtZ%5<66vHw{X442h%9o#eB>$oD)-HwU!*XfIGh9l?4!(Zm<^7)U&% z8%l9o(?s;M`&N5!%Q>$_?;sCutIUt-I5N`j7WgwfX>+{rBa1|p$au3nVN@?oX=UKNF-zPSE z9QHig`8m98+J&=};4jm(WieA#|K!6r3jgHbHfgF3r6+gp+V3g86UszShQsw&)|m4`sD6I zqZOmPVvUV0{QGy|jPwDkfI9fj;P3vL!5{3yr7}~0rtU-KA|>NJLqjjxl>zPk&G%86 z>yNKE?{T^Dyr!7lcyx}AWDm=)#)A)Y8Bz%!4xx$$aO(=_ojzTUPKMJPAamjL`pXN` zI=WZe(h4e456;s-D?XFG!~YbXsI@YlmHgq8Vp7S=_x^N3GRdsRa*GZ9>MtLqp*m~}d{yp$#mWsQ9zEo@-xvr#LK}AU%}k$_>p7pzH{sRQh7<>{vFbTXXNXnZ zdA$B~?2zKvx%Q9YPjokJxaWmwPKD6TdmFJV6%Jh8J?baHIUF%@KF2p`MLBq$df`NH z6qPaC3C^4m?yWmoCdL6g@4Olb(F(@pt}^bk9EyBmVvKzxB(~)Myf1X3_t{rA)a)}_ zGb}wmMmZ!ALMODx{oxk>CP|u@7?gZwi>PO6@!V!_XSE8N;^Mr>-QOSt@9Ncd>zeQzv8_l^U27UVBJCIhO^jFh4fVLra z*|SnJv$3tEXVEKya>esxu1Z~{qaOnkO@$MFi3eSnF{4Av05ArjWp8cWU?wt+CyWdZ z-rW4_QQ;3i!DbD(yKmnfE_2&zGTj}p?{t;Li4+Usv4MwI__D#9<54}1PB(zWWHip5 z;}qRJIN(~xTZBcjcmU%4;DZ=-8 zgoA?vr$>c^93V~+N3()`^z?-oR&k~dir?;~OU`ESrPaHAo12|oaUdS#z!w&GUK18B zfF~7?l+4V^!cisGdJ$Ms{)+SC45+X--tpsyL0^`oRG0pe9ap zoX(J8m!u3K2g3h!m!4>V!*mJCWDBN8NQD6En`J=0{jj3p`oXE+@#MF>4fhHjQ_%U} zUwwE7I{E+7=dSWCgLu*d&6t>Itfz-lz`5`e&@fS9E~B9ts?J{RzFs}&&};vra1e76 zk{MrEce{Umb=4RaL{ro1ubEH~adHfR8Kai3B`^?ZX$Yf<(ADqm5yX*L21RV=%28Ke zJT@vcA|gYJ&;AM()gv)0>g)OBx9jm#hPVAza9slORT~aNJ=?#_20K$h3R(;gff5iF zmUEl#f%C*&pUr>q$fc4yjh4O}Yq8j{#FKyGOnn*nZU7qLX>6Vz9&?^Qv}FuMY2z`x z;w%Ql$=RV}U2d{W&?WGU2pfU_hpICVr?OqczEq|hg_Kpv6w+jBpj4!kq>@lb5)Gs@ zC?y#RC9|S5n@ULol|-Y2G`^ZNNl25>AW3|`r}p<9$M^oR_q+GOvetU;`x?&kyv{2T z6FX*3hJEqTOXCr6n7q9$4|%(~xMUwYHf>eU?5!%>G@da*f)D{@3UzakU3ht2px;cD zG5e!U8RlMgcD_^!!g$1w%dT(jo_#@R^59M3b-#al+RJonRY+0I>in1B;S~5t6x>AG ztK+|c^ulr#-Z0YyMy#8FAqb){h>LY=);OM99*?i7Uly}gYN3IDe#{H0fua-O&cods z7NLp&+<^6g{`@m1S@l(!cDpxUV`1)Sb@eVqX8;$ImVH7u-qH3+FVu#?y4Ww9%4nu? zR4-4y5Q`Fr(UpSy{PPQU+j+EznoO-Ewx!UFEbd?Xc5QyPl2=OIfStTmWRS6|CR{2g zkd%;cLKB562r6>$3w3m$T9T66L9fw<%MKj38;EAYOC)pHsR=Xr;*HC>{b)|!*<-o1 zZ{ikzgnd^$1T!KzbHODdBI3F#j3x2EkhjCA3`Yq@Kq`gm_UGryb_;%FoaeZ4; z6CD-xyxMyU5s-FR-n^ru1MKax|Bp6!J>DSVa(Q#UesB-$5nwv%ftPvqOhDayZ&2D1 zw*!%i^ zx3ZniTfLD8%7U#RcNQ1?X?*jBQTGrzY(DoJxKAzLHTUzJCnHLxp4WN=^Vr%r2}ve! z$F)mlQ#^lL#fWQxCL$|%ePzoECLdg}50wu}gSmijQS`~Md@vP|5xwsuDQ=V(THz5T z;x(7Ib5%EP+7zMa$d_OSCcxAap(|{6C0Cx426^>Dg;wzw|1P+s-oAM0(yV=>rav;8 zEKVc0^5w<&-AB>;B1A185Tm`HT#8wX#l6wt$UI-WTQumN8_>SLTd$6oK~txtYwdlI zVab3vh$kwAZvL{Zl6&D37c5#XDZXubb6FP58ZgD-(D-Wa#0T_}&aY!URfqRoK~!w0 zIwdO2UzrBN@cQvavEYqOdFecADdo8LMClBLYbr3sx)`rylG8g zeSF9F*0z4nJNli6pd|eCWo;$Pg|R8zyViNiV!?JlIB}d59zHe_YkYl`$9T_&if-=G z1V~WW-J?l;CZ2Qrzt3=8V^*isx_@vBmIco{dPn6iScQfVbj~Di*qE>LR=-_&uZLLN z(Al%^gVxSUHnf;GFE2CGa`I$%o)vMcTGhi3Q~=4y`t?7yZWY(w<%kRH;u~V;jk$>x|G9n%HhPh=n7y#hsj$Qr4*51QU zhn#a$>iXsAbX*JqaJFrDa-g>K>aE~fw+p(ocf|lgVS004Oyn4D`s8!FNAi0E=7dX1 zie7^_ij@lP9IKqCt<7HmDAVE@sbl!i-K?{~TZbW9BDxO25z!S@Frz5~zZO`d!+ zAyK6W$HaYy4$azt{ealGQvf~4ea=sw%-0BUvSNGq4y|DmBtjXm7*#ohA9??PzJExA z_CIHzAq@`clfwOFfyYXeP71KS<=GWab!Ea}OPlU~OP@4j#tN!ATNzz@!$s9<^~0_Nj^KwL9D;F~Jh^L!s7OD) zrQX{F6lRW*cH+RC$L`nky|L)AVxHn%b>-ma;rwptrOZ_45u3XrgBTEab;+xnIhozhx(6!$8u`a%!j zDhJKf{yJ^LgHQEGo;FVX;`uuMY2E$Ez4?kV_Rfy;W@l7fk99ukJi`0!m^B9X)Y1%^ zGvc*By7V``vp;{?6Jv>^cDKGABb43mF@4sIj~^an_4-&5b6W1Y$Jr8m;y4?gkXRcQ#l)ZG3K0vSo%_+MFKplK?Zt8>GI#vs! z%1yR5Pk2{y-MF=DkC_9;>$ugNGMOO_rJ?XAzMa zsxCYE<;@(OF?$jh{CXR7qA8=f-Sd0vnwor5OY4QDZ%0dn#xYAkkS+cDhd%qym5-FO zIySiG@LivwizPR#Rq-C*a(mAk8V=dVQPGd@{P&?uDrK;R(TMY(`#$#>f4JYHxj|xm z=8Q^QFK_Pfyya()Q!h&=Oekve>nQCv`uMLX?}f!*E^Vn_@4Q)kozLvcho6a@T^~!S z?{@ej(by$wa{9k^c3Pf&Xokq zt@ZU4ELd?^DE)h)hWCF~mh4w|_~)V}_d6XQl`N?6FZ^}CGkfv(s0`AD zCP;uX!@TF@a`cb1YPJt=%rLdF3a0VPP1kd0Ja_5uAQMb(bDgq?{SF_(w~V0=!}2g_tqNMXoFFscHdn( zLnRkm3pZVTwaP|=%&aWts`mZ8emWChpPGtEPN=u#mZmq8%C?pEtQ`1jN1BZeB^85n z2+%z0c_U`=*f1eU2aS_gh`zgY*t1o4ass2fsMFP?TmB3YZt_vwxl%9nkV-)p*Sn9^ z)Y3_@*eq`XAw+2BF<5vNw=L9guAOa4Azd&Ew^%gFQB9I4D7UK&xyJZPM_$HeJ~fa1 zoH^=4pOd2jha+}s52{ToIg*x^3&x5vHmA1`oPuG~u$qwmY=9nZ=QGEBIc5|6Wu;Om zv>@$@7?}sdks#gnM_HVSh7#SIv zYcIRqe^Xnc5Qh&>ocS+`-KJcme&cnpfa6Wb_nCRL^e)HS1}GJQ=G1>bwv&O3kU^qL z8yc+A$|{zvcu`it&&Y+lk=fKukaLO2yhSm92u*G1^STocpi2H}0jTQ`(M_=%cXDW%}Ub+zOG0A4?@b6Ek{Uqh0?T&CVrmN|N?oLB< zw|Bx-mC3|s3Y&jd{AJDBd^k_7p-znHqNknn&?Bz>he$_pXMFq|fB$in5xluL_XWB? znVFa};s9#NR_t(w)uvmifo7gT~_%D~$&WG?|CThpd76$S-&Z((o+WDUi9xNZl zBqA;H-^ZhN8l>0%=a-q5nUre`S<78)%6$JmpGNskCi&!I7k?>BWZicdZ{GmmERC^d+7m&#$Fhpkqu#sZF5enG)HW95HurGR*plA3C6nTb#xKOS@QGI@)O zIBMA1+tW&*Vbr1q6BEmM&!jYMkG7^_WbujY>;~gqLpLd=3t1k*PtxzAL3|2vAq-uwD@cKnIx{|&$G z31|a({{zE5@?yMmlSlgw@}@#(SX*m)-4({;A@k%FtW<_L#a_RD9sNMw2T`2ILL&?E$5xX&kxqzJ>K>lM|#K9G=lNJaPk$pI4Sd0CNLWwK2t1p#%2Up$OG-{ zOG^3|CrY1Y%@YKh=H|)!_hYxRH_m3QRTtqX(=VV0_x z+`)hM{`r7C5flG?v=3&%Do@1;!!i@UXs{e}^C4p0 z8+oCn_Yci{q@v0D@o;6bNPW%41*^~rsi!Dzd;3#F!wAA5vw1E~DASq%GZ7xkD-0by znk6gAp`o_2JFBho|}+C zEHhCRkXQJ~ZoWG>7o{&>9w@K-cP@rp3j8x}PI=P-6Tg@^GAr1eo$K z-P_^fHWQfetFdy=dfNDek~!lCW^((O(Fqey!;y_!w{83M@uQS&{kxC2Y5U;w3sde*0X!!>8D(j{3f+T2A33H1ZfD zBkqv-#~l;G@xq-y3Qd4w*Ii|}UYe+<0DDSDq-Bm<%t1W2{*yxvJ~Coz$AMl5Elo`50hDc}@LOBG&k zT_t3tq^18A6dF*cl^0g-uU$jnn8#j&w1=9#9?M@V4=r`+y?fR%3W-R&I`HH(ccjFE zhr>9FtDe2_^wqN5%A4B3ZhNm@4Kgzeu1#SN&+ih|ARN`EtDG1VtkM-X`Au9+$H;99 zFRl*Ry`hVkVI)WSv2WJqFYJbx*S}%sCEx!L0%`f2JAT}=C|o9?yA7gwiTxZv>Bc%aO8 zQODWU)iy3Nf@V$YyrTdbwaXk@||UBSo^I4}!aN)$B!kWV|L7 zD^K;5aXm%9T6+ym^ryF{`psKcfDe$|`JE)ytaTy${;Wgehpe(yK=C7Itk9>Ay%U9) zp;+k^YD{TmR>jnt22pvu_Z`ea12_P7<| zGk2t}K=La1d;fm@8eU&^woD$wymaX1g2llqML{bO8WU7G%MF#wSFb*k=^iUMAmLQ@ z`SbAfCN7n zHN39TEWpTcR~d3!ZoQ&HEh-W3ep6bX(F zeeK#D;M%x%P7H*J_t4)VdCQ<(DS9d+Dl6*M#d$8N4&16qSxTA~2VWAASIR3YYTo*6 zRW@%86E=|y*i)Z}zUm$-7g?NxE>hpJq}zn>&g)BaU;OI74U>ROdkUa8Z{Daydl05B zV!RMxQ1F$GYENjx!h#JeF@qv4DcmZ%f1jNMKAZBopX*-e)j1h}I_~`K7rGNBxI7w4 z&6#!b^$t|vDk6Q*(l=3pNvM(`|{yhq3 z1x>F$J-1hU)X3q|_cj_dU3%2P*ckimq zjPhU6Bz!>mI@274t^(__qLo@}3lr+G{~fW>K|2eMSZlfwJeeK~-FZ_Cbs+u*Xn%YB ziYCKeGrebkI+5A|)~a@3_1b)D_;z~$xR=zF;K&{8=B{T+Q~Q3Kf{Pc~xD{e5W&WNa z=^Iylng1@vVVxY>8tXgm6~g_g4iV8?<*+)bIXtv0owepw`*69hO--V4zL~_FI731O znM@-LN+|uIQ1c}$c{+;|=u4Hrz)ajhDKW#3ELNi7);5W}aQps!qmd(fd*)6XvmYbD z;Q<@Ap;<>BG%wppD_wSbk-Vp~muwLZ%E*ft%(rN_#7+S*lgaEIa|O*f2>jLpg(~dx z1d67`^V7|U-l+}|v9W_!gjtE1N%}!71ZZVkV0(bDhoW|7STVrd|A4HC+4#|*AOy*?7bMU0t>@bGrD*goPkRXQbt$wvj zg}V`sn8x|ZObH{!a^_GqT5BpM6^l&>Z_K@LAt}ISmGh1@8vI4mi4zz83#>@e=fH$#6}-I5hOjy-n;RrOmW55;T6pv3=3Y-9K7=ay#WJDa^+$x)nhaKvt-D)u ztie=GoU(ejZW*Y4jtS{CBNG%OW_CRyDs_7M2Qsg4(pJ;2bR#72_!~L%PbO_%b}pAk z*L1&C>}^P8qG|f+)2?_IHaHk7$7I^;%dS}8co8Apj{WiJmfrovim#bg=1i!3@gnb1 zyl>Xr0_Pk0)=^H~tY*&+qSXW2wOZVBXO~k3QZHEOtx zOmL{jul9zDV=$mQEe!xN%KDoT!CE*FMC$wdMn~@MrYQSe6pBsdCXCAL_8V_$JC|wC z5-(|^S~0P7DH)k1hRGWC$9ddLI_~}|f9mYnH2^5sIWhL7snw->S3j*#G*$aXd7^)h z|DH5l(cN=U$IQAeVn-%KoK-o+@{gvl&*_p^l}VY>&a>skPZ^vucXa$koBv;=-mM5l zdHF86!@7v2x3bCO=3bZSPfna(p!<|L1JYP~mP6OGlVVf)5EY5CeSgS$7NClaa9YAG z;;jU;ku@_4Jp`<~-9a?XqpEt@W6b1!jZvR9bJ)uUTsr_g?NqwKi?q_LClp z&V2J6*~47DSIY!rY6Z<9Lq1SGm=0BD=2kPN>5`eZ$HA)v683Q2C?{Rcc~qH5U(PP2 zI5oXy&*jSz&Bgt9&V1_{*=+XtIpK1NH3Dkl>g&ZK#aBr~vu9oHW~d8SjZG1WjVyTq zbBSjugSE8a(1sDg3M=!8`vh5{D0Jm3rmdUy-)&v?i#Cg6f1`7Fkj`J#_pz>$J)2^r zLZ4IjfVE;-gx`$ms+SkJlS`K@!5WT4h#OhRCAg5IHagy8Oc>eK)}HF6*GnyWqmQHA z&;S$rZV%j-??OQgoi>72v8j~j-~0Sdzzxd*C0#a+Vt@(10thAc5k(C&ad=Zn1M<&I zH~q|+)uc$N6hJE?GG6`m_F-~Fa@cCtwB0H{Oe@mqSl!KBUFesh-JY>|13s#rwF0V) z3PPqUW(vNxY!kxOU{0Qj*w<9vN9w&(b`V9*yLNVI+p-eDVD9Q_bI;-CYmp?($tv{! zVbz+{WM+T|9K2{BC8fN8oq0Qze2kcsX#wW3c+<0cqh3qF{SM3W8=~+zI*NTG!%D0% z=DByTgPUGH!%^@Vi*&_XPKX;{bgIiBLcVI9VCkvrn8RLyr zPNqGh2-e;`Z9xv1w=~<(_iH_D9smpYz;ozuEL-poEbgSY*zEWD*~6 zbySg;57BE_&$osD3(&{^<8&_sBq?H76ezX@`}46xKM z?1O*(Vo6bG@nU`iZuIL@IGOC&*!xU6rj#7Xyt(%^{y|qgE3`c|yFTytUG)4m@WP!t zQB7wU5ms0~FOS27#5q=Eu(in}J*0SX^(1ogg7!TVD^q82zllI!V`Ms8=Eh4zq>cd$-v^ za$mS)J7IaB(?M!;Q_Li5KYUpYNdAzNyM#-v{+!b!#+2dsIXW#_AThsU@%aPzZ23^J-LICJS!TQlqULY8qDevZ$6&Roun$hyoaEQ7=nQ2~ z(>(le{PFS*dPeQT0Q$b4gSK7AmFY$9vR zoAL!TB;bKYm^q2ss572FDs6{F+C7xO3f3;|m!hik@G3O-@h2F8 zo#*Nr1O=Ut_qr!jk7%#lE_D+#)i~3d=qvj-3|f(3M79oj&dxw0x4~nsGqshov}{tyx(NK3XcsSc?10z6FqcjK8DO z-9#H!W@OqksUuS_D<(7fN=r0rJhM5>-2Y+I(z)|QLg{rYtgTdek}oyebcZRz_FpfwR~(H4~SK_5e(fr~%-cw~l} zJzu=5z5Qd7iKeWuv&Jitt`T2UDZOt%`H>VhjQdV9{4--*+a)CPNQv4+l3Ll%qi-A9DmGy34shxRem4zGu^K-pP3p-_hynmVhjpB$~g&$;h?Y+S* zT_#9G6p{~U?-QoT)l5Ot5E~txn9lH~+mS`MXH-?UygQ)gOM$AiqC{mRw*_B z;LYq@KtCEVZ(#rEqiJco5)&W4d^y~;Vs2f3>;HQ9J~-=Vb2E<3{S7@V`7IPCDB!T# z#(zBsr~|;rP!z>`;2!!F@9cw0j-_s$c(MUbuUhp5As1HOJqM2a&JqXu9aI1BnMaN+ z!kP{&P^xE7g7r_j0aB;~TS~rsxk4jF8wl8riXsE^sKP?*o4!)s!+h{7%tqn&4))aF zXq5oG;NSPYv9Xhbz_DeriuuBRR|D!leKJACh6}s)uCa^-@{0T&!O_y+AFUl1o0KLP zN~4OQwLeJJNje*=e2;RM6n%NweHA7eC<&Q!o2#>1P+yR&^z~QcJWjHN>=SfVMC&V) zZt*?;{{CTdhAlU1pt3RpgTPht0|uCo&DitG%0FTdbzApt-AAC2@__N=C z{&c0{OKzlaqyRsH9{W#Twlif zk9*!iOYx2%&%rIx9}Z%Ss12J4te5UHGexX?=G{Vp_wL?7d&K7RgO3T_-C6hT07XD>OO|9rM$WLY5gO8_Z~d#n*MOo(_EcWJX(9G09z1uA zgHM4RZyMDwMbe3M5t+t0J}SlI)lJ{Rr>5as{u?k{`10ZG!S;Ih?#+-3%0dir&?@HQ z#)&god*Ow=ysP{WNYItd3-PF0!wDDWTTM^X>f&yA*W`5b-O;E*&w`eOe0z>|itQ4> zO1w=zNqgr>P`+#Wckp7tDF-vC16Q+SLjU&Sz1^k%>$!^0#y|~H&6JRk>%c2Kcf1nk zg%~oUOXT^1$&*4o&xNS^tKo$a_+d!mi|+irw;TkGFfEygnUQWhMD9AMbh@zpnD0tx z(ltJ5GU*N%C}>r~c4Omt1`V0#?*)A$S(UlM$44(c>R;C$R+Uk#|9RSsNoOiQ^B^R; zbvrj!%&=2AWxCPNSsZZ<4sLFNsy`GNQru%2UV~FV9CVo z-fS(Waq*o~Q9E|T6?&=n3ezqQskWUdNXNSO~#$sv`(OeJ-P zuun`$X;A3R`O@pTSg8(trL)+SnR)(sbmp*9@drJ}J-;aPL0U?Rs9DEj4c&8H-}-Bp zD1MhZ2q%hi^t4*C-LLexr?CbHmAAc`T-3*pAI~?j1e3K}1qq@F;pCG)-z#RPKGB%L z#l#8&mQt;N%xSejMnjmh1oN{vk(!+?ScVL#t4M$$6jV}JNX?)BY*q9Ixd-lQusIVJ z7H+)$Y5Fyx3>Klrk$vEMP}k;zsmb@H{rC2fxnmAUn)7Lld*QYWt{ zw`)bjKqJtR=_8morN2-w)Ls6VkXtsZT6JZ9MkW#LV=+nNc}L_p;vA@U@ADbmuU+?- z)m*W@&(9CYLHH=ND*#(7SFCuk_KPEmUtE+(#k`)8=YN_ZH)JJ*4VQ>i zN#s%~6i{^>V4pr(`ie~S^3MliZB=wY^^Gv@sj6w@4YCRP9f`Vplp7-DKQ8^A1{^#AvB_gVNZyGd~IwLktJ&>FA5m>^~ zp5-g2v$9?spF6nBS<-NofH}1YldeC(z)UuHmy4&Qq|l_`(!v5Fx+(E6RwD)eZZLWs zaDX#8Vbj-8^Avjd^Up^Gd9;@jApUK** zK=sfuE1zrH7!MoviE`#|Lx_$b+oj-1SsBB#=j(2$ll$AXx@$C6=1QvjqS8d$4w5n` z6oal(H{{7jO zAs0?6xXhow+|5nhw!nAX!KrD|RTF1LotYxP9K%NwMyPpk>6#Toe>rJgs(Wu95GLIvNOTc&wqp?32%Q$U5CF;iHkdbGQ{=gbuG@=-=;@khuKfut_-#wa)n&!l*j9xWenQL0JV4az2n;88yjCn4{k< zFmu?3PBZq|4WIes7p2G0!h&Eqf8bqU1>k=qwoC}Ha>MY)`DzeGP6xfM>d2+CmHDN; zFAh`h`C7aysf-(%5UOw`<&hsy;LfubA#pA5UAtxmltYBWFwFM$wDD9h*!Y|{AycG3 z$Efj3DFtdzY}jCB)kE3Yru*^hGI7{_i|o{6#|FEl1#cHDoYgfF?1Uks9km2KF zv_U(n8OX*>3JvVG6Atcp8LYC+c!7%xH;swcnzwH?+;j{almrM8pU%(*BCqJs_)QGs zsM#jM%UZyw;^G#q zSW%8zLN=U91e}Qe?epVa^J5eUEDQ+O%Wor<(+vaI!x`Qr`!|i28CdAUPH`(g_@`B%cfVL&0rTD-}c>I z%IYe*sie-rcWd)8acJH22PHpc|JTD$DGWG2Jhi~`Z~oVUyHH|}>VLPQV&vGdn(UODK6xo;+~y;L262dKRgNai#XshGDFI!^1Ftf$pC2CApQN z@U!!Ww|BNqD%1>&ySubTa;$RCg%UwtZ2qF2mN$NuqZ#yrHUowMGRj{JPOhChW$rh&|P#Lyv`C9X_Jh+j!?BMHWH6 zeEC%^XnMP<#S!(8ZQf&E6c=ZVi0m!4N!T{ju4yhM-7bB8d{~%j`@@LJq-}*TP_OgN zrnjp#YPNleD4Q|;%_1t{&TUG@JB&(9oV(v!@%qKQ@^Ah1Xz1Cr0umk7@og4d<8eE$ z@^x`j)0%sNwDM$WtsFZFmRio3F>L(!c7}4| zKOLOKg5BDJ;0}G`t(A$k6-kweuxC6==%?eyv2xLfw%2~h86_kMd@1@Dv#Cs>*~W}X z!yK;R(eYiGL>Lxi`F$ClZk?4oOqc*euZ7?zz(Vc=UZ9*DKNj-pzk|Id<}D*;;ZnZC z;JFKXNc;RZUtUBq3MGV&Sa8uMeJJPm$$$S*CGXj7OVm?kl@@_7hri;!c(Ks9oE^Z1 zFYZ5A4}b#{G3mc05-&MHOtGwbg(k+UW`l_Gv1HF=+WSrrL2x$eNUj6DT%UgZn6jG( z{C?m7dq^*`>Wem()hv`*#06F)G?(DNSxLx23AYLN5JZ8j+wBmvc5Hs!&C+;&4$m6m zDuJu1;4y3mb(XOFiY!B8s4t8E&ON4+NWO$c;0LaR)aDQ-{q)tk1HjP(DlXKf1$lG^ zwvyQKR{Qa57GAH$W*zC9*@kS^Q+`&Q!dm(YlsEAw*d}7SrOj?*Kde-Q(DYtd1z;eO z4ahHJqCDP7sn?$JyJcm3+3WrN+jv^&(1xdIyrug~uOJ~o<`<0{0KEwAX z>}{7bZ?)V_fkRu(-M3;AV~LyY9u~uTlXim?@(wtc2h|p&AU0?+=2N;{T2u}CGM{vCDmJYfGOn*`u?DyfC1d~?beRVTYCY95GpcMb zO~}n<|Lz>d8&Sp~iusMolGrFTx^Pk zq^N~@uUz@U_{RN;3Sr`jM?)bem4XfoN2#|}5~p1X9I%O&lj+%$|90jDF?yyA!g9Fc z<;!-YGEJv{cJkgsAMhPCtI{d|67)!KdPqn}N;*3_LVxz6#YG{0%mkMl*6E9rq< zokl2~aMQ59=(d?sIuUxh)AY@$(B0?i_>Z`a2j^bVJu9xZElJOHmQ?{s%6yfKWnxo- zf-z8wFaU-$0-yP!GdwgpM2T$(AIle?WpvO$mh8Eln@Co}OMKO;zBOvESMt9KHht6X zl*||v_$f)XM8iG^cL;M!pjhhQ|14uw1Lv8?)W_+BLmVO5VIpkfGywJI$+5As%P-Fk z<1vDoBo=xCE&>{0>T{GjM4uj|Q1Ef<$RbShFQ z3;+tR@bqbqD&33Qf_teXG>_R!Hl$rSUYEC zWIQH_;bPl!`!{YW)y#!Um41?vD<)dSc^^>i0`i3bk z@9%nptdqFgLo99!3@CQ4?bAxf1(8)Fi&+5Cd*ReaDwCbP9zS^^(Y-r>$*|)fiJknJ~cjd9Qm=#6G6+M_gB0-j-i` z<7q&s$~HxIRMxCmAthYi&fix%dk^_cwM5y!`TKkI^gAJ4C7B@}W;;JsY7|cpJJ*cM z`a{LOa$+stIMp!8^)%c0X-6{TFSy0qnvTF)R34Z?YHYcUWjv8|_Wm(5HyWTmuKrX( z*_^k;VQ{z`DH6OBXitDVTUy@z2x*cM29T+`=_CRgM$Xb@V6mI-o?#y?#srMdZo0Z& zVcv;7r!BsAiJQa%GGlynf9C-k{$kao`hF9&v#)cW+ah#B-7|gS4G=mxL2dbO{78JB z0Oz1JW9iwtA0O>SV|678OT_e)%NPsR@=ByZw3s$+hPo0ILm1Y#a0Ik`p?lans()ow zf+Z%NrFCof40pV-NS_yCOn?Jt%*??;zmTG8+|+1E(laukHC@PS;NT}QuNu&D$m$Mr`<=W zMOb6r1GVZGf({@oBo(VaRH=o_ZxBE+sNRCdCovXO*InpMFPKTaH;6k4Fp%o-5be?V zST?&VBFxxrRzZnKy{EMVe4;*N5FkHf^`vi%Eej?EhCkx<~ z*6)Ku<5(bfvEOv7BOj=_kQL-4bTMneeq2Ub{ZspB0M)f?6&6l~eUG|444yl54`6fk zmTS1{m?AMSG{hwcTyGVJndDhiR8!Ev@SpCUPjBDeSenZwdLxRM0Qu!=GC)?zq8TY% zC=e&hLH*z_Fi@KnRiFU(Y%ZfOiUOvDOrMF6T~?dz*(3&cmE{24UI zZs_QtLw8P1yKd3la~qF+*MBmza%%WhmQb)2RuZwdT3YQ2^Bj?nV^wx>^=djj`i=ej z_64?m7%UUE*xUOhCF25JCD)SUICg@`rY;q~*)@0Ak{k4(Q?l1mb)b>{7x@H$#h_p< zgMO{)^lX;zGm2FN`}8W@E!C%aO3t^6m$|Bnk z=w5wtxRln{6J<8acrUY>|EYmWSAl$~x)WKvE5sUCy^|>U)y_q||ly{HBYf*XOT*8L+?6 z_4ZX6x!wzeBfn1TN`d}~lUxw&>!kye&ys;Z`-;Vl;0PA!cNF(7zkQof+1$BnugH8y zc^#6JxyX3(;vNZu6SEJoD673h{~SpX4WlIP0k6&mg%l`NEAWYPW5|1F$@7B0f}C zGq=A9z8R{D!3Oev&Np$h3oMH+V_Om&D|9jY(>^>pUO~w~Oj}@MBWxt0Nw^SX#Vi!x z7YQ1&6C9&=pr($_dmb-?+W0L1j8hTt^_V&x`&9sx#rg%7HW?Gp1NtEH!{?C!cl*!> zsJ%Ev6ux;t?&R1Zf4t1h&!}v(elv6KDifBV!A!{L4Z4-IHxxlHG}khH5jdv_vO3}} z^()?;&?n8m_hI-cE3s|&OEEQ}0EUr+U8E4~&~lzW{R7P=l?!A|ds8*OqmeN&@PxuR zKSF)W>4sck-Ux;OTxXspo4V+bh*{7us2!Kn(^DaYnajH;E)Ny9Jo67Ojr;>iK#aoc z0F^c2`sO12z1BxX+b)So3r&<+0yw}w8} z_ot%jTXcqcRkkQ$*Dj>aw2}%cDu)gqz6yybTQuw7IFviha5;S=EgYVUS;myt(G#GP z&>TFNK+oLYEnM%|=?8|yDjM`p02!@+q-2Y*hz;+Y*5{h+Lrdu^cIJybg?dYG{ zJ;d^xw#1_8L%oFg3y>NK(2o-Y$_MjDc%=GEVmS{bP5%?@Af7fm{)PKBRcuc>j%_r( zvavZeC1q0j8M%>E<-moDK&x6~3AvM{x=TvB zi*9)se(?3@AqNDsBfSKvxD3O}8|;9jp**H%C*b^dPu16qdXe}FzH@nX_14J9a)J)4 zVCbi4uA1qw*osCE_7u+e@TeWJW3N5+S-F0K!y$*k$_Xz3vrP?LIbhKVywxZG8p|AhYHKb#?&4 zqUHFvgOoyukbm7oez`pd6uHBdD;*G56v-RkTEntM#T&mO5r{5E3>OrAzdQH8?<+N~_Gz-5dVx#SC$#aAE0cYK@I){mXR3NJJb=zTYn|@_MOr`j*fJzI*p1ZCbA}`~Pq%L(wML1O|3cR&l3T zPDz_OBQ#F=?we;%&;E`a;U;phv%9%8m*k3ktBsS*?3To~>c+;ZXV2hJ=1OdH^Y9o& z7T{0uBDOlaNgjk_cfdmaw*&Gk_uub&u0XZrJI*CtIPvW>%*2053{str!kEIB!^CN> zUgF_Zn>IY_^y%4FRyXv$Id7DGP&)`awoon3pD)^8g!!Y!mbP09L%YR1+OsEbc*~Gc z--AzljNPhu^Jd}8{M;ov2LD+~_e|1^d3JGu?!;7KKMZK3@G21zn}{f2!j8kA@Spu; zrvmF{Zu{!7Yj{*ZyZpF=_o`PBE~+ zHxf~sXRbn=5-YcF>^kkhm-p@wZCJFy7P^t6Mm@TI9h(?t&JfqX;tK$t8!}=9PU3@F zT5MRy^7+=Sv)F#iN-aN?HQ>BoV@+}7!yw(EcYZfbD*4Z_;cfAK4<;ud-r%M`Mj3t$l^)qU!}E%TZ8239BUDZk7mrgZ=!goat@ zdaJB%Ed@thg0*(`aX_v}@F8kb3X$7HKCH|3r|A@GM^XIEd>9}c_o(X{m^a_^@|EyINJ}DOkX5r5tc>U+MzVhxD=h-h@ zh$^7%%o+V^pGn4irZM}4DUg}_$6&72V~C@R%Vq8!^~@S$WiJ2Oimo|bTN2eOu|UQS zzw_#4li0`;3sl8A?&)6(4)!k6_fD14Sgie4LLqX6#==4;7bU|;g~=n*a)w{tcd@oU z!6kac47s~jb&LB~pO)+Pa{efZ(0GeQ&z6dA_1k;U@!qdLYgVlr+}A*E*|qxLA8M8z zSa)ypp>5a47nXn1b-hy9c=QzEXI|E0u-wl$v$NbM+4|O+1I3GJ(T-8D`i2Ka5un4vLReUQIR__D0Y(@$QJz%C1u3g=3uo%t1^$Z6cAH1-1J2(j(DhY zBO=yopjX)2}==-pdBZt@xZN7K^bm8LaT91Ygo*zDXP4Ki`7Z~{Z z!b-Q2*ovih;`}x^WE?994~sAL80q}Nl@@;W_{|MY=!LreY<#-%!uiZhrkNJLS5Wlr z+^*^s*#2VJHYm}m7lO6s5>-l?r)&ryv$re@3NVi8Jz!#Y z35kgvk_|NQ`m%I1OpmDeuE-2zhsc5}0j$3EqR5Rk9ziJz&xRll<$=&~0L4%!fjNt0 zCC;|lDILDw`K$i0(g-K8kx`+U!69lbiNR5m?i(xLW6uRanu3brV0|w{03g3;v+x?A zYGj)$|ISK=C4jK8vy|k_#Y2KyqdV^!RVm+a*hmk~ZUR9-K@q)txlZ)diYFE#sr`35 zP>~W9aOJVH_aF7Ps87+EcxSB_eiJMf9R6G@|13XWsjuGA=g(TNboe)2?f9{Go~PGGXYhvhM?ncM$lV`boJ<#+H0C z8D^;w5BIXn!vi>|_xd>z33I8uVC@DxH`+{ugZHTETqMvbu-wAZna`DJ4q4owPQKco zf0`e&yYj$+@#o@#Q`FxXn5k|{*;QUg?KNfK66F#AH?TB@=W@UXK98wzc#X z*!qLxMw^&yMlk}H3&uPpWq{Z<%gocK59_<#7<@P&hbT&K30V0I&6H2cHq_n^Q&f|! zwG*w_YRk+wOE`H`8&_t(XA1FIhX0*yb0Qwflr%FgjI+|Q3Pgnm4;(lYC@UUv1bg`W z`a?95Rl@AXw{J?r=j&f;DHOZ*z%s-3ypxNa9X?0>WF@v2;YTNLAlAHl&~^QjcyBWS z%7>@5WL7#<=J;X9ID;tpwfXG;R&-lxA2mMJ4ek+A=7C0M@%=-@IY$I8d561*$xhLT z$NhnpkhGx+po!iS29b2~aNhXwDyOepdHv)GtDJlpyL*4X!s&Xhv|;#Ji6VW&WFWvo z77F)`9L?WV_m29N-n6k0+OxE@l%jr1+lOOR_~;><)=7#9ek4Ge5M#)&QrQ6lJ3n${ zh0m`ci&efDRR#1`RAk8#1*mMmikVHjC*9IdYTh`0;^C@S!atWi$`Y<#GHK}T2O$S? z+;cl~%yfC6be~5^9~y$U2@4?H^+f<9WCw3jEuG`{iJ>L+-@vg-0K}=p25V|wTPvY2 zS1LLr-9H+`K*9h+s!f!{0%*Uv*N=hn z=0U#qNhiB3)9LV0{V)!D{Y`gK^r-$b-P}_6+7T;~jy*gyBc>Q0=;f|lQd3h?wdLn4 zG?bx2oVV_=F=^7Rrq5u-$dc@i+rdAwGe*L&GaqwAjd)>R?_B1oe!Jf&TpQ zDzlHj?+r_Tie=Sp@UstomXN^%` zlV^}mQ&K$r9URs-rp7AcD{Vhv4lUTHFJF2}ONU&MJmN~nhmy1^;M-kT2`)SKF`Nod z3qpIY8gx9nJ#qsI$F>K)`)YaEB*~87-Qqp~@F!lx4jEGwy0)1;Y@sKYaso@`h z5I9>b&gZG3=Z-0`O|2ru6zpbx0ZPxbZ7-egFjBLP4`x8lc1!g--bx2+4EUy19d@&P74 zWWB4SV_E$-hA#lEG0(0^ z+K@MRoS@-Qe4xeihd*IQx|`Rt`C5rqkOu-wcjE>?^D#VPqf-C$=_6yo2eG!kBdHqD zbX`*QS!Ly<5W6FOaR$MIC#OAB3*}va)`21sGGvw|F1^Z+3!b942Kca*j90PFc3`{t zfJZ(DT;nVot1n(j6NRpdYrlQ_!l$PLf_`az{kr6Gx4Evaw7M;2gAccVJKQ;b{l`bB z?jk0*{7|?f_r@4O(PRc~0j}ib$#^I95dTteEZ(ry9*00d@qf69pn8V(@t8d>{t8TievLKj{V$h(hz1Gla+3})axUk zNpHBLx$>ngZ>}ZI-2XACO}eCc-@5u$UtVqglzad7u7tLQS;K~DY)wwksA;xayQzA+ zYTv@nE34ufjC|e|wt1CR7vH8&{}L?s7NrNnF`*H;VqY7^&dvl=pv({DPypLkscE)V9=Jw%@ax%T z@2l)Snz_jt7Z;z$j6+NF5pEat<$84iSHAo@e(zptQeWkgg8u!_jd(vMF*t7O@kg0< zuA+WFRu;mMAWqoq%5XoQ(MmIcT9jwDbLURD2-)v%!h02+A&x)_=_lV2M*B>Z#X9W?SRQYpM5VGAKaSyfdP(+*@b z6F&vji#1zXcp^88=QMnN*H}67!C2$)__j~8N*;N=4Lf-H^wi^;PFciZEE2a#1l8=C z{iLr_te;<}Re_IG%pis7X}0oyFJHc%7<1jscvhjQjY&-IvZt)6`jXMT#|UEydph^N&jXtcIaO?MvZ3wArUJiR zlBIDfIr9%V=Up1m-(!L9QHQ68OrGxD<-XMC^oI{?WO@vXiQPkR-krGKXw;)+OGa4D z{PXA8*;(2ZBZgb&#a~EG4KLqwUdd_ZUbR%~{W#P0ZZ*_<*DPI^pQ#W0Hesn${3 z4j)e3@BATtkfF-yhPL&IcF%Y3O542h^md_%RW^Td29y{ zUcNjb+>IK|cia|KPg3f@d~=NSx~Q}9iX@H-9tK2FCJap}Jp>_L#?(S$ks7}UMWO#q z{{1f7<2Ut(Q^}D8Dl1VZM4##tyRF3_ebeS1E4<{)huu5;(<%2|aP&m2GY zWUXs##q^O*j0RvahDV3>0pm4D*4lbX1`n2gVkK5|WARxU6-bX?0Uf9xehj?lE-w>C zdE0pT=bzdXIVh-i=L2mqH6tq3m)7XpXZ?N8*`fcY@T7 z6d~mMbV@Ys|mgU2AgZ5jkxLWo!WYZ zvq{fUQz2rC22Cg~fvv|R7cF08CqBM6-@=aQw1q)`eo!pUbKPQ}?XV2frn5zSfo@v0m8OTXa%wbRK!FN4Sk7ih2WTV0d`9 zBYMgu+kfqnnW`mb#*%cpYA~%Mw#NYqH5EMnPh;2P&U7BfceymvqfP6qGifuOt|qGI zxC+^AtXwDyXJSVW`BBSG`hm#SuS@!&8l^^yN~tT{ou3hFr(Z^H6kMdK5yILz6eaVAHaV+%QO(CzRH$GaFg6gB zJm7{fg6A@k$2^Hx-s%3b2W^n|r&)|d;63;fA)rs*858pc{my=?cWL!?a|lEREHZGL zkU5I9i3)5X1f@->?8dMFcKdkL+t{p3aaS~ST@n-nt%hiUeDVwm#SMt0I)89=4yhv0 zsrE-=l_E4~J(3De!Aj$_$BIgYS)#i_jAE^(xVk#Da2-R2K=Pxv+Sr0>@Yt>Kl?3IO z`mi-#+9Lr&8ALd_RNAn0A9b$%w0sxnL2vytAVyn=e7O*9OI)0fpWoB%{>{vYq*#zh zu;J;DN&>s|p`mfL#{`7IqW8p1XDkh>5>|RCJ&EvTj9YpdI@Zndi~bHsQbjt(`M%8D zT#fmn>Xz2l^T|X8l}w&%d63LO)50lmVzDm3{lwLibB9ouj+BN$9OOOKTRNA~)nJfz zw6~*r;$9ftC3lKYoUUXKEm)A-)bs;|VwZTmcE<`WYG{a?w_!9xSEExyS0K&E$S<9i zX%9wZ;;uQjtI?tk?k zSwk)N7Mh#mQ{1n$aml<)t7H$yhL4|L;XK&)q@rIXp3x~UXZgi#`4CRM_8+YksA10C|8OWku;r=>cw)lU08JO zNCYo7_WI1-hqJth_DA_GbZd)C2CDr$+G~C_d>R#w8#=YO z6uEiNuV@Y}2nxJVba(mkb`lRBTvKgR@}Eh@ON8HAyPQgy*g3ezBvssFNzWu#+Sn>4 zbyYmu)TL$9}*eAs}ogk3n8>_1ZZ@M_j63?=yA&xbJmk zW!f6aR=}A|nS-EjdD=Chianq5TiJm> z`JB*zP1_*OC&^mSrC~OS$rsFiU?qX|=V*U_CPRujJ5hL5W4n6?+wtN3hg&AjxtW}m zM$%$lOqH3;QT>u*FeFSjy`3QI=0|5`boXoYR*OO^E6if!oC}ZhtrD%du32Q}WJSn% z-Qhosu@-ipAG zkY(txI8RrN~;|g{Sh)I5*fk@RJ4eEoTdZd*_hG`>s6y z?XM&fNp<4xY-i`jwVNAVv!0EPBreXK7Z^w^*uQ>#$EoPFksq~&0pFq5IBjJ98={I{ z_qBIeuL==TIPB5U94{%k_}<+Qq2-w`vKQ9CY5O zh=Rv*n2i86nrL=>oa40Ti|1Nqb9vVAip%sfli}JcTx#Wko?Ucss(;`<1dsy!}!=f%n{Yt`P9s_Ry zB3<0*r~=^F11%Sc^q{$U28q;Od$8Me-;cPdkjH@GEd6o-0HmEZt!u9pCMYO^kO-(G zo=7B0NEigPgNXH_is1wZ2NhWMs8oBg^|T^%FQ-eV^KD%DoIl)*2812_%L~jJb z68i-Ih%ud_v?Q!>J2LV3dE#WPF5FuekkS*PiyPS+^BK(q=Nmo>*Ujhft6n~;ulKBa zvUdAy)>&VW?qGt2$iT$|O~jQf`~nN5DX;FqhaDg?xD!a;WX^O`I}Z;9(%`#)t$O{c)u6xvo3IxQmQHkp8!P>wi2e=gMH>iQJ&K lF~jTJq{p@S;hX|8HI z2tuE7cJziI6ke9EDQ=Y!&(3}#3r9$9zQp$S_QJwKsZ=U6xLj^#uh{=qD#O+^7{H(5KKA*$!DK(wD-MQ_Mu!{`qSQ>#HpN)^~aK%1I?O@ z-(HgTG%T+bcqHuRTUOnL*89?`R*Q6bZX^weg8B!#0h5Q#2vfI*i~mvi|B^=*0^iN= zz*uA`K|DnRHyS7?XM%V!EPi2b76TR6p;k>A^3i>85;-7`&hplx$WYINH^d zDW})kim-DWSV+c+I1V*1sRm(gjbl)+)c4Q_zZty&%)S!P<>+PD+CLl0BQGT+#)CkW zmqaG(e3^0WYKcuKPC&1WO`ICHRvsQ@uB{8dp> zF2OrH-y-I)cXuv0nsdB!jFT<^R+%mQ>44!~1i?hYz@V!*;GjBQFzqCas*Mr_z+s0s zSmi$yqc&XNy2K2=xj4ZjxiObcSwUNwbf{qk=0VRx$ez2e0Jnpthl?p?G?$^6K=??9 zt{0F*KRL9%p-;f<_b?q%F;Aaea?otp@3DDg$C*a;OSp*O>*rpAU72fcO9_UAlkxEf zwHl@|xAyCDrgI%-jgP`scRbAe@W22apvjk%_NW4Zyp)wD(y6fKNB`hS+cT=0-Guzw zd|@N;{nre+-Yc1|%VS^W-N#QUq(Aknh@($#STtJqNK!oX$Q*kkwI*bwCw#;w=)1Q< zKON7G(R+r$+DZ@k68Y+L7hx1D|EOF0pM~mg-kAZ1)2POwU)V*9J@h3T(dV7&q`XX| z{y{WV`wK6YH-+$;P|LYq_$E|K&PbU?#bdrtY`ftaduDz7R+n|%DEp#55?n0?+0OZc z2QF*Q?DZEuJ%n}$b~iH>GFZ0kl3WV0^$va;krsPkn2(OL{296GpM4aa2I!18;ba)c zGG;K|z5{`RhRR~9-&{Tbr-OYXF-!(x;jhN$$56eNQ-OJKIr*}7Nj|yL+oGBULhEpL zcm+EI|CV>RUpI8iWmYYFEtyicFm4?^-(P>ucub;drvQtOUDa2({fgyb(4g#Is!-46 zO||k1sg2JHP^Yu(OS*)(2t|K7jg;4J%dv&eKiu`ZrkfDU3d^_5tqnI)?x%KRx&~K( ze6*iZr(v5Dyt%+R;KZEdeg;kMyzY9{9gOZN<>i_RQnsu0+LnG9iXH+>(MfkAxM9tX z1HC-Z*`mHl`b8zyd13tRrsiGMHz55Jmhxz4^t|?ofgVYVv*J(Ib8$X90*)Z6@~{ZMe1)#vBhjlUDohzm`5;OgXD)7x-|C5;m#QT_ zD{Y}P=RMCd#Ty4&>|6>gn3RgXy+BEMwl*<-{}{Tw*-P|9kH6(dJoK+fO}xh_AMPWE z*gg)c{FsW3;7npw6~Si*Z6>kr8x6#Rl|w*TwqzSmbXJ5)1rS#0-{1(l_3IRbCfnKE z1|cL39u1)-#hB&1DA+eYkvdA%SNMAzp=h1?_&%GBooVVeZ|>U)xQRN++LsRd2&-yH z?0!F50-RIhv`8jfn(YnZOUrW5s&Gw}8wD5s!V;Ng-n0G?<$0nN)98;kg&(IX&C%tK g|8>Ftj(I(|@xYQQqreo|%Ysf3JsepMXRo3E2l@_6-~a#s diff --git a/gui/bacula-web/external_packages/phplot/doc/imgs/qstart_fig2.png b/gui/bacula-web/external_packages/phplot/doc/imgs/qstart_fig2.png deleted file mode 100644 index 5deafe4b04b33a5cef9e73b2b49663cd4930c33b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2023 zcmb7FYdDk%8=iJh&A3oe8)?R2FwADdP~(ss)+wiH(3>dCo8t;4Muf5wLJs3I%53D+ z%#OScTMknw<{%0=H%?166QM*-^Z9nKYp=cb>d*J*exCdOb3fPf@GZpEq_%90qb?^%)~&6r+1c4*v3N^hv)MPgL>@(rur1aN6PLoe zBe&%Lkv|34+_gD2kv%UKKke>rU@9iTVB3T2td5hS@66s!%r4QEv;O_khWM<27D;k> zxaMngi)*@6boi!}33A5|gm{hO8Rtt<0ts-N%U;;uU|!4onjg8b3Yt@eR(#rSn-Si< z6sSucL0V#*lFF|0Xs4LvS5wjvN3)nQ_;t$umVPC&8%?~~Wa)ky52xH<&QY}WA23h! ziu1SS-cr-447wQMYr;nIyjx+A0RFepKP;1&{D+SQjZr^x4xmK@f>VE$Yfs{2nGd8* zAC3F^8v3I8Mf?O0Wo6tgU(Z=VUnCdiaR}SNvcjP6_mO3cl~|I(+Tz;^-^<08Fdw2n zDS?rlpi{tr&xW|?{4`Mtq1SQQ{_QO32&TNLl@gwX*1us4%at?-z6mMJcNL*>9X=)eHthD8iH@{5kW`e1Vv`G;^jkwbs30IKuGi`Sxr>@!r1x>p@@Y`@e{ z$8p>-D-7#F@`%K(R`0t2)z(v2L`Z6g$!DS*6IlXv(ZFtydmuy00j=W{QZsktwF&RR z#lZVo42y+7IERylg>pc6Jf@PUkqf6!2Lb#Y>5}r0y^8!HB zjf(}8Cjov#u9|zAjc}4E{fc?5tjXYL9uri?2G@V)np2R zMWZ}_N3>``^Onn5nA(EtoS-8SSAfa)pfupPJv782T%+GvI$Ziyt#W-O&aK?KNEF7T zAfgmAhh3;pye4mv9?=*3(!IXV%jYmLrXD<44EUBEn&m(D;obJY$GVu{?Drb%hZRI@ z{TZ7nvr-)pCa?+{m;fdM#ynByPu$E~dZ=1QR~#;*So31cC>3?R3ub`S>_w5YK^H1L z2aGrrEU2y|-QYs+T@9l)3ooZWwPrGSmR(@*y3EGJ#2T0(X)d1>rSasD@-Us`_Jo;EllFA!>kuz0eng_HzRx33s+78@B65q!_AMeL*6x)e@U!;lrQu4@$)v$a7V9f zsA3p>a_qem94icyF_RahTzaJ38pcq1R$)nm?5|+wqe>knDQ3^GHg9?RHgZci({AoT zegvu4zn#n=Qqt5r%34ZDdo+_XZbpj)ERu}e$W8zL}v6AyU0$9qKCot|#DaZh0E zBIDmE?41y5xYc~Hg}-+=BU+uYNM}R?cJt1r11cOhyjSD8e3cTlesE59kEH=WU^!~Y z^ie~^ZTw-pp9-xa!p(8`N6Vf;xn>>QOSdLmVAY=6EMBGOjBQ2or1#NkmM?kR6;Ps4 zyYvDL!#@~X%OJ`m=S~yykH5em>nVEK3SZa7Ngf=;hTl#se|Dt&Kb+JJ{R3FtEW8t! zw{*(iPPzCo-C94D;R59C@>vKuBH;kOk$9}wm7kYf5WjIMm0?&h1&j>8s|mr)Gm=dKEMN&365BoO=q9O{&UUF^d~Y!_qZH9(%ybQ(u0;=St2eLhHW4 zC@f<^d&NN~rk2kBGJLQv3b| zl5nH9%1U|N58lm!|EmlBifDA2X>>D_htd&iXdz)#e7t@IZV}$|G~U#9U_x{c2jhJ= zp9c<%7p(X6qP}VXncW|p$uAbCxCYMC&`{aN*R!ih2RXFqKOzeU?~@mFHPt`cQfFGC z3?X?9gJWtJCfy+UpA!Ilt}MwTl-xv)Loc^ukqHn?>;C}(+TmgW13AT|EkEDno;i&; zXAXQC+6lhq>iUVhgeKHawaucg1Zc6*KW8noMs=T0usHx!4@u8ThKwaaS2=V{wIbmT z26frr1Q-~m^6dpn=gomN-?%G*!`(DHtQ?VVAcFyJu1|uUQgTvwM5-lw)q&JJM_nSexRUe2`4(h}2(*G>} zAV6OUUt647mN}fZzP=_Z^d<sZ}^nnKwXq3EM^m?F_On?mh7Hahi}wewSm(YI`_C;$S|gvgti zS>G0UDnBh51IG_@{9_RUm?KB)zC4I9ATlhqJ_$`vDLD9feg*w&-@hdMO&E7}gX@sh zc+V9i^}o*Z@AlgXqMaZ||LwaH$R7QUDd4MX9iq8(MsHEbklrw^$61{V`*p?LH8Z>e zFcjkHN6XVR-9$BTM9VmyFm?yZ)fT0n56_`DiBrXuOc9ZU^^#A()mTXbH48`lcSB0W zgBb%Vo$k<$7Bv&RZrE4qEb;3QqGn0~?Swp2@QbC9Hxko*TgaoMBNA%4E0wuro?cLIx zMms*X)5XUfiY~*ZciM6Dhf8{L!3<7FsYOl6DILmv=h2zyMLQ554+v`d{OC9Zv{7Vv zC{E1}FSUZ-wL(!MaVB1l%Uw749t~ov zi=Fh5Ziz0-KAGZ5Vr<%Z-8qFP)AKwX)UVQW2>425czM*FEneb03S?8%+K6a9otK=xz-~nhF0sY9u<5ql5aBg+N(dyMDgC)Shjn`W`b4GaxADX(v8|wO|+F+rMAe0t(d4=152D25u*j zdcS3^Xb9G0v>0*^c?RD2i{h&VndG#jMORXU#&GZxWy~4j~WKxo)@z_Uska%D@tr+-kq)(np2Cj^!(+b)yz736F|I6Z5v* z6Dj?xaxx-%KGFfq8fJr#*zMUEClm_6)e7ipeEGVK@5A!?pGQLOnpSLo)?BLsZl~=uXW@U>Xw_v62fkL# zR5lE3Cs*o)rRz^Z3qR=9=?)Q#2QMi`MrQW4j2_8tgEvJ=UtF_i{AgCfl-Z%HCRE#z z5u@I!Bfi4|k@)FSG=3}5qF&wG#`K7LogRD{Oq6D~AjaSO$um2}Vge z0QK~~`zha_#?2q4kmArtnk=rLpSMdH)>3_A!7KJ1@Hr+eitemzw}}_SB*z3J8@om} zCDhR}7UYnd(0VJMPdn5+vPFW6DXa9IgGU`ow#+`ObANaj|4Y2gYUt;>fjpN>{ihOw zo27gs$F>^inzFHT$*;}dZ5N+E;s!p*s#z>+`)Rls(O-Ghrks}b5_8~~zBkXKfg80? zcZ86r>M1&3M}Z^)a?g5r;RF(ulHTquG8G-%i<`2X+}wkt;nkTKChmkSwzpms zudH(WIv23{T=+Lhl0x=sX!X-{%1=0V*2aU^!@}c`%Sx?aPcGmuN1K)n3Ok?*iDPX< zKEUG;i)9mVVdgcfA_y#)Lmya%1&@8K`9b4jZ_ozk`gv5q!29)Y;dA4!jCi8N$NZe& z3IE$ZK}f@ddrZ}>+V7qj%)Q)9)O9yywIN$8Ue2mXg`knk*{;F@Y)_+ zZ(8d)x95|35VlbzJnV1&{(r#YlWiHJvrT5JFHmoKqkK!QKy>A(ikK;&J1NxXMk&1Y z!%Wy#M5EG8QKQpRr*0f_G2lmuFp{c!&&*T3{Dn#DPFos@g>Ubm`H_V%o-EU{QD0j;gADbL>j>qaw7qWWOs zGFV@f1piz731D*<=2~4^KZ(U{eSJ+;TM}U~WVIc|+AXGVwkWiKZ6Tkua)H_TPAncj z>V68bmQ`mL*LKp9FLKT(<&}lzo1K?N*`GfnLk_jU`r**KF|yZX5snD(dl1;nOh_fS zF%XQp6APp?q8f7%^CzMFeQ_Wc%qy>mmc^Xagr@D_*SeyCyz;RcYito=Hr(|(r4`-< zJYG0IB9ryv9n+Dn);C7Tq?9|r?e4{Fw7O$a-pbTF0r4IL7NtTD#MF8?dBb%Cg9+Mx z7Eeb(ox$t`ZMuc82*aAn+)?WzL!}#WWUdIce$yp)pLESkooxC{NDy*RBLJrNYYmKJ zbaEt-6%%hxLSLjb?ZFH(M3ZF427(3i_R(`16cM^BvX z4=@)(Z(56zMkhKfZsp!O%oKh}Q@FNqq9@FAZ+%N>eYjYnBY;z6q^Ts=&PPO^QDlK%`-dU;t_~L(D@Hf15&+Yz=ihJ?I+x+b= zyFlRT4(N*RmF?(mw*wc=0(agFG6>xH&0~{DJfYeARrhGxtdn`J9DFdf0@Yo4G;i#9JFF5gTsAExIVdgIr z=OTo%)sd29(WfOFRvA zc3O@51(w>_;=m`)8ue`HEE*Uht8B;q$h&A!Gz9MoR__m`^CcV2?wkR~aL@MawP9jz z6#r3&47I%)S9HYewu7;jsFS;~@ZK%nh_deRwRuJmX}(@vJ<~!Ai+(_=iwq_9##nJe z*GNcwKqYi#M1xoL?4lWS(gthq`uT@+vMjzbT&kU>fs&Iv=cBQZ5!?3j`>FQ9%TLJBz{aMRB(6Kj_a!{>h zrA=sVh-PJlp3z8cb!8-{8<7Qqr2tpb>{(R86Ed`Rx91Q@Pn`gbg;ng{4-F zFAMBPkA$qlo;b&a?X8=!7P zV#wjAO57FgUe2+z`O3pyOHd)b&G*zHE$9r^^I@GVB{nehg(kuu{-{bno$Qz}tlW)Z zq0pa^cM8vg*5JGW3ViANk{+as@Q>)pM^45BI$$7cFRk2HuEl>ULv-ncyOuF?>)j9? zDYjk@3dloJuD>xUUQR~6Q=mU!4xe*)T~5$Vn;Gh)?vOe7Ryx#yosF8g7?Gpg9B9Mb zxipe_=+ z?0!`SI#xH~dAM|ftU|-)rx5|@r7G3JD*!tm^wD3A;wtzaX0#64QG%OYat-8F|Ju>@ z>J&an5yPPl6;?Uh3C38K%E}nJ*{~8bWvqVs_tHL(U?r779d<8Va6s?rvThGIl0-Ru zOL+y|YwLLedRURdaZ2JdHowujW{fOeE5u9o}9Y(6I9RYx-}o z&ztJS+UAV}Y5(G%@Q}N<+W6tJ z94l|Bm7qs<-w-L`m`buhf}Z++L*{VP)-S4E3$fq8HfF|yv<@SUC26kZ!RyCg=OjMw ztp10?iv(FBze&+6LqAX_az?dw2lR;1JnRxwb - - - - Welcome to PHPlot - - - - -

Welcome to PHPlot 5.0

- - - - - -
-

- PHPlot is a PHP4 class for on the fly graphs - generation. It was started by - Afan Ottenheimer in 2000 as an - opensource project, and is now co-developed with - Miguel de Benito thanks to - sourceforge. It is distributed under - the terms of the - GNU General Public License, - and the PHP license. You can always - obtain the latest source from the - sourceforge project page, please do also check CVS, we try to have it always working - there. -

-

For further information, please check - our website -

-
- - - -
Example line graph with labels, legend - and left and lower axis titles.
-
- - -

Features

- - - - - -
- - - -
Example 3d pie chart.
-
-

- Here goes a (incomplete) list, in no particular order.: -

    -
  • Several different graph types: lines, bars, stacked bars, points, areas, pie, squared.
  • -
  • text-data, data only and data-error data types accepted.
  • -
  • 3D shading for pie and bar graphs.
  • -
  • Different line types: solid and wholly customizable dashed ones.
  • -
  • Can draw error margins along y-axis when supplied in data.
  • -
  • Highly customizable canvas: titles, labels and ticks can be - placed anywhere, with any color and everything gets automagically placed without overlapping.
  • -
  • Vertical and horizontal grids.
  • -
  • Legend. Different types on the works.
  • -
  • TrueType font support.
  • -
  • Linear and logaritmic scales.
  • -
  • Several output formats: jpeg, png, gif, wbmp (those supported by your GD)
  • -
- And here a short to-do/whishlist: -
    -
  • Horizontal bars.
  • -
  • Simple isometric 3D plots.
  • -
  • Automatic placement of several plots in one image.
  • -
  • Better or automatic management of many drawing options (ticks, labels, etc.)
  • -
  • Subclassing for optimisation: move features into subclasses for optional use - and leave a fast core.
  • -
-

-
- - -

Requirements

-

-We are not sure about exact requirements, but at least PHP 4.2.0 and -GD Lib 2 are necessary. Feedback is welcome. -

- - -

Quick start

-

You can rush for a quick start here.

- - -

Tests and examples

-

-These examples make use of many, but not all, of the features present in PHPlot. -The best one is the example-o-matic, where you can alter many parameters. Please proceed -to any of them: -

-

- - -

Internals

-

-Description of the use and inner workings of PHPlot: -

-

- -

The Authors

-

-

-

- -

$Id$

- - diff --git a/gui/bacula-web/external_packages/phplot/doc/internal_functions.html b/gui/bacula-web/external_packages/phplot/doc/internal_functions.html deleted file mode 100644 index 90895c0d7c..0000000000 --- a/gui/bacula-web/external_packages/phplot/doc/internal_functions.html +++ /dev/null @@ -1,269 +0,0 @@ - - -PHPlot Internal Functions - - - -

PHPlot Internal Functions

- -

DrawArea() -
Internal Function: Draw an Area Chart. $data[] must already be defined as data-data -using $data[] = array("title",x,y1,y2,...) Points are placed at (x,y1), (x,y2), ... -one x-point per $data[] element.
Colors and border colors for each of the y1, y2, ... is set -by SetDataColors($which_data,$which_border) -This function is called if -you use SetPlotType("area") and SetDataType("data-data") - - -

DrawAreaSeries() -
Internal Function: Draw an Area Chart. $data[] must already be defined as $data[] = -array("title",y1,y2,y3,...) The x axis is divided evenly, one x-point per -$data[] element.
Colors and border colors for each of the y1, y2, ... is set -by SetDataColors($which_data,$which_border) -This function is called if -you use SetPlotType("area") and SetDataType("text-data") - -

DrawBackground() -
Internal Function: Draw the full background of the image on image pointer. Should be used -BEFORE other Draw functions unless you really want to overwrite what you've done -before. See SetBackgroundColor and SetImageArea for setting -parameters. - -

DrawBars() -
Internal Function: Draw vertical bars. $data[] must already be defined as $data[] = -array("title",y1,y2,y3,...) The x axis is divided evenly, one x-point per -$data[] element.
Colors and border colors for each of the y1, y2, ... is set -by SetDataColors($which_data,$which_border) -This function is called if -you use SetPlotType("bars") and SetDataType("text-data") - -

DrawDashedLine($x1,$y1,$x2,$y2,$dashed, $space, $color) -
Internal Function: Called instead of ImageLine when line_style = 'dashed' -line_style is set by SetLineStyles All variables passed to DrawDashedLine -are in pixel coordinates. - -

DrawDots() -
Internal Function: Draw Dots as defined by SetPointType and data in x,y format. $data[] -must already be defined as $data[] = array("title",x,y1,y2,...) Where the point -occurs depends on both the X and Y values.
Colors and border colors for each -y1, y2, , ... is set by SetDataColors($which_data,$which_border) -This function is called if -you use SetPlotType("dots") and SetDataType("data-data") - -

DrawDotSeries() -
Internal Function: Draw Dots as defined by SetPointType and data in text-data format. -$data[] must already be defined as $data[] = array("title",y1,y2,...) -The x axis is divided evenly, one x-point per $data[] element.
-Colors and border colors -for each y1, y2, , ... is set by SetDataColors($which_data,$which_border) -This function is called if -you use SetPlotType("dots") and SetDataType("text-data") - -

DrawDotsError() -
Internal Function: Draw Dots and Error Bars as defined by SetPointType and -data in data-data-error format. $data[] must already be defined -as $data[] = array("label",x,y,error+,error-) -Colors and border colors -for each y1, y2, , ... is set by SetDataColors($which_data,$which_border) -The shape of the error bars is defined by SetErrorBarShape($which_ebs) -and SetErrorBarSize($which_ebs)
-This function is called if -you use SetPlotType("dots") and SetDataType("data-data-error") - -

DrawError($error_message) -
Internal Function: Draw an internal error message printed on the Image directly. -This way - if there is an error and the output is an image you -don't get the PHP "Header already sent" messages. - -

DrawGraph() -
Internal Function: This is th last function called after you have set up -all the parameters of the graph see Set.... functions below. - -

DrawHorizontalTicks() -
Internal Function: Draw the ticks on the X axis. -The distance between ticks can be defined in a number of ways. Note: -that for text-data data its best to let the program handle the -distance between ticks - the default is 1. (Text-data data is data where the data is evenly spaced over -the x axis, no x-value is entered) - -

DrawImageBorder() -
Internal Function: Draw the border around the entire image. Currently this -generates the raised border look around the image. - -

DrawLabels() -
Internal Function: Draw the Title, X-axis label, and the Y-axis label. This -really just calls DrawTitle, DrawXLabel, and DrawYLabel. - -

DrawLegend(x,y,type) -
Internal Function: Draw the Legend. See SetLegendPixels() - -

DrawLines() -
Internal Function: Draw lines in data-data format. -$data[] must already be defined -as $data[] = array("label",x,y1,y2,....) -Colors and border colors -for each y1, y2, , ... is set by SetDataColors($which_data,$which_border) -This function is called if -you use SetPlotType("lines") and SetDataType("data-data") -
- -

DrawLineSeries() -
Internal Function: Draw lines in text-data format. -$data[] must already be defined -as $data[] = array("label",y1,y2,y3,....) -The x axis is divided evenly, one x-point per -$data[] element.
Colors and border colors for each of the y1, y2, ... is set -by SetDataColors($which_data,$which_border) -This function is called if -you use SetPlotType("lines") and SetDataType("text-data") - -

DrawLinesError() -
Internal Function: Lines and Error Bars as defined by SetPointType and -data in data-data-error format. $data[] must already be defined -as $data[] = array("label",x,y,error+,error-) -Colors and border colors -for each y1, y2, , ... is set by SetDataColors($which_data,$which_border) -The shape of the error bars is defined by SetErrorBarShape($which_ebs) -and SetErrorBarSize($which_ebs) -This function is called if -you use SetPlotType("lines") and SetDataType("data-data-error") - -

DrawPieChart() -
Internal Function: Draw pie chart. Data is in text-data format. $data[] must -already been defined as $data[] = array("label",y1,y2,y3,...)
-Colors and border colors for each of the y1, y2, ... is set -by SetDataColors($which_data,$which_border) -This function is called if -you use SetPlotType("pie") and SetDataType("text-data") - -

DrawPlotAreaBackground() -
Internal Function: Draw the Background - in the color as defined by X -and in an area as defined by X - -

DrawPlotBorder() -
Internal Function: Draw the border around the -plot area - (Note: this is NOT the full image). This draws -the rectangle as well as calling the functions -DrawVerticalTicks() and DrawXAxis() - -

DrawTitle() -
Internal Function: This will draw the title as set by -SetTitle and -SetTitleColor. This is also affected by SetUseTTF -to show how the title appears. - - -

DrawVerticalTicks() -
Internal Function: Called by DrawPlotBorder. The spacing between the ticks -is automatically set unless you have previously set the increment -by - SetNumVertTicks($which_nt) -or - SetVertTickIncrements but not both. - -

DrawXAxis() -
Internal Function: Draw the horizontal X axis at the world position X=0. - -

DrawXLabel() -
Internal Function: Called from DrawLabels. Draws the label of the X-Axis. - -

DrawYErrorBar($x_world,$y_world,$error_height,$error_bar_type,$color) -
Internal Function: This is similar to DrawDot, but it draws error bars. -Draw one set of error bars at $x_world and $y_world where the -data is defined in world coordinates (not pixel coordinates). - -

DrawYLabel() -
Internal Function: Called from DrawLabels. Draws the label of the Y-Axis. Its -position is defined by the size of the font. Typically there is a -two character height width around the plot area for drawing the -labels. - -

FindDataLimits() -
Internal Function: This must be called AFTER SetDataType. It finds -the maxima and minima for setting the scaling to be -able to convert from world to pixel coordinates. - -

InitImage() -
Internal Function: An internal function called to set the -image pointer for GD. - -

PrintError($error_message) -
Internal Function: Prints the given error message to stdout. The function -is used for fatal errors that do not allow for creating an image. - -

PrintImage() -
Internal Function: An internal function which prints the image using the PHP -functions Header("Content-type:...") and ImageGIF(), ImageJPEG(), -or ImagePNG() depending on what the setting is of $this->file_format. -This is set by SetFileFormat() - -

SetColor($color_asked) -
Internal Function: Translate from $color_asked to the index -name color used in GD. -$color_asked can be either a name like "black" or an rgb color array -array(int,int,int).
- -

SetDefaultColors() -
Internal Function: Sets the default colors when first defining an image. -Overridden by functions like SetPlotBgColor, - SetBackgroundColor, - SetTextColor, - SetGridColor, - SetLightGridColor, - SetTickColor, and - SetTitleColor - -

SetDrawYGrid($which_dyg) -
Internal Function: 1 = Draw the Y grid. Anything else, don't draw the Y grid. - -

SetEqualXCoord() -
Internal Function: For text-data graphs set the spacing between -data points on the x-axis. - -

SetMargins() -
Internal Function: When the image is first created - set the margins - as the full area of the view surface (or panel), - less a margin of 4 character heights all round for labelling. - It thus depends on the current character size, set by SetCharacterHeight(). - -

SetTranslation() -
Internal Function: Calculate the scale and origin for translating from -world to pixel coordinates. This is an internal function, -not one that you'd use normally, but if you are going to -use it make sure you do it after SetDataType. - -

SetXLabelHeight() -
Internal Function: This is an internal function that sets the -height of the X labels based on the maximum string -length of the X data. It is used for positioning -where the labels go relative to the x-axis. - - -

SetYLabelWidth() -
Internal Function: Set the -width of the Y Label based on the maximum string -length of the Y data. It is used for positioning -where the labels go relative to the y-axis. - - -

TTFBBoxSize($size, $angle, $font, $string) -
Internal Function: Calculate the size of the box which encloses the -text string $string using font $font, -angle $angle and size $size. This is -an internal function which is not called unless use_ttf is -set to 1. - -

xtr($x_world) -
Internal Function: Translate into x-pixels coordinates from x world coordinates. - -

ytr($y_world) -
Internal Function: Translate into y-pixels coordinates from y world coordinates. - - - - - -
- - - diff --git a/gui/bacula-web/external_packages/phplot/doc/quickstart.html b/gui/bacula-web/external_packages/phplot/doc/quickstart.html deleted file mode 100644 index 6f738c6c9c..0000000000 --- a/gui/bacula-web/external_packages/phplot/doc/quickstart.html +++ /dev/null @@ -1,455 +0,0 @@ - - - - - PHPLOT Quick Start and Examples - - - - - - - - - - - - - - -

PHPlot Quick Start and Examples

- -

Afan Ottenheimer, January 7, 2001

-

Miguel de Benito, January 21, 2004

-

Contents

- - -

Introduction

- -

Many web sites need to create real-time or dynamic charts and graphs. -from live data sets. Many users have found PHP a great way for this dynamic -creation of images using the GD library and there have been several -good articles describing this [] [] []. The advantage of using the server -to create an image (server side scripting) is that one does not have to -worry about browser compatibility or client operating system compatibility issues. -The PHP image generating library uses the GD library to create elementary -shapes (elipse, line, rectangle, ...). -PHPlot is a graphics library which provides a means by which you can have your -(PHP enabled) web server create and manipulate graphs as objects and -display the completed graph as an image. Data sets passed to PHPlot use a very -convenient way for database driven sites, in rows with y coordinate data. -

- -

First, lets discuss how PHPlot works in general with some -terminology. A PHPlot image can consist of several graphs , -each graph consisting of several elements. -You define an object (e.g. a variable like $graph), -select the properties of the element that compose the graph and "Draw" -what you want into the object. Tipically by selecting the plot type with -SetPlotType and at the end calling DrawGraph. You -can also directly invoke PrintImage, which either inserts the image -into the data streaming to the client or writes it to disk. -

-

In PHPlot there are World coordinates, which are the XY coordinates -relative to the axis origin, in the units of the data set; and -device (pixel) coordinates which in GD are relative to the -origin at the upper left side of the image. -

-

You can think of the "Draw" functions as shaping the -image object and the "Print" function as the method of -finally creating the digital image. PHPlot is smart enough that if -you only have one graph on an image, then the "Print" is -done for you automatically. If you do have multiple graphs per image -then you'll need to use both the "Draw" and "Print" -functions. We'll talk about that a bit later. -

-

Since PHP is a server scripted language you have several options -for how you can "Print" the image. You can:

-
    -
  1. Write the image as a file on the server. (You specify a file - name and can specify caching as well)
  2. -
  3. Have the raw data stream out within an HTML file, as <IMG - SRC="my_PHPlot_code.php">
  4. -
  5. Precede the raw data with html image headers and call the - script directly (showing up as an image) e.g. - http://somewhere/my_PHPlot_code2.php .
  6. -
-

This document explains how to create plots using PHPlot from a -PHP script. Information on PHP can be found at www.php.net. -Information about the GD library which PHP uses to create images can -be found at www.boutell.com. -More information about PHPlot can be found at www.PHPlot.com.

- -

Creating the Object

- -

You create a PHPlot object by first including the code to be used -and then defining the variable:

-
-
<?php
-include('./phplot.php');  // here we include the PHPlot code 
-$graph =& new PHPlot();   // here we define the variable graph
-
-//Rest of code goes below
-?>
-
- -

The above code assigns the PHPlot object to the variable $graph. Please, -use that '&' to create a reference, it is needed by phplot's approximation of a destructor, -a facility unavailable in PHP4.

- -

Back to top

- - -

Real World Examples

-

Case 1: A simple graph

- -

We will start with a simple line graph.

-
-
<?php
-//Include the code
-include('./PHPlot.php');
-
-//Define the object
-$graph =& new PHPlot();
-
-//Define some data
-$example_data = array(
-     array('a',3),
-     array('b',5),
-     array('c',7),
-     array('d',8),
-     array('e',2),
-     array('f',6),
-     array('g',7)
-);
-$graph->SetDataValues($example_data);
-
-//Draw it
-$graph->DrawGraph(); // remember, since in this example we have one graph, PHPlot
-                        // does the PrintImage part for you
-?>
-
- -

And that's it! What we get is the following graph:

- -
- figure 1 -
Figure 1 -
- -

That's a great start, but now we'd like to specify the width and height -of the image.

- - -

Case 1a: Different Size Images and Titles

-

-Lets say we want it to have a width of 300 and a height of 250 pixels. -So instead of having the line

- $graph =& new PHPlot();

-we replace it with

- $graph =& new PHPlot(300,250);

-and you have specified the size in pixels of the image to be created. -A couple of things to note: -

-
    -
  • The default is not to use TTF fonts.
  • -
  • Since there was only one graph on the image we didn't have to - specify PrintImage, DrawGraph took care of it for us. -
  • -
  • - We did not specify the data type. If you do not specify the data - type PHPlot assumes text-data. -
  • -
  • - We did not specify the file type (gif, png, jpg, ...) . - PHPlot 5.0 assumes PNG image formats. -
  • -
  • - The data is passed in as an array of arrays. This may seem awkward - now, but as we add functionality this will be beneficial. -
  • -
-

Ok, now we're ready to add some customization to the plot. Let's change -the size, the title and the x/y axis labels. All we need to do is modify -the variable $graph before printing the image. We achieve this with: -

-
-
<?php
-include ('./phplot.php');
-
-//create an graph object 300x250 pixels
-$graph =& new PHPlot(300,250);
-//Set titles
-$graph->SetTitle("Title\n\rSubtitle");
-$graph->SetXTitle('X data');
-$graph->SetYTitle('Y data');
-
-//...rest of the code
-
-
-?>
-
-
-
- Figure 2 -
- -

Note that in order for the "\n" and "\r " to be interpreted as -new line/new return characters for SetTitle you have to -enclose the string in double quotes.

- -

Case 2: Multiple Lines per Graph

-

Lets say we want to plot not just one -dataset but several y values for each x position. With PHPlot it is -easy to specify the multiple data lines by just passing in all the Y -values for a given X value at once. So instead of array('label', y) -we specify array('label', y1, y2, y3, -...) This is very convenient when working with rows of data from databases. -
-Now our data will have three Y values for each position on the X axis -

-
-
<?php
-//Include the code
-include('./phplot.php');
-
-//Define the object
-$graph =& new PHPlot(300,250);
-
-//Set titles
-$graph->SetTitle("Title\n\rSubtitle");
-$graph->SetXTitle('X data');
-$graph->SetYTitle('Y data');
-
-
-//Define some data
-$example_data = array(
-     array('a',3,4,2),
-     array('b',5,'',1),  // here we have a missing data point, that's ok
-     array('c',7,2,6),
-     array('d',8,1,4),
-     array('e',2,4,6),
-     array('f',6,4,5),
-     array('g',7,2,3)
-);
-$graph->SetDataValues($example_data);
-
-//Draw it
-$graph->DrawGraph();
-?>
-
-

Which gives us:

-
- -
Figure 3 -
- -

Notice that each set of Y data gets a different color. -Also the missing data point is skipped, this behaviour can be adjusted with -SetDrawBrokenLines(TRUE); -

-

-This gives you the basics of how to create a graph in PHPlot. -A nice start, but now we'd like to add some customization, namely different -fonts, margins and types of graphs. -

-

Back to top

- - -

Customization

-

Valid types of plots (as of PHPlot 5.0): -

    -
  • bars (with optional shadows)
  • -
  • lines
  • -
  • linepoints (a faster way of plotting when - you want both points and lines)
  • -
  • area
  • -
  • points (lots of point types here)
  • -
  • pie (2D or 3D)
  • -
  • thinbarline (sometimes also called impulse)
  • -
  • error bar (which can also be used for stock market data graphs)
  • -
  • squared (for binary data)
  • -
-

-

You specify which type with the SetPlotType function. -We'll look at that function with bars and lines in the next example when we look at -multiple graphs per image. -

-

As we discussed before, there are several ways we can manipulate -the look/feel of the graph object. Almost every parameter of ticks, grids and data labels -can be adjusted via (among many others): -

    -
  • SetXTickPos()
  • -
  • SetYTickPos()
  • -
  • SetXTickLength()
  • -
  • SetYTickLength()
  • -
  • SetXTickCrossing()
  • -
  • SetYTickCrossing()
  • -
  • SetXTickIncrement()
  • -
  • SetYTickIncrement()
  • -
  • SetNumXTicks()
  • -
  • SetNumYticks()
  • -
  • SetSkipTopTick()
  • -
  • SetSkipBottomTick()
  • - -
  • SetDrawXGrid()
  • -
  • SetDrawYGrid()
  • -
  • SetDrawDashedGrid()
  • -
  • SetDrawXDataLabelLines()
  • -
  • SetDrawYDataLabelLines() (not yet implemented)
  • -
  • SetXDataLabelPos()
  • -
  • SetYDataLabelPos()
  • -
  • SetXLabelAngle()
  • -
  • SetYLabelAngle()
  • -
  • SetXLabelType()
  • -
  • SetYLabelType()
  • -
-As we go further we will introduce some of these features of PHPlot. -For more specialized examples, please go back to the index and -look in the examples section. -

- -

Back to top

- -

Case 3: Multiple Graphs per Image

- -

To create an image with several separate graphs -on it is a straightforward process. As in the previous examples we -first have to create an object (e.g. variable) but now we tell it to -not print the image at the same time as the draw command. Now -we want it to wait for the explicit PrintImage function call. -To tell PHPlot this is the way we want to work, we use the -SetPrintImage function. -SetPrintImage(TRUE) is the default, and tells to draw the image -when DrawGraph is called. To turn this -off we use SetPrintImage(FALSE).

-

Now we will draw several images entirely within one object. That -means that if we set a value for one graph, there will be a couple of -other commands we will need. -

-

To specify in pixels the placement of each graph we use -SetNewPlotAreaPixels. The format is -SetNewPlotAreaPixels(upper_left_x, upper_left_y, lower_right_x, -lower_right_y) . Again we are using the GD coordinates where 0,0 -is the upper left corner of the image. -

-

In more detail:

-
-
<?php
-include('./PHPlot.php');  // here we include the PHPlot code
-$graph =& new PHPlot(400,250);   // here we define the variable $graph
-$graph->SetPrintImage(0); //Don't draw the image yet
-
-//....Data and Values for first graph here .....
-
-$graph->SetNewPlotAreaPixels(70,10,375,100);  // where to place it
-
-$graph->DrawGraph();   //Draw the first graph to the image.
-
-//....Data and Values for second graph here .....
-
-$graph->SetNewPlotAreaPixels(70,120,375,220); //where to place graph 2
-$graph->DrawGraph();  //Draw the second graph to the image
-
-//Print the image with both graphs
-$graph->PrintImage();
-?>
-
- -

Lets now create an image with 2 graphs on it with some example data.

- -
-
<?php
-//Include the code
-include('./phplot.php');
-
-//Define the object
-$graph =& new PHPlot(400,250);
-
-$graph->SetPrintImage(0); //Don't draw the image until specified explicitly
-
-$example_data = array(
-     array('a',3),
-     array('b',5),
-     array('c',7),
-     array('d',8),
-     array('e',2),
-     array('f',6),
-     array('g',7)
-);
-
-$graph->SetDataType("text-data");  //Must be called before SetDataValues
-
-$graph->SetDataValues($example_data);
-$graph->SetYTickIncrement(2);  //a smaller graph now - so we set a new tick increment
-
-$graph->SetXLabelAngle(90);
-$graph->SetXTitle("");
-$graph->SetYTitle("Price");
-$graph->SetPlotType("lines");
-$graph->SetLineWidth(1);
-
-$graph->SetNewPlotAreaPixels(70,10,375,100);  // where do we want the graph to go
-$graph->DrawGraph(); // remember, since we said not to draw yet, PHPlot
-                     // still needs a PrintImage command to write an image.
-
-
-//Now do the second chart on the same image
-unset($example_data);  //we are re-using $example_data (to save memory), but you don't have to
-$example_data = array(
-     array('a',30,40,20),
-     array('b',50,'',10),  // here we have a missing data point, that's ok
-     array('c',70,20,60),
-     array('d',80,10,40),
-     array('e',20,40,60),
-     array('f',60,40,50),
-     array('g',70,20,30)
-);
-
-$graph->SetDataType("text-data");  //Must be called before SetDataValues
-
-$graph->SetDataValues($example_data);
-
-$graph->SetXTitle("");
-$graph->SetYTitle("Verbal Cues");
-$graph->SetYTickIncrement(10);
-$graph->SetPlotType("bars");
-$graph->SetXLabelAngle(0);  //have to re-set as defined above
-
-$graph->SetNewPlotAreaPixels(70,120,375,220);
-$graph->SetPlotAreaWorld(0,0,7,80);
-$graph->DrawGraph();
-
-//Print the image
-$graph->PrintImage();
-?>
-
- -



Which gives us:

- -
-
- Figure 4
-
- -

-You must remember that world Coordinates are the XY coordinates relative to the -axis origin that can be drawn. Not the device (pixel) coordinates -which in GD are relative to the origin at the upper left -side of the image. -

- - -
$Id$
- - - diff --git a/gui/bacula-web/external_packages/phplot/doc/schema.html b/gui/bacula-web/external_packages/phplot/doc/schema.html deleted file mode 100644 index 458ede2772..0000000000 --- a/gui/bacula-web/external_packages/phplot/doc/schema.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - PHPlot schema - - - - - - -

The Drawing

-

-The drawing you can see here is an attempt to illustrate the positioning -of elements on the canvas of PHPlot graphs. I'm not specially good at it -so please don't complain. I (Miguel) -hope it will help somebody as it did with me when I first began browsing -through the 3000 lines of code Afan had written. -

-

If you are curious, for the drawing I used -Dia a gtk+ diagram creation -sofware which I find easy and suited for my purposes. -

schema
-

- -

The words

-

Creating a graph with PHPlot is easy, you just create an instance of -the class, set up a few options, push in the data and smile at your -new cute graphic. However here we'll proceed a little more step by step so -to show you how to get the most of PHPlot. Please go to -quickstart. -

- -

$Id$

- - diff --git a/gui/bacula-web/external_packages/phplot/doc/style.css b/gui/bacula-web/external_packages/phplot/doc/style.css deleted file mode 100644 index ff700e0f5e..0000000000 --- a/gui/bacula-web/external_packages/phplot/doc/style.css +++ /dev/null @@ -1,42 +0,0 @@ -/* $Id$ - * Style sheet for PHPlot - */ - - -.foot { - text-align:right; - font-style:italic; - font-size:smaller; - width:100%; - background:#CCCCCC; - color:#000000; - } - - -.nav { - text-align:center; - color:#DDDDDD; - background:#FFFFFF; - font-size:7px; - } - -.imgfoot { text-align:center; font-size:small; font-style:italic; } -.hdr { text-align:center; background: #DDDDDD; color:#000000; } -.bighdr { text-align:center; font-weight: bold; } - -h2 { border-bottom: 1px dashed; } -h3 { border-bottom: 1px dotted; margin-left:1em;} - -img { padding: 0.5em; } - -.box { - background-color: #cccccc; - color: #000000; - border:1px solid; - width:75%; - margin:2em; - font-size:smaller; - } - -pre { font-family: monospace, "white-space" } - diff --git a/gui/bacula-web/external_packages/phplot/doc/user_functions.html b/gui/bacula-web/external_packages/phplot/doc/user_functions.html deleted file mode 100644 index 9b529019f3..0000000000 --- a/gui/bacula-web/external_packages/phplot/doc/user_functions.html +++ /dev/null @@ -1,316 +0,0 @@ - - -PHPlot User Functions - - - -

PHPlot User Functions

- - - - -
- -

Important functions

- -

SetDataType($which_dt) -
User Function: PHPLOT can accept data in a number of different -formats. One main difference between PHPLOT and PGPLOT -is that the x-y or x-y-error data should be passed in -with the data grouped together in an array. -

-Asside: Why the author chose this data format: In PGPLOT -you would have the X-values in one array and the Y-values -in a second. This would sometimes lead to really strange -graphs if one array was accidentally one data element -short. Plus most of the data the author was using came in -from a database using a _get_row or _get_array (in php) -and one can just pass it straight in to PHPLOT.

- -Colors and border colors are set by SetDataColors. Why -not have colors as part of the same array? Because most -data applications are used to putting out raw data and not -raw data + color information.

- -So in PHPLOT the datalabel,x-value,y-value and error are -grouped together as a value array. Then the -entire set of points to be plotted is passed in as a data array -E.g. Data_array = array(value_array_1,value_array_2,....)

-See below for examples of the various data types:
- -

  • text-data: Data is displayed at equal spacing along the x-axis. Data -is passed in as a data array of value arrays. Each element of the data -array is a position on the x-axis. The first element of the value array is -the label for that x-axis position, every subsequent element of the value -array is a y-value. -Example data
    -
    -$data = array(
    -	array("label 1",1.1,2,3,4),
    -	array("label 2",2,3,4,5),
    -	array("label 3",5,6,7,8),
    -	array("label 4",10,12,13,14)
    -);
    -
    -Which will display data points at -(1,1.1), (1,2), (1,3), (1,4), (2,2), (2,3)....
    - -
  • -
  • data-data: - X-Y data is passed in like text-data except -that the second element of the value array is the position along the -x axis of the data point(s). One data element would be $data[] = (title,x,y1,y2,y3,y4,...) -or -
    -$data = array(
    -	array("label 1",1.1,2,3,4),
    -	array("label 2",2,3,4,5),
    -	array("label 3",5,6,7,8),
    -	array("label 4",10,12,13,14)
    -);
    -
    -Notice that this is the same as in the previous example except that -the x,y data points are at (1.1,2), (1.1,3), (1.1,4), (2,3)... -
  • -
  • data-data-error: -Again X-Y data is passed in as an array with each value -array being (data_label,x_position,y_position,error_plus,error_minus) -
  • - -

    SetDataValues($which_dv) -
    User Function: Passes the raw data values into the class variable -$this->data_values. This function needs to be called before any -image can be drawn. - -

    SetPlotType($which_pt) -
    User Function: Can be: bars, lines, linepoints, area, points, and pie - -

    SetErrorBarLineWidth($width) -
    Width of the Error Bars in Pixels. If not set then -uses "line_width" to set the width of the error_bar lines. - -

    SetFileFormat($which_file_format) -
    User Function: Set the format of the output graph. Supported formats -are GIF, JPEG, and PNG. You can only use those formats -that are supported by your version of GD. For example, -if you use GD-1.8.3 you can not use GIF images. If you -use GD-1.2 you can not use PNG or JPEG images. - -

    SetUseTTF($which_ttf) -
    User Function: Call this as SetUseTTF(1) when you have TTF compiled into PHP -otherwise call this as SetUseTTF(0) - - -
    - -

    Appearance functions

    - - -

    SetErrorBarShape($which_ebs) -
    User Function: Can be "tee" or "line." If it is tee, then -the half-width of the tee is set by SetErrorBarSize - -

    SetErrorBarSize($which_ebs) -
    User Function: Size in pixels of the Tee shape of the error bar. - -

    SetHorizTickIncrement($which_ti) -
    User Function: Set where to place the X-tick marks. - -

    SetNumHorizTicks($which_nt) -
    User Function: Use this or SetHorizTickIncrements but not both. - -

    SetNumVertTicks($which_nt) -
    User Function: Use this or SetVertTickIncrements but not both. - -

    SetPlotAreaPixels($x1,$y1,$x2,$y2) -
    User Function: You can use this to set the actual size in -pixels of the plot area on the image. - -

    SetPointShape($which_pt) -
    User Function: Can be: rect,circle,diamond,triangle,dot,line,halfline - -

    SetPointSize($which_ps) -
    User Function: Set the width of the displayed data point for -plot_type's that have data points. E.g. dots, linepoints -This is an integer. For diamonds, values that are even -make the diamond look better. - -

    SetPrecisionX($which_prec) -
    User Function: Set the precision of the data written to the X axis. -$which_prec is an integer which represents the number of digits -displayed to the right of the decimal. This uses the number_format -command in PHP. - -

    SetPrecisionY($which_prec) -
    User Function: Set the precision of the data written to the Y axis. -$which_prec is an integer which represents the number of digits -displayed to the right of the decimal. This uses the number_format -command in PHP. - -

    SetShading($which_s) -
    User Function: Set the length of the shadows for shading bar charts -The color used is the LightGridColor See SetLightGridColor.
    - -

    SetTickLength($which_tl) -
    User Function: Set the length of the tick in pixels for the x axis and y axis. -$which_color can be either a name like "black" or an rgb color array -array(int,int,int).
    - - -

    SetTitle($title) -
    User Function: Set the title of the graph. Printed at the top -middle of the graph. - -

    SetHorizTickIncrement($which_ti) -
    User Function: Set the distance between tick marks on the X axis. $which_ti -is in world coordinates. - -

    SetVertTickIncrement($which_ti) -
    User Function: Set the distance between tick marks on the Y axis. $which_ti -is in world coordinates. - -

    SetXDatalabelMaxlength($which_xdlm) -
    User Function: Sets the maximum length of the datalabels on the x-axis. -This adjusts the margins if the angle of the labels is not 0. - -

    - -

    SetXGridLabelType($which_xtf) -
    User Function: Can be "time", "title", "none", "default" or "data".
    -time - label is set by the the php command strftime()
    -title - label is treated as text, the first element of the data array.
    -data - label is formateed using php command number_format
    -none - no labelss are printed.
    -default - prints as it is entered.
    -

    - - -

    SetXScaleType($which_xct) -
    Can be "log" or "linear". - -

    SetXTimeFormat($which_xtf) -
    User Function: Used for x_grid_label_type="time". -For the format see the php manual for strftime(). It assumes the x-data values are unix timestamps, and displays them according to the passed format string. -

    Example: If x values are seconds offset from the beginning of the day. This coresponds to unix timestamps on January 1, 1970, so all I had to do was $graph->SetXGridLabelType("%H:%M") to display the time properly. -

    -The php strtotime() function also comes in handy turning dates into timestamps, especially for parameters to SetPlotAreaWorld(). -

    -Example:
    -$graph->SetPlotAreaWorld(strtotime("October 1"), 0,strtotime("December 15"),10);
    -$graph->SetXGridLabelType("time") ;
    -$graph->SetXTimeFormat("%b %d") ;
    - -

    SetXLabel($xlbl) -
    User Function: Set the label for the X axis. - -

    SetYLabel($ylbl) -
    User Function: Set the label for the Y axis. - -

    SetYScaleType($which_xct) -
    Can be "log" or "linear". - - -
    - -

    Color functions

    - -

    SetBackgroundColor($which_color) -
    User Function: Set the color of the background of the entire image. -$which_color can be either a name like "black" or an rgb color array -array(int,int,int).
    It defaults to array(222,222,222) if -not defined.
    - -

    SetGridColor ($which_color) -
    User Function: Set the color of the grid. Defaults to "black" -$which_color can be either a name like "black" or an rgb color array -array(int,int,int).
    - -

    SetLegend($which_legend) -
    $which_legend is an array of text for display in a small box -on the image. If you do not set the position with SetLegendPixels() -then it puts it in the upper right hand side. - -

    SetLegendPixels($which_x,$which_y,$which_type) -
    Pick the upper left corner of the legend box with -$which_x and $which_y in pixels. $which_type is reserved -for future use. - -

    SetLegendWorld($which_x,$which_y,$which_type) -
    Untested and documentation not written. Have Fun! - -

    SetLightGridColor ($which_color) -
    User Function: There are two grid colors, this sets the -light grid color. -$which_color can be either a name like "black" or an rgb color array -array(int,int,int).
    It defaults to array(222,222,222) if -not defined.
    - -

    SetLineWidth($which_lt) -
    User Function: Set the width of lines in pixels for graphs that use -lines (linepoints and lines). Affects the size of the -error bar lines as well. - -

    SetLineStyles($which_sls) -
    User Function: Set style of the line to be printed. -This is an array. Currently only 'dashed' and 'solid' are -supported. - -

    SetPlotBgColor($which_color) -
    User Function: Set the Background color of the area on which -the plot is defined. Called from PlotAreaBackground
    -$which_color can be either a name like "black" or an rgb color array -array(int,int,int).
    It defaults to array(222,222,222) if -not defined. - -

    SetTextColor ($which_color) -
    User Function: Set the color of text written. It defaults to black if not called. -You can call this function multiple times - each time it changes the -color of text written. -$which_color can be either a name like "black" or an rgb color array -array(int,int,int).
    - -

    SetTickColor ($which_color) -
    User Function: Set the color of the ticks on the axes -$which_color can be either a name like "black" or an rgb color array -array(int,int,int).
    - -

    SetTitleColor($which_color) -
    User Function: Set the color of the title. -$which_color can be either a name like "black" or an rgb color array -array(int,int,int).
    - -
    - -

    Data manipulation functions

    - -

    These functions only are availabe in the class PHPlot_data that extends PHPlot. -Since all functions of that section do calculations on the data, it is neccessary -that data is supplied to the class by the SetDataValues() function before calling -any of the functions.

    - -

    DoScaleData($even, $show_in_legend) -
    User Function: Scales the data so that graphs with widely different amplitudes -can be plotted into one image. If $show_in_legend is true, the amplification factor -that is applied to each for the datasets is appended to the legend of the graph. If -$even is true, the function multiplies only by 10^x,2*10^x or 5*10^x.
    - -

    DoMovingAverage($datarow, $interval, $show_in_legend) -
    User Function: Computes a moving average over an amount of $interval units -on the data row that is indexed by $datarow. If $show_in_legend is true, a notice -that a data row is averaged and the length of the interval are appended to the legend. -
    - -
    - -

    not implemented

    - -

    SetCharacterHeight() -
    User Function: Not yet implemented - - - diff --git a/gui/bacula-web/external_packages/phplot/doc/user_internal_functions.html b/gui/bacula-web/external_packages/phplot/doc/user_internal_functions.html deleted file mode 100644 index bb2346322d..0000000000 --- a/gui/bacula-web/external_packages/phplot/doc/user_internal_functions.html +++ /dev/null @@ -1,62 +0,0 @@ - - -PHPlot User / Internal Functions - - - -

    PHPlot User / Internal Functions

    - - -

    DrawDataLabel($lab,$x_world,$y_world) -
    User Function and Internal Function: Draw a label at the world coordinates of x_world and y_world. - - -

    DrawDot($x_world,$y_world,$dot_type,$color) -
    User Function and Internal Function: Draw one dot at $x_world and $y_world where the world -coordinates (not pixel coordinates). - - -

    DrawXDataLabel($xlab,$xpos) -
    User Function and Internal Function: Draw a data label on the x axis at world -position $xpos. The position below -the x axis is set based on the size of the font, and (if -using TTF) the maximum string length of the labels, and -the angle at which the labels are printed. - - -

    SetDataColors($which_data,$which_border) -
    If called with $which_data="" it defaults to - $which_data = array("blue","bisque",array(0,176,0)); - $which_border = array("black"); - - -

    SetErrorBarColors($which_data) -
    If not called then the colors are the same as the -colors of the data as set by SetDataColors() -otherwise it sets the colors of the error bars. - -

    SetLabels($xlbl,$ylbl,$title) -
    Internal Function and User Function: Set the text of the X, Y and Title labels. -If you want to just set the X-axis label you can use SetXLabel. - - -

    SetNewPlotAreaPixels($x1,$y1,$x2,$y2) -
    Reserved - not used yet. - - - -

    SetPlotAreaWorld($xmin,$ymin,$xmax,$ymax) -
    User Function and Internal Function: You do not have to call this function as the -program will set the plot area automatically based on -max values of X and Y.
    You can call this function -as SetPlotAreaWorld("","","","") and it will set the -plot area based on max/min values of data. - - - - - - - - - diff --git a/gui/bacula-web/external_packages/phplot/examples/benjamingothic.ttf b/gui/bacula-web/external_packages/phplot/examples/benjamingothic.ttf deleted file mode 100644 index 61058a6e21337af011930e5a27d7c9c29b38b78b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19093 zcmbun33yx8wJ*N+nKW3RtkJS8YqliInk>nZEX$HLS)S#2jN{melQ<#HJV8i82q6h+ zpiChRAyB4LO2GsQv`r};Xh~^HDYvCuN@+?dh0>Nwd6bg)f(j z=ivMg;Qi-jr*>|{4d}aYJ_F}l)=$l@e7ofMUl9_+_3;ZEH*DD|*(CwlMfbq*KWyB* za^vov6G?av*F!egC`87KkOsyJd$GOSEx;zGLO=&t#0q^2!Hl&|Bw6sD*XS?%Q5J;a3%x)h${A6ya>N7!f*2F zb0~!B&@hUk7^+7N$b}kF5+zU*3V`j@q9BsOSuEm^2#Jvd-jyI38bVIA43(luG=(Cl z3yq^O)Qz&J2lb*p)Pnla02)LSXenw%Z77X$sEG2YfR>;P8b!@$1XZ9)WI%D0g4r@6 zFRDRiq(T;Cg}KxrJE}qs*{By&Om;hjSAs z!;AUWi*LffrkR^LD;K9Clo7v=$MFE}!>!ne4OowLScBzQhNW1HIm}=R6vLwn=u`9w z`WStLK13g&zo2)~JLqln7J37{j(&k&K}XR6v=8k?yU-@I0a-;l_9gZ-dn>zv?PMut z3p2}fGVP3qann5g7X2c2u(=`a?26oON&xkHQD!eobFLTnG(K(z`{L4o^uLu6mQ8hmA z!Y{mh4%xGhW7?6m6f84S({r=~UM+J>&OT+CemtGNVPM1xKaV48HqOe){$*`_rHC)=^w&J zN|i3|^L_`04fdY15Fu}9o}+V9YbNuPS)aGrGDq99r!mFmw&(1*8|-jkjR?fswiNVZhI80b>Cx#cN@M&m=>D>2ys z2$jyj_8Wv0^{{=4kn$0PR0Y^R0tg0yHSk{BhfrBLY?H77&g)XJeTY!`4-nGBG5sGA zs<<8@gCC(v4Q!iX1OH)!ePM%RCb+-(Du67ww{;Gn{u6}k%fY3fDS^S&oJn# z4z5*q8$uBkZ2t-FEDamnJ5~?d2ME>w9-;VFgc{&G2{=reTV0i(x*E_1-493zwm<=TY5?=f02c`w zRse2R0wO8^Ee8O1TLEc@0f9#V5&HmnQz#ASod=9=0qkuDl{H-h$`|)(7^8V{p8+Z3 zi~B5mr*(0k1L-d9i{SGi;`JGFZPn#{3}c>I{G5XGuV37!VO+N@?lW-C3yb^Y`hQs5 z=Rn7o_Tl=ND)cos4`=$Ct=X09*G|o@S#N3Cuytn5ioTVrx2>DnT-dOFYuASLt5p*0j{)3jjbkw1dA|Zr=&8I zj-^$lc)7}sS?qwDc$)lv58Op$b4F5BEJcMwIuq6^!=W;*9NVonr>icSz)E~LGhV%3 zH1L?iJ8iGDx?G+|7>V@YjF%s^aEr`BOCsjfpMP7#$xQW!oaLQ@_L8iwhO#vE|qKzoGxxURsOEd1v(YoEHl&~w|%d-z~#fa=ZQ z=Q7v!iAKM6;GVhxCFiZi5Ao%pcJ@R=cTX&u)Bag38#(&;6|>*Dq1as?Z*AJrSv)x8 zcgob(F5O3Yz})GJAFvN|0k8@m@};Xva5+Pnsx&n4MTbqMkoYRZw2HwFM6HmiB`gjI z*3m?)0}MjFU=SWGf{Cy>lfu+EBT-c>MTbMQQcj8BKf}b*)WeM}Y-`;k)IdBvKL4z< zSMI{gdoquF{hQs6{k4}q5YWp#X;^S{*%Y}#_&q|KKyX^{x0sP zf8V#I-cnB4S$!n!qw-y2xVMexn6cc^w{AcAzYg@pc4xM>+$ULLTk@!m+QN8XZd zY$LvK`NenHPOy0!_>NRM!e9i#T8$vSSVXz)B_O}usutu|GnCUWvEa#4CuZU3puZe* zRG3Twz=yCBI1yKh!P>(iGAN1>*{YlrOhDD*ATTV1I;YDfr?e(q#K!`A0T3PTr6qNHc!%U1l51j0ZW=CNV~4 zP6iPOQz?2>>Y(RTcJPuF9wv zW}-?@MFSEgp3+ofc2X7v7J-)sXv|GnO@ISUi&IjI{Wt;!WTJGis6}K-;Kk;L8HuVj zWx54ZvvZu<1dtky)cLX9#&LM8vyUD-_MMgc-upal3q+Nhx6osEzjD=;zdOBx-u~3H zySff^;o(DF+n?;jnN{`6u1cL4O*dHKIIJEA7X*G2Mqt7Ys}@Er5mRQb z46+GEvoLB27P}?2c&I{5u{ONYtpMv2K#VvqYz>hqX~H7#2sS@<)e$#g!YVCC32O^n z1QyILoT3O2Lqw>VfhA$&IAiYU)Ukiu!i?Sd^KGXu+?l7Y=l|n9{yPIp@F@OP{|!a@ zfnD84y6MRSm}!mF=DjYhFTDRRcU=3MyNCC_&j0O>H~6FPBny3E#>W(oPG0*3X5diw zs)H#Q*UZJY*?YMp_)QD4rz?$R1dz35au^TAj7s!~9R;$>Q8t({G72?WDke$=YX=a) zSw%TCs>Nw?!OYCiU&MjuA2|P&L2Br${68N08UNbNxNzT>_utb*w;tQH`D7=pe-Ur_ z19$y7{*QOx#lQC6_4qx!6IaPsd8c)@yJ?DSvaPQ z)8EI5C!Xu`R7kthjVF^W=6ZbMnd;@uz2S>g{yNpaU7 zsJ?+aSJp_cy_%v965R!WRq@O|Sf5qta=(_N)nQ4s#3+>_X`?j(DkRGYxO|2Se zL77UIq6s%D1OG~P0U$xGT8)%gD*+X-S57co*rmZzPuGtz>bhcGQ-xk^TNmt*6SZ*L5X~VFN?4iu~xYgJqtM0I_YAv)_VNuHTbM1IGA?~$H2p82zWHsGuH z)vsP!I`+&LejSZv=tMN|82@Gdx8rUlJCshn*8Ia$tuQsO>|8;K396}(&Xx9oM=nb z6(gVLA2@RE)Bt_+FIRb-wK|4`kubO(J**QGT!Bnk~Buuw4g5k#M6p8|&BO*?=&j&*duSN=);BRA*XomNNMoYD&O%3%;rmEWQ z{UB*4A7Qq^YN`eWX|PSI7D=RrigLO|W&#D(TryM8kPb-of>mlcDJ6o1113r6hYQi* z?ufO5zos1QY{>9F8s=Iq| z-M;ohTmE2uj@cz<{`7Uq)jHbUI{#YF74+SE@q^?2Y}derKYfLcWd#H}4paOLcwi|+ z!=SZtm8?X-H8I*9CzI&>L;jIy!bZr2y+CygcTwWo5{++qAPQg^+qvL zhN@6W)<`N4yGrmCc4F9qv#3*5#X`inQ$TmYr8zV(Pa%On5Y;lpP-}B$GYT3Qym2*Zuwb+wc$gzur=_iG6YBU95cD6Kfd$+ijy` zIp#vJw$j&k_j@<}^bbWTy=#8k-u+_V%<%!T5~q0w^)Y1QjHo(om1DP3hdI3)+zzNs zEYcuKB^Oh(dV&UKqBL+5K)pq%a^$y234`fQ-4z1R3-k zrJ60Jz$FM^h(&4gTvs@7}QV@|V#T`=OytTpvKt%2!(Ks1iNJqkP zvY?&RPv-Y==1N;tr-eFDn$=iqIs)v0(lT3vv^4+eK|^(SrL-32eCFb(%nq1yl1=ib zUA6$R#$crraSH6K)xgBlj8qadmC!1LSJ&u3yFv^=oUkx50%wcM5JE|UBPoi&p36yM z9O93G{D;9zBQMfDQG8~}HQumq_fUW-&s@LajrZ0+{kx63?d6^P!F(4rzWmv%C3{wE zIZS^TO6zJu)4BQhHFQf&dC*Ti_28OQD?>q#vE0RPaV_b{CM9c+6hSwTOJz2|2x@>s zILm?NFfN6}RcnQDC~6i~RizYSu`0ZlC9#;77zc4<8Xe21HN=gT!24fy+a`&04uA&8zhiA zUu)I?2v%KMWjOp901|`-F{3Kr_DTq_M8J4xd8#+xkSVDsZ}9OC?)ck-q7!eubw}d1 zBSw5&$Ojmd+2TXa3r_8V^uI|4L3yc z6$-OsO+#IM%e;?3YBNQOrbxkySq^5t2{N!v>4;9NrdET8FWto)MQwc-3ot)5lkbxGz4V2`+2d{MC(7tam7l(zvBe*(ueU zw3No(RvWM~T}Pi@{l)i>wK?KJw^}SORhP`43G1nw#ge9({e626zzj};ZP{T49jG?# zuw#XtV zjZ!!5etNREzB=RR8g8CVb~ZJ)wKvsuAT5VfI2$!FlaJFn2H5bI8f@w zOpT-r%GQj;WvQT5a=ZpyA&cvTWdQUOlz7R?7ukZ44J61+_#WZ^U}r**1-t<)jdJ2A z+p;a4{rP13-2UJcRo>utMk4O&>$JHQz0N=djG%D|O)*V3AEzexf?)m3oB1(%sAc{c zdadgw%BVADyff8~9>$m(&U9|wpY3J~@!0Zfjz(b=M_?$Az$m0ho0bB(kpZy*-%+|? z`Az>qYmN-&QXTD?*5dulo4F-$kMnkNM_6lX`3I>c>LZvl8+bmQnwF9%(x9+FWJ4|G z5OCiGs1lO50#$?j1GYPzG|Y|=scA@RDcSO*Ubm+0od7!^aM) zIn^nv?%~GLuG)8fy_||-HbNQEip(SD6I?DYBdTeha|1#UXZkY zaiSqK@!NR6FPA2oeX)Fjp*w>0 z{mkf;!?Asxx~n13$0=4M8xvj2ROte>)foB_CK5O%7*{eQz-6NPT`;nuIW87cVfIU`RG(O&dfW3~o_r zAxSWb(K3{3jm!k5OUz8jKVDKcVHh-ts01%#t6Fg1Q7VroTPK-x020?5bE4j>?`V58 zG0ZG4?)?h?m*-dIuYH=C4kqK-+>Z9qTb2bf(QMn~<9|Cc{ncxs!V2oW_#renOham- zBCQY`BnnV&L2Uy8E~OzL*dz+21%*P^SqPjo90f^HP$!f~q(pghS1aYU)j5AYU6;#> zq{Ub~hto4#LiN_J<>t`9gS!+E#1A$8{Sg%#n6A^mh&s?~`tB?M$SSoNIKN z*_GLN>%jaIjsj%e6I7;ig2}H6&wmV&{bZK5<|Zh2#uqmbIU%0lo@Wk2A+;gxcNk0P zdaFfnlR=4FYLKcWjAWg^4zUir4v8>lG*IhGA=;pmmlx9_(vx-a-#jH4LKz4fCfOef zawEhsT|SZH7+r6op}#oLGMgac+nZch(bb=y9o?1H%Vf(=P40PiRbNA6Z~t(9U4lBy zOA||$B&n+5ZFF`v&r26Z6Y+NYL{~?LnNZSQt{!NiroaEW`Lm5K5X(h3Fmv86kWMl|hsOcLGOEtk93`Fl(#iYmzNr zm6c6ZI4g{?A!kEwt-djuVa4V8_%v;x%qFYLSqQRHtr?u;#KrgV{agf`lAaKo5=<*4 z5(Vf*ErXmw2{j6^%wofW6@h+;kt~2OA<#nZ1r{aEaTD~CY}YW=+x_5!z9m@e>8MFh z81UeO`3XGL+P;#;KWq2Vt7}?n2AVG1k!&Djc+Z zke&u{Nd^MeXqe`-Wf0Q?>4K=9cG(!H?9kz8RV=)az$O6+q_pWpB?|7|=^~U(n8^kG z>PU)Cqq}?|ryYVsjyd~D-`n^c|AW)?^wS?5_%^nzKCqKN^(|)(rK9}WYf2eg)KPbCrWiMAH|+0h8SHP*U)auZsJtb6%E3Kh%2i{LmO%6r^C}_W?CCCcwHKO`jSaDIC>ZcoS6R%u zGL2Fyli9DMo`@vnR;u>4+G_^i=m-Uy{^E;C znyU5E=ijeQN%HOz#rIkQq2@O;m9c?8zD4vke(^iZInkBSLXk(=bUab*k}`B7RC;Jn zJ(TL48mg+%1kQn}(|c?bBpue5f)5fwb*`~iuVL22Tq2Gt5Ss+12`Uo!76&;79Scw^ zr|p-PZ*q~vK&ya2V@O;|B8i1;ELM`#8Pvd>%w!@q|0i!f?YHBnmfpKUwDq3561E1b zBkTU8eh~M^K3%u(ka+0+)j`P5cAP!J-yU7loajrl57i|@HO6vryJG3xvxmRA-0`xl z-i}QX`zx)HXbzt$tGs&e@QG#T>e^aD=jI3an}bUe4FxlFy0D;yw?(&d9!ThrB7PcH z?O?i7LNFrbE(g0+E5#YSsiX?B z^mub+1H)~qgQNk#8||q9$0{UFU3D=i#4Z3EI5WEq3-J=E5)!L%{_ER?{3;LvNa0^9 z8v+(`)Hb7ol2M1`g(|x-DVrZqhHdlDt$Jp5=VMdiHBW8Yd3usD&3tYBm5)wxGf!>U z_1NTv-*qONdT~{zI@Qipb|!0bcDgH->fn?~OJxO{v$|ET)(XR?w>y}V8@|7TUVVCY z=Sw^Brf<)0+3>^d%$m9N@Rr{2ZF)z`dc3~NUG(GW3*T*Bk7L7u{BpbsFn*FbMK?hy zu^haRLZ?yEYLTo9vT`i05Ec;$AHn*YFv%7R%_<~21~eCb?=^>i6LuT@=GOuhZnvfO z%$&#WWzLvAarZqgP|qE20P-|6;mTmP=%W{6qjd!{LUKsVxM%(^c3*h&lA8zbbkgk?I-9TbXSY_y3Y6NCKeg7g;~TS2=|kp9OUC_$ zCF_}^=kHp5<`!pcZLaUobRGTU`^N6v_^@#z5Ffy!iIJpdejk3$9lSby{X|>L4f8im zy-E)OpKV5UX>TqZaN8}Abdsn!S#zQx7VvxB;2lhr=C%)*{uL^SzIi;gJ$LFKl%Xc7F;;)+$cHJM_~OBJ%S7>Kv77V!5cCG*dE#R)LJ^d z{?`7mJs7Prx&t@fUfsGTAF=AKNiX+Oa25Y5f5-E;@vmQatv6tIRMv*Wu}AQpKks#?IaHOU?CDR7{7shU?=3W7YHg;3yFgzrD>&IX^mN_zJvG!UbdfC zQTTmkEiXO7%khUtiO)*%FLDMh45hU;)SONfYTb0QS(2=j0=tT0Na;4)Xo(V{RC}R0 z>ITwOpOKh>Z5r?rb-kAL;qi=E!BHIx3tdPz66__@Ncd7212tp8ZIR^A0x*-Jg_9;3 zMQ(_IoKLFbb{fe|44`!NzT><@iu9{d%0;TNIq?1ilb(S zQOb;`8ry+V%S}>6-w>V7s>*aqF*Dkn>10?-!s^**v{&Z*!CXXRZ>}%*$ds~B&emWq z@9b<@s5dH&}1PvAf zC4|h=VsL-C)@29#4wW%SeMR^D%T&5`1wGm_?-{K%D3q4kF6x!s1Rl%IKS{OM_t0;+ za*p{ITN*QiVQZ$2xw*c*(%sRJ>U+2dYXI6M*-apw7g`}gX_plT^$wx6szIffh#*}i zLe#k1r({F$Y{fFI5mFDAS|fy%AT;M(N;AL}ZN_Vo z_T=at(&zZ+pB?QNH`m`ayl+qAR5Ql&#ljG^tciKf5(}yI^4JYqw>;Q~g8|P&kU3pe zVUwvyidhOBYZz_@xV6~&NctNtX${H|geDO0_s>R?#XuRF9q2$GsEFNq;)p9;W3c$T zOT9zAL-I^ts;N$scH13JugG@f=#|uKFy%xdDzf@(AKw-qRmg&#>%O*aLYY{#su z)e2>+SFgGL?_b^saxTC4CcB$+L58O;T_dWj5TbsEOd+d~L6eb0iq#5gd6|@DDQrd5 z1Z`G+Cd~uZ3ehdWFG9UZYL<{3HSyR$YXIx&paT-%4)5DBIdE#`p{J;!w)&1yZisoB z|J5Vc{PmeN%xZCGLd{t%S6?_Wc4JZX_(6l54mWjivAPTQM9ZG}+fH%w!LwHfE9i6{ z3>Kpk@arth?v1loVQ?Vi(`$G!Qf^ zAs^_5azG_%?b7KNTD#=9QY9IYR9@=u68z=m1}_2KNrxA-M?!}e;9H3Fq)|fD8)LtL z2hM#BmpwhjE&CS#-qY{$4?Tek(RHV0rte-KV^^HnGk))e6m9+mp8XZG`xXAZdmiV1 z`TOfc=kV2Ut@+ViV|eV;+4YCszh&gMZxK(mA6BUY##@10fWw9=y&U9(c3MU7>16PC`Y+3MC*C7eH-`!zmg#C16W5ik}?FWXEFqo*ZS^{Ny&t_~-U! z9{SQ&?2e3e2k5>y-&gf2wTbt^(way!&#evV6p@2Fu6kfindssDXHtDk0gVB)^<((%ezgDi_7-cJc<#NL99m zD)DVzIf#()gKdrxTuU0*Pn&Rp?ESm52dQ$RA#bwnJnWQb3qEjLtfYD;v6iNzYMI&9A z3YM_Yg-zTtut5ReNm-Qq7s7Bt(@A4C%oX4j4LKn=AX+F#IO&s4EFE<9`ni^9pshw+ zq6{r-Tl)KzE`?mKl1Zg<8B0m}^L1@vcUw*9id`dW`O0u)sibK%6Z05Ux2zjBW`kk& zH6`!HzQ?Sv|gn4dKx4xn|B0rSt{snt8)f=SJdH#WHcl-H@=5U*X;byU+xtd z+)iG-cmLSBkz|9lLgBTa1kFJam7NAngitK)x3d%~mms|lR#GJ{*Q$i@4nDQekhK^u zv0!K`SW3GXjuPsCi*+Fzq_|k{V9etj&#obv&rCcw>Q%||EJyC@DKYAFN@*H zFa2f<&(GZc)sjt9#;pdd?LE}DdzQcP;RkWU6?cqLhWrFK!pd6m=C!K+&36rN|LL** z^s1IxreSN}>Q&_@=X-;{;EISTE7v7CglltEPmno@OoLRu?ylu%U}RzXE& zMLB8RT&Ui8YTYnj!V-h2f})BHdTI$6C}DpwVM5FJk=TekV%5&Jre4HbvGE=}_SFx0 z^m=~zSFgG5XaD7>UBi5c={)W`!Zg|O&}@eqUpe<9Es;1d8(8V-9}yCQ}{BlTEK zOZ7lz{wd0Fi@dXa{^enMyoGskd4oY=Pq-Qf9=a)0n4fH)CTrs&&wdCJz{6MRT7|v@ zbW)8CX6c8ICvfpy>Q)czczC?Hu(MLAN}}-Mk+ECtMA2-;;@V;49y!hR1O6zKz;)-7E-S^;mL9Z1<$KY2@c?LZ{24J%t9m$&jc;* z2tF~Q#P^J4GkqhuOg|MF%Vzs~a@ldZINwZsV}>}&?iT(v>?W`0#f1*4KTUm;%yRtV zIflq%0!~v7xvg>}#r!aE8Hj&K%l1D-;PAVDy-iuE_vKA? z+mdv3W?j>grtILJznHhl(^kJRS|W9-as6b9{(iQzqvb;S?$_6oyF=ld-3DGJ0uKUI zsF7b{5cJ@2T1efVxIq@jg!_}W(a-Rz#lb@%0LnL)A3p+J5Wu>`VqH!O;2WPA$z+Fy zGr6I(tEM44)opgBqnS!|C{$OIc%Vvg`-9go>CWS#lIdN`zE8K$w>5WCy;-8No&x`E zj#XG1+iD_@6c|Z=WAnw-`7P?K8pS820CCIb5IjK2wK!4BRq_(6$y+> z31F^TrjdgVNkK=Tp(F_c>j6lpuviwF73o(x*7W=5Z|mrARI10?iy5r%$wr1W=JF;l z^Ky1vQtUW?0#IT(spilIh@ExFny%2$62z5iv;s(|;4$vy9O>yMlvm(2f{uvEJDm$N zwXnaut*gDA?#PZ6F7Hq~T9yvwJ66zx{1Dk|pT;9_KPcZ*Lqhr90H|cpt4g2+qzr43 zWSd-z*oAUFM+u#DK~(cE<$U)4P~69H=nXVMsbA6Lw*PCX-^AZh>AO_;C;6u=@a{)J zyFT!ERu0$bX^3g8SgSJ%C|{$MKx;!zZ(XF|3#1M}2;4h_uY@R(TnMlf_-H}>pnULj z4x#S@CgT8oA9Xa1uI!_4BWEPOv8r zNGpOVpKIfu+M&Zs_r+KD_K{j(^^*3xuzc#h{Ai#h3eVdL@dBHGN>c`6MU$~n8j)2= zv=U0zSRbzSNJRjn8I=o!&IvO{LTf@$ zTvJ_87AE_W4X&a;#C{x?t6Mx(-pMbt#DlFL^FO|;Eh9;^f9}i^!+pi2Uw`@FEZx)b zHa>K7Aa?RWz27^e(KzjU4nt1Rx~zQ(88bY1%;p7rgYJL|J$Yz^(JeIi>BN+349Gc) z39ykwYMBZeL|~d=jy%{>g_J7fh6e_O6#~^Jd@pkzH*arGE@dLafdv02KFEJ0#}0T- zW}eZ%!w-HWsE%ZEY)oKev!d^4HD3a4_F4y#t1EBWB`hv2pKF{#O1z z{-x0?oEA~X(3N-+Z^vEZ*9m!Ro*e+KRYG1Nf}r9O@m4z>MzN^QEUD9DP@)!_%N9tD z1J{})Vmu}Vdmm$J;i(R+#Z#to2}cW1xkzmm)G9KOrw4`Z$pyYZS`n?JmB2+45-hYu zKtCn8Y8}=`+4-6X*X77!Pjocg+(L zu8?SGuW^K&O88R-LO2QDu`fgYqQp+@XE`J@!|#w)9UobkeHj?_tUgpg3^ z368)sC_qa!+=sa?`?O)N+z=mDB_^jN12Z*cR}^ZpA-OGTRt)BoOBikC;MyZigI_%W zj~Xt)OMB@1@$^zT6$pIpiF-xTtA4mQ*&wx=i~M8!Rs77+)@G_XdNTJa&S9#Aee%hh zUdK`e&40w7cxyJ^*bJkc0YCO6vkLm9p;7}6kxMB|<>7fD7K;}rq!z<-KUy4NPG8tS z-+CTSzLj6a_uWKMJK+0U5XGEfX5ss~bScG2IfiP+^gq82@CM(Nz}L^5f11Aa!UpQf zZS(w5{3t#FoqVM3_%1U7+9q*lJ#ao5Wphhx781v+p_x1Y+yvMsRw=OAE0N)Gu^F>E zJmz(R;)RZ90xM+sUW$>)`i1H%Kqh1zV^Qe#f}{pmyUj_?B5^cnsv4(<8}K(i_uNv} zJDRxBUtk6biT->rzoRKX(7=z>_kTza7P<$hzV6}x`*0*b{KXAj`&Lzrnc6BQ)>6%} z)XJ`8?T~j_Qz+bf-dk9XC)zqz(`!Ku7+w0I9)d@S3XcH$xlOW%?=mHw2 zPohat6TE%{WGKRG5sk5jfrz-!G&h8jqWe*S`2g)@e+Y8%D9lDsoP7=CFQOA%JBqPu z(SEp>iz=Wb4ucLZz&SsG>%WV35P7*i_-q1gVvfQ0=Fk!5UNnb4fbTyE@_&G`>^}JX z9?;_lD9N4%J&uEJkAeQopl2D{!aNJvZZZwa;g1H8KWsqkOa@a^278Y{V>;LqInE{K zKY~93a)Cd4@h75Ng>MKaFa81?V0PorlPlm87+5?nUU+3!qE%1This file is intended to be called from format_chart.php, the example-o-matic.". - "Please click here to try it.

    "; - exit; -} -*/ - -extract ($_GET, EXTR_OVERWRITE); -extract ($_POST, EXTR_OVERWRITE); - - -//Sample functions - -// data-data as a function -if ($which_data_type == 'function') { - //Put function here - $dx = ".3"; - $max = 6.4; - $maxi = $max/$dx; - for ($i=0; $i<$maxi; $i++) { - $a = 4; - $x = $dx*$i; - $data[$i] = array("", $x, $a*sin($x),$a*cos($x),$a*cos($x+1)); - } - $which_data_type = "data-data"; -} -// data-data-error as a random function -else if ($which_data_type == 'randfunction') { - srand ((double) microtime() * 1000000); - $a = 9.62; - $label[0] = "October"; $label[5] = "Day 5"; $label[10] = "Day 10"; - $label[15] = "Day 15"; $label[20] = "Day 20"; $label[25] = "Day 25"; - - for ($i = 0; $i <= 30; $i++) { - $a += rand(-1, 2); - $b = rand(0,1); - $c = rand(0,1); - $data[] = @ array($label[$i],$i+1,$a,$b,$c); - } - $which_data_type = 'data-data-error'; -} -// MBD, this is for data_sample3.php, $num_data_rows is set there -else if ($which_data_type == 'data-data-error') { - for ($i = 0; $i < $num_data_rows; $i++) { - eval ("\$data[\$i] = \$data_row$i; "); - } -} else { - foreach($data_row0 as $key=>$val) { - $data[$key] = array($data_row0[$key],$data_row1[$key],$data_row2[$key],$data_row3[$key],$data_row4[$key]); - } -} - - -//////////////////////////////////////////////// - -//Required Settings - include("../phplot.php"); - $graph = new PHPlot($xsize_in, $ysize_in); - $graph->SetDataType($which_data_type); // Must be first thing - - $graph->SetDataValues($data); - -//Optional Settings (Don't need them) - -// $graph->SetTitle("This is a\n\rmultiple line title\n\rspanning three lines."); - $graph->SetTitle($title); - $graph->SetXTitle($xlbl, $which_xtitle_pos); - $graph->SetYTitle($ylbl, $which_ytitle_pos); - $graph->SetLegend(array("A","Bee","Cee","Dee")); - - $graph->SetFileFormat($which_fileformat); - $graph->SetPlotType($which_plot_type); - - $graph->SetUseTTF($which_use_ttf); - - $graph->SetYTickIncrement($which_yti); - $graph->SetXTickIncrement($which_xti); - $graph->SetXTickLength($which_xtl); - $graph->SetYTickLength($which_ytl); - $graph->SetXTickCrossing($which_xtc); - $graph->SetYTickCrossing($which_ytc); - $graph->SetXTickPos($which_xtick_pos); - $graph->SetYTickPos($which_ytick_pos); - - - $graph->SetShading($which_shading); - $graph->SetLineWidth($which_line_width); - $graph->SetErrorBarLineWidth($which_errorbar_line_width); - - $graph->SetDrawDashedGrid($which_dashed_grid); - switch($which_draw_grid) { - case 'x': - $graph->SetDrawXGrid(TRUE); - $graph->SetDrawYGrid(FALSE); - break; - case 'y': - $graph->SetDrawXGrid(FALSE); - $graph->SetDrawYGrid(TRUE); - break; - case 'both': - $graph->SetDrawXGrid(TRUE); - $graph->SetDrawYGrid(TRUE); - break; - case 'none': - $graph->SetDrawXGrid(FALSE); - $graph->SetDrawYGrid(FALSE); - } - - $graph->SetXTickLabelPos($which_xtick_label_pos); - $graph->SetYTickLabelPos($which_ytick_label_pos); - $graph->SetXDataLabelPos($which_xdata_label_pos); - $graph->SetYDataLabelPos($which_ydata_label_pos); - - // Please remember that angles other than 90 are taken as 0 when working fith fixed fonts. - $graph->SetXLabelAngle($which_xlabel_angle); - $graph->SetYLabelAngle($which_ylabel_angle); - - //$graph->SetLineStyles(array("dashed","dashed","solid","solid")); - $graph->SetPointShape($which_point); - $graph->SetPointSize($which_point_size); - $graph->SetDrawBrokenLines($which_broken); - - // Some forms in format_chart.php don't set this variable, suppress errors. - @ $graph->SetErrorBarShape($which_error_type); - - $graph->SetXAxisPosition($which_xap); - $graph->SetYAxisPosition($which_yap); - $graph->SetPlotBorderType($which_btype); - - if ($maxy_in) { - if ($which_data_type = "text-data") { - $graph->SetPlotAreaWorld(0,$miny_in,count($data),$maxy_in); - } - } - -/* -//Even more settings - - $graph->SetPlotAreaWorld(0,100,5.5,1000); - $graph->SetPlotAreaWorld(0,-10,6,35); - $graph->SetPlotAreaPixels(150,50,600,400); - - $graph->SetDataColors( - array("blue","green","yellow","red"), //Data Colors - array("black") //Border Colors - ); - - $graph->SetPlotBgColor(array(222,222,222)); - $graph->SetBackgroundColor(array(200,222,222)); //can use rgb values or "name" values - $graph->SetTextColor("black"); - $graph->SetGridColor("black"); - $graph->SetLightGridColor(array(175,175,175)); - $graph->SetTickColor("black"); - $graph->SetTitleColor(array(0,0,0)); // Can be array or name -*/ - -// $graph->SetPrintImage(false); - $graph->DrawGraph(); -// xdebug_dump_function_profile(XDEBUG_PROFILER_FS_SUM); -?> diff --git a/gui/bacula-web/external_packages/phplot/examples/data.php b/gui/bacula-web/external_packages/phplot/examples/data.php deleted file mode 100644 index b1d1314db9..0000000000 --- a/gui/bacula-web/external_packages/phplot/examples/data.php +++ /dev/null @@ -1,27 +0,0 @@ - diff --git a/gui/bacula-web/external_packages/phplot/examples/data_date.php b/gui/bacula-web/external_packages/phplot/examples/data_date.php deleted file mode 100644 index 4a14d7b5cf..0000000000 --- a/gui/bacula-web/external_packages/phplot/examples/data_date.php +++ /dev/null @@ -1,267 +0,0 @@ - diff --git a/gui/bacula-web/external_packages/phplot/examples/data_date2.php b/gui/bacula-web/external_packages/phplot/examples/data_date2.php deleted file mode 100644 index 37152c7c6f..0000000000 --- a/gui/bacula-web/external_packages/phplot/examples/data_date2.php +++ /dev/null @@ -1,267 +0,0 @@ - diff --git a/gui/bacula-web/external_packages/phplot/examples/data_sample1.php b/gui/bacula-web/external_packages/phplot/examples/data_sample1.php deleted file mode 100644 index 11b8117c1e..0000000000 --- a/gui/bacula-web/external_packages/phplot/examples/data_sample1.php +++ /dev/null @@ -1,58 +0,0 @@ -

    -Data type: (Text-data)
    -

    - - - - - - - - - - - - - -
    Title (x axis)Y data 1Y data 2Y data 3 Y data 4
    - - - - - - - - - -
    - -

    -Graph type: - -

    -
    -Please note when writing your application that the graph
    -types marked with an asterisk only support the data
    -type for this form, "text-data". -
    diff --git a/gui/bacula-web/external_packages/phplot/examples/data_sample2.php b/gui/bacula-web/external_packages/phplot/examples/data_sample2.php deleted file mode 100644 index e754a039d3..0000000000 --- a/gui/bacula-web/external_packages/phplot/examples/data_sample2.php +++ /dev/null @@ -1,52 +0,0 @@ - -

    -Data type: (data-data)
    - - - - - - - - - - - - - - -
    Title (data label)X dataY data 1Y data 2Y data 3
    - - - - - - - - - -
    - -

    -Graph type: - -

    diff --git a/gui/bacula-web/external_packages/phplot/examples/data_sample3.php b/gui/bacula-web/external_packages/phplot/examples/data_sample3.php deleted file mode 100644 index 46f774b56d..0000000000 --- a/gui/bacula-web/external_packages/phplot/examples/data_sample3.php +++ /dev/null @@ -1,58 +0,0 @@ -

    -Data set as X, Y, E+, E-, Y2, E2+, E2-,...
    - -Data type: (data-data-error) -

    - - - - - - - - -
    Title (data label)X dataY data 1Error +Error -Y data 2Error +Error -
    - - "; - - for ($i = 0; $i < $num_rows; $i++) { - // The label input element must be bigger. - $lines[0] = "\n"; - - // Show s for the rest of the columns - for ($j=1; $j<8; $j++) - $lines[$j] = "\n"; - $groups[$i] = join('', $lines); - } - echo join("
    \n", $groups); - ?> - -
    - -

    -Graph type: - -     -Error bar type: - -

    diff --git a/gui/bacula-web/external_packages/phplot/examples/data_sample4.php b/gui/bacula-web/external_packages/phplot/examples/data_sample4.php deleted file mode 100644 index 5c4d14c16f..0000000000 --- a/gui/bacula-web/external_packages/phplot/examples/data_sample4.php +++ /dev/null @@ -1,24 +0,0 @@ -

    -Data type: data-data calculated from a function. -

    -
    -	$dx = ".3";
    -	$max = 6.4;
    -	$maxi = $max/$dx;
    -	for ($i=0; $i<$maxi; $i++) {
    -		$a = 4;
    -		$x = $dx*$i;
    -		$data[$i] = array("", $x, $a*sin($x), 
    -                              $a*cos($x), $a*cos($x+1)); 	
    -	}
    -
    -

    -Chart type: - - -

    diff --git a/gui/bacula-web/external_packages/phplot/examples/data_sample5.php b/gui/bacula-web/external_packages/phplot/examples/data_sample5.php deleted file mode 100644 index b8859b6345..0000000000 --- a/gui/bacula-web/external_packages/phplot/examples/data_sample5.php +++ /dev/null @@ -1,31 +0,0 @@ -

    -Data type: data-data-error calculated from a function. -

    -
    -    srand ((double) microtime() * 1000000);
    -    $a = 9.62;
    -    $label[0] = "October"; $label[5] = "Day 5"; $label[10] = "Day 10";
    -    $label[15] = "Day 15"; $label[20] = "Day 20"; $label[25] = "Day 25";
    -
    -    for ($i = 0; $i <= 30; $i++) {
    -        $a += rand(-1, 2);
    -        $b = rand(0,1);
    -        $c = rand(0,1);
    -        $data[] = @ array($label[$i],$i+1,$a,$b,$c);
    -    }
    -
    -

    -Chart type: - -     -Error bar type: - - -

    diff --git a/gui/bacula-web/external_packages/phplot/examples/example1.php b/gui/bacula-web/external_packages/phplot/examples/example1.php deleted file mode 100644 index a134097785..0000000000 --- a/gui/bacula-web/external_packages/phplot/examples/example1.php +++ /dev/null @@ -1,16 +0,0 @@ -SetDataValues($example_data); - - -//Draw it -$graph->DrawGraph(); - -?> diff --git a/gui/bacula-web/external_packages/phplot/examples/example2.php b/gui/bacula-web/external_packages/phplot/examples/example2.php deleted file mode 100644 index 8f06a20dba..0000000000 --- a/gui/bacula-web/external_packages/phplot/examples/example2.php +++ /dev/null @@ -1,22 +0,0 @@ -SetDataType("linear-linear"); - -//Remove the X data labels -//$graph->SetXGridLabelType("none"); - -//Load the data into data array -$graph->SetDataValues($example_data); - -//Draw the graph -$graph->DrawGraph(); -?> diff --git a/gui/bacula-web/external_packages/phplot/examples/example3.php b/gui/bacula-web/external_packages/phplot/examples/example3.php deleted file mode 100644 index a518e1315e..0000000000 --- a/gui/bacula-web/external_packages/phplot/examples/example3.php +++ /dev/null @@ -1,32 +0,0 @@ -SetDataType("data-data"); - -//Load the data into the data array -$graph->SetDataValues($example_data); -$graph->DoMovingAverage(4,2,TRUE); - -//Call Scaling Function (in phplot_data.php) -//$graph->DoScaleData(1,1); - -//Draw a Legend at pixel location 100,100 -$graph->SetLegendPixels(100,100,""); - -//have no labels on Y axis -//$graph->SetYGridLabelType("none"); - -//Print that puppy! -$graph->DrawGraph(); -?> diff --git a/gui/bacula-web/external_packages/phplot/examples/example4.php b/gui/bacula-web/external_packages/phplot/examples/example4.php deleted file mode 100644 index 360d2df8aa..0000000000 --- a/gui/bacula-web/external_packages/phplot/examples/example4.php +++ /dev/null @@ -1,80 +0,0 @@ -SetDataType("linear-linear-error"); //Must be first thing - -//Set the Graph particulars - $graph->SetPrecisionX(0); - $graph->SetPrecisionY(0); - $graph->SetUseTTF("0"); - $graph->SetDrawYGrid("1"); // 1 = true - $graph->SetDataValues($data); - $graph->SetImageArea(600, 400); - $graph->SetVertTickIncrement(""); - $graph->SetHorizTickIncrement(1); - $graph->SetErrorBarLineWidth(1); - $graph->SetYScaleType("log"); - $graph->SetPointShape("halfline"); - $graph->SetErrorBarShape("line"); - $graph->SetPlotType("points"); - $graph->SetXGridLabelType("title"); - $graph->SetXLabel("Day"); - $graph->SetYLabel("Stock value"); - $graph->SetTitle("Logarithmic scale\nexample 4"); - //$graph->SetErrorBarColors(array("blue","red","green","black")); - $graph->SetDataColors( - array("blue","green","yellow","red"), //Data Colors - array("black") //Border Colors - ); - - $graph->SetPlotAreaWorld(0,0,32,50); - //$graph->SetPlotAreaPixels(150,50,600,400); - -/* -//Other settings - $graph->SetPlotBgColor(array(222,222,222)); - $graph->SetBackgroundColor(array(200,222,222)); //can use rgb values or "name" values - $graph->SetTextColor("black"); - $graph->SetGridColor("black"); - $graph->SetLightGridColor(array(175,175,175)); - $graph->SetTickColor("black"); - $graph->SetTitleColor(array(0,0,0)); // Can be array or name - -*/ - - -//Draw the graph - $graph->DrawGraph(); -?> diff --git a/gui/bacula-web/external_packages/phplot/examples/example6.php b/gui/bacula-web/external_packages/phplot/examples/example6.php deleted file mode 100644 index 405943b297..0000000000 --- a/gui/bacula-web/external_packages/phplot/examples/example6.php +++ /dev/null @@ -1,19 +0,0 @@ -SetDataType("data-data"); //Must be called before SetDataValues - -$graph->SetXGridLabelType("time"); -$graph->SetXDataLabelAngle(90); -$graph->SetXLabel(""); -$graph->SetYLabel("Volume"); -$graph->SetVertTickIncrement(30); -$graph->SetXTimeFormat("%b %y"); -$graph->SetDataValues($example_data); -$graph->SetHorizTickIncrement(2679000); -$graph->SetPlotType("thinbarline"); -$graph->SetDrawXDataLabels(false); -$graph->SetPlotAreaWorld(883634400,0,915095000,90); -$graph->DrawGraph(); -?> diff --git a/gui/bacula-web/external_packages/phplot/examples/example7.php b/gui/bacula-web/external_packages/phplot/examples/example7.php deleted file mode 100644 index 4b93ee8df2..0000000000 --- a/gui/bacula-web/external_packages/phplot/examples/example7.php +++ /dev/null @@ -1,33 +0,0 @@ -SetDataType("data-data-error"); //Must be called before SetDataValues - -$graph->SetImageArea(600,400); -$graph->SetPrecisionY(0); -$graph->SetXLabel(""); -$graph->SetYLabel("Volume"); -$graph->SetVertTickIncrement(20); -$graph->SetXAxisPosition(1); -//$graph->SetSkipBottomTick(1); - -//Set Unixtime Increment and X Axis Settings -$graph->SetHorizTickIncrement(2679000); -$graph->SetXGridLabelType("time"); -$graph->SetXTimeFormat("%b %y"); -$graph->SetXDataLabelAngle(90); - -$graph->SetDataValues($example_data); -$graph->SetPlotType("lines"); -$graph->SetErrorBarShape("line"); -$graph->SetPointShape("halfline"); -$graph->SetYScaleType("log"); -$graph->SetLineWidth(1); -$graph->SetDrawXDataLabels(false); - -//Since X axis is in Unixtime format we set the limits accordingly -$graph->SetPlotAreaWorld(883634400,1,915095000,140); - -$graph->DrawGraph(); -?> diff --git a/gui/bacula-web/external_packages/phplot/examples/example8.php b/gui/bacula-web/external_packages/phplot/examples/example8.php deleted file mode 100644 index d60c053957..0000000000 --- a/gui/bacula-web/external_packages/phplot/examples/example8.php +++ /dev/null @@ -1,61 +0,0 @@ -SetPrintImage(0); //Don't draw the image yet - -$graph->SetDataType("data-data-error"); //Must be called before SetDataValues - -$graph->SetNewPlotAreaPixels(90,40,540,190); -$graph->SetDataValues($example_data); - -$graph->SetXLabelType("time"); -$graph->SetXLabelAngle(90); -$graph->SetXTitle(""); -$graph->SetYTitle("Price"); -$graph->SetYTickIncrement(20); -$graph->SetXTickIncrement(2679000); -$graph->SetXTimeFormat("%b %y"); -$graph->SetPlotType("lines"); -$graph->SetErrorBarShape("line"); -$graph->SetPointShape("halfline"); -$graph->SetYScaleType("log"); -$graph->SetLineWidths(array(1)); -$graph->SetPlotAreaWorld(883634400,1,915095000,140); -$graph->SetXDataLabelPos('none'); -$graph->DrawGraph(); - -//Now do the second chart on the image - -unset($example_data); - -$graph->SetYScaleType("linear"); -include("./data_date.php"); - -$graph->SetDataType("data-data"); //Must be called before SetDataValues - -$graph->SetDataValues($example_data); -$graph->SetNewPlotAreaPixels(90,260,540,350); -$graph->SetDataValues($example_data); - -$graph->SetXLabelType("time"); -$graph->SetXLabelAngle(90); -$graph->SetXTitle(""); -$graph->SetYTitle("Volume"); -$graph->SetYTickIncrement(30); -$graph->SetPlotType("thinbarline"); - -//Set how to display the x-axis ticks -$graph->SetXTimeFormat("%b %y"); -$graph->SetXTickIncrement(2679000); -$graph->SetXAxisPosition(0); //Have to reset it after log plots - -//Set Plot to go from x = Jan 1 1998, to x = Dec 31 1998 -// and from y = 0 to y = 90 -$graph->SetPlotAreaWorld(883634400,0,915095000,90); - -$graph->DrawGraph(); - -//Print the image -$graph->PrintImage(); -?> diff --git a/gui/bacula-web/external_packages/phplot/examples/example9.php b/gui/bacula-web/external_packages/phplot/examples/example9.php deleted file mode 100644 index 32865c1526..0000000000 --- a/gui/bacula-web/external_packages/phplot/examples/example9.php +++ /dev/null @@ -1,35 +0,0 @@ -SetDataValues($example_data); - -//Don't print until we say so -$graph->SetPrintImage(0); - -//Draw it -$graph->DrawGraph(); - -//Define some colors -$ndx_color = $graph->SetIndexColor("blue"); -$ndx_color1 = $graph->SetIndexColor("orange"); - -//The image data colors are now ndx_data_color[] -$graph->DrawDashedLine(250,$graph->plot_area[1],250,250,4,0,$graph->ndx_data_colors[0]); - -$graph->DrawDashedLine($graph->xtr(5),$graph->ytr(12), - $graph->xtr(20),$graph->ytr(42),5,3,$ndx_color); - -$graph->DrawDashedLine($graph->plot_area[0],250,$graph->plot_area[2],250,2,0,$ndx_color1); -$graph->DrawDashedLine($graph->plot_area[0],251,$graph->plot_area[2],251,2,0,$ndx_color1); - - -//Now print the image -$graph->PrintImage(); - -?> diff --git a/gui/bacula-web/external_packages/phplot/examples/format_chart.php b/gui/bacula-web/external_packages/phplot/examples/format_chart.php deleted file mode 100644 index 5e2f4b899c..0000000000 --- a/gui/bacula-web/external_packages/phplot/examples/format_chart.php +++ /dev/null @@ -1,345 +0,0 @@ - - - - Example-o-matic - - - - - - -

    PHPlot test graph form

    - -

    Use this form to test many different options of PHPlot. You can test -every graph type supported for any of four different data types. You can -tweak as you like or you can leave everything as is and press "Submit" for -automatic values. -

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Data Settings
    -

    - Data type: [ - text-data | - data-data | - function | - data-data-error | - randfunction ] -

    - -
    -
    -

    Optional values

    -
    -
    Sizes
    Width of graph in pixels:
    Height of graph in pixels:
    Maximum height of graph in y axis units:
    Minimum height of graph in y axis units:
    Titles and data labels
    Title:
    Y axis title:
    Y axis title position: - -
    Y axis data labels position: - -
    Y axis labels angle:
    X axis title:
    X axis title position: - -
    X axis data labels position: - -
    X axis labels angle:
    Grid and ticks
    Grid drawn: - -
    Dashed grid? - -
    X axis ticks length:
    X axis ticks crossing:
    X axis ticks position: - -
    X axis tick labels position: - -
    Y axis ticks length:
    Y axis ticks crossing:
    Y axis ticks position: - -
    Y axis tick labels position: - -
    X tick increment:
    Y tick increment:
    Other
    X axis position:
    Y axis position:
    Plot Border: - -
    Shade height (0 for none):
    Plot line width:
    Error bar line width:
    Point Type: - -
    Point Size:
    Draw broken lines with missing Y data: - -
    Use TrueType font: - -
    File format: - -
    -
    -
    - -

    -Please visit PHPlot's site, the -sourceforge project page, -or see more php code and examples -by Afan Ottenheimer of jeonet. -

    - -

    $Id$

    - - diff --git a/gui/bacula-web/external_packages/phplot/examples/inline_image.php b/gui/bacula-web/external_packages/phplot/examples/inline_image.php deleted file mode 100644 index 16a5a352c5..0000000000 --- a/gui/bacula-web/external_packages/phplot/examples/inline_image.php +++ /dev/null @@ -1,28 +0,0 @@ - - ************************************************* - * This file is meant to be called only from the * - * test page * - * It will fail if called by itself. * - ************************************************* - -EOF -; -exit; -} - -// From PHP 4.?, register_globals is off, take it into account (MBD) - -include('../phplot.php'); -$graph = new PHPlot; -include('./data.php'); -$graph->SetTitle("$_GET[which_title]"); -$graph->SetDataValues($example_data); -$graph->SetIsInline('1'); -$graph->SetFileFormat("$_GET[which_format]"); -$graph->DrawGraph(); -?> diff --git a/gui/bacula-web/external_packages/phplot/examples/test_setup.php b/gui/bacula-web/external_packages/phplot/examples/test_setup.php deleted file mode 100644 index b8860ca978..0000000000 --- a/gui/bacula-web/external_packages/phplot/examples/test_setup.php +++ /dev/null @@ -1,67 +0,0 @@ - - - - - PHPlot graphic formats test - - - - - - -

    PHPlot test graph form

    - -

    Use this form to test many different options of PHPlot. You can test -every graph type supported for any of four different data types. You can -tweak as you like or you can leave everything as is and press "Submit" for -

    PHPlot graphic formats test

    - -

    -This page will test which graphic formats are supported by the version of GD -linked into PHP. You should see at least one of the four images below. -

    - -
    - - - - - - - - - -
    PNG graphics
    -"; - -?> -
    JPEG graphics
    -"; -?> -
    GIF graphics
    -"; -?> -
    BMP graphics
    -"; -?> -
    -
    - - - diff --git a/gui/bacula-web/external_packages/phplot/phplot.php b/gui/bacula-web/external_packages/phplot/phplot.php deleted file mode 100644 index 4d4fe58c6c..0000000000 --- a/gui/bacula-web/external_packages/phplot/phplot.php +++ /dev/null @@ -1,4448 +0,0 @@ - - * - * Requires PHP 4.2.0 or later (CHECK THIS) - */ - -if (! defined(__FUNCTION__)) - define(__FUNCTION__, '__FUNCTION__ Requires at least PHP 4.3.0.'); - -define ('MINY', -1); // Indexes in $data (for DrawXDataLine()) -define ('MAXY', -2); -define ('TOTY', -3); - -error_reporting(E_ALL); - -class PHPlot { - - /* I have removed internal variable declarations, some isset() checking was required, - * but now the variables left are those which can be tweaked by the user. This is intended to - * be the first step towards moving most of the Set...() methods into a subclass which will be - * used only when strictly necessary. Many users will be able to put default values here in the - * class and thus avoid memory overhead and reduce parsing times. - */ - //////////////// CONFIG PARAMETERS ////////////////////// - - var $is_inline = FALSE; // FALSE = Sends headers, TRUE = sends just raw image data - var $browser_cache = FALSE; // FALSE = Sends headers for browser to not cache the image, - // (only if is_inline = FALSE also) - - var $safe_margin = 5; // Extra margin used in several places. In pixels - - var $x_axis_position = ''; // Where to draw both axis (world coordinates), - var $y_axis_position = ''; // leave blank for X axis at 0 and Y axis at left of plot. - - var $xscale_type = 'linear'; // linear, log - var $yscale_type = 'linear'; - -//Fonts - var $use_ttf = FALSE; // Use True Type Fonts? - var $ttf_path = '.'; // Default path to look in for TT Fonts. - var $default_ttfont = 'benjamingothic.ttf'; - var $line_spacing = 4; // Pixels between lines. - - // Font angles: 0 or 90 degrees for fixed fonts, any for TTF - var $x_label_angle = 0; // For labels on X axis (tick and data) - var $y_label_angle = 0; // For labels on Y axis (tick and data) - var $x_title_angle = 0; // Don't change this if you don't want to screw things up! - var $y_title_angle = 90; // Nor this. - var $title_angle = 0; // Or this. - -//Formats - var $file_format = 'png'; - var $output_file = ''; // For output to a file instead of stdout - -//Data - var $data_type = 'text-data'; // text-data, data-data-error, data-data, text-data-single - var $plot_type= 'linepoints'; // bars, lines, linepoints, area, points, pie, thinbarline, squared - - var $label_scale_position = 0.5; // Shifts data labes in pie charts. 1 = top, 0 = bottom - var $group_frac_width = 0.7; // value from 0 to 1 = width of bar groups - var $bar_width_adjust = 1; // 1 = bars of normal width, must be > 0 - - var $y_precision = 1; - var $x_precision = 1; - - var $data_units_text = ''; // Units text for 'data' labels (i.e: '¤', '$', etc.) - -// Titles - var $title_txt = ''; - - var $x_title_txt = ''; - var $x_title_pos = 'plotdown'; // plotdown, plotup, both, none - - var $y_title_txt = ''; - var $y_title_pos = 'plotleft'; // plotleft, plotright, both, none - - -//Labels - // There are two types of labels in PHPlot: - // Tick labels: they follow the grid, next to ticks in axis. (DONE) - // they are drawn at grid drawing time, by DrawXTicks() and DrawYTicks() - // Data labels: they follow the data points, and can be placed on the axis or the plot (x/y) (TODO) - // they are drawn at graph plotting time, by Draw*DataLabel(), called by DrawLines(), etc. - // Draw*DataLabel() also draws H/V lines to datapoints depending on draw_*_data_label_lines - - // Tick Labels - var $x_tick_label_pos = 'plotdown'; // plotdown, plotup, both, xaxis, none - var $y_tick_label_pos = 'plotleft'; // plotleft, plotright, both, yaxis, none - - // Data Labels: - var $x_data_label_pos = 'plotdown'; // plotdown, plotup, both, plot, all, none - var $y_data_label_pos = 'plotleft'; // plotleft, plotright, both, plot, all, none - - var $draw_x_data_label_lines = FALSE; // Draw a line from the data point to the axis? - var $draw_y_data_label_lines = FALSE; // TODO - - // Label types: (for tick, data and plot labels) - var $x_label_type = ''; // data, time. Leave blank for no formatting. - var $y_label_type = ''; // data, time. Leave blank for no formatting. - var $x_time_format = '%H:%m:%s'; // See http://www.php.net/manual/html/function.strftime.html - var $y_time_format = '%H:%m:%s'; // SetYTimeFormat() too... - - // Skipping labels - var $x_label_inc = 1; // Draw a label every this many (1 = all) (TODO) - var $y_label_inc = 1; - var $_x_label_cnt = 0; // internal count FIXME: work in progress - - // Legend - var $legend = ''; // An array with legend titles - var $legend_x_pos = ''; - var $legend_y_pos = ''; - - -//Ticks - var $x_tick_length = 5; // tick length in pixels for upper/lower axis - var $y_tick_length = 5; // tick length in pixels for left/right axis - - var $x_tick_cross = 3; // ticks cross x axis this many pixels - var $y_tick_cross = 3; // ticks cross y axis this many pixels - - var $x_tick_pos = 'plotdown'; // plotdown, plotup, both, xaxis, none - var $y_tick_pos = 'plotleft'; // plotright, plotleft, both, yaxis, none - - var $num_x_ticks = ''; - var $num_y_ticks = ''; - - var $x_tick_inc = ''; // Set num_x_ticks or x_tick_inc, not both. - var $y_tick_inc = ''; // Set num_y_ticks or y_tick_inc, not both. - - var $skip_top_tick = FALSE; - var $skip_bottom_tick = FALSE; - var $skip_left_tick = FALSE; - var $skip_right_tick = FALSE; - -//Grid Formatting - var $draw_x_grid = FALSE; - var $draw_y_grid = TRUE; - - var $dashed_grid = TRUE; - var $grid_at_foreground = FALSE; // Chooses whether to draw the grid below or above the graph - -//Colors and styles (all colors can be array (R,G,B) or named color) - var $color_array = 'small'; // 'small', 'large' or array (define your own colors) - // See rgb.inc.php and SetRGBArray() - var $i_border = array(194, 194, 194); - var $plot_bg_color = 'white'; - var $bg_color = 'white'; - var $label_color = 'black'; - var $text_color = 'black'; - var $grid_color = 'black'; - var $light_grid_color = 'gray'; - var $tick_color = 'black'; - var $title_color = 'black'; - var $data_colors = array('SkyBlue', 'green', 'orange', 'blue', 'orange', 'red', 'violet', 'azure1'); - var $error_bar_colors = array('SkyBlue', 'green', 'orange', 'blue', 'orange', 'red', 'violet', 'azure1'); - var $data_border_colors = array('black'); - - var $line_widths = 1; // single value or array - var $line_styles = array('solid', 'solid', 'dashed'); // single value or array - var $dashed_style = '2-4'; // colored dots-transparent dots - - var $point_sizes = array(5,5,3); // single value or array - var $point_shapes = array('diamond'); // rect, circle, diamond, triangle, dot, line, halfline, cross - - var $error_bar_size = 5; // right and left size of tee - var $error_bar_shape = 'tee'; // 'tee' or 'line' - var $error_bar_line_width = 1; // single value (or array TODO) - - var $plot_border_type = 'sides'; // left, sides, none, full - var $image_border_type = 'none'; // 'raised', 'plain', 'none' - - var $shading = 5; // 0 for no shading, > 0 is size of shadows in pixels - - var $draw_plot_area_background = FALSE; - var $draw_broken_lines = FALSE; // Tells not to draw lines for missing Y data. - - -////////////////////////////////////////////////////// -//BEGIN CODE -////////////////////////////////////////////////////// - - /*! - * Constructor: Setup img resource, colors and size of the image, and font sizes. - * - * \param which_width int Image width in pixels. - * \param which_height int Image height in pixels. - * \param which_output_file string Filename for output. - * \param which_input_fule string Path to a file to be used as background. - */ - function PHPlot($which_width=600, $which_height=400, $which_output_file=NULL, $which_input_file=NULL) - { - /* - * Please see http://www.php.net/register_shutdown_function - * PLEASE NOTE: register_shutdown_function() will take a copy of the object rather than a reference - * so we put an ampersand. However, the function registered will work on the object as it - * was upon registration. To solve this, one of two methods can be used: - * $obj = new object(); - * register_shutdown_function(array(&$obj,'shutdown')); - * OR - * $obj = &new object(); - * HOWEVER, as the second statement assigns $obj a reference to the current object, it might be that - * several instances mess things up... (CHECK THIS) - * - * AND - * as $this->img is set upon construction of the object, problems will not arise for us (for the - * moment maybe, so I put all this here just in case) - */ - register_shutdown_function(array(&$this, '_PHPlot')); - - $this->SetRGBArray($this->color_array); - - $this->background_done = FALSE; // Set to TRUE after background image is drawn once - - if ($which_output_file) - $this->SetOutputFile($which_output_file); - - if ($which_input_file) - $this->SetInputFile($which_input_file); - else { - $this->image_width = $which_width; - $this->image_height = $which_height; - - $this->img = ImageCreate($this->image_width, $this->image_height); - if (! $this->img) - $this->PrintError('PHPlot(): Could not create image resource.'); - - } - - $this->SetDefaultStyles(); - $this->SetDefaultFonts(); - - $this->SetTitle(''); - $this->SetXTitle(''); - $this->SetYTitle(''); - - $this->print_image = TRUE; // Use for multiple plots per image (TODO: automatic) - } - - /*! - * Destructor. Image resources not deallocated can be memory hogs, I think - * it is safer to automatically call imagedestroy upon script termination than - * do it ourselves. - * See notes in the constructor code. - */ - function _PHPlot () - { - ImageDestroy($this->img); - return; - } - - -///////////////////////////////////////////// -////////////// COLORS -///////////////////////////////////////////// - - /*! - * Returns an index to a color passed in as anything (string, hex, rgb) - * - * \param which_color * Color (can be '#AABBCC', 'Colorname', or array(r,g,b)) - */ - function SetIndexColor($which_color) - { - list ($r, $g, $b) = $this->SetRGBColor($which_color); //Translate to RGB - $index = ImageColorExact($this->img, $r, $g, $b); - if ($index == -1) { - return ImageColorResolve($this->img, $r, $g, $b); - } else { - return $index; - } - } - - - /*! - * Returns an index to a slightly darker color than the one requested. - */ - function SetIndexDarkColor($which_color) - { - list ($r, $g, $b) = $this->SetRGBColor($which_color); - - $r -= 0x30; $r = ($r < 0) ? 0 : $r; - $g -= 0x30; $g = ($g < 0) ? 0 : $g; - $b -= 0x30; $b = ($b < 0) ? 0 : $b; - - $index = ImageColorExact($this->img, $r, $g, $b); - if ($index == -1) { - return ImageColorResolve($this->img, $r, $g, $b); - } else { - return $index; - } - } - - /*! - * Sets/reverts all colors and styles to their defaults. If session is set, then only updates indices, - * as they are lost with every script execution, else, sets the default colors by name or value and - * then updates indices too. - * - * FIXME Isn't this too slow? - * - */ - function SetDefaultStyles() - { - /* Some of the Set*() functions use default values when they get no parameters. */ - - if (! isset($this->session_set)) { - // If sessions are enabled, this variable will be preserved, so upon future executions, we - // will have it set, as well as color names (though not color indices, that's why we - // need to rebuild them) - $this->session_set = TRUE; - - // These only need to be set once - $this->SetLineWidths(); - $this->SetLineStyles(); - $this->SetDefaultDashedStyle($this->dashed_style); - $this->SetPointSizes($this->point_sizes); - } - - $this->SetImageBorderColor($this->i_border); - $this->SetPlotBgColor($this->plot_bg_color); - $this->SetBackgroundColor($this->bg_color); - $this->SetLabelColor($this->label_color); - $this->SetTextColor($this->text_color); - $this->SetGridColor($this->grid_color); - $this->SetLightGridColor($this->light_grid_color); - $this->SetTickColor($this->tick_color); - $this->SetTitleColor($this->title_color); - $this->SetDataColors(); - $this->SetErrorBarColors(); - $this->SetDataBorderColors(); - } - - - /* - * - */ - function SetBackgroundColor($which_color) - { - $this->bg_color= $which_color; - $this->ndx_bg_color= $this->SetIndexColor($this->bg_color); - return TRUE; - } - - /* - * - */ - function SetPlotBgColor($which_color) - { - $this->plot_bg_color= $which_color; - $this->ndx_plot_bg_color= $this->SetIndexColor($this->plot_bg_color); - return TRUE; - } - - /* - * - */ - function SetTitleColor($which_color) - { - $this->title_color= $which_color; - $this->ndx_title_color= $this->SetIndexColor($this->title_color); - return TRUE; - } - - /* - * - */ - function SetTickColor ($which_color) - { - $this->tick_color= $which_color; - $this->ndx_tick_color= $this->SetIndexColor($this->tick_color); - return TRUE; - } - - - /* - * - */ - function SetLabelColor ($which_color) - { - $this->label_color = $which_color; - $this->ndx_title_color= $this->SetIndexColor($this->label_color); - return TRUE; - } - - - /* - * - */ - function SetTextColor ($which_color) - { - $this->text_color= $which_color; - $this->ndx_text_color= $this->SetIndexColor($this->text_color); - return TRUE; - } - - - /* - * - */ - function SetLightGridColor ($which_color) - { - $this->light_grid_color= $which_color; - $this->ndx_light_grid_color= $this->SetIndexColor($this->light_grid_color); - return TRUE; - } - - - /* - * - */ - function SetGridColor ($which_color) - { - $this->grid_color = $which_color; - $this->ndx_grid_color= $this->SetIndexColor($this->grid_color); - return TRUE; - } - - - /* - * - */ - function SetImageBorderColor($which_color) - { - $this->i_border = $which_color; - $this->ndx_i_border = $this->SetIndexColor($this->i_border); - $this->ndx_i_border_dark = $this->SetIndexDarkColor($this->i_border); - return TRUE; - } - - - /* - * - */ - function SetTransparentColor($which_color) - { - ImageColorTransparent($this->img, $this->SetIndexColor($which_color)); - return TRUE; - } - - - /*! - * Sets the array of colors to be used. It can be user defined, a small predefined one - * or a large one included from 'rgb.inc.php'. - * - * \param which_color_array If an array, the used as color array. If a string can - * be one of 'small' or 'large'. - */ - function SetRGBArray ($which_color_array) - { - if ( is_array($which_color_array) ) { // User defined array - $this->rgb_array = $which_color_array; - return TRUE; - } elseif ($which_color_array == 'small') { // Small predefined color array - $this->rgb_array = array( - 'white' => array(255, 255, 255), - 'snow' => array(255, 250, 250), - 'PeachPuff' => array(255, 218, 185), - 'ivory' => array(255, 255, 240), - 'lavender' => array(230, 230, 250), - 'black' => array( 0, 0, 0), - 'DimGrey' => array(105, 105, 105), - 'gray' => array(190, 190, 190), - 'grey' => array(190, 190, 190), - 'navy' => array( 0, 0, 128), - 'SlateBlue' => array(106, 90, 205), - 'blue' => array( 0, 0, 255), - 'SkyBlue' => array(135, 206, 235), - 'cyan' => array( 0, 255, 255), - 'DarkGreen' => array( 0, 100, 0), - 'green' => array( 0, 255, 0), - 'YellowGreen' => array(154, 205, 50), - 'yellow' => array(255, 255, 0), - 'orange' => array(255, 165, 0), - 'gold' => array(255, 215, 0), - 'peru' => array(205, 133, 63), - 'beige' => array(245, 245, 220), - 'wheat' => array(245, 222, 179), - 'tan' => array(210, 180, 140), - 'brown' => array(165, 42, 42), - 'salmon' => array(250, 128, 114), - 'red' => array(255, 0, 0), - 'pink' => array(255, 192, 203), - 'maroon' => array(176, 48, 96), - 'magenta' => array(255, 0, 255), - 'violet' => array(238, 130, 238), - 'plum' => array(221, 160, 221), - 'orchid' => array(218, 112, 214), - 'purple' => array(160, 32, 240), - 'azure1' => array(240, 255, 255), - 'aquamarine1' => array(127, 255, 212) - ); - return TRUE; - } elseif ($which_color_array === 'large') { // Large color array - include("./rgb.inc.php"); - $this->rgb_array = $RGBArray; - } else { // Default to black and white only. - $this->rgb_array = array('white' => array(255, 255, 255), 'black' => array(0, 0, 0)); - } - - return TRUE; - } - - /*! - * Returns an array in R, G, B format 0-255 - * - * \param color_asked array(R,G,B) or string (named color or '#AABBCC') - */ - function SetRGBColor($color_asked) - { - if ($color_asked == '') { $color_asked = array(0, 0, 0); }; - - if ( count($color_asked) == 3 ) { // already array of 3 rgb - $ret_val = $color_asked; - } else { // asking for a color by string - if(substr($color_asked, 0, 1) == '#') { // asking in #FFFFFF format. - $ret_val = array(hexdec(substr($color_asked, 1, 2)), hexdec(substr($color_asked, 3, 2)), - hexdec(substr($color_asked, 5, 2))); - } else { // asking by color name - $ret_val = $this->rgb_array[$color_asked]; - } - } - return $ret_val; - } - - - /*! - * Sets the colors for the data. - */ - function SetDataColors($which_data = NULL, $which_border = NULL) - { - if (is_null($which_data) && is_array($this->data_colors)) { - // use already set data_colors - } else if (! is_array($which_data)) { - $this->data_colors = ($which_data) ? array($which_data) : array('blue', 'red', 'green', 'orange'); - } else { - $this->data_colors = $which_data; - } - - $i = 0; - foreach ($this->data_colors as $col) { - $this->ndx_data_colors[$i] = $this->SetIndexColor($col); - $this->ndx_data_dark_colors[$i] = $this->SetIndexDarkColor($col); - $i++; - } - - // For past compatibility: - $this->SetDataBorderColors($which_border); - } // function SetDataColors() - - - /*! - * - */ - function SetDataBorderColors($which_br = NULL) - { - if (is_null($which_br) && is_array($this->data_border_colors)) { - // use already set data_border_colors - } else if (! is_array($which_br)) { - // Create new array with specified color - $this->data_border_colors = ($which_br) ? array($which_br) : array('black'); - } else { - $this->data_border_colors = $which_br; - } - - $i = 0; - foreach($this->data_border_colors as $col) { - $this->ndx_data_border_colors[$i] = $this->SetIndexColor($col); - $i++; - } - } // function SetDataBorderColors() - - - /*! - * Sets the colors for the data error bars. - */ - function SetErrorBarColors($which_err = NULL) - { - if (is_null($which_err) && is_array($this->error_bar_colors)) { - // use already set error_bar_colors - } else if (! is_array($which_err)) { - $this->error_bar_colors = ($which_err) ? array($which_err) : array('black'); - } else { - $this->error_bar_colors = $which_err; - } - - $i = 0; - foreach($this->error_bar_colors as $col) { - $this->ndx_error_bar_colors[$i] = $this->SetIndexColor($col); - $i++; - } - return TRUE; - - } // function SetErrorBarColors() - - - /*! - * Sets the default dashed style. - * \param which_style A string specifying order of colored and transparent dots, - * i.e: '4-3' means 4 colored, 3 transparent; - * '2-3-1-2' means 2 colored, 3 transparent, 1 colored, 2 transparent. - */ - function SetDefaultDashedStyle($which_style) - { - // String: "numcol-numtrans-numcol-numtrans..." - $asked = explode('-', $which_style); - - if (count($asked) < 2) { - $this->DrawError("SetDefaultDashedStyle(): Wrong parameter '$which_style'."); - return FALSE; - } - - // Build the string to be eval()uated later by SetDashedStyle() - $this->default_dashed_style = 'array( '; - - $t = 0; - foreach($asked as $s) { - if ($t % 2 == 0) { - $this->default_dashed_style .= str_repeat('$which_ndxcol,', $s); - } else { - $this->default_dashed_style .= str_repeat('IMG_COLOR_TRANSPARENT,', $s); - } - $t++; - } - // Remove trailing comma and add closing parenthesis - $this->default_dashed_style = substr($this->default_dashed_style, 0, -1); - $this->default_dashed_style .= ')'; - - return TRUE; - } - - - /*! - * Sets the style before drawing a dashed line. Defaults to $this->default_dashed_style - * \param which_ndxcol Color index to be used. - */ - function SetDashedStyle($which_ndxcol) - { - // See SetDefaultDashedStyle() to understand this. - eval ("\$style = $this->default_dashed_style;"); - return imagesetstyle($this->img, $style); - } - - - /*! - * Sets line widths on a per-line basis. - */ - function SetLineWidths($which_lw=NULL) - { - if (is_null($which_lw)) { - // Do nothing, use default value. - } else if (is_array($which_lw)) { - // Did we get an array with line widths? - $this->line_widths = $which_lw; - } else { - $this->line_widths = array($which_lw); - } - return TRUE; - } - - /*! - * - */ - function SetLineStyles($which_ls=NULL) - { - if (is_null($which_ls)) { - // Do nothing, use default value. - } else if (! is_array($which_ls)) { - // Did we get an array with line styles? - $this->line_styles = $which_ls; - } else { - $this->line_styles = ($which_ls) ? array($which_ls) : array('solid'); - } - return TRUE; - } - - -///////////////////////////////////////////// -////////////// FONTS -///////////////////////////////////////////// - - - /*! - * Sets number of pixels between lines of the same text. - */ - function SetLineSpacing($which_spc) - { - $this->line_spacing = $which_spc; - } - - - /*! - * Enables use of TrueType fonts in the graph. Font initialisation methods - * depend on this setting, so when called, SetUseTTF() resets the font - * settings - */ - function SetUseTTF($which_ttf) - { - $this->use_ttf = $which_ttf; - if ($which_ttf) - $this->SetDefaultFonts(); - return TRUE; - } - - /*! - * Sets the directory name to look into for TrueType fonts. - */ - function SetTTFPath($which_path) - { - // Maybe someone needs really dynamic config. He'll need this: - // clearstatcache(); - - if (is_dir($which_path) && is_readable($which_path)) { - $this->ttf_path = $which_path; - return TRUE; - } else { - $this->PrintError("SetTTFPath(): $which_path is not a valid path."); - return FALSE; - } - } - - /*! - * Sets the default TrueType font and updates all fonts to that. - */ - function SetDefaultTTFont($which_font) - { - if (is_file($which_font) && is_readable($which_font)) { - $this->default_ttfont = $which_font; - return $this->SetDefaultFonts(); - } else { - $this->PrintError("SetDefaultTTFont(): $which_font is not a valid font file."); - return FALSE; - } - } - - /*! - * Sets fonts to their defaults - */ - function SetDefaultFonts() - { - // TTF: - if ($this->use_ttf) { - //$this->SetTTFPath(dirname($_SERVER['PHP_SELF'])); - $this->SetTTFPath(getcwd()); - $this->SetFont('generic', $this->default_ttfont, 8); - $this->SetFont('title', $this->default_ttfont, 14); - $this->SetFont('legend', $this->default_ttfont, 8); - $this->SetFont('x_label', $this->default_ttfont, 6); - $this->SetFont('y_label', $this->default_ttfont, 6); - $this->SetFont('x_title', $this->default_ttfont, 10); - $this->SetFont('y_title', $this->default_ttfont, 10); - } - // Fixed: - else { - $this->SetFont('generic', 2); - $this->SetFont('title', 5); - $this->SetFont('legend', 2); - $this->SetFont('x_label', 1); - $this->SetFont('y_label', 1); - $this->SetFont('x_title', 3); - $this->SetFont('y_title', 3); - } - - return TRUE; - } - - /*! - * Sets Fixed/Truetype font parameters. - * \param $which_elem Is the element whose font is to be changed. - * It can be one of 'title', 'legend', 'generic', - * 'x_label', 'y_label', x_title' or 'y_title' - * \param $which_font Can be a number (for fixed font sizes) or - * a string with the filename when using TTFonts. - * \param $which_size Point size (TTF only) - * Calculates and updates internal height and width variables. - */ - function SetFont($which_elem, $which_font, $which_size = 12) - { - // TTF: - if ($this->use_ttf) { - $path = $this->ttf_path.'/'.$which_font; - - if (! is_file($path) || ! is_readable($path) ) { - $this->DrawError("SetFont(): True Type font $path doesn't exist"); - return FALSE; - } - - switch ($which_elem) { - case 'generic': - $this->generic_font['font'] = $path; - $this->generic_font['size'] = $which_size; - break; - case 'title': - $this->title_font['font'] = $path; - $this->title_font['size'] = $which_size; - break; - case 'legend': - $this->legend_font['font'] = $path; - $this->legend_font['size'] = $which_size; - break; - case 'x_label': - $this->x_label_font['font'] = $path; - $this->x_label_font['size'] = $which_size; - break; - case 'y_label': - $this->y_label_font['font'] = $path; - $this->y_label_font['size'] = $which_size; - break; - case 'x_title': - $this->x_title_font['font'] = $path; - $this->x_title_font['size'] = $which_size; - break; - case 'y_title': - $this->y_title_font['font'] = $path; - $this->y_title_font['size'] = $which_size; - break; - default: - $this->DrawError("SetFont(): Unknown element '$which_elem' specified."); - return FALSE; - } - return TRUE; - - } - - // Fixed fonts: - if ($which_font > 5 || $which_font < 0) { - $this->DrawError('SetFont(): Non-TTF font size must be 1, 2, 3, 4 or 5'); - return FALSE; - } - - switch ($which_elem) { - case 'generic': - $this->generic_font['font'] = $which_font; - $this->generic_font['height'] = ImageFontHeight($which_font); - $this->generic_font['width'] = ImageFontWidth($which_font); - break; - case 'title': - $this->title_font['font'] = $which_font; - $this->title_font['height'] = ImageFontHeight($which_font); - $this->title_font['width'] = ImageFontWidth($which_font); - break; - case 'legend': - $this->legend_font['font'] = $which_font; - $this->legend_font['height'] = ImageFontHeight($which_font); - $this->legend_font['width'] = ImageFontWidth($which_font); - break; - case 'x_label': - $this->x_label_font['font'] = $which_font; - $this->x_label_font['height'] = ImageFontHeight($which_font); - $this->x_label_font['width'] = ImageFontWidth($which_font); - break; - case 'y_label': - $this->y_label_font['font'] = $which_font; - $this->y_label_font['height'] = ImageFontHeight($which_font); - $this->y_label_font['width'] = ImageFontWidth($which_font); - break; - case 'x_title': - $this->x_title_font['font'] = $which_font; - $this->x_title_font['height'] = ImageFontHeight($which_font); - $this->x_title_font['width'] = ImageFontWidth($which_font); - break; - case 'y_title': - $this->y_title_font['font'] = $which_font; - $this->y_title_font['height'] = ImageFontHeight($which_font); - $this->y_title_font['width'] = ImageFontWidth($which_font); - break; - default: - $this->DrawError("SetFont(): Unknown element '$which_elem' specified."); - return FALSE; - } - return TRUE; - } - - - /*! - * Returns an array with the size of the bounding box of an - * arbitrarily placed (rotated) TrueType text string. - */ - function TTFBBoxSize($size, $angle, $font, $string) - { - // First, assume angle < 90 - $arr = ImageTTFBBox($size, 0, $font, $string); - $flat_width = $arr[2] - $arr[0]; - $flat_height = abs($arr[3] - $arr[5]); - - // Now the bounding box - $angle = deg2rad($angle); - $width = ceil(abs($flat_width*cos($angle) + $flat_height*sin($angle))); //Must be integer - $height = ceil(abs($flat_width*sin($angle) + $flat_height*cos($angle))); //Must be integer - - return array($width, $height); - } - - - /*! - * Draws a string of text. Horizontal and vertical alignment are relative to - * to the drawing. That is: vertical text (90 deg) gets centered along y-axis - * with v_align = 'center', and adjusted to the left of x-axis with h_align = 'right', - * - * \note Original multiple lines code submitted by Remi Ricard. - * \note Original vertical code submitted by Marlin Viss. - */ - function DrawText($which_font, $which_angle, $which_xpos, $which_ypos, $which_color, $which_text, - $which_halign = 'left', $which_valign = 'bottom') - { - // TTF: - if ($this->use_ttf) { - $size = $this->TTFBBoxSize($which_font['size'], $which_angle, $which_font['font'], $which_text); - $rads = deg2rad($which_angle); - - if ($which_valign == 'center') - $which_ypos += $size[1]/2; - - if ($which_valign == 'bottom') - $which_ypos += $size[1]; - - if ($which_halign == 'center') - $which_xpos -= ($size[0]/2) * cos($rads); - - if ($which_halign == 'left') - $which_xpos += $size[0] * sin($rads); - - if ($which_halign == 'right') - $which_xpos -= $size[0] * cos($rads); - - ImageTTFText($this->img, $which_font['size'], $which_angle, - $which_xpos, $which_ypos, $which_color, $which_font['font'], $which_text); - } - // Fixed fonts: - else { - // Split the text by its lines, and count them - $which_text = ereg_replace("\r", "", $which_text); - $str = split("\n", $which_text); - $nlines = count($str); - $spacing = $this->line_spacing * ($nlines - 1); - - // Vertical text: - // (Remember the alignment convention with vertical text) - if ($which_angle == 90) { - // The text goes around $which_xpos. - if ($which_halign == 'center') - $which_xpos -= ($nlines * ($which_font['height'] + $spacing))/2; - - // Left alignment requires no modification to $xpos... - // Right-align it. $which_xpos designated the rightmost x coordinate. - else if ($which_halign == 'right') - $which_xpos += ($nlines * ($which_font['height'] + $spacing)); - - $ypos = $which_ypos; - for($i = 0; $i < $nlines; $i++) { - // Center the text vertically around $which_ypos (each line) - if ($which_valign == 'center') - $ypos = $which_ypos + (strlen($str[$i]) * $which_font['width']) / 2; - // Make the text finish (vertically) at $which_ypos - if ($which_valign == 'bottom') - $ypos = $which_ypos + strlen($str[$i]) * $which_font['width']; - - ImageStringUp($this->img, $which_font['font'], - $i * ($which_font['height'] + $spacing) + $which_xpos, - $ypos, $str[$i], $which_color); - } - } - // Horizontal text: - else { - // The text goes above $which_ypos - if ($which_valign == 'top') - $which_ypos -= $nlines * ($which_font['height'] + $spacing); - // The text is centered around $which_ypos - if ($which_valign == 'center') - $which_ypos -= ($nlines * ($which_font['height'] + $spacing))/2; - // valign = 'bottom' requires no modification - - $xpos = $which_xpos; - for($i = 0; $i < $nlines; $i++) { - // center the text around $which_xpos - if ($which_halign == 'center') - $xpos = $which_xpos - (strlen($str[$i]) * $which_font['width'])/2; - // make the text finish at $which_xpos - if ($which_halign == 'right') - $xpos = $which_xpos - strlen($str[$i]) * $which_font['width']; - - ImageString($this->img, $which_font['font'], $xpos, - $i * ($which_font['height'] + $spacing) + $which_ypos, - $str[$i], $which_color); - } - } - } - return TRUE; - } // function DrawText() - - -///////////////////////////////////////////// -/////////// INPUT / OUTPUT CONTROL -///////////////////////////////////////////// - - /*! - * Sets output file format. - */ - function SetFileFormat($format) - { - $asked = $this->CheckOption($format, 'jpg, png, gif, wbmp', __FUNCTION__); - - switch ($asked) { - case 'jpg': - if (imagetypes() & IMG_JPG) - $this->file_format = 'jpg'; - return TRUE; - break; - case 'png': - if (imagetypes() & IMG_PNG) - $this->file_format = 'png'; - return TRUE; - break; - case 'gif': - if (imagetypes() & IMG_GIF) - $this->file_format = 'gif'; - return TRUE; - break; - case 'wbmp': - if (imagetypes() & IMG_WBMP) - $this->file_format = 'wbmp'; - return TRUE; - break; - default: - $this->PrintError("SetFileFormat():File format '$format' not supported"); - return FALSE; - } - } - - - /*! - * Selects an input file to be used as graph background and scales or tiles this image - * to fit the sizes. - * \param input_file string Path to the file to be used (jpeg, png and gif accepted) - * \param mode string 'centeredtile', 'tile', 'scale' (the image to the graph's size) - */ - function SetBgImage($input_file, $mode='centeredtile') - { - $this->bgmode = $this->CheckOption($mode, 'tile, centeredtile, scale', __FUNCTION__); - $this->bgimg = $input_file; - } - - /*! - * Selects an input file to be used as plot area background and scales or tiles this image - * to fit the sizes. - * \param input_file string Path to the file to be used (jpeg, png and gif accepted) - * \param mode string 'centeredtile', 'tile', 'scale' (the image to the graph's size) - */ - function SetPlotAreaBgImage($input_file, $mode='tile') - { - $this->plotbgmode = $this->CheckOption($mode, 'tile, centeredtile, scale', __FUNCTION__); - $this->plotbgimg = $input_file; - } - - - /*! - * Sets the name of the file to be used as output file. - */ - function SetOutputFile($which_output_file) - { - $this->output_file = $which_output_file; - return TRUE; - } - - /*! - * Sets the output image as 'inline', that is: no Content-Type headers are sent - * to the browser. Needed if you want to embed the images. - */ - function SetIsInline($which_ii) - { - $this->is_inline = (bool)$which_ii; - return TRUE; - } - - - /*! - * Performs the actual outputting of the generated graph, and - * destroys the image resource. - */ - function PrintImage() - { - // Browser cache stuff submitted by Thiemo Nagel - if ( (! $this->browser_cache) && (! $this->is_inline)) { - header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); - header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . 'GMT'); - header('Cache-Control: no-cache, must-revalidate'); - header('Pragma: no-cache'); - } - - switch($this->file_format) { - case 'png': - if (! $this->is_inline) { - Header('Content-type: image/png'); - } - if ($this->is_inline && $this->output_file != '') { - ImagePng($this->img, $this->output_file); - } else { - ImagePng($this->img); - } - break; - case 'jpg': - if (! $this->is_inline) { - Header('Content-type: image/jpeg'); - } - if ($this->is_inline && $this->output_file != '') { - ImageJPEG($this->img, $this->output_file); - } else { - ImageJPEG($this->img); - } - break; - case 'gif': - if (! $this->is_inline) { - Header('Content-type: image/gif'); - } - if ($this->is_inline && $this->output_file != '') { - ImageGIF($this->img, $this->output_file); - } else { - ImageGIF($this->img); - } - - break; - case 'wbmp': // wireless bitmap, 2 bit. - if (! $this->is_inline) { - Header('Content-type: image/wbmp'); - } - if ($this->is_inline && $this->output_file != '') { - ImageWBMP($this->img, $this->output_file); - } else { - ImageWBMP($this->img); - } - - break; - default: - $this->PrintError('PrintImage(): Please select an image type!'); - break; - } - return TRUE; - } - - /*! - * Prints an error message to stdout and dies - */ - function PrintError($error_message) - { - echo "

    Fatal error: $error_message

    "; - die; - } - - /*! - * Prints an error message inline into the generated image and draws it centered - * around the given coordinates (defaults to center of the image) - * \param error_message Message to be drawn - * \param where_x X coordinate - * \param where_y Y coordinate - */ - function DrawError($error_message, $where_x = NULL, $where_y = NULL) - { - if (! $this->img) - $this->PrintError('_DrawError(): Warning, no image resource allocated. '. - 'The message to be written was: '.$error_message); - - $ypos = (! $where_y) ? $this->image_height/2 : $where_y; - $xpos = (! $where_x) ? $this->image_width/2 : $where_x; - ImageRectangle($this->img, 0, 0, $this->image_width, $this->image_height, - ImageColorAllocate($this->img, 255, 255, 255)); - - $this->DrawText($this->generic_font, 0, $xpos, $ypos, ImageColorAllocate($this->img, 0, 0, 0), - $error_message, 'center', 'center'); - - $this->PrintImage(); - exit; -// return TRUE; - } - -///////////////////////////////////////////// -/////////// LABELS -///////////////////////////////////////////// - - - /*! - * Sets position for X labels following data points. - */ - function SetXDataLabelPos($which_xdlp) - { - $this->x_data_label_pos = $this->CheckOption($which_xdlp, 'plotdown, plotup, both, xaxis, all, none', - __FUNCTION__); - if ($which_xdlp != 'none') - $this->x_tick_label_pos = 'none'; - - return TRUE; - } - - /*! - * Sets position for Y labels following data points. - */ - function SetYDataLabelPos($which_ydlp) - { - $this->y_data_label_pos = $this->CheckOption($which_ydlp, 'plotleft, plotright, both, yaxis, all, none', - __FUNCTION__); - if ($which_ydlp != 'none') - $this->y_tick_label_pos = 'none'; - - return TRUE; - } - - - /*! - * Sets position for X labels following ticks (hence grid lines) - */ - function SetXTickLabelPos($which_xtlp) - { - $this->x_tick_label_pos = $this->CheckOption($which_xtlp, 'plotdown, plotup, both, xaxis, all, none', - __FUNCTION__); - if ($which_xtlp != 'none') - $this->x_data_label_pos = 'none'; - - return TRUE; - } - - /*! - * Sets position for Y labels following ticks (hence grid lines) - */ - function SetYTickLabelPos($which_ytlp) - { - $this->y_tick_label_pos = $this->CheckOption($which_ytlp, 'plotleft, plotright, both, yaxis, all, none', - __FUNCTION__); - if ($which_ytlp != 'none') - $this->y_data_label_pos = 'none'; - - return TRUE; - } - - /*! - * Sets type for tick and data labels on X axis. - * \note 'title' type left for backwards compatibility. - */ - function SetXLabelType($which_xlt) - { - $this->x_label_type = $this->CheckOption($which_xlt, 'data, time, title', __FUNCTION__); - return TRUE; - } - - /*! - * Sets type for tick and data labels on Y axis. - */ - function SetYLabelType($which_ylt) - { - $this->y_label_type = $this->CheckOption($which_ylt, 'data, time', __FUNCTION__); - return TRUE; - } - - function SetXTimeFormat($which_xtf) - { - $this->x_time_format = $which_xtf; - return TRUE; - } - function SetYTimeFormat($which_ytf) - { - $this->y_time_format = $which_ytf; - return TRUE; - } - - function SetXLabelAngle($which_xla) - { - $this->x_label_angle = $which_xla; - return TRUE; - } - - function SetYLabelAngle($which_yla) - { - $this->y_label_angle = $which_yla; - return TRUE; - } - -///////////////////////////////////////////// -/////////// MISC -///////////////////////////////////////////// - - /*! - * Checks the valididy of an option. - * \param which_opt String to check. - * \param which_acc String of accepted choices. - * \param which_func Name of the calling function, for error messages. - * \note If checking everywhere for correctness slows things down, we could provide a - * child class overriding every Set...() method which uses CheckOption(). Those new - * methods could proceed in the unsafe but faster way. - */ - function CheckOption($which_opt, $which_acc, $which_func) - { - $asked = trim($which_opt); - - // FIXME: this for backward compatibility, as eregi() fails with empty strings. - if ($asked == '') - return ''; - - $asked = strtolower($asked); - if (@ eregi($asked, $which_acc)) { - return $asked; - } else { - $this->DrawError("$which_func(): '$which_opt' not in available choices: '$which_acc'."); - return NULL; - } - } - - - /*! - * \note Submitted by Thiemo Nagel - */ - function SetBrowserCache($which_browser_cache) - { - $this->browser_cache = $which_browser_cache; - return TRUE; - } - - /*! - * Whether to show the final image or not - */ - function SetPrintImage($which_pi) - { - $this->print_image = $which_pi; - return TRUE; - } - - /*! - * Sets the graph's legend. If argument is not an array, appends it to the legend. - */ - function SetLegend($which_leg) - { - if (is_array($which_leg)) { // use array - $this->legend = $which_leg; - return TRUE; - } else if (! is_null($which_leg)) { // append string - $this->legend[] = $which_leg; - return TRUE; - } else { - $this->DrawError("SetLegend(): argument must not be null."); - return FALSE; - } - } - - /*! - * Specifies the absolute (relative to image's up/left corner) position - * of the legend's upper/leftmost corner. - * $which_type not yet used (TODO) - */ - function SetLegendPixels($which_x, $which_y, $which_type=NULL) - { - $this->legend_x_pos = $which_x; - $this->legend_y_pos = $which_y; - - return TRUE; - } - - /*! - * Specifies the relative (to graph's origin) position of the legend's - * upper/leftmost corner. MUST be called after scales are set up. - * $which_type not yet used (TODO) - */ - function SetLegendWorld($which_x, $which_y, $which_type=NULL) - { - if (! isset($this->scale_is_set)) - $this->CalcTranslation(); - - $this->legend_x_pos = $this->xtr($which_x); - $this->legend_y_pos = $this->ytr($which_y); - - return TRUE; - } - - /*! - * Accepted values are: left, sides, none, full - */ - function SetPlotBorderType($pbt) - { - $this->plot_border_type = $this->CheckOption($pbt, 'left, sides, none, full', __FUNCTION__); - } - - /*! - * Accepted values are: raised, plain - */ - function SetImageBorderType($sibt) - { - $this->image_border_type = $this->CheckOption($sibt, 'raised, plain', __FUNCTION__); - } - - - /*! - * \param dpab bool - */ - function SetDrawPlotAreaBackground($dpab) - { - $this->draw_plot_area_background = (bool)$dpab; - } - - - /*! - * \param dyg bool - */ - function SetDrawYGrid($dyg) - { - $this->draw_y_grid = (bool)$dyg; - return TRUE; - } - - - /*! - * \param dxg bool - */ - function SetDrawXGrid($dxg) - { - $this->draw_x_grid = (bool)$dxg; - return TRUE; - } - - - /*! - * \param ddg bool - */ - function SetDrawDashedGrid($ddg) - { - $this->dashed_grid = (bool)$ddg; - return TRUE; - } - - - /*! - * \param dxdl bool - */ - function SetDrawXDataLabelLines($dxdl) - { - $this->draw_x_data_label_lines = (bool)$dxdl; - return TRUE; - } - - - /*! - * TODO: draw_y_data_label_lines not implemented. - * \param dydl bool - */ - function SetDrawYDataLabelLines($dydl) - { - $this->draw_y_data_label_lines = $dydl; - return TRUE; - } - - /*! - * Sets the graph's title. - * TODO: add parameter to choose title placement: left, right, centered= - */ - function SetTitle($which_title) - { - $this->title_txt = $which_title; - - if ($which_title == '') { - $this->title_height = 0; - return TRUE; - } - - $str = split("\n", $which_title); - $lines = count($str); - $spacing = $this->line_spacing * ($lines - 1); - - if ($this->use_ttf) { - $size = $this->TTFBBoxSize($this->title_font['size'], 0, $this->title_font['font'], $which_title); - $this->title_height = $size[1] * $lines; - } else { - $this->title_height = ($this->title_font['height'] + $spacing) * $lines; - } - return TRUE; - } - - /*! - * Sets the X axis title and position. - */ - function SetXTitle($which_xtitle, $which_xpos = 'plotdown') - { - if ($which_xtitle == '') - $which_xpos = 'none'; - - $this->x_title_pos = $this->CheckOption($which_xpos, 'plotdown, plotup, both, none', __FUNCTION__); - - $this->x_title_txt = $which_xtitle; - - $str = split("\n", $which_xtitle); - $lines = count($str); - $spacing = $this->line_spacing * ($lines - 1); - - if ($this->use_ttf) { - $size = $this->TTFBBoxSize($this->x_title_font['size'], 0, $this->x_title_font['font'], $which_xtitle); - $this->x_title_height = $size[1] * $lines; - } else { - $this->x_title_height = ($this->y_title_font['height'] + $spacing) * $lines; - } - - return TRUE; - } - - - /*! - * Sets the Y axis title and position. - */ - function SetYTitle($which_ytitle, $which_ypos = 'plotleft') - { - if ($which_ytitle == '') - $which_ypos = 'none'; - - $this->y_title_pos = $this->CheckOption($which_ypos, 'plotleft, plotright, both, none', __FUNCTION__); - - $this->y_title_txt = $which_ytitle; - - $str = split("\n", $which_ytitle); - $lines = count($str); - $spacing = $this->line_spacing * ($lines - 1); - - if ($this->use_ttf) { - $size = $this->TTFBBoxSize($this->y_title_font['size'], 90, $this->y_title_font['font'], - $which_ytitle); - $this->y_title_width = $size[0] * $lines; - } else { - $this->y_title_width = ($this->y_title_font['height'] + $spacing) * $lines; - } - - return TRUE; - } - - /*! - * Sets the size of the drop shadow for bar and pie charts. - * \param which_s int Size in pixels. - */ - function SetShading($which_s) - { - $this->shading = (int)$which_s; - return TRUE; - } - - function SetPlotType($which_pt) - { - $this->plot_type = $this->CheckOption($which_pt, - 'bars, stackedbars, lines, linepoints, area, points, pie, thinbarline, squared', - __FUNCTION__); - } - - /*! - * Sets the position of Y axis. - * \param pos int Position in world coordinates. - */ - function SetYAxisPosition($pos) - { - $this->y_axis_position = (int)$pos; - if (isset($this->scale_is_set)) { - $this->CalcTranslation(); - } - return TRUE; - } - - /*! - * Sets the position of X axis. - * \param pos int Position in world coordinates. - */ - function SetXAxisPosition($pos) - { - $this->x_axis_position = (int)$pos; - if (isset($this->scale_is_set)) { - $this->CalcTranslation(); - } - return TRUE; - } - - - function SetXScaleType($which_xst) - { - $this->xscale_type = $this->CheckOption($which_xst, 'linear, log', __FUNCTION__); - return TRUE; - } - - function SetYScaleType($which_yst) - { - $this->yscale_type = $this->CheckOption($which_yst, 'linear, log', __FUNCTION__); - return TRUE; - } - - function SetPrecisionX($which_prec) - { - $this->x_precision = $which_prec; - $this->SetXLabelType('data'); - return TRUE; - } - - function SetPrecisionY($which_prec) - { - $this->y_precision = $which_prec; - $this->SetYLabelType('data'); - return TRUE; - } - - function SetErrorBarLineWidth($which_seblw) - { - $this->error_bar_line_width = $which_seblw; - return TRUE; - } - - function SetLabelScalePosition($which_blp) - { - //0 to 1 - $this->label_scale_position = $which_blp; - return TRUE; - } - - function SetErrorBarSize($which_ebs) - { - //in pixels - $this->error_bar_size = $which_ebs; - return TRUE; - } - - /*! - * Can be one of: 'tee', 'line' - */ - function SetErrorBarShape($which_ebs) - { - $this->error_bar_shape = $this->CheckOption($which_ebs, 'tee, line', __FUNCTION__); - } - - /*! - * Sets point shape for each data set via an array. - * Shape can be one of: 'halfline', 'line', 'plus', 'cross', 'rect', 'circle', 'dot', - * 'diamond', 'triangle', 'trianglemid' - */ - function SetPointShapes($which_pt) - { - if (is_null($which_pt)) { - // Do nothing, use default value. - } else if (is_array($which_pt)) { - // Did we get an array with point shapes? - $this->point_shapes = $which_pt; - } else { - // Single value into array - $this->point_shapes = array($which_pt); - } - - foreach ($this->point_shapes as $shape) - { - // TODO, better check, per element rectification - $this->CheckOption($shape, - 'halfline, line, plus, cross, rect, circle, dot, diamond, triangle, trianglemid', - __FUNCTION__); - } - - // Make both point_shapes and point_sizes same size. - $ps = count($this->point_sizes); - $pt = count($this->point_shapes); - - if ($ps < $pt) { - array_pad_array($this->point_sizes, $pt); - } else if ($pt > $ps) { - array_pad_array($this->point_shapes, $ps); - } - return TRUE; - } - - /*! - * Sets the point size for point plots. - * \param ps int Size in pixels. - * \note Test this more extensively - */ - function SetPointSizes($which_ps) - { - if (is_null($which_ps)) { - // Do nothing, use default value. - } else if (is_array($which_ps)) { - // Did we get an array with point sizes? - $this->point_sizes = $which_ps; - } else { - // Single value into array - $this->point_sizes = array($which_ps); - } - - // Make both point_shapes and point_sizes same size. - $ps = count($this->point_sizes); - $pt = count($this->point_shapes); - - if ($ps < $pt) { - array_pad_array($this->point_sizes, $pt); - } else if ($pt > $ps) { - array_pad_array($this->point_shapes, $ps); - } - - // Fix odd point sizes for point shapes which need it - for ($i = 0; $i < $pt; $i++) { - if ($this->point_shapes[$i] == 'diamond' or $this->point_shapes[$i] == 'triangle') { - if ($this->point_sizes[$i] % 2 != 0) { - $this->point_sizes[$i]++; - } - } - } - return TRUE; - } - - - /*! - * Tells not to draw lines for missing Y data. Only works with 'lines' and 'squared' plots. - * \param bl bool - */ - function SetDrawBrokenLines($bl) - { - $this->draw_broken_lines = (bool)$bl; - } - - - /*! - * text-data: ('label', y1, y2, y3, ...) - * text-data-single: ('label', data), for some pie charts. - * data-data: ('label', x, y1, y2, y3, ...) - * data-data-error: ('label', x1, y1, e1+, e2-, y2, e2+, e2-, y3, e3+, e3-, ...) - */ - function SetDataType($which_dt) - { - //The next four lines are for past compatibility. - if ($which_dt == 'text-linear') { $which_dt = 'text-data'; }; - if ($which_dt == 'linear-linear') { $which_dt = 'data-data'; }; - if ($which_dt == 'linear-linear-error') { $which_dt = 'data-data-error'; }; - if ($which_dt == 'text-data-pie') { $which_dt = 'text-data-single'; } - - - $this->data_type = $this->CheckOption($which_dt, 'text-data, text-data-single, '. - 'data-data, data-data-error', __FUNCTION__); - return TRUE; - } - - /*! - * Copy the array passed as data values. We convert to numerical indexes, for its - * use for (or while) loops, which sometimes are faster. Performance improvements - * vary from 28% in DrawLines() to 49% in DrawArea() for plot drawing functions. - */ - function SetDataValues(&$which_dv) - { - unset ($this->data_limits_done); // Reset this for every new data_set - $this->num_data_rows = count($which_dv); - $this->total_records = 0; // Perform some useful calculations. - $this->records_per_group = 1; - for ($i = 0, $recs = 0; $i < $this->num_data_rows; $i++) { - // Copy - $this->data[$i] = array_values($which_dv[$i]); // convert to numerical indices. - - // Compute some values - $recs = count($this->data[$i]); - $this->total_records += $recs; - - if ($recs > $this->records_per_group) - $this->records_per_group = $recs; - - $this->num_recs[$i] = $recs; - } - } - - /*! - * Pad styles arrays for later use by plot drawing functions: - * This removes the need for $max_data_colors, etc. and $color_index = $color_index % $max_data_colors - * in DrawBars(), DrawLines(), etc. - */ - function PadArrays() - { - array_pad_array($this->line_widths, $this->records_per_group); - array_pad_array($this->line_styles, $this->records_per_group); - - array_pad_array($this->data_colors, $this->records_per_group); - array_pad_array($this->data_border_colors, $this->records_per_group); - array_pad_array($this->error_bar_colors, $this->records_per_group); - - $this->SetDataColors(); - $this->SetDataBorderColors(); - $this->SetErrorBarColors(); - - return TRUE; - } - - -////////////////////////////////////////////////////////// -/////////// DATA ANALYSIS, SCALING AND TRANSLATION -////////////////////////////////////////////////////////// - - /*! - * Analizes data and sets up internal maxima and minima - * Needed by: CalcMargins(), ... - * Text-Data is different than data-data graphs. For them what - * we have, instead of X values, is # of records equally spaced on data. - * text-data is passed in as $data[] = (title, y1, y2, y3, y4, ...) - * data-data is passed in as $data[] = (title, x, y1, y2, y3, y4, ...) - */ - function FindDataLimits() - { - // Set some default min and max values before running through the data - switch ($this->data_type) { - case 'text-data': - $minx = 0; - $maxx = $this->num_data_rows - 1 ; - $miny = $this->data[0][1]; - $maxy = $miny; - break; - default: //Everything else: data-data, etc, take first value - $minx = $this->data[0][1]; - $maxx = $minx; - $miny = $this->data[0][2]; - $maxy = $miny; - break; - } - - $mine = 0; // Maximum value for the -error bar (assume error bars always > 0) - $maxe = 0; // Maximum value for the +error bar (assume error bars always > 0) - $maxt = 0; // Maximum number of characters in text labels - - $minminy = $miny; - $maxmaxy = $maxy; - - if ($this->plot_type == 'stackedbars') { $maxmaxy = $minminy = 0; } - - // Process each row of data - for ($i=0; $i < $this->num_data_rows; $i++) { - $j=0; - // Extract maximum text label length - $val = @ strlen($this->data[$i][$j++]); - $maxt = ($val > $maxt) ? $val : $maxt; - - - if ($this->plot_type == 'stackedbars') { $maxy = $miny = 0; } - - switch ($this->data_type) { - case 'text-data': // Data is passed in as (title, y1, y2, y3, ...) - case 'text-data-single': // This one is for some pie charts - // $numrecs = @ count($this->data[$i]); - $miny = $maxy = (double)$this->data[$i][$j]; - for (; $j < $this->num_recs[$i]; $j++) { - $val = (double)$this->data[$i][$j]; - if ($this->plot_type == 'stackedbars') { - $maxy += abs($val); // only positive values for the moment - } else { - $maxy = ($val > $maxy) ? $val : $maxy; - $miny = ($val < $miny) ? $val : $miny; - } - } - break; - case 'data-data': // Data is passed in as (title, x, y, y2, y3, ...) - // X value: - $val = (double)$this->data[$i][$j++]; - $maxx = ($val > $maxx) ? $val : $maxx; - $minx = ($val < $minx) ? $val : $minx; - - $miny = $maxy = (double)$this->data[$i][$j]; - // $numrecs = @ count($this->data[$i]); - for (; $j < $this->num_recs[$i]; $j++) { - $val = (double)$this->data[$i][$j]; - $maxy = ($val > $maxy) ? $val : $maxy; - $miny = ($val < $miny) ? $val : $miny; - } - break; - case 'data-data-error': // Data is passed in as (title, x, y, err+, err-, y2, err2+, err2-,...) - // X value: - $val = (double)$this->data[$i][$j++]; - $maxx = ($val > $maxx) ? $val : $maxx; - $minx = ($val < $minx) ? $val : $minx; - - $miny = $maxy = (double)$this->data[$i][$j]; - // $numrecs = @ count($this->data[$i]); - for (; $j < $this->num_recs[$i];) { - // Y value: - $val = (double)$this->data[$i][$j++]; - $maxy = ($val > $maxy) ? $val : $maxy; - $miny = ($val < $miny) ? $val : $miny; - // Error +: - $val = (double)$this->data[$i][$j++]; - $maxe = ($val > $maxe) ? $val : $maxe; - // Error -: - $val = (double)$this->data[$i][$j++]; - $mine = ($val > $mine) ? $val : $mine; - } - $maxy = $maxy + $maxe; - $miny = $miny - $mine; // assume error bars are always > 0 - break; - default: - $this->PrintError("FindDataLimits(): Unknown data type '$data_type'."); - break; - } - $this->data[$i][MINY] = $miny; // This row's min Y, for DrawXDataLine() - $this->data[$i][MAXY] = $maxy; // This row's max Y, for DrawXDataLine() - - $minminy = ($miny < $minminy) ? $miny : $minminy; // global min - $maxmaxy = ($maxy > $maxmaxy) ? $maxy : $maxmaxy; // global max - } - - $this->min_x = $minx; - $this->max_x = $maxx; - $this->min_y = $minminy; - $this->max_y = $maxmaxy; - $this->max_t = $maxt; - - $this->data_limits_done = TRUE; - - return TRUE; - } - - - /*! - * Calculates image margins on the fly from title positions and sizes, - * and tick labels positions and sizes. - * - * FIXME: fix x_data_label_pos behaviour. Now we are leaving room for it AND x_tick_label_pos - * maybe it shouldn't be so... - * - * FIXME: y_data_label_pos is not yet used... - * - * TODO: add x_tick_label_width and y_tick_label_height and use them to calculate - * max_x_labels and max_y_labels, to be used by drawing functions to avoid overlapping. - */ - function CalcMargins() - { - // Temporary variables for label size calculation - $xlab = $this->FormatLabel('x', $this->max_x); - $ylab = $this->FormatLabel('y', $this->max_y); - - // dirty fix: - // max_t is the maximum data label length (from column 0 of each data row). - if ($this->max_t > strlen ($xlab)) - $xlab = sprintf ("%{$this->max_t}s","_"); - - //////// Calculate maximum X/Y axis label height and width: - - // TTFonts: - if ($this->use_ttf) { - // Maximum X axis label height - $size = $this->TTFBBoxSize($this->x_label_font['size'], $this->x_label_angle, - $this->x_label_font['font'], $xlab); - $this->x_tick_label_height = $size[1]; - - // Maximum Y axis label width - $size = $this->TTFBBoxSize($this->y_label_font['size'], $this->y_label_angle, - $this->y_label_font['font'], $ylab); - $this->y_tick_label_width = $size[0]; - } - // Fixed fonts: - else { - // Maximum X axis label height - if ($this->x_label_angle == 90) - $this->x_tick_label_height = strlen($xlab) * $this->x_label_font['width']; - else - $this->x_tick_label_height = $this->x_label_font['height']; - - // Maximum Y axis label width - $this->y_tick_label_width = strlen($ylab) * $this->y_label_font['width']; - } - - - ///////// Calculate margins: - - // Upper title, ticks and tick labels, and data labels: - $this->y_top_margin = $this->title_height + $this->safe_margin * 2; - - if ($this->x_title_pos == 'plotup' || $this->x_title_pos == 'both') - $this->y_top_margin += $this->x_title_height + $this->safe_margin; - - if ($this->x_tick_label_pos == 'plotup' || $this->x_tick_label_pos == 'both') - $this->y_top_margin += $this->x_tick_label_height; - - if ($this->x_tick_pos == 'plotup' || $this->x_tick_pos == 'both') - $this->y_top_margin += $this->x_tick_length * 2; - - if ($this->x_data_label_pos == 'plotup' || $this->x_data_label_pos == 'both') - $this->y_top_margin += $this->x_tick_label_height; - - // Lower title, ticks and tick labels, and data labels: - $this->y_bot_margin = $this->safe_margin * 2; - - if ($this->x_title_pos == 'plotdown' || $this->x_title_pos == 'both') - $this->y_bot_margin += $this->x_title_height; - - if ($this->x_tick_pos == 'plotdown' || $this->x_tick_pos == 'both') - $this->y_bot_margin += $this->x_tick_length * 2; - - if ($this->x_tick_pos == 'xaxis' && ($this->x_axis_position == '' || $this->x_axis_position == 0)) - $this->y_bot_margin += $this->x_tick_length * 2; - - if ($this->x_tick_label_pos == 'plotdown' || $this->x_tick_label_pos == 'both') - $this->y_bot_margin += $this->x_tick_label_height; - - if ($this->x_tick_label_pos == 'xaxis' && ($this->x_axis_position == '' || $this->x_axis_position == 0)) - $this->y_bot_margin += $this->x_tick_label_height; - - if ($this->x_data_label_pos == 'plotdown' || $this->x_data_label_pos == 'both') - $this->y_bot_margin += $this->x_tick_label_height; - - // Left title, ticks and tick labels: - $this->x_left_margin = $this->safe_margin * 2; - - if ($this->y_title_pos == 'plotleft' || $this->y_title_pos == 'both') - $this->x_left_margin += $this->y_title_width + $this->safe_margin; - - if ($this->y_tick_label_pos == 'plotleft' || $this->y_tick_label_pos == 'both') - $this->x_left_margin += $this->y_tick_label_width; - - if ($this->y_tick_pos == 'plotleft' || $this->y_tick_pos == 'both') - $this->x_left_margin += $this->y_tick_length * 2 ; - - // Right title, ticks and tick labels: - $this->x_right_margin = $this->safe_margin * 2; - - if ($this->y_title_pos == 'plotright' || $this->y_title_pos == 'both') - $this->x_right_margin += $this->y_title_width + $this->safe_margin; - - if ($this->y_tick_label_pos == 'plotright' || $this->y_tick_label_pos == 'both') - $this->x_right_margin += $this->y_tick_label_width; - - if ($this->y_tick_pos == 'plotright' || $this->y_tick_pos == 'both') - $this->x_right_margin += $this->y_tick_length * 2; - - - $this->x_tot_margin = $this->x_left_margin + $this->x_right_margin; - $this->y_tot_margin = $this->y_top_margin + $this->y_bot_margin; - - return; - } - - - /*! - * Set the margins in pixels (left, right, top, bottom) - */ - function SetMarginsPixels($which_lm, $which_rm, $which_tm, $which_bm) - { - - $this->x_left_margin = $which_lm; - $this->x_right_margin = $which_rm; - $this->x_tot_margin = $which_lm + $which_rm; - - $this->y_top_margin = $which_tm; - $this->y_bot_margin = $which_bm; - $this->y_tot_margin = $which_tm + $which_bm; - - $this->SetPlotAreaPixels(); - - return; - } - - - /*! - * Sets the limits for the plot area. If no arguments are supplied, uses - * values calculated from CalcMargins(); - * Like in GD, (0,0) is upper left - * - * This resets the scale if SetPlotAreaWorld() was already called - */ - function SetPlotAreaPixels($x1=NULL, $y1=NULL, $x2=NULL, $y2=NULL) - { - if ($x2 && $y2) { - $this->plot_area = array($x1, $y1, $x2, $y2); - } else { - if (! isset($this->x_tot_margin)) - $this->CalcMargins(); - - $this->plot_area = array($this->x_left_margin, $this->y_top_margin, - $this->image_width - $this->x_right_margin, - $this->image_height - $this->y_bot_margin); - } - $this->plot_area_width = $this->plot_area[2] - $this->plot_area[0]; - $this->plot_area_height = $this->plot_area[3] - $this->plot_area[1]; - - // Reset the scale with the new plot area. - if (isset($this->plot_max_x)) - $this->CalcTranslation(); - - return TRUE; - - } - - - /*! - * Sets minimum and maximum x and y values in the plot using FindDataLimits() - * or from the supplied parameters, if any. - * - * This resets the scale if SetPlotAreaPixels() was already called - */ - function SetPlotAreaWorld($xmin=NULL, $ymin=NULL, $xmax=NULL, $ymax=NULL) - { - if (! isset($this->data_limits_done)) { // For automatic setting of data we need data limits - $this->FindDataLimits() ; - } - - if ($xmin === NULL || $xmin === '') { - if ($this->data_type == 'text-data') // Valid for data without X values only. - $xmin = 0; - else - $xmin = $this->min_x; - } - if ($xmax === NULL || $xmax === '') { - if ($this->data_type == 'text-data') // Valid for data without X values only. - $xmax = $this->max_x + 1; - else - $xmax = $this->max_x; - } - - // Leave room above and below the highest and lowest data points. - - if ($ymin === NULL || $ymin === '') { - if ($this->min_y < 0) - $ymin = ceil($this->min_y * 1.1); - else - $ymin = floor($this->min_y * 0.9); - } - if ($ymax === NULL || $ymax === '') { - if ($this->max_y < 0) - $ymax = floor($this->max_y * 0.9); - else - $ymax = ceil($this->max_y * 1.1); - } - - // Error checking - - if ($ymin == $ymax) // Minimum height - $ymax += 1; - - if ($this->yscale_type == 'log') { - if ($ymin <= 0) { - $ymin = 1; - } - if ($ymax <= 0) { - $this->PrintError('SetPlotAreaWorld(): Log plots need data greater than 0'); - return FALSE; - } - } - - if ($ymax <= $ymin) { - $this->DrawError('SetPlotAreaWorld(): Error in data - max not greater than min'); - return FALSE; - } - - - // Reset (if it was already set) the scale with the new maxs and mins - - $this->plot_min_x = $xmin; - $this->plot_max_x = $xmax; - $this->plot_min_y = $ymin; - $this->plot_max_y = $ymax; - - if (isset($this->plot_area_width)) { - $this->CalcTranslation(); - } - - return TRUE; - } //function SetPlotAreaWorld - - - /*! - * For bar plots, which have equally spaced x variables. - */ - function CalcBarWidths() - { - $group_width = ($this->plot_area[2] - $this->plot_area[0]) / - $this->num_data_rows * $this->group_frac_width; - if ($this->plot_type == 'bars') { - $this->record_bar_width = $group_width / $this->records_per_group; - } else if ($this->plot_type == 'stackedbars') { - $this->record_bar_width = $group_width; - } - $this->data_group_space = $group_width / 2; - return TRUE; - } - - /*! - * Calculates scaling stuff... - */ - function CalcTranslation() - { - if ($this->plot_max_x - $this->plot_min_x == 0) { // Check for div by 0 - $this->xscale = 0; - } else { - if ($this->xscale_type == 'log') { - $this->xscale = ($this->plot_area_width)/(log10($this->plot_max_x) - log10($this->plot_min_x)); - } else { - $this->xscale = ($this->plot_area_width)/($this->plot_max_x - $this->plot_min_x); - } - } - - if ($this->plot_max_y - $this->plot_min_y == 0) { // Check for div by 0 - $this->yscale = 0; - } else { - if ($this->yscale_type == 'log') { - $this->yscale = ($this->plot_area_height)/(log10($this->plot_max_y) - log10($this->plot_min_y)); - } else { - $this->yscale = ($this->plot_area_height)/($this->plot_max_y - $this->plot_min_y); - } - } - // GD defines x = 0 at left and y = 0 at TOP so -/+ respectively - if ($this->xscale_type == 'log') { - $this->plot_origin_x = $this->plot_area[0] - ($this->xscale * log10($this->plot_min_x) ); - } else { - $this->plot_origin_x = $this->plot_area[0] - ($this->xscale * $this->plot_min_x); - } - if ($this->yscale_type == 'log') { - $this->plot_origin_y = $this->plot_area[3] + ($this->yscale * log10($this->plot_min_y)); - } else { - $this->plot_origin_y = $this->plot_area[3] + ($this->yscale * $this->plot_min_y); - } - - $this->scale_is_set = TRUE; - - /************** FIXME?? *************/ - // There should be a better place for this. - - // User provided y axis position? - if ($this->y_axis_position != '') { - // Make sure we draw our axis inside the plot - $this->y_axis_position = ($this->y_axis_position < $this->plot_min_x) - ? $this->plot_min_x : $this->y_axis_position; - $this->y_axis_position = ($this->y_axis_position > $this->plot_max_x) - ? $this->plot_max_x : $this->y_axis_position; - $this->y_axis_x_pixels = $this->xtr($this->y_axis_position); - } else { - // Default to left axis - $this->y_axis_x_pixels = $this->xtr($this->plot_min_x); - } - // User provided x axis position? - if ($this->x_axis_position != '') { - // Make sure we draw our axis inside the plot - $this->x_axis_position = ($this->x_axis_position < $this->plot_min_y) - ? $this->plot_min_y : $this->x_axis_position; - $this->x_axis_position = ($this->x_axis_position > $this->plot_max_y) - ? $this->plot_max_y : $this->x_axis_position; - $this->x_axis_y_pixels = $this->ytr($this->x_axis_position); - } else { - if ($this->yscale_type == 'log') - $this->x_axis_y_pixels = $this->ytr(1); - else - // Default to axis at 0 or plot_min_y (should be 0 anyway, from SetPlotAreaWorld()) - $this->x_axis_y_pixels = ($this->plot_min_y <= 0) && (0 <= $this->plot_max_y) - ? $this->ytr(0) : $this->ytr($this->plot_min_y); - } - - } // function CalcTranslation() - - - /*! - * Translate X world coordinate into pixel coordinate - * Needs values calculated by _CalcTranslation() - */ - function xtr($x_world) - { - //$x_pixels = $this->x_left_margin + ($this->image_width - $this->x_tot_margin)* - // (($x_world - $this->plot_min_x) / ($this->plot_max_x - $this->plot_min_x)) ; - //which with a little bit of math reduces to ... - if ($this->xscale_type == 'log') { - $x_pixels = $this->plot_origin_x + log10($x_world) * $this->xscale ; - } else { - $x_pixels = $this->plot_origin_x + $x_world * $this->xscale ; - } - return round($x_pixels); - } - - - /*! - * Translate Y world coordinate into pixel coordinate. - * Needs values calculated by _CalcTranslation() - */ - function ytr($y_world) - { - if ($this->yscale_type == 'log') { - //minus because GD defines y = 0 at top. doh! - $y_pixels = $this->plot_origin_y - log10($y_world) * $this->yscale ; - } else { - $y_pixels = $this->plot_origin_y - $y_world * $this->yscale ; - } - return round($y_pixels); - } - - /*! - * Formats a tick or data label. - * - * \note Time formatting suggested by Marlin Viss - */ - function FormatLabel($which_pos, $which_lab) - { - switch ($which_pos) { - case 'x': - case 'plotx': - switch ($this->x_label_type) { - case 'title': - $lab = @ $this->data[$which_lab][0]; - break; - case 'data': - $lab = number_format($which_lab, $this->x_precision, '.', ',').$this->data_units_text; - break; - case 'time': - $lab = strftime($this->x_time_format, $which_lab); - break; - default: - // Unchanged from whatever format it is passed in - $lab = $which_lab; - break; - } - break; - case 'y': - case 'ploty': - switch ($this->y_label_type) { - case 'data': - $lab = number_format($which_lab, $this->y_precision, '.', ',').$this->data_units_text; - break; - case 'time': - $lab = strftime($this->y_time_format, $which_lab); - break; - default: - // Unchanged from whatever format it is passed in - $lab = $which_lab; - break; - } - break; - default: - $this->PrintError("FormatLabel(): Unknown label type $which_type"); - return NULL; - } - - return $lab; - } //function FormatLabel - - - -///////////////////////////////////////////// -/////////////// TICKS -///////////////////////////////////////////// - - /*! - * Use either this or SetNumXTicks() to set where to place x tick marks - */ - function SetXTickIncrement($which_ti=NULL) - { - if ($which_ti) { - $this->x_tick_inc = $which_ti; //world coordinates - } else { - if (! isset($this->data_limits_done)) { - $this->FindDataLimits(); //Get maxima and minima for scaling - } - $this->x_tick_inc = ($this->plot_max_x - $this->plot_min_x )/10; - } - $this->num_x_ticks = ''; //either use num_y_ticks or y_tick_inc, not both - return TRUE; - } - - /*! - * Use either this or SetNumYTicks() to set where to place y tick marks - */ - function SetYTickIncrement($which_ti=NULL) - { - if ($which_ti) { - $this->y_tick_inc = $which_ti; //world coordinates - } else { - if (! isset($this->data_limits_done)) { - $this->FindDataLimits(); //Get maxima and minima for scaling - } - if (! isset($this->plot_max_y)) - $this->SetPlotAreaWorld(); - - $this->y_tick_inc = ($this->plot_max_y - $this->plot_min_y )/10; - } - $this->num_y_ticks = ''; //either use num_y_ticks or y_tick_inc, not both - return TRUE; - } - - - function SetNumXTicks($which_nt) - { - $this->num_x_ticks = $which_nt; - $this->x_tick_inc = ''; //either use num_x_ticks or x_tick_inc, not both - return TRUE; - } - - function SetNumYTicks($which_nt) - { - $this->num_y_ticks = $which_nt; - $this->y_tick_inc = ''; //either use num_y_ticks or y_tick_inc, not both - return TRUE; - } - - /*! - * - */ - function SetYTickPos($which_tp) - { - $this->y_tick_pos = $this->CheckOption($which_tp, 'plotleft, plotright, both, yaxis, none', __FUNCTION__); - return TRUE; - } - /*! - * - */ - function SetXTickPos($which_tp) - { - $this->x_tick_pos = $this->CheckOption($which_tp, 'plotdown, plotup, both, xaxis, none', __FUNCTION__); - return TRUE; - } - - /*! - * \param skip bool - */ - function SetSkipTopTick($skip) - { - $this->skip_top_tick = (bool)$skip; - return TRUE; - } - - /*! - * \param skip bool - */ - function SetSkipBottomTick($skip) - { - $this->skip_bottom_tick = (bool)$skip; - return TRUE; - } - - /*! - * \param skip bool - */ - function SetSkipLeftTick($skip) - { - $this->skip_left_tick = (bool)$skip; - return TRUE; - } - - /*! - * \param skip bool - */ - function SetSkipRightTick($skip) - { - $this->skip_right_tick = (bool)$skip; - return TRUE; - } - - function SetXTickLength($which_xln) - { - $this->x_tick_length = $which_xln; - return TRUE; - } - - function SetYTickLength($which_yln) - { - $this->y_tick_length = $which_yln; - return TRUE; - } - - function SetXTickCrossing($which_xc) - { - $this->x_tick_cross = $which_xc; - return TRUE; - } - - function SetYTickCrossing($which_yc) - { - $this->y_tick_cross = $which_yc; - return TRUE; - } - - -///////////////////////////////////////////// -//////////////////// GENERIC DRAWING -///////////////////////////////////////////// - - /*! - * Fills the background. - */ - function DrawBackground() - { - // Don't draw this twice if drawing two plots on one image - if (! $this->background_done) { - if (isset($this->bgimg)) { // If bgimg is defined, use it - $this->tile_img($this->bgimg, 0, 0, $this->image_width, $this->image_height, $this->bgmode); - } else { // Else use solid color - ImageFilledRectangle($this->img, 0, 0, $this->image_width, $this->image_height, - $this->ndx_bg_color); - } - $this->background_done = TRUE; - return TRUE; // Done - } - return FALSE; // Nothing done - } - - - /*! - * Fills the plot area background. - */ - function DrawPlotAreaBackground() - { - if (isset($this->plotbgimg)) { - $this->tile_img($this->plotbgimg, $this->plot_area[0], $this->plot_area[1], - $this->plot_area_width, $this->plot_area_height, $this->plotbgmode); - } - else { - if ($this->draw_plot_area_background) { - ImageFilledRectangle($this->img, $this->plot_area[0], $this->plot_area[1], - $this->plot_area[2], $this->plot_area[3], $this->ndx_plot_bg_color); - } - } - - return TRUE; - } - - - /*! - * Tiles an image at some given coordinates. - * - * \param $file string Filename of the picture to be used as tile. - * \param $xorig int X coordinate of the plot where the tile is to begin. - * \param $yorig int Y coordinate of the plot where the tile is to begin. - * \param $width int Width of the area to be tiled. - * \param $height int Height of the area to be tiled. - * \param $mode string One of 'centeredtile', 'tile', 'scale'. - */ - function tile_img($file, $xorig, $yorig, $width, $height, $mode) - { - $size = getimagesize($file); - $input_format = $size[2]; - - switch($input_format) { - case 1: - $im = @ imagecreatefromGIF ($file); - if (! $im) { - $this->PrintError("tile_img:() Unable to open $file as a GIF."); - return FALSE; - } - break; - case 2: - $im = @ imagecreatefromJPEG ($file); - if (! $im) { - $this->PrintError("tile_img(): Unable to open $file as a JPG."); - return FALSE; - } - break; - case 3: - $im = @ imagecreatefromPNG ($file); - if (! $im) { - $this->PrintError("tile_img(): Unable to open $file as a PNG."); - return FALSE; - } - break; - default: - $this->PrintError('tile_img(): Please select a gif, jpg, or png image.'); - return FALSE; - break; - } - - - if ($mode == 'scale') { - imagecopyresized($this->img, $im, $xorig, $yorig, 0, 0, $width, $height, $size[0],$size[1]); - return TRUE; - } else if ($mode == 'centeredtile') { - $x0 = - floor($size[0]/2); // Make the tile look better - $y0 = - floor($size[1]/2); - } else if ($mode = 'tile') { - $x0 = 0; - $y0 = 0; - } - - // Actually draw the tile - - // But first on a temporal image. - $tmp = ImageCreate($width, $height); - if (! $tmp) - $this->PrintError('tile_img(): Could not create image resource.'); - - for ($x = $x0; $x < $width; $x += $size[0]) - for ($y = $y0; $y < $height; $y += $size[1]) - imagecopy($tmp, $im, $x, $y, 0, 0, $size[0], $size[1]); - - // Copy the temporal image onto the final one. - imagecopy($this->img, $tmp, $xorig, $yorig, 0,0, $width, $height); - - // Free resources - imagedestroy($tmp); - imagedestroy($im); - - return TRUE; - } // function tile_img - - - /*! - * Draws a border around the final image. - */ - function DrawImageBorder() - { - switch ($this->image_border_type) { - case 'raised': - ImageLine($this->img, 0, 0, $this->image_width-1, 0, $this->ndx_i_border); - ImageLine($this->img, 1, 1, $this->image_width-2, 1, $this->ndx_i_border); - ImageLine($this->img, 0, 0, 0, $this->image_height-1, $this->ndx_i_border); - ImageLine($this->img, 1, 1, 1, $this->image_height-2, $this->ndx_i_border); - ImageLine($this->img, $this->image_width-1, 0, $this->image_width-1, - $this->image_height-1, $this->ndx_i_border_dark); - ImageLine($this->img, 0, $this->image_height-1, $this->image_width-1, - $this->image_height-1, $this->ndx_i_border_dark); - ImageLine($this->img, $this->image_width-2, 1, $this->image_width-2, - $this->image_height-2, $this->ndx_i_border_dark); - ImageLine($this->img, 1, $this->image_height-2, $this->image_width-2, - $this->image_height-2, $this->ndx_i_border_dark); - break; - case 'plain': - ImageLine($this->img, 0, 0, $this->image_width, 0, $this->ndx_i_border_dark); - ImageLine($this->img, $this->image_width-1, 0, $this->image_width-1, - $this->image_height, $this->ndx_i_border_dark); - ImageLine($this->img, $this->image_width-1, $this->image_height-1, 0, $this->image_height-1, - $this->ndx_i_border_dark); - ImageLine($this->img, 0, 0, 0, $this->image_height, $this->ndx_i_border_dark); - break; - case 'none': - break; - default: - $this->DrawError("DrawImageBorder(): unknown image_border_type: '$this->image_border_type'"); - return FALSE; - } - return TRUE; - } - - - /*! - * Adds the title to the graph. - */ - function DrawTitle() - { - // Center of the plot area - //$xpos = ($this->plot_area[0] + $this->plot_area_width )/ 2; - - // Center of the image: - $xpos = $this->image_width / 2; - - // Place it at almost at the top - $ypos = $this->safe_margin; - - $this->DrawText($this->title_font, $this->title_angle, $xpos, $ypos, - $this->ndx_title_color, $this->title_txt, 'center', 'bottom'); - - return TRUE; - - } - - - /*! - * Draws the X-Axis Title - */ - function DrawXTitle() - { - if ($this->x_title_pos == 'none') - return; - - // Center of the plot - $xpos = ($this->plot_area[2] + $this->plot_area[0]) / 2; - - // Upper title - if ($this->x_title_pos == 'plotup' || $this->x_title_pos == 'both') { - $ypos = $this->safe_margin + $this->title_height + $this->safe_margin; - $this->DrawText($this->x_title_font, $this->x_title_angle, - $xpos, $ypos, $this->ndx_title_color, $this->x_title_txt, 'center'); - } - // Lower title - if ($this->x_title_pos == 'plotdown' || $this->x_title_pos == 'both') { - $ypos = $this->image_height - $this->x_title_height - $this->safe_margin; - $this->DrawText($this->x_title_font, $this->x_title_angle, - $xpos, $ypos, $this->ndx_title_color, $this->x_title_txt, 'center'); - } - return TRUE; - } - - /*! - * Draws the Y-Axis Title - */ - function DrawYTitle() - { - if ($this->y_title_pos == 'none') - return; - - // Center the title vertically to the plot - $ypos = ($this->plot_area[3] + $this->plot_area[1]) / 2; - - if ($this->y_title_pos == 'plotleft' || $this->y_title_pos == 'both') { - $xpos = $this->safe_margin; - $this->DrawText($this->y_title_font, 90, $xpos, $ypos, $this->ndx_title_color, - $this->y_title_txt, 'left', 'center'); - } - if ($this->y_title_pos == 'plotright' || $this->y_title_pos == 'both') { - $xpos = $this->image_width - $this->safe_margin - $this->y_title_width - $this->safe_margin; - $this->DrawText($this->y_title_font, 90, $xpos, $ypos, $this->ndx_title_color, - $this->y_title_txt, 'left', 'center'); - } - - return TRUE; - } - - - /* - * \note Horizontal grid lines overwrite horizontal axis with y=0, so call this first, then DrawXAxis() - */ - function DrawYAxis() - { - // Draw ticks, labels and grid, if any - $this->DrawYTicks(); - - // Draw Y axis at X = y_axis_x_pixels - ImageLine($this->img, $this->y_axis_x_pixels, $this->plot_area[1], - $this->y_axis_x_pixels, $this->plot_area[3], $this->ndx_grid_color); - - return TRUE; - } - - /* - * - */ - function DrawXAxis() - { - // Draw ticks, labels and grid - $this->DrawXTicks(); - - /* This tick and label tend to overlap with regular Y Axis labels, - * as Mike Pullen pointed out. - * - //Draw Tick and Label for X axis - if (! $this->skip_bottom_tick) { - $ylab =$this->FormatLabel('y', $this->x_axis_position); - $this->DrawYTick($ylab, $this->x_axis_y_pixels); - } - */ - //Draw X Axis at Y = x_axis_y_pixels - ImageLine($this->img, $this->plot_area[0]+1, $this->x_axis_y_pixels, - $this->plot_area[2]-1, $this->x_axis_y_pixels, $this->ndx_grid_color); - - return TRUE; - } - - /*! - * Draw Just one Tick, called from DrawYTicks() and DrawXAxis() - * TODO? Move this inside DrawYTicks() and Modify DrawXAxis() ? - */ - function DrawYTick($which_ylab, $which_ypix) - { - // Ticks on Y axis - if ($this->y_tick_pos == 'yaxis') { - ImageLine($this->img, $this->y_axis_x_pixels - $this->y_tick_length, $which_ypix, - $this->y_axis_x_pixels + $this->y_tick_cross, $which_ypix, - $this->ndx_tick_color); - } - - // Labels on Y axis - if ($this->y_tick_label_pos == 'yaxis') { - $this->DrawText($this->y_label_font, $this->y_label_angle, - $this->y_axis_x_pixels - $this->y_tick_length * 1.5, $which_ypix, - $this->ndx_text_color, $which_ylab, 'right', 'center'); - } - - // Ticks to the left of the Plot Area - if (($this->y_tick_pos == 'plotleft') || ($this->y_tick_pos == 'both') ) { - ImageLine($this->img, $this->plot_area[0] - $this->y_tick_length, - $which_ypix, $this->plot_area[0] + $this->y_tick_cross, - $which_ypix, $this->ndx_tick_color); - } - - // Ticks to the right of the Plot Area - if (($this->y_tick_pos == 'plotright') || ($this->y_tick_pos == 'both') ) { - ImageLine($this->img, ($this->plot_area[2] + $this->y_tick_length), - $which_ypix, $this->plot_area[2] - $this->y_tick_cross, - $which_ypix, $this->ndx_tick_color); - } - - // Labels to the left of the plot area - if ($this->y_tick_label_pos == 'plotleft' || $this->y_tick_label_pos == 'both') { - $this->DrawText($this->y_label_font, $this->y_label_angle, - $this->plot_area[0] - $this->y_tick_length * 1.5, $which_ypix, - $this->ndx_text_color, $which_ylab, 'right', 'center'); - } - // Labels to the right of the plot area - if ($this->y_tick_label_pos == 'plotright' || $this->y_tick_label_pos == 'both') { - $this->DrawText($this->y_label_font, $this->y_label_angle, - $this->plot_area[2] + $this->y_tick_length * 1.5, $which_ypix, - $this->ndx_text_color, $which_ylab, 'left', 'center'); - } - } // Function DrawYTick() - - - /*! - * Draws Grid, Ticks and Tick Labels along Y-Axis - * Ticks and ticklabels can be left of plot only, right of plot only, - * both on the left and right of plot, or crossing a user defined Y-axis - * TODO: marks at whole numbers (-10, 10, 20, 30 ...) no matter where the plot begins (-3, 4.7, etc.) - */ - function DrawYTicks() - { - // Sets the line style for IMG_COLOR_STYLED lines (grid) - if ($this->dashed_grid) { - $this->SetDashedStyle($this->ndx_light_grid_color); - $style = IMG_COLOR_STYLED; - } else { - $style = $this->ndx_light_grid_color; - } - - // maxy is always > miny so delta_y is always positive - if ($this->y_tick_inc) { - $delta_y = $this->y_tick_inc; - } elseif ($this->num_y_ticks) { - $delta_y = ($this->plot_max_y - $this->plot_min_y) / $this->num_y_ticks; - } else { - $delta_y = ($this->plot_max_y - $this->plot_min_y) / 10 ; - } - - // NOTE: When working with floats, because of approximations when adding $delta_y, - // $y_tmp never equals $y_end at the for loop, so one spurious line would get drawn where - // not for the substraction to $y_end here. - $y_tmp = (double)$this->plot_min_y; - $y_end = (double)$this->plot_max_y - ($delta_y/2); - - if ($this->skip_bottom_tick) - $y_tmp += $delta_y; - - if ($this->skip_top_tick) - $y_end -= $delta_y; - - for (;$y_tmp < $y_end; $y_tmp += $delta_y) { - $ylab = $this->FormatLabel('y', $y_tmp); - $y_pixels = $this->ytr($y_tmp); - - // Horizontal grid line - if ($this->draw_y_grid) { - ImageLine($this->img, $this->plot_area[0]+1, $y_pixels, $this->plot_area[2]-1, $y_pixels, $style); - } - - // Draw ticks - $this->DrawYTick($ylab, $y_pixels); - } - return TRUE; - } // function DrawYTicks - - - /*! - * Draws Grid, Ticks and Tick Labels along X-Axis - * Ticks and tick labels can be down of plot only, up of plot only, - * both on up and down of plot, or crossing a user defined X-axis - * - * \note Original vertical code submitted by Marlin Viss - */ - function DrawXTicks() - { - // Sets the line style for IMG_COLOR_STYLED lines (grid) - if ($this->dashed_grid) { - $this->SetDashedStyle($this->ndx_light_grid_color); - $style = IMG_COLOR_STYLED; - } else { - $style = $this->ndx_light_grid_color; - } - - // Calculate x increment between ticks - if ($this->x_tick_inc) { - $delta_x = $this->x_tick_inc; - } elseif ($this->num_x_ticks) { - $delta_x = ($this->plot_max_x - $this->plot_min_x) / $this->num_x_ticks; - } else { - $delta_x =($this->plot_max_x - $this->plot_min_x) / 10 ; - } - - // NOTE: When working with decimals, because of approximations when adding $delta_x, - // $x_tmp never equals $x_end at the for loop, so one spurious line would get drawn where - // not for the substraction to $x_end here. - $x_tmp = (double)$this->plot_min_x; - $x_end = (double)$this->plot_max_x - ($delta_x/2); - - // Should the leftmost tick be drawn? - if ($this->skip_left_tick) - $x_tmp += $delta_x; - - // And the rightmost? - if (! $this->skip_right_tick) - $x_end += $delta_x; - - for (;$x_tmp < $x_end; $x_tmp += $delta_x) { - $xlab = $this->FormatLabel('x', $x_tmp); - $x_pixels = $this->xtr($x_tmp); - - // Vertical grid lines - if ($this->draw_x_grid) { - ImageLine($this->img, $x_pixels, $this->plot_area[1], $x_pixels, $this->plot_area[3], $style); - } - - // Tick on X Axis - if ($this->x_tick_pos == 'xaxis') { - - ImageLine($this->img, $x_pixels, $this->x_axis_y_pixels - $this->x_tick_cross, - $x_pixels, $this->x_axis_y_pixels + $this->x_tick_length, $this->ndx_tick_color); - } - - // Label on X axis - if ($this->x_tick_label_pos == 'xaxis') { - $this->DrawText($this->x_label_font, $this->x_label_angle, $x_pixels, - $this->x_axis_y_pixels + $this->x_tick_length*1.5, $this->ndx_text_color, - $xlab, 'center', 'bottom'); - } - - // Top of the plot area tick - if ($this->x_tick_pos == 'plotup' || $this->x_tick_pos == 'both') { - ImageLine($this->img, $x_pixels, $this->plot_area[1] - $this->x_tick_length, - $x_pixels, $this->plot_area[1] + $this->x_tick_cross, $this->ndx_tick_color); - } - // Bottom of the plot area tick - if ($this->x_tick_pos == 'plotdown' || $this->x_tick_pos == 'both') { - ImageLine($this->img, $x_pixels, $this->plot_area[3] + $this->x_tick_length, - $x_pixels, $this->plot_area[3] - $this->x_tick_cross, $this->ndx_tick_color); - } - - // Top of the plot area tick label - if ($this->x_tick_label_pos == 'plotup' || $this->x_tick_label_pos == 'both') { - $this->DrawText($this->x_label_font, $this->x_label_angle, $x_pixels, - $this->plot_area[1] - $this->x_tick_length*1.5, $this->ndx_text_color, - $xlab, 'center', 'top'); - } - - // Bottom of the plot area tick label - if ($this->x_tick_label_pos == 'plotdown' || $this->x_tick_label_pos == 'both') { - $this->DrawText($this->x_label_font, $this->x_label_angle, $x_pixels, - $this->plot_area[3] + $this->x_tick_length*1.5, $this->ndx_text_color, - $xlab, 'center', 'bottom'); - } - } - return; - } // function DrawXTicks - - - /*! - * - */ - function DrawPlotBorder() - { - switch ($this->plot_border_type) { - case 'left': // for past compatibility - case 'plotleft': - ImageLine($this->img, $this->plot_area[0], $this->ytr($this->plot_min_y), - $this->plot_area[0], $this->ytr($this->plot_max_y), $this->ndx_grid_color); - break; - case 'right': - case 'plotright': - ImageLine($this->img, $this->plot_area[2], $this->ytr($this->plot_min_y), - $this->plot_area[2], $this->ytr($this->plot_max_y), $this->ndx_grid_color); - break; - case 'both': - case 'sides': - ImageLine($this->img, $this->plot_area[0], $this->ytr($this->plot_min_y), - $this->plot_area[0], $this->ytr($this->plot_max_y), $this->ndx_grid_color); - ImageLine($this->img, $this->plot_area[2], $this->ytr($this->plot_min_y), - $this->plot_area[2], $this->ytr($this->plot_max_y), $this->ndx_grid_color); - break; - case 'none': - //Draw No Border - break; - case 'full': - default: - ImageRectangle($this->img, $this->plot_area[0], $this->ytr($this->plot_min_y), - $this->plot_area[2], $this->ytr($this->plot_max_y), $this->ndx_grid_color); - break; - } - return TRUE; - } - - - /*! - * Draws the data label associated with a point in the plot. - * This is different from x_labels drawn by DrawXTicks() and care - * should be taken not to draw both, as they'd probably overlap. - * Calling of this function in DrawLines(), etc is decided after x_data_label_pos value. - * Leave the last parameter out, to avoid the drawing of vertical lines, no matter - * what the setting is (for plots that need it, like DrawSquared()) - */ - function DrawXDataLabel($xlab, $xpos, $row=FALSE) - { - // FIXME!! not working... - if (($this->_x_label_cnt++ % $this->x_label_inc) != 0) - return; - - $xlab = $this->FormatLabel('x', $xlab); - - // Labels below the plot area - if ($this->x_data_label_pos == 'plotdown' || $this->x_data_label_pos == 'both') - $this->DrawText($this->x_label_font, $this->x_label_angle, $xpos, - $this->plot_area[3] + $this->x_tick_length, - $this->ndx_text_color, $xlab, 'center', 'bottom'); - - // Labels above the plot area - if ($this->x_data_label_pos == 'plotup' || $this->x_data_label_pos == 'both') - $this->DrawText($this->x_label_font, $this->x_label_angle, $xpos, - $this->plot_area[1] - $this->x_tick_length , - $this->ndx_text_color, $xlab, 'center', 'top'); - - if ($row && $this->draw_x_data_label_lines) - $this->DrawXDataLine($xpos, $row); - } - - /*! - * Draws Vertical lines from data points up and down. - * Which lines are drawn depends on the value of x_data_label_pos, - * and whether this is at all done or not, on draw_x_data_label_lines - * - * \param xpos int position in pixels of the line. - * \param row int index of the data row being drawn. - */ - function DrawXDataLine($xpos, $row) - { - // Sets the line style for IMG_COLOR_STYLED lines (grid) - if($this->dashed_grid) { - $this->SetDashedStyle($this->ndx_light_grid_color); - $style = IMG_COLOR_STYLED; - } else { - $style = $this->ndx_light_grid_color; - } - - // Lines from the bottom up - if ($this->x_data_label_pos == 'both') { - ImageLine($this->img, $xpos, $this->plot_area[3], $xpos, $this->plot_area[1], $style); - } - // Lines coming from the bottom of the plot - else if ($this->x_data_label_pos == 'plotdown') { - // See FindDataLimits() to see why 'MAXY' index. - $ypos = $this->ytr($this->data[$row][MAXY]); - ImageLine($this->img, $xpos, $ypos, $xpos, $this->plot_area[3], $style); - } - // Lines coming from the top of the plot - else if ($this->x_data_label_pos == 'plotup') { - // See FindDataLimits() to see why 'MINY' index. - $ypos = $this->ytr($this->data[$row][MINY]); - ImageLine($this->img, $xpos, $this->plot_area[1], $xpos, $ypos, $style); - } - } - -/* - function DrawPlotLabel($xlab, $xpos, $ypos) - { - $this->DrawText($this->x_label_font, $this->x_label_angle, $xpos, $this -*/ - - /*! - * Draws the graph legend - * - * \note Base code submitted by Marlin Viss - * FIXME: maximum label length should be calculated more accurately for TT fonts - * Performing a BBox calculation for every legend element, for example. - */ - function DrawLegend($which_x1, $which_y1, $which_boxtype) - { - // Find maximum legend label length - $max_len = 0; - foreach ($this->legend as $leg) { - $len = strlen($leg); - $max_len = ($len > $max_len) ? $len : $max_len; - } - $max_len += 5; // Leave room for the boxes and margins - - /////// Calculate legend labels sizes: FIXME - dirty hack - FIXME - // TTF: - if ($this->use_ttf) { - $size = $this->TTFBBoxSize($this->legend_font['size'], 0, - $this->legend_font['font'], '_'); - $char_w = $size[0]; - - $size = $this->TTFBBoxSize($this->legend_font['size'], 0, - $this->legend_font['font'], '|'); - $char_h = $size[1]; - } - // Fixed fonts: - else { - $char_w = $this->legend_font['width']; - $char_h = $this->legend_font['height']; - } - - $v_margin = $char_h/2; // Between vertical borders and labels - $dot_height = $char_h + $this->line_spacing; // Height of the small colored boxes - $width = $char_w * $max_len; - - //////// Calculate box size - // upper Left - if ( (! $which_x1) || (! $which_y1) ) { - $box_start_x = $this->plot_area[2] - $width; - $box_start_y = $this->plot_area[1] + 5; - } else { - $box_start_x = $which_x1; - $box_start_y = $which_y1; - } - - // Lower right corner - $box_end_y = $box_start_y + $dot_height*(count($this->legend)) + 2*$v_margin; - $box_end_x = $box_start_x + $width - 5; - - - // Draw outer box - ImageFilledRectangle($this->img, $box_start_x, $box_start_y, $box_end_x, $box_end_y, $this->ndx_bg_color); - ImageRectangle($this->img, $box_start_x, $box_start_y, $box_end_x, $box_end_y, $this->ndx_grid_color); - - $color_index = 0; - $max_color_index = count($this->ndx_data_colors) - 1; - - $dot_left_x = $box_end_x - $char_w * 2; - $dot_right_x = $box_end_x - $char_w; - $y_pos = $box_start_y + $v_margin; - - foreach ($this->legend as $leg) { - // Text right aligned to the little box - $this->DrawText($this->legend_font, 0, $dot_left_x - $char_w, $y_pos, - $this->ndx_text_color, $leg, 'right'); - // Draw a box in the data color - ImageFilledRectangle($this->img, $dot_left_x, $y_pos + 1, $dot_right_x, - $y_pos + $dot_height-1, $this->ndx_data_colors[$color_index]); - // Draw a rectangle around the box - ImageRectangle($this->img, $dot_left_x, $y_pos + 1, $dot_right_x, - $y_pos + $dot_height-1, $this->ndx_text_color); - - $y_pos += $char_h + $this->line_spacing; - - $color_index++; - if ($color_index > $max_color_index) - $color_index = 0; - } - } // Function DrawLegend() - - - /*! - * TODO Draws a legend over (or below) an axis of the plot. - */ - function DrawAxisLegend() - { - // Calculate available room - // Calculate length of all items (boxes included) - // Calculate number of lines and room it would take. FIXME: this should be known in CalcMargins() - // Draw. - } - -///////////////////////////////////////////// -//////////////////// PLOT DRAWING -///////////////////////////////////////////// - - - /*! - * Draws a pie chart. Data has to be 'text-data' type. - * - * This can work in two ways: the classical, with a column for each sector - * (computes the column totals and draws the pie with that) - * OR - * Takes each row as a sector and uses it's first value. This has the added - * advantage of using the labels provided, which is not the case with the - * former method. This might prove useful for pie charts from GROUP BY sql queries - */ - function DrawPieChart() - { - $xpos = $this->plot_area[0] + $this->plot_area_width/2; - $ypos = $this->plot_area[1] + $this->plot_area_height/2; - $diameter = min($this->plot_area_width, $this->plot_area_height); - $radius = $diameter/2; - - // Get sum of each column? One pie slice per column - if ($this->data_type === 'text-data') { - for ($i = 0; $i < $this->num_data_rows; $i++) { - for ($j = 1; $j < $this->num_recs[$i]; $j++) { // Label ($row[0]) unused in these pie charts - @ $sumarr[$j] += abs($this->data[$i][$j]); // NOTE! sum > 0 to make pie charts - } - } - } - // Or only one column per row, one pie slice per row? - else if ($this->data_type == 'text-data-single') { - for ($i = 0; $i < $this->num_data_rows; $i++) { - $legend[$i] = $this->data[$i][0]; // Set the legend to column labels - $sumarr[$i] = $this->data[$i][1]; - } - } - else if ($this->data_type == 'data-data') { - for ($i = 0; $i < $this->num_data_rows; $i++) { - for ($j = 2; $j < $this->num_recs[$i]; $j++) { - @ $sumarr[$j] += abs($this->data[$i][$j]); - } - } - } - else { - $this->DrawError("DrawPieChart(): Data type '$this->data_type' not supported."); - return FALSE; - } - - $total = array_sum($sumarr); - - if ($total == 0) { - $this->DrawError('DrawPieChart(): Empty data set'); - return FALSE; - } - - if ($this->shading) { - $diam2 = $diameter / 2; - } else { - $diam2 = $diameter; - } - $max_data_colors = count ($this->data_colors); - - for ($h = $this->shading; $h >= 0; $h--) { - $color_index = 0; - $start_angle = 0; - $end_angle = 0; - foreach ($sumarr as $val) { - // For shaded pies: the last one (at the top of the "stack") has a brighter color: - if ($h == 0) - $slicecol = $this->ndx_data_colors[$color_index]; - else - $slicecol = $this->ndx_data_dark_colors[$color_index]; - - $label_txt = number_format(($val / $total * 100), $this->y_precision, '.', ', ') . '%'; - $val = 360 * ($val / $total); - - // NOTE that imagefilledarc measures angles CLOCKWISE (go figure why), - // so the pie chart would start clockwise from 3 o'clock, would it not be - // for the reversal of start and end angles in imagefilledarc() - $start_angle = $end_angle; - $end_angle += $val; - $mid_angle = deg2rad($end_angle - ($val / 2)); - - // Draw the slice - ImageFilledArc($this->img, $xpos, $ypos+$h, $diameter, $diam2, - 360-$end_angle, 360-$start_angle, - $slicecol, IMG_ARC_PIE); - - // Draw the labels only once - if ($h == 0) { - // Draw the outline - if (! $this->shading) - ImageFilledArc($this->img, $xpos, $ypos+$h, $diameter, $diam2, - 360-$end_angle, 360-$start_angle, - $this->ndx_grid_color, IMG_ARC_PIE | IMG_ARC_EDGED |IMG_ARC_NOFILL); - - - // The '* 1.2' trick is to get labels out of the pie chart so there are more - // chances they can be seen in small sectors. - $label_x = $xpos + ($diameter * 1.2 * cos($mid_angle)) * $this->label_scale_position; - $label_y = $ypos+$h - ($diam2 * 1.2 * sin($mid_angle)) * $this->label_scale_position; - - $this->DrawText($this->generic_font, 0, $label_x, $label_y, $this->ndx_grid_color, - $label_txt, 'center', 'center'); - } - $color_index++; - $color_index = $color_index % $max_data_colors; - } // end for - } // end for - } - - - /*! - * Supported data formats: data-data-error, text-data-error (doesn't exist yet) - * ( data comes in as array("title", x, y, error+, error-, y2, error2+, error2-, ...) ) - */ - function DrawDotsError() - { - $this->CheckOption($this->data_type, 'data-data-error', __FUNCTION__); - - for($row = 0, $cnt = 0; $row < $this->num_data_rows; $row++) { - $record = 1; // Skip record #0 (title) - - // Do we have a value for X? - if ($this->data_type == 'data-data-error') - $x_now = $this->data[$row][$record++]; // Read it, advance record index - else - $x_now = 0.5 + $cnt++; // Place text-data at X = 0.5, 1.5, 2.5, etc... - - // Draw X Data labels? - if ($this->x_data_label_pos != 'none') - $this->DrawXDataLabel($this->data[$row][0], $x_now_pixels, $row); - - while ($record < $this->num_recs[$row]) { - // Y: - $y_now = $this->data[$row][$record]; - $this->DrawDot($x_now, $y_now, $record, $this->ndx_data_colors[$record++]); - - // Error + - $val = $this->data[$row][$record]; - $this->DrawYErrorBar($x_now, $y_now, $val, $this->error_bar_shape, - $this->ndx_error_bar_colors[$record++]); - // Error - - $val = $this->data[$row][$record]; - $this->DrawYErrorBar($x_now, $y_now, -$val, $this->error_bar_shape, - $this->ndx_error_bar_colors[$record++]); - } - } - } // function DrawDotsError() - - - /* - * Supported data types: - * - data-data ("title", x, y1, y2, y3, ...) - * - text-data ("title", y1, y2, y3, ...) - */ - function DrawDots() - { - $this->CheckOption($this->data_type, 'text-data, data-data', __FUNCTION__); - - for ($row = 0, $cnt = 0; $row < $this->num_data_rows; $row++) { - $rec = 1; // Skip record #0 (data label) - - // Do we have a value for X? - if ($this->data_type == 'data-data') - $x_now = $this->data[$row][$rec++]; // Read it, advance record index - else - $x_now = 0.5 + $cnt++; // Place text-data at X = 0.5, 1.5, 2.5, etc... - - $x_now_pixels = $this->xtr($x_now); - - // Draw X Data labels? - if ($this->x_data_label_pos != 'none') - $this->DrawXDataLabel($this->data[$row][0], $x_now_pixels, $row); - - // Proceed with Y values - for($idx = 0;$rec < $this->num_recs[$row]; $rec++, $idx++) { - if (is_numeric($this->data[$row][$rec])) { // Allow for missing Y data - $this->DrawDot($x_now, $this->data[$row][$rec], - $rec, $this->ndx_data_colors[$idx]); - } - } - } - } //function DrawDots - - - /*! - * A clean, fast routine for when you just want charts like stock volume charts - */ - function DrawThinBarLines() - { - $this->CheckOption($this->data_type, 'text-data, data-data', __FUNCTION__); - - for ($row = 0, $cnt = 0; $row < $this->num_data_rows; $row++) { - $rec = 1; // Skip record #0 (data label) - - // Do we have a value for X? - if ($this->data_type == 'data-data') - $x_now = $this->data[$row][$rec++]; // Read it, advance record index - else - $x_now = 0.5 + $cnt++; // Place text-data at X = 0.5, 1.5, 2.5, etc... - - $x_now_pixels = $this->xtr($x_now); - - // Draw X Data labels? - if ($this->x_data_label_pos != 'none') - $this->DrawXDataLabel($this->data[$row][0], $x_now_pixels); - - // Proceed with Y values - for($idx = 0;$rec < $this->num_recs[$row]; $rec++, $idx++) { - if (is_numeric($this->data[$row][$rec])) { // Allow for missing Y data - ImageSetThickness($this->img, $this->line_widths[$idx]); - // Draws a line from user defined x axis position up to ytr($val) - ImageLine($this->img, $x_now_pixels, $this->x_axis_y_pixels, $x_now_pixels, - $this->ytr($this->data[$row][$rec]), $this->ndx_data_colors[$idx]); - } - } - } - - ImageSetThickness($this->img, 1); - } //function DrawThinBarLines - - /*! - * - */ - function DrawYErrorBar($x_world, $y_world, $error_height, $error_bar_type, $color) - { - /* - // TODO: add a parameter to show datalabels next to error bars? - // something like this: - if ($this->x_data_label_pos == 'plot') { - $this->DrawText($this->error_font, 90, $x1, $y2, - $color, $label, 'center', 'top'); - */ - - $x1 = $this->xtr($x_world); - $y1 = $this->ytr($y_world); - $y2 = $this->ytr($y_world+$error_height) ; - - ImageSetThickness($this->img, $this->error_bar_line_width); - ImageLine($this->img, $x1, $y1 , $x1, $y2, $color); - - switch ($error_bar_type) { - case 'line': - break; - case 'tee': - ImageLine($this->img, $x1-$this->error_bar_size, $y2, $x1+$this->error_bar_size, $y2, $color); - break; - default: - ImageLine($this->img, $x1-$this->error_bar_size, $y2, $x1+$this->error_bar_size, $y2, $color); - break; - } - - ImageSetThickness($this->img, 1); - return TRUE; - } - - /*! - * Draws a styled dot. Uses world coordinates. - * Supported types: 'halfline', 'line', 'plus', 'cross', 'rect', 'circle', 'dot', - * 'diamond', 'triangle', 'trianglemid' - */ - function DrawDot($x_world, $y_world, $record, $color) - { - // TODO: optimize, avoid counting every time we are called. - $record = $record % count ($this->point_shapes); - - $half_point = $this->point_sizes[$record] / 2; - - $x_mid = $this->xtr($x_world); - $y_mid = $this->ytr($y_world); - - $x1 = $x_mid - $half_point; - $x2 = $x_mid + $half_point; - $y1 = $y_mid - $half_point; - $y2 = $y_mid + $half_point; - - switch ($this->point_shapes[$record]) { - case 'halfline': - ImageLine($this->img, $x1, $y_mid, $x_mid, $y_mid, $color); - break; - case 'line': - ImageLine($this->img, $x1, $y_mid, $x2, $y_mid, $color); - break; - case 'plus': - ImageLine($this->img, $x1, $y_mid, $x2, $y_mid, $color); - ImageLine($this->img, $x_mid, $y1, $x_mid, $y2, $color); - break; - case 'cross': - ImageLine($this->img, $x1, $y1, $x2, $y2, $color); - ImageLine($this->img, $x1, $y2, $x2, $y1, $color); - break; - case 'rect': - ImageFilledRectangle($this->img, $x1, $y1, $x2, $y2, $color); - break; - case 'circle': - ImageArc($this->img, $x_mid, $y_mid, $this->point_sizes[$record], $this->point_sizes[$record], 0, 360, $color); - break; - case 'dot': - ImageFilledArc($this->img, $x_mid, $y_mid, $this->point_sizes[$record], $this->point_sizes[$record], 0, 360, - $color, IMG_ARC_PIE); - break; - case 'diamond': - $arrpoints = array( $x1, $y_mid, $x_mid, $y1, $x2, $y_mid, $x_mid, $y2); - ImageFilledPolygon($this->img, $arrpoints, 4, $color); - break; - case 'triangle': - $arrpoints = array( $x1, $y_mid, $x2, $y_mid, $x_mid, $y2); - ImageFilledPolygon($this->img, $arrpoints, 3, $color); - break; - case 'trianglemid': - $arrpoints = array( $x1, $y1, $x2, $y1, $x_mid, $y_mid); - ImageFilledPolygon($this->img, $arrpoints, 3, $color); - break; - default: - ImageFilledRectangle($this->img, $x1, $y1, $x2, $y2, $color); - break; - } - return TRUE; - } - - /*! - * Draw an area plot. Supported data types: - * 'text-data' - * 'data-data' - * NOTE: This function used to add first and last data values even on incomplete - * sets. That is not the behaviour now. As for missing data in between, - * there are two posibilities: replace the point with one on the X axis (previous - * way), or forget about it and use the preceding and following ones to draw the polygon. - * There is the possibility to use both, we just need to add the method to set - * it. Something like SetMissingDataBehaviour(), for example. - */ - function DrawArea() - { - $incomplete_data_defaults_to_x_axis = FALSE; // TODO: make this configurable - - for ($row = 0, $cnt = 0; $row < $this->num_data_rows; $row++) { - $rec = 1; // Skip record #0 (data label) - - if ($this->data_type == 'data-data') // Do we have a value for X? - $x_now = $this->data[$row][$rec++]; // Read it, advance record index - else - $x_now = 0.5 + $cnt++; // Place text-data at X = 0.5, 1.5, 2.5, etc... - - $x_now_pixels = $this->xtr($x_now); // Absolute coordinates - - - if ($this->x_data_label_pos != 'none') // Draw X Data labels? - $this->DrawXDataLabel($this->data[$row][0], $x_now_pixels); - - // Proceed with Y values - // Create array of points for imagefilledpolygon() - for($idx = 0; $rec < $this->num_recs[$row]; $rec++, $idx++) { - if (is_numeric($this->data[$row][$rec])) { // Allow for missing Y data - $y_now_pixels = $this->ytr($this->data[$row][$rec]); - - $posarr[$idx][] = $x_now_pixels; - $posarr[$idx][] = $y_now_pixels; - - $num_points[$idx] = isset($num_points[$idx]) ? $num_points[$idx]+1 : 1; - } - // If there's missing data... - else { - if (isset ($incomplete_data_defaults_to_x_axis)) { - $posarr[$idx][] = $x_now_pixels; - $posarr[$idx][] = $this->x_axis_y_pixels; - $num_points[$idx] = isset($num_points[$idx]) ? $num_points[$idx]+1 : 1; - } - } - } - } // end for - - $end = count($posarr); - for ($i = 0; $i < $end; $i++) { - // Prepend initial points. X = first point's X, Y = x_axis_y_pixels - $x = $posarr[$i][0]; - array_unshift($posarr[$i], $x, $this->x_axis_y_pixels); - - // Append final points. X = last point's X, Y = x_axis_y_pixels - $x = $posarr[$i][count($posarr[$i])-2]; - array_push($posarr[$i], $x, $this->x_axis_y_pixels); - - $num_points[$i] += 2; - - // Draw the poligon - ImageFilledPolygon($this->img, $posarr[$i], $num_points[$i], $this->ndx_data_colors[$i]); - } - - } // function DrawArea() - - - /*! - * Draw Lines. Supported data-types: - * 'data-data', - * 'text-data' - * NOTE: Please see the note regarding incomplete data sets on DrawArea() - */ - function DrawLines() - { - // This will tell us if lines have already begun to be drawn. - // It is an array to keep separate information for every line, with a single - // variable we would sometimes get "undefined offset" errors and no plot... - $start_lines = array_fill(0, $this->records_per_group, FALSE); - - if ($this->data_type == 'text-data') { - $lastx[0] = $this->xtr(0); - $lasty[0] = $this->xtr(0); - } - - for ($row = 0, $cnt = 0; $row < $this->num_data_rows; $row++) { - $record = 1; // Skip record #0 (data label) - - if ($this->data_type == 'data-data') // Do we have a value for X? - $x_now = $this->data[$row][$record++]; // Read it, advance record index - else - $x_now = 0.5 + $cnt++; // Place text-data at X = 0.5, 1.5, 2.5, etc... - - $x_now_pixels = $this->xtr($x_now); // Absolute coordinates - - if ($this->x_data_label_pos != 'none') // Draw X Data labels? - $this->DrawXDataLabel($this->data[$row][0], $x_now_pixels, $row); - - for ($idx = 0; $record < $this->num_recs[$row]; $record++, $idx++) { - if (is_numeric($this->data[$row][$record])) { //Allow for missing Y data - $y_now_pixels = $this->ytr($this->data[$row][$record]); - - if ($start_lines[$idx] == TRUE) { - // Set line width, revert it to normal at the end - ImageSetThickness($this->img, $this->line_widths[$idx]); - - if ($this->line_styles[$idx] == 'dashed') { - $this->SetDashedStyle($this->ndx_data_colors[$idx]); - ImageLine($this->img, $x_now_pixels, $y_now_pixels, $lastx[$idx], $lasty[$idx], - IMG_COLOR_STYLED); - } else { - ImageLine($this->img, $x_now_pixels, $y_now_pixels, $lastx[$idx], $lasty[$idx], - $this->ndx_data_colors[$idx]); - } - - } - $lasty[$idx] = $y_now_pixels; - $lastx[$idx] = $x_now_pixels; - $start_lines[$idx] = TRUE; - } - // Y data missing... should we leave a blank or not? - else if ($this->draw_broken_lines) { - $start_lines[$idx] = FALSE; - } - } // end for - } // end for - - ImageSetThickness($this->img, 1); // Revert to original state for lines to be drawn later. - } // function DrawLines() - - - /*! - * Draw lines with error bars - data comes in as - * array("label", x, y, error+, error-, y2, error2+, error2-, ...); - */ - function DrawLinesError() - { - if ($this->data_type != 'data-data-error') { - $this->DrawError("DrawLinesError(): Data type '$this->data_type' not supported."); - return FALSE; - } - - $start_lines = array_fill(0, $this->records_per_group, FALSE); - - for ($row = 0, $cnt = 0; $row < $this->num_data_rows; $row++) { - $record = 1; // Skip record #0 (data label) - - $x_now = $this->data[$row][$record++]; // Read X value, advance record index - - $x_now_pixels = $this->xtr($x_now); // Absolute coordinates. - - - if ($this->x_data_label_pos != 'none') // Draw X Data labels? - $this->DrawXDataLabel($this->data[$row][0], $x_now_pixels, $row); - - // Now go for Y, E+, E- - for ($idx = 0; $record < $this->num_recs[$row]; $idx++) { - // Y - $y_now = $this->data[$row][$record++]; - $y_now_pixels = $this->ytr($y_now); - - if ($start_lines[$idx] == TRUE) { - ImageSetThickness($this->img, $this->line_widths[$idx]); - - if ($this->line_styles[$idx] == 'dashed') { - $this->SetDashedStyle($this->ndx_data_colors[$idx]); - ImageLine($this->img, $x_now_pixels, $y_now_pixels, $lastx[$idx], $lasty[$idx], - IMG_COLOR_STYLED); - } else { - ImageLine($this->img, $x_now_pixels, $y_now_pixels, $lastx[$idx], $lasty[$idx], - $this->ndx_data_colors[$idx]); - } - } - - // Error+ - $val = $this->data[$row][$record++]; - $this->DrawYErrorBar($x_now, $y_now, $val, $this->error_bar_shape, - $this->ndx_error_bar_colors[$idx]); - - // Error- - $val = $this->data[$row][$record++]; - $this->DrawYErrorBar($x_now, $y_now, -$val, $this->error_bar_shape, - $this->ndx_error_bar_colors[$idx]); - - // Update indexes: - $start_lines[$idx] = TRUE; // Tells us if we already drew the first column of points, - // thus having $lastx and $lasty ready for the next column. - $lastx[$idx] = $x_now_pixels; - $lasty[$idx] = $y_now_pixels; - } // end while - } // end for - - ImageSetThickness($this->img, 1); // Revert to original state for lines to be drawn later. - } // function DrawLinesError() - - - - /*! - * This is a mere copy of DrawLines() with one more line drawn for each point - */ - function DrawSquared() - { - // This will tell us if lines have already begun to be drawn. - // It is an array to keep separate information for every line, for with a single - // variable we could sometimes get "undefined offset" errors and no plot... - $start_lines = array_fill(0, $this->records_per_group, FALSE); - - if ($this->data_type == 'text-data') { - $lastx[0] = $this->xtr(0); - $lasty[0] = $this->xtr(0); - } - - for ($row = 0, $cnt = 0; $row < $this->num_data_rows; $row++) { - $record = 1; // Skip record #0 (data label) - - if ($this->data_type == 'data-data') // Do we have a value for X? - $x_now = $this->data[$row][$record++]; // Read it, advance record index - else - $x_now = 0.5 + $cnt++; // Place text-data at X = 0.5, 1.5, 2.5, etc... - - $x_now_pixels = $this->xtr($x_now); // Absolute coordinates - - if ($this->x_data_label_pos != 'none') // Draw X Data labels? - $this->DrawXDataLabel($this->data[$row][0], $x_now_pixels); // notice there is no last param. - - // Draw Lines - for ($idx = 0; $record < $this->num_recs[$row]; $record++, $idx++) { - if (is_numeric($this->data[$row][$record])) { // Allow for missing Y data - $y_now_pixels = $this->ytr($this->data[$row][$record]); - - if ($start_lines[$idx] == TRUE) { - // Set line width, revert it to normal at the end - ImageSetThickness($this->img, $this->line_widths[$idx]); - - if ($this->line_styles[$idx] == 'dashed') { - $this->SetDashedStyle($this->ndx_data_colors[$idx]); - ImageLine($this->img, $lastx[$idx], $lasty[$idx], $x_now_pixels, $lasty[$idx], - IMG_COLOR_STYLED); - ImageLine($this->img, $x_now_pixels, $lasty[$idx], $x_now_pixels, $y_now_pixels, - IMG_COLOR_STYLED); - } else { - ImageLine($this->img, $lastx[$idx], $lasty[$idx], $x_now_pixels, $lasty[$idx], - $this->ndx_data_colors[$idx]); - ImageLine($this->img, $x_now_pixels, $lasty[$idx], $x_now_pixels, $y_now_pixels, - $this->ndx_data_colors[$idx]); - } - } - $lastx[$idx] = $x_now_pixels; - $lasty[$idx] = $y_now_pixels; - $start_lines[$idx] = TRUE; - } - // Y data missing... should we leave a blank or not? - else if ($this->draw_broken_lines) { - $start_lines[$idx] = FALSE; - } - } - } // end while - - ImageSetThickness($this->img, 1); - } // function DrawSquared() - - - /*! - * Data comes in as array("title", x, y, y2, y3, ...) - */ - function DrawBars() - { - if ($this->data_type != 'text-data') { - $this->DrawError('DrawBars(): Bar plots must be text-data: use function SetDataType("text-data")'); - return FALSE; - } - - for ($row = 0; $row < $this->num_data_rows; $row++) { - $record = 1; // Skip record #0 (data label) - - $x_now_pixels = $this->xtr(0.5 + $row); // Place text-data at X = 0.5, 1.5, 2.5, etc... - - if ($this->x_data_label_pos != 'none') // Draw X Data labels? TODO:labels on top of bars. - $this->DrawXDataLabel($this->data[$row][0], $x_now_pixels); - - // Draw the bar - for ($idx = 0; $record < $this->num_recs[$row]; $record++, $idx++) { - if (is_numeric($this->data[$row][$record])) { // Allow for missing Y data - $x1 = $x_now_pixels - $this->data_group_space + ($idx * $this->record_bar_width); - $x2 = $x1 + ($this->bar_width_adjust * $this->record_bar_width); - - if ($this->data[$row][$record] < $this->x_axis_position) { - $y1 = $this->x_axis_y_pixels; - $y2 = $this->ytr($this->data[$row][$record]); - } else { - $y1 = $this->ytr($this->data[$row][$record]); - $y2 = $this->x_axis_y_pixels; - } - - if ($this->shading) { // Draw the shade? - ImageFilledPolygon($this->img, array($x1, $y1, - $x1 + $this->shading, $y1 - $this->shading, - $x2 + $this->shading, $y1 - $this->shading, - $x2 + $this->shading, $y2 - $this->shading, - $x2, $y2, - $x2, $y1), - 6, $this->ndx_data_dark_colors[$idx]); - } - // Or draw a border? - else { - ImageRectangle($this->img, $x1, $y1, $x2,$y2, $this->ndx_data_border_colors[$idx]); - } - // Draw the bar - ImageFilledRectangle($this->img, $x1, $y1, $x2, $y2, $this->ndx_data_colors[$idx]); - } - } // end for - } // end for - } //function DrawBars - - - /*! - * Data comes in as array("title", x, y, y2, y3, ...) - * \note Original stacked bars idea by Laurent Kruk < lolok at users.sourceforge.net > - */ - function DrawStackedBars() - { - if ($this->data_type != 'text-data') { - $this->DrawError('DrawStackedBars(): Bar plots must be text-data: use SetDataType("text-data")'); - return FALSE; - } - - for ($row = 0; $row < $this->num_data_rows; $row++) { - $record = 1; // Skip record #0 (data label) - - $x_now_pixels = $this->xtr(0.5 + $row); // Place text-data at X = 0.5, 1.5, 2.5, etc... - - if ($this->x_data_label_pos != 'none') // Draw X Data labels? - $this->DrawXDataLabel($this->data[$row][0], $x_now_pixels); - - // Draw the bars - $oldv = 0; - for ($idx = 0; $record < $this->num_recs[$row]; $record++, $idx++) { - if (is_numeric($this->data[$row][$record])) { // Allow for missing Y data - $x1 = $x_now_pixels - $this->data_group_space; - $x2 = $x_now_pixels + $this->data_group_space; - - $y1 = $this->ytr(abs($this->data[$row][$record]) + $oldv); - $y2 = $this->ytr($this->x_axis_position + $oldv); - $oldv += abs($this->data[$row][$record]); - - if ($this->shading) { // Draw the shade? - ImageFilledPolygon($this->img, array($x1, $y1, - $x1 + $this->shading, $y1 - $this->shading, - $x2 + $this->shading, $y1 - $this->shading, - $x2 + $this->shading, $y2 - $this->shading, - $x2, $y2, - $x2, $y1), - 6, $this->ndx_data_dark_colors[$idx]); - } - // Or draw a border? - else { - ImageRectangle($this->img, $x1, $y1, $x2,$y2, $this->ndx_data_border_colors[$idx]); - } - // Draw the bar - ImageFilledRectangle($this->img, $x1, $y1, $x2, $y2, $this->ndx_data_colors[$idx]); - - } - } // end for - } // end for - } //function DrawStackedBars - - - /*! - * - */ - function DrawGraph() - { - if (! $this->img) { - $this->DrawError('DrawGraph(): No image resource allocated'); - return FALSE; - } - - if (! is_array($this->data)) { - $this->DrawError("DrawGraph(): No array of data in \$data"); - return FALSE; - } - - if (! isset($this->data_limits_done)) - $this->FindDataLimits(); // Get maxima and minima for scaling - - if ($this->total_records == 0) { // Check for empty data sets - $this->DrawError('Empty data set'); - return FALSE; - } - - $this->CalcMargins(); // Calculate margins - - if (! isset($this->plot_area_width)) // Set plot area pixel values (plot_area[]) - $this->SetPlotAreaPixels(); - - if (! isset($this->plot_max_y)) // Set plot area world values (plot_max_x, etc.) - $this->SetPlotAreaWorld(); - - if ($this->plot_type == 'bars' || $this->plot_type == 'stackedbars') // Calculate bar widths - $this->CalcBarWidths(); -/* FIXME!! this sort of thing should not be done without user's consent - if ($this->x_data_label_pos != 'none') { // Default: do not draw tick stuff if - $this->x_tick_label_pos = 'none'; // there are data labels. - $this->x_tick_pos = 'none'; - } -*/ - $this->PadArrays(); // Pad color and style arrays to fit records per group. - - $this->DrawBackground(); - - $this->DrawImageBorder(); - - $this->DrawPlotAreaBackground(); - - $this->DrawTitle(); - $this->DrawXTitle(); - $this->DrawYTitle(); - - // Pie charts are drawn differently, handle them first - if ($this->plot_type == 'pie') { - // Pie charts can maximize image space usage. - $this->SetPlotAreaPixels($this->safe_margin, $this->title_height, - $this->image_width - $this->safe_margin, - $this->image_height - $this->safe_margin); - $this->DrawPieChart(); - - if ($this->legend) - $this->DrawLegend($this->legend_x_pos, $this->legend_y_pos, ''); - - if ($this->print_image) - $this->PrintImage(); - - return; - } - - ////// All other chart types: - - if (! $this->grid_at_foreground) { // Usually one wants grids to go back, but... - $this->DrawYAxis(); // Y axis must be drawn before X axis (see DrawYAxis()) - $this->DrawXAxis(); - } - - switch ($this->plot_type) { - case 'thinbarline': - $this->DrawThinBarLines(); - break; - case 'area': - $this->DrawArea(); - break; - case 'squared': - $this->DrawSquared(); - break; - case 'lines': - if ( $this->data_type == 'data-data-error') { - $this->DrawLinesError(); - } else { - $this->DrawLines(); - } - break; - case 'linepoints': // FIXME !!! DrawXDataLabel gets called in DrawLines() and DrawDots() - if ( $this->data_type == 'data-data-error') { - $this->DrawLinesError(); - $this->DrawDotsError(); - } else { - $this->DrawLines(); - $this->DrawDots(); - } - break; - case 'points'; - if ( $this->data_type == 'data-data-error') { - $this->DrawDotsError(); - } else { - $this->DrawDots(); - } - break; - case 'stackedbars': - $this->DrawStackedBars(); - break; - case 'bars': - $this->DrawBars(); - break; - default: - $this->plot_type = 'bars'; // Set it if it wasn't already set. - $this->DrawBars(); - break; - } // end switch - - if ($this->grid_at_foreground) { // Usually one wants grids to go back, but... - $this->DrawYAxis(); // Y axis must be drawn before X axis (see DrawYAxis()) - $this->DrawXAxis(); - } - - $this->DrawPlotBorder(); - - if ($this->legend) - $this->DrawLegend($this->legend_x_pos, $this->legend_y_pos, ''); - - if ($this->print_image) - $this->PrintImage(); - - } //function DrawGraph() - -///////////////////////////////////////////// -////////////////// DEPRECATED METHODS -///////////////////////////////////////////// - - /*! - * Deprecated, use SetYTickPos() - */ - function SetDrawVertTicks($which_dvt) - { - if ($which_dvt != 1) - $this->SetYTickPos('none'); - return TRUE; - } - - /*! - * Deprecated, use SetXTickPos() - */ - function SetDrawHorizTicks($which_dht) - { - if ($which_dht != 1) - $this->SetXTickPos('none'); - return TRUE; - } - - /*! - * \deprecated Use SetNumXTicks() - */ - function SetNumHorizTicks($n) - { - return $this->SetNumXTicks($n); - } - - /*! - * \deprecated Use SetNumYTicks() - */ - function SetNumVertTicks($n) - { - return $this->SetNumYTicks($n); - } - - /*! - * \deprecated Use SetXTickIncrement() - */ - function SetHorizTickIncrement($inc) - { - return $this->SetXTickIncrement($inc); - } - - - /*! - * \deprecated Use SetYTickIncrement() - */ - function SetVertTickIncrement($inc) - { - return $this->SetYTickIncrement($inc); - } - - /*! - * \deprecated Use SetYTickPos() - */ - function SetVertTickPosition($which_tp) - { - return $this->SetYTickPos($which_tp); - } - - /*! - * \deprecated Use SetXTickPos() - */ - function SetHorizTickPosition($which_tp) - { - return $this->SetXTickPos($which_tp); - } - - /*! - * \deprecated Use SetFont() - */ - function SetTitleFontSize($which_size) - { - return $this->SetFont('title', $which_size); - } - - /*! - * \deprecated Use SetFont() - */ - function SetAxisFontSize($which_size) - { - $this->SetFont('x_label', $which_size); - $this->SetFont('y_label', $whic_size); - } - - /*! - * \deprecated Use SetFont() - */ - function SetSmallFontSize($which_size) - { - return $this->SetFont('generic', $which_size); - } - - /*! - * \deprecated Use SetFont() - */ - function SetXLabelFontSize($which_size) - { - return $this->SetFont('x_title', $which_size); - } - - /*! - * \deprecated Use SetFont() - */ - function SetYLabelFontSize($which_size) - { - return $this->SetFont('y_title', $which_size); - } - - /*! - * \deprecated Use SetXTitle() - */ - function SetXLabel($which_xlab) - { - return $this->SetXTitle($which_xlab); - } - - /*! - * \deprecated Use SetYTitle() - */ - function SetYLabel($which_ylab) - { - return $this->SetYTitle($which_ylab); - } - - /*! - * \deprecated This is now an Internal function - please set width and - * height via PHPlot() upon object construction - */ - function SetImageArea($which_iw, $which_ih) - { - $this->image_width = $which_iw; - $this->image_height = $which_ih; - - return TRUE; - } - - /*! - * \deprecated Use SetXTickLength() and SetYTickLength() instead. - */ - function SetTickLength($which_tl) - { - $this->SetXTickLength($which_tl); - $this->SetYTickLength($which_tl); - return TRUE; - } - - /*! - * \deprecated Use SetYLabelType() - */ - function SetYGridLabelType($which_yglt) - { - return $this->SetYLabelType($which_yglt); - } - - /*! - * \deprecated Use SetXLabelType() - */ - function SetXGridLabelType($which_xglt) - { - return $this->SetXLabelType($which_xglt); - } - /*! - * \deprecated Use SetYTickLabelPos() - */ - function SetYGridLabelPos($which_yglp) - { - return $this->SetYTickLabelPos($which_yglp); - } - /*! - * \deprecated Use SetXTickLabelPos() - */ - function SetXGridLabelPos($which_xglp) - { - return $this->SetXTickLabelPos($which_xglp); - } - - - /*! - * \deprecated Use SetXtitle() - */ - function SetXTitlePos($xpos) - { - $this->x_title_pos = $xpos; - return TRUE; - } - - /*! - * \deprecated Use SetYTitle() - */ - function SetYTitlePos($xpos) - { - $this->y_title_pos = $xpos; - return TRUE; - } - - /*! - * \deprecated Use DrawDots() - */ - function DrawDotSeries() - { - $this->DrawDots(); - } - - /*! - * \deprecated Use SetXLabelAngle() - */ - function SetXDataLabelAngle($which_xdla) - { - return $this->SetXLabelAngle($which_xdla); - } - - /*! - * Draw Labels (not grid labels) on X Axis, following data points. Default position is - * down of plot. Care must be taken not to draw these and x_tick_labels as they'd probably overlap. - * - * \deprecated Use SetXDataLabelPos() - */ - function SetDrawXDataLabels($which_dxdl) - { - if ($which_dxdl == '1' ) - $this->SetXDataLabelPos('plotdown'); - else - $this->SetXDataLabelPos('none'); - } - - /*! - * \deprecated This method was intended to improve performance by being specially - * written for 'data-data'. However, the improvement didn't pay. Use DrawLines() instead - */ - function DrawLineSeries() - { - return $this->DrawLines(); - } - - /*! - * \deprecated Calculates maximum X-Axis label height. Now inside CalcMargins() - */ - function CalcXHeights() - { - // TTF - if ($this->use_ttf) { - $xstr = str_repeat('.', $this->max_t); - $size = $this->TTFBBoxSize($this->x_label_font['size'], $this->x_label_angle, - $this->x_label_font['font'], $xstr); - $this->x_tick_label_height = $size[1]; - } - // Fixed font - else { // For Non-TTF fonts we can have only angles 0 or 90 - if ($this->x_label_angle == 90) - $this->x_tick_label_height = $this->max_t * $this->x_label_font['width']; - else - $this->x_tick_label_height = $this->x_label_font['height']; - } - - return TRUE; - } - - - /*! - * \deprecated Calculates Maximum Y-Axis tick label width. Now inside CalcMargins() - */ - function CalcYWidths() - { - //the "." is for space. It isn't actually printed - $ylab = number_format($this->max_y, $this->y_precision, '.', ', ') . $this->data_units_text . '.'; - - // TTF - if ($this->use_ttf) { - // Maximum Y tick label width - $size = $this->TTFBBoxSize($this->y_label_font['size'], 0, $this->y_label_font['font'], $ylab); - $this->y_tick_label_width = $size[0]; - - } - // Fixed font - else { - // Y axis title width - $this->y_tick_label_width = strlen($ylab) * $this->y_label_font['width']; - } - - return TRUE; - } - - /*! - * \deprecated Superfluous. - */ - function DrawLabels() - { - $this->DrawTitle(); - $this->DrawXTitle(); - $this->DrawYTitle(); - } - - /*! - * Set up the image resource 'img' - * \deprecated The constructor should init 'img' - */ - function InitImage() - { - $this->img = ImageCreate($this->image_width, $this->image_height); - - if (! $this->img) - $this->PrintError('InitImage(): Could not create image resource'); - return TRUE; - } - - /*! - * \deprecated - */ - function SetNewPlotAreaPixels($x1, $y1, $x2, $y2) - { - //Like in GD 0, 0 is upper left set via pixel Coordinates - $this->plot_area = array($x1, $y1, $x2, $y2); - $this->plot_area_width = $this->plot_area[2] - $this->plot_area[0]; - $this->plot_area_height = $this->plot_area[3] - $this->plot_area[1]; - $this->y_top_margin = $this->plot_area[1]; - - if (isset($this->plot_max_x)) - $this->CalcTranslation(); - - return TRUE; - } - - /*! - * \deprecated Use _SetRGBColor() - */ - function SetColor($which_color) - { - $this->SetRGBColor($which_color); - return TRUE; - } - - /* - * \deprecated Use SetLineWidths(). - */ - function SetLineWidth($which_lw) - { - - $this->SetLineWidths($which_lw); - - if (!$this->error_bar_line_width) { - $this->SetErrorBarLineWidth($which_lw); - } - return TRUE; - } - - /*! - * \deprecated - */ - function DrawDashedLine($x1, $y1, $x2, $y2 , $dash_length, $dash_space, $color) - { - if ($dash_length) - $dashes = array_fill(0, $dash_length, $color); - else - $dashes = array(); - if ($dash_space) - $spaces = array_fill(0, $dash_space, IMG_COLOR_TRANSPARENT); - else - $spaces = array(); - - $style = array_merge($dashes, $spaces); - ImageSetStyle($this->img, $style); - ImageLine($this->img, $x1, $y1, $x2, $y2, IMG_COLOR_STYLED); - } - - /*! - * \deprecated Selects an input file to be used as background for the whole graph. - * This resizes the graph to the image's size. - */ - function SetInputFile($which_input_file) - { - $size = GetImageSize($which_input_file); - $input_type = $size[2]; - - switch($input_type) { - case 1: - $im = @ ImageCreateFromGIF ($which_input_file); - if (!$im) { // See if it failed - $this->PrintError("Unable to open $which_input_file as a GIF"); - return FALSE; - } - break; - case 3: - $im = @ ImageCreateFromPNG ($which_input_file); - if (!$im) { // See if it failed - $this->PrintError("Unable to open $which_input_file as a PNG"); - return FALSE; - } - break; - case 2: - $im = @ ImageCreateFromJPEG ($which_input_file); - if (!$im) { // See if it failed - $this->PrintError("Unable to open $which_input_file as a JPG"); - return FALSE; - } - break; - default: - $this->PrintError('SetInputFile(): Please select gif, jpg, or png for image type!'); - return FALSE; - break; - } - - // Set Width and Height of Image - $this->image_width = $size[0]; - $this->image_height = $size[1]; - - // Deallocate any resources previously allocated - if ($this->img) - imagedestroy($this->img); - - $this->img = $im; - - return TRUE; - - } - - - /* - * \deprecated Use SetPointShapes(). - */ - function SetPointShape($which_pt) - { - $this->SetPointShapes($which_pt); - return TRUE; - } - - /* - * \deprecated Use SetPointSizes(). - */ - function SetPointSize($which_ps) - { - $this->SetPointSizes($which_ps); - return TRUE; - } -} // class PHPlot - - - -//////////////////////// - - -/*! - * Pads an array with another or with itself. - * \param arr array Original array (reference) - * \param size int Size of the resulting array. - * \param arr2 array If specified, array to use for padding. If unspecified, pad with $arr. - */ -function array_pad_array(&$arr, $size, $arr2=NULL) -{ - if (! is_array($arr2)) { - $arr2 = $arr; // copy the original array - } - while (count($arr) < $size) - $arr = array_merge_php4($arr, $arr2); // append until done -} - -/*! - * Fixes problem with array_merge() in PHP5. - * \note I simply copied this from a bug report. I am not running php5 yet, so - * I cannot reproduce it, which is why I trust the reporter. - */ -function array_merge_php4($array1,$array2) -{ - $return=array(); - - foreach(func_get_args() as $arg){ - if(!is_array($arg)){ - $arg=array($arg); - } - foreach($arg as $key=>$val){ - if(!is_int($key)){ - $return[$key]=$val; - }else{ - $return[]=$val; - } - } - } - return $return; - } - - - - -?> diff --git a/gui/bacula-web/external_packages/phplot/phplot_data.php b/gui/bacula-web/external_packages/phplot/phplot_data.php deleted file mode 100644 index 37351504c1..0000000000 --- a/gui/bacula-web/external_packages/phplot/phplot_data.php +++ /dev/null @@ -1,258 +0,0 @@ -img)) { - $this->PHPlot($which_width, $which_height, $which_output_file, $which_input_file); - } - } - - /*! - * Will scale all data rows - * Maybe later I will do a function that only scales some rows - * if $even is TRUE, data will be scaled with "even" factors. - * \note Original code by Thiemo Nagel - */ - function DoScaleData($even, $show_in_legend) - { - $offset = 0; // We use this not to read labels in text-data - - if ($this->data_type == 'text-data') { - $offset = 1; - } elseif ($this->data_type != 'data-data') { - $this->DrawError('wrong data type!!'); - return FALSE; - } - - // Determine maxima for each data row in array $max - // Put maximum of the maxima in $maxmax - $maxmax = 0; - for($i=0; $i < $this->num_data_rows; $i++) { - $rowsize = count($this->data[$i]); - for ($j=$offset; $j < $rowsize; $j++) { - if ($this->data[$i][$j] > @ $max[$j]) - $max[$j] = $this->data[$i][$j]; - if (@ $max[$j] > $maxmax) - $maxmax = $max[$j]; - } - } - - // determine amplification factor $amplify - $end = count($max) + $offset; - for ($i=$offset; $i < $end; $i++) { - if ($max[$i] == 0 || $max[$i] == $maxmax) { - $amplify[$i] = 1; // no divide by zero - } else { - if ($even) { - $amp = pow(10,round(log10($maxmax / $max[$i]))-1); - if ($amp * $max[$i] * 5 < $maxmax) { - $amp *= 5; - } elseif ($amp * $max[$i] * 2 < $maxmax) { - $amp *= 2; - } - } else { - $amp = $maxmax / $max[$i]; - $digits = floor(log10($amp)); - $amp = round($amp/pow(10,$digits-1))*pow(10,$digits-1); - } - $amplify[$i] = $amp; - } - if ($amplify[$i] != 1 && $show_in_legend) - @ $this->legend[$i] .= "*$amplify[$i]"; - } - - // Amplify data - // On my machine, running 1000 iterations over 1000 rows of 12 elements each, - // the for loops were 43.2% faster (MBD) - for ($i = 0; $i < $this->num_data_rows; $i++) { - $rowsize = count($this->data[$i]); - for ($j=$offset; $j < $rowsize; $j++) { - $this->data[$i][$j] *= $amplify[$j]; - } - } - - //Re-Scale Vertical Ticks if not already set - if ( ! $this->y_tick_increment) { - $this->SetYTickIncrement() ; - } - - return TRUE; - } //function DoScaleData - - - /*! - * Computes a moving average of strength $interval for - * data row number $datarow, where 0 denotes the first - * row of y-data. - * - * \param int datarow Index of the row whereupon to make calculations - * \param int interval Number of elements to use in average ("strength") - * \param bool show Whether to tell about the moving average in the legend. - * \param string color Color for the line to be drawn. This color is darkened. - * Can be named or #RRGGBB. - * \param int width Width of the line to be drawn. - * - * \note Original idea by Theimo Nagel - */ - function DoMovingAverage($datarow, $interval, $show=TRUE, $color=NULL, $width=NULL) - { - $off = 1; // Skip record #0 (data label) - - $this->PadArrays(); - - if ($interval == 0) { - $this->DrawError('DoMovingAverage(): interval can\'t be 0'); - return FALSE; - } - - if ($datarow >= $this->records_per_group) { - $this->DrawError("DoMovingAverage(): Data row out of bounds ($datarow >= $this->records_per_group)"); - return FALSE; - } - - if ($this->data_type == 'text-data') { - // Ok. No need to set the offset to skip more records. - } elseif ($this->data_type == 'data-data') { - $off++; // first Y value at $data[][2] - } else { - $this->DrawError('DoMovingAverage(): wrong data type!!'); - return FALSE; - } - - // Set color: - if ($color) { - array_push($this->ndx_data_colors, $this->SetIndexDarkColor($color)); - } else { - array_push($this->ndx_data_colors, $this->SetIndexDarkColor($this->data_colors[$datarow])); - } - // Set line width: - if ($width) { - array_push($this->line_widths, $width); - } else { - array_push($this->line_widths, $this->line_widths[$datarow] * 2); - } - // Show in legend? - if ($show) { - $this->legend[$this->records_per_group-1] = "(MA[$datarow]:$interval)"; - } - - $datarow += $off; - for ($i = 0; $i < $this->num_data_rows; $i++) { - $storage[$i % $interval] = @ $this->data[$i][$datarow]; - $ma = array_sum($storage); - $ma /= count($storage); - array_push($this->data[$i], $ma); // Push the data onto the array - $this->num_recs[$i]++; // Tell the drawing functions it is there - } - $this->records_per_group++; -// $this->FindDataLimits(); - return TRUE; - } //function DoMovingAverage() - - - /** - * Computes an exponentially smoothed moving average. - * @param int perc "smoothing percentage" - * FIXME!!! I haven't checked this. - */ - function DoExponentialMovingAverage($datarow, $perc, $show_in_legend) - { - if ($this->data_type == 'text-data') { - $datarow++; - } elseif ($this->data_type != 'data-data') { - $this->DrawError('DoWeightedMovingAverage(): wrong data type!!'); - return FALSE; - } - - if ($show_in_legend) { - $this->legend[$datarow] .= " (MA: $interval)"; - } - - $storage[0] = $this->data[0][$datarow]; - for ($i=1;$i < $this->num_data_rows; $i++) { - $storage[$i] = @ $storage[$i-1] + $perc * ($this->data[$i][$datarow] - $storage[$i-1]); - $ma = array_sum($storage); - $ma /= count($storage); - $this->data[$i][$datarow] = $ma; - } - return TRUE; - } // function DoExponentialMovingAverage() - - - /*! - * Removes the DataSet of number $index - */ - function DoRemoveDataSet($index) - { - $offset = 1; - if ($this->data_type == 'data-data') { - $offset++; - } elseif ($this->data_type != 'text-data') { - $this->DrawError('wrong data type!!'); - return FALSE; - } - - $index += $offset; - foreach ($this->data as $key=>$val) { - foreach ($val as $key2=>$val2) { - if ($key2 >= $index) { - if (isset($this->data[$key][$key2+1])) { - $this->data[$key][$key2] = $this->data[$key][$key2+1]; - } else { - unset($this->data[$key][$key2]); - } - } - } - } - } // function DoRemoveDataSet - - - /*! - * Computes row x divided by row y, stores the result in row x - * and deletes row y - */ - function DoDivision($x,$y) - { - $offset = 1; - if ($this->data_type == 'data-data') { - $offset++; - } elseif ($this->data_type != 'text-data') { - $this->DrawError('wrong data type!!'); - return FALSE; - } - - $x += $offset; $y += $offset; - reset($this->data); - while (list($key, $val) = each($this->data)) { - if ($this->data[$key][$y] == 0) { - $this->data[$key][$x] = 0; - } else { - $this->data[$key][$x] /= $this->data[$key][$y]; - } - } - - $this->DoRemoveDataSet($y-$offset); - } // function DoDivision - -} // class PHPlot_Data extends PHPlot -?> diff --git a/gui/bacula-web/external_packages/phplot/rgb.inc.php b/gui/bacula-web/external_packages/phplot/rgb.inc.php deleted file mode 100644 index 3353e28e50..0000000000 --- a/gui/bacula-web/external_packages/phplot/rgb.inc.php +++ /dev/null @@ -1,744 +0,0 @@ - array(255, 250, 250), - "ghost white" => array(248, 248, 255), - "GhostWhite" => array(248, 248, 255), - "white smoke" => array(245, 245, 245), - "WhiteSmoke" => array(245, 245, 245), - "gainsboro" => array(220, 220, 220), - "floral white" => array(255, 250, 240), - "FloralWhite" => array(255, 250, 240), - "old lace" => array(253, 245, 230), - "OldLace" => array(253, 245, 230), - "linen" => array(250, 240, 230), - "antique white" => array(250, 235, 215), - "AntiqueWhite" => array(250, 235, 215), - "papaya whip" => array(255, 239, 213), - "PapayaWhip" => array(255, 239, 213), - "blanched almond" => array(255, 235, 205), - "BlanchedAlmond" => array(255, 235, 205), - "bisque" => array(255, 228, 196), - "peach puff" => array(255, 218, 185), - "PeachPuff" => array(255, 218, 185), - "navajo white" => array(255, 222, 173), - "NavajoWhite" => array(255, 222, 173), - "moccasin" => array(255, 228, 181), - "cornsilk" => array(255, 248, 220), - "ivory" => array(255, 255, 240), - "lemon chiffon" => array(255, 250, 205), - "LemonChiffon" => array(255, 250, 205), - "seashell" => array(255, 245, 238), - "honeydew" => array(240, 255, 240), - "mint cream" => array(245, 255, 250), - "MintCream" => array(245, 255, 250), - "azure" => array(240, 255, 255), - "alice blue" => array(240, 248, 255), - "AliceBlue" => array(240, 248, 255), - "lavender" => array(230, 230, 250), - "lavender blush" => array(255, 240, 245), - "LavenderBlush" => array(255, 240, 245), - "misty rose" => array(255, 228, 225), - "MistyRose" => array(255, 228, 225), - "white" => array(255, 255, 255), - "black" => array( 0, 0, 0), - "dark slate gray" => array( 47, 79, 79), - "DarkSlateGray" => array( 47, 79, 79), - "dark slate grey" => array( 47, 79, 79), - "DarkSlateGrey" => array( 47, 79, 79), - "dim gray" => array(105, 105, 105), - "DimGray" => array(105, 105, 105), - "dim grey" => array(105, 105, 105), - "DimGrey" => array(105, 105, 105), - "slate gray" => array(112, 128, 144), - "SlateGray" => array(112, 128, 144), - "slate grey" => array(112, 128, 144), - "SlateGrey" => array(112, 128, 144), - "light slate gray" => array(119, 136, 153), - "LightSlateGray" => array(119, 136, 153), - "light slate grey" => array(119, 136, 153), - "LightSlateGrey" => array(119, 136, 153), - "gray" => array(190, 190, 190), - "grey" => array(190, 190, 190), - "light grey" => array(211, 211, 211), - "LightGrey" => array(211, 211, 211), - "light gray" => array(211, 211, 211), - "LightGray" => array(211, 211, 211), - "midnight blue" => array( 25, 25, 112), - "MidnightBlue" => array( 25, 25, 112), - "navy" => array( 0, 0, 128), - "navy blue" => array( 0, 0, 128), - "NavyBlue" => array( 0, 0, 128), - "cornflower blue" => array(100, 149, 237), - "CornflowerBlue" => array(100, 149, 237), - "dark slate blue" => array( 72, 61, 139), - "DarkSlateBlue" => array( 72, 61, 139), - "slate blue" => array(106, 90, 205), - "SlateBlue" => array(106, 90, 205), - "medium slate blue" => array(123, 104, 238), - "MediumSlateBlue" => array(123, 104, 238), - "light slate blue" => array(132, 112, 255), - "LightSlateBlue" => array(132, 112, 255), - "medium blue" => array( 0, 0, 205), - "MediumBlue" => array( 0, 0, 205), - "royal blue" => array( 65, 105, 225), - "RoyalBlue" => array( 65, 105, 225), - "blue" => array( 0, 0, 255), - "dodger blue" => array( 30, 144, 255), - "DodgerBlue" => array( 30, 144, 255), - "deep sky blue" => array( 0, 191, 255), - "DeepSkyBlue" => array( 0, 191, 255), - "sky blue" => array(135, 206, 235), - "SkyBlue" => array(135, 206, 235), - "light sky blue" => array(135, 206, 250), - "LightSkyBlue" => array(135, 206, 250), - "steel blue" => array( 70, 130, 180), - "SteelBlue" => array( 70, 130, 180), - "light steel blue" => array(176, 196, 222), - "LightSteelBlue" => array(176, 196, 222), - "light blue" => array(173, 216, 230), - "LightBlue" => array(173, 216, 230), - "powder blue" => array(176, 224, 230), - "PowderBlue" => array(176, 224, 230), - "pale turquoise" => array(175, 238, 238), - "PaleTurquoise" => array(175, 238, 238), - "dark turquoise" => array( 0, 206, 209), - "DarkTurquoise" => array( 0, 206, 209), - "medium turquoise" => array( 72, 209, 204), - "MediumTurquoise" => array( 72, 209, 204), - "turquoise" => array( 64, 224, 208), - "cyan" => array( 0, 255, 255), - "light cyan" => array(224, 255, 255), - "LightCyan" => array(224, 255, 255), - "cadet blue" => array( 95, 158, 160), - "CadetBlue" => array( 95, 158, 160), - "medium aquamarine" => array(102, 205, 170), - "MediumAquamarine" => array(102, 205, 170), - "aquamarine" => array(127, 255, 212), - "dark green" => array( 0, 100, 0), - "DarkGreen" => array( 0, 100, 0), - "dark olive green" => array( 85, 107, 47), - "DarkOliveGreen" => array( 85, 107, 47), - "dark sea green" => array(143, 188, 143), - "DarkSeaGreen" => array(143, 188, 143), - "sea green" => array( 46, 139, 87), - "SeaGreen" => array( 46, 139, 87), - "medium sea green" => array( 60, 179, 113), - "MediumSeaGreen" => array( 60, 179, 113), - "light sea green" => array( 32, 178, 170), - "LightSeaGreen" => array( 32, 178, 170), - "pale green" => array(152, 251, 152), - "PaleGreen" => array(152, 251, 152), - "spring green" => array( 0, 255, 127), - "SpringGreen" => array( 0, 255, 127), - "lawn green" => array(124, 252, 0), - "LawnGreen" => array(124, 252, 0), - "green" => array( 0, 255, 0), - "chartreuse" => array(127, 255, 0), - "medium spring green" => array( 0, 250, 154), - "MediumSpringGreen" => array( 0, 250, 154), - "green yellow" => array(173, 255, 47), - "GreenYellow" => array(173, 255, 47), - "lime green" => array( 50, 205, 50), - "LimeGreen" => array( 50, 205, 50), - "yellow green" => array(154, 205, 50), - "YellowGreen" => array(154, 205, 50), - "forest green" => array( 34, 139, 34), - "ForestGreen" => array( 34, 139, 34), - "olive drab" => array(107, 142, 35), - "OliveDrab" => array(107, 142, 35), - "dark khaki" => array(189, 183, 107), - "DarkKhaki" => array(189, 183, 107), - "khaki" => array(240, 230, 140), - "pale goldenrod" => array(238, 232, 170), - "PaleGoldenrod" => array(238, 232, 170), - "light goldenrod yellow" => array(250, 250, 210), - "LightGoldenrodYellow" => array(250, 250, 210), - "light yellow" => array(255, 255, 224), - "LightYellow" => array(255, 255, 224), - "yellow" => array(255, 255, 0), - "gold" => array(255, 215, 0), - "light goldenrod" => array(238, 221, 130), - "LightGoldenrod" => array(238, 221, 130), - "goldenrod" => array(218, 165, 32), - "dark goldenrod" => array(184, 134, 11), - "DarkGoldenrod" => array(184, 134, 11), - "rosy brown" => array(188, 143, 143), - "RosyBrown" => array(188, 143, 143), - "indian red" => array(205, 92, 92), - "IndianRed" => array(205, 92, 92), - "saddle brown" => array(139, 69, 19), - "SaddleBrown" => array(139, 69, 19), - "sienna" => array(160, 82, 45), - "peru" => array(205, 133, 63), - "burlywood" => array(222, 184, 135), - "beige" => array(245, 245, 220), - "wheat" => array(245, 222, 179), - "sandy brown" => array(244, 164, 96), - "SandyBrown" => array(244, 164, 96), - "tan" => array(210, 180, 140), - "chocolate" => array(210, 105, 30), - "firebrick" => array(178, 34, 34), - "brown" => array(165, 42, 42), - "dark salmon" => array(233, 150, 122), - "DarkSalmon" => array(233, 150, 122), - "salmon" => array(250, 128, 114), - "light salmon" => array(255, 160, 122), - "LightSalmon" => array(255, 160, 122), - "orange" => array(255, 165, 0), - "dark orange" => array(255, 140, 0), - "DarkOrange" => array(255, 140, 0), - "coral" => array(255, 127, 80), - "light coral" => array(240, 128, 128), - "LightCoral" => array(240, 128, 128), - "tomato" => array(255, 99, 71), - "orange red" => array(255, 69, 0), - "OrangeRed" => array(255, 69, 0), - "red" => array(255, 0, 0), - "hot pink" => array(255, 105, 180), - "HotPink" => array(255, 105, 180), - "deep pink" => array(255, 20, 147), - "DeepPink" => array(255, 20, 147), - "pink" => array(255, 192, 203), - "light pink" => array(255, 182, 193), - "LightPink" => array(255, 182, 193), - "pale violet red" => array(219, 112, 147), - "PaleVioletRed" => array(219, 112, 147), - "maroon" => array(176, 48, 96), - "medium violet red" => array(199, 21, 133), - "MediumVioletRed" => array(199, 21, 133), - "violet red" => array(208, 32, 144), - "VioletRed" => array(208, 32, 144), - "magenta" => array(255, 0, 255), - "violet" => array(238, 130, 238), - "plum" => array(221, 160, 221), - "orchid" => array(218, 112, 214), - "medium orchid" => array(186, 85, 211), - "MediumOrchid" => array(186, 85, 211), - "dark orchid" => array(153, 50, 204), - "DarkOrchid" => array(153, 50, 204), - "dark violet" => array(148, 0, 211), - "DarkViolet" => array(148, 0, 211), - "blue violet" => array(138, 43, 226), - "BlueViolet" => array(138, 43, 226), - "purple" => array(160, 32, 240), - "medium purple" => array(147, 112, 219), - "MediumPurple" => array(147, 112, 219), - "thistle" => array(216, 191, 216), - "snow1" => array(255, 250, 250), - "snow2" => array(238, 233, 233), - "snow3" => array(205, 201, 201), - "snow4" => array(139, 137, 137), - "seashell1" => array(255, 245, 238), - "seashell2" => array(238, 229, 222), - "seashell3" => array(205, 197, 191), - "seashell4" => array(139, 134, 130), - "AntiqueWhite1" => array(255, 239, 219), - "AntiqueWhite2" => array(238, 223, 204), - "AntiqueWhite3" => array(205, 192, 176), - "AntiqueWhite4" => array(139, 131, 120), - "bisque1" => array(255, 228, 196), - "bisque2" => array(238, 213, 183), - "bisque3" => array(205, 183, 158), - "bisque4" => array(139, 125, 107), - "PeachPuff1" => array(255, 218, 185), - "PeachPuff2" => array(238, 203, 173), - "PeachPuff3" => array(205, 175, 149), - "PeachPuff4" => array(139, 119, 101), - "NavajoWhite1" => array(255, 222, 173), - "NavajoWhite2" => array(238, 207, 161), - "NavajoWhite3" => array(205, 179, 139), - "NavajoWhite4" => array(139, 121, 94), - "LemonChiffon1" => array(255, 250, 205), - "LemonChiffon2" => array(238, 233, 191), - "LemonChiffon3" => array(205, 201, 165), - "LemonChiffon4" => array(139, 137, 112), - "cornsilk1" => array(255, 248, 220), - "cornsilk2" => array(238, 232, 205), - "cornsilk3" => array(205, 200, 177), - "cornsilk4" => array(139, 136, 120), - "ivory1" => array(255, 255, 240), - "ivory2" => array(238, 238, 224), - "ivory3" => array(205, 205, 193), - "ivory4" => array(139, 139, 131), - "honeydew1" => array(240, 255, 240), - "honeydew2" => array(224, 238, 224), - "honeydew3" => array(193, 205, 193), - "honeydew4" => array(131, 139, 131), - "LavenderBlush1" => array(255, 240, 245), - "LavenderBlush2" => array(238, 224, 229), - "LavenderBlush3" => array(205, 193, 197), - "LavenderBlush4" => array(139, 131, 134), - "MistyRose1" => array(255, 228, 225), - "MistyRose2" => array(238, 213, 210), - "MistyRose3" => array(205, 183, 181), - "MistyRose4" => array(139, 125, 123), - "azure1" => array(240, 255, 255), - "azure2" => array(224, 238, 238), - "azure3" => array(193, 205, 205), - "azure4" => array(131, 139, 139), - "SlateBlue1" => array(131, 111, 255), - "SlateBlue2" => array(122, 103, 238), - "SlateBlue3" => array(105, 89, 205), - "SlateBlue4" => array( 71, 60, 139), - "RoyalBlue1" => array( 72, 118, 255), - "RoyalBlue2" => array( 67, 110, 238), - "RoyalBlue3" => array( 58, 95, 205), - "RoyalBlue4" => array( 39, 64, 139), - "blue1" => array( 0, 0, 255), - "blue2" => array( 0, 0, 238), - "blue3" => array( 0, 0, 205), - "blue4" => array( 0, 0, 139), - "DodgerBlue1" => array( 30, 144, 255), - "DodgerBlue2" => array( 28, 134, 238), - "DodgerBlue3" => array( 24, 116, 205), - "DodgerBlue4" => array( 16, 78, 139), - "SteelBlue1" => array( 99, 184, 255), - "SteelBlue2" => array( 92, 172, 238), - "SteelBlue3" => array( 79, 148, 205), - "SteelBlue4" => array( 54, 100, 139), - "DeepSkyBlue1" => array( 0, 191, 255), - "DeepSkyBlue2" => array( 0, 178, 238), - "DeepSkyBlue3" => array( 0, 154, 205), - "DeepSkyBlue4" => array( 0, 104, 139), - "SkyBlue1" => array(135, 206, 255), - "SkyBlue2" => array(126, 192, 238), - "SkyBlue3" => array(108, 166, 205), - "SkyBlue4" => array( 74, 112, 139), - "LightSkyBlue1" => array(176, 226, 255), - "LightSkyBlue2" => array(164, 211, 238), - "LightSkyBlue3" => array(141, 182, 205), - "LightSkyBlue4" => array( 96, 123, 139), - "SlateGray1" => array(198, 226, 255), - "SlateGray2" => array(185, 211, 238), - "SlateGray3" => array(159, 182, 205), - "SlateGray4" => array(108, 123, 139), - "LightSteelBlue1" => array(202, 225, 255), - "LightSteelBlue2" => array(188, 210, 238), - "LightSteelBlue3" => array(162, 181, 205), - "LightSteelBlue4" => array(110, 123, 139), - "LightBlue1" => array(191, 239, 255), - "LightBlue2" => array(178, 223, 238), - "LightBlue3" => array(154, 192, 205), - "LightBlue4" => array(104, 131, 139), - "LightCyan1" => array(224, 255, 255), - "LightCyan2" => array(209, 238, 238), - "LightCyan3" => array(180, 205, 205), - "LightCyan4" => array(122, 139, 139), - "PaleTurquoise1" => array(187, 255, 255), - "PaleTurquoise2" => array(174, 238, 238), - "PaleTurquoise3" => array(150, 205, 205), - "PaleTurquoise4" => array(102, 139, 139), - "CadetBlue1" => array(152, 245, 255), - "CadetBlue2" => array(142, 229, 238), - "CadetBlue3" => array(122, 197, 205), - "CadetBlue4" => array( 83, 134, 139), - "turquoise1" => array( 0, 245, 255), - "turquoise2" => array( 0, 229, 238), - "turquoise3" => array( 0, 197, 205), - "turquoise4" => array( 0, 134, 139), - "cyan1" => array( 0, 255, 255), - "cyan2" => array( 0, 238, 238), - "cyan3" => array( 0, 205, 205), - "cyan4" => array( 0, 139, 139), - "DarkSlateGray1" => array(151, 255, 255), - "DarkSlateGray2" => array(141, 238, 238), - "DarkSlateGray3" => array(121, 205, 205), - "DarkSlateGray4" => array( 82, 139, 139), - "aquamarine1" => array(127, 255, 212), - "aquamarine2" => array(118, 238, 198), - "aquamarine3" => array(102, 205, 170), - "aquamarine4" => array( 69, 139, 116), - "DarkSeaGreen1" => array(193, 255, 193), - "DarkSeaGreen2" => array(180, 238, 180), - "DarkSeaGreen3" => array(155, 205, 155), - "DarkSeaGreen4" => array(105, 139, 105), - "SeaGreen1" => array( 84, 255, 159), - "SeaGreen2" => array( 78, 238, 148), - "SeaGreen3" => array( 67, 205, 128), - "SeaGreen4" => array( 46, 139, 87), - "PaleGreen1" => array(154, 255, 154), - "PaleGreen2" => array(144, 238, 144), - "PaleGreen3" => array(124, 205, 124), - "PaleGreen4" => array( 84, 139, 84), - "SpringGreen1" => array( 0, 255, 127), - "SpringGreen2" => array( 0, 238, 118), - "SpringGreen3" => array( 0, 205, 102), - "SpringGreen4" => array( 0, 139, 69), - "green1" => array( 0, 255, 0), - "green2" => array( 0, 238, 0), - "green3" => array( 0, 205, 0), - "green4" => array( 0, 139, 0), - "chartreuse1" => array(127, 255, 0), - "chartreuse2" => array(118, 238, 0), - "chartreuse3" => array(102, 205, 0), - "chartreuse4" => array( 69, 139, 0), - "OliveDrab1" => array(192, 255, 62), - "OliveDrab2" => array(179, 238, 58), - "OliveDrab3" => array(154, 205, 50), - "OliveDrab4" => array(105, 139, 34), - "DarkOliveGreen1" => array(202, 255, 112), - "DarkOliveGreen2" => array(188, 238, 104), - "DarkOliveGreen3" => array(162, 205, 90), - "DarkOliveGreen4" => array(110, 139, 61), - "khaki1" => array(255, 246, 143), - "khaki2" => array(238, 230, 133), - "khaki3" => array(205, 198, 115), - "khaki4" => array(139, 134, 78), - "LightGoldenrod1" => array(255, 236, 139), - "LightGoldenrod2" => array(238, 220, 130), - "LightGoldenrod3" => array(205, 190, 112), - "LightGoldenrod4" => array(139, 129, 76), - "LightYellow1" => array(255, 255, 224), - "LightYellow2" => array(238, 238, 209), - "LightYellow3" => array(205, 205, 180), - "LightYellow4" => array(139, 139, 122), - "yellow1" => array(255, 255, 0), - "yellow2" => array(238, 238, 0), - "yellow3" => array(205, 205, 0), - "yellow4" => array(139, 139, 0), - "gold1" => array(255, 215, 0), - "gold2" => array(238, 201, 0), - "gold3" => array(205, 173, 0), - "gold4" => array(139, 117, 0), - "goldenrod1" => array(255, 193, 37), - "goldenrod2" => array(238, 180, 34), - "goldenrod3" => array(205, 155, 29), - "goldenrod4" => array(139, 105, 20), - "DarkGoldenrod1" => array(255, 185, 15), - "DarkGoldenrod2" => array(238, 173, 14), - "DarkGoldenrod3" => array(205, 149, 12), - "DarkGoldenrod4" => array(139, 101, 8), - "RosyBrown1" => array(255, 193, 193), - "RosyBrown2" => array(238, 180, 180), - "RosyBrown3" => array(205, 155, 155), - "RosyBrown4" => array(139, 105, 105), - "IndianRed1" => array(255, 106, 106), - "IndianRed2" => array(238, 99, 99), - "IndianRed3" => array(205, 85, 85), - "IndianRed4" => array(139, 58, 58), - "sienna1" => array(255, 130, 71), - "sienna2" => array(238, 121, 66), - "sienna3" => array(205, 104, 57), - "sienna4" => array(139, 71, 38), - "burlywood1" => array(255, 211, 155), - "burlywood2" => array(238, 197, 145), - "burlywood3" => array(205, 170, 125), - "burlywood4" => array(139, 115, 85), - "wheat1" => array(255, 231, 186), - "wheat2" => array(238, 216, 174), - "wheat3" => array(205, 186, 150), - "wheat4" => array(139, 126, 102), - "tan1" => array(255, 165, 79), - "tan2" => array(238, 154, 73), - "tan3" => array(205, 133, 63), - "tan4" => array(139, 90, 43), - "chocolate1" => array(255, 127, 36), - "chocolate2" => array(238, 118, 33), - "chocolate3" => array(205, 102, 29), - "chocolate4" => array(139, 69, 19), - "firebrick1" => array(255, 48, 48), - "firebrick2" => array(238, 44, 44), - "firebrick3" => array(205, 38, 38), - "firebrick4" => array(139, 26, 26), - "brown1" => array(255, 64, 64), - "brown2" => array(238, 59, 59), - "brown3" => array(205, 51, 51), - "brown4" => array(139, 35, 35), - "salmon1" => array(255, 140, 105), - "salmon2" => array(238, 130, 98), - "salmon3" => array(205, 112, 84), - "salmon4" => array(139, 76, 57), - "LightSalmon1" => array(255, 160, 122), - "LightSalmon2" => array(238, 149, 114), - "LightSalmon3" => array(205, 129, 98), - "LightSalmon4" => array(139, 87, 66), - "orange1" => array(255, 165, 0), - "orange2" => array(238, 154, 0), - "orange3" => array(205, 133, 0), - "orange4" => array(139, 90, 0), - "DarkOrange1" => array(255, 127, 0), - "DarkOrange2" => array(238, 118, 0), - "DarkOrange3" => array(205, 102, 0), - "DarkOrange4" => array(139, 69, 0), - "coral1" => array(255, 114, 86), - "coral2" => array(238, 106, 80), - "coral3" => array(205, 91, 69), - "coral4" => array(139, 62, 47), - "tomato1" => array(255, 99, 71), - "tomato2" => array(238, 92, 66), - "tomato3" => array(205, 79, 57), - "tomato4" => array(139, 54, 38), - "OrangeRed1" => array(255, 69, 0), - "OrangeRed2" => array(238, 64, 0), - "OrangeRed3" => array(205, 55, 0), - "OrangeRed4" => array(139, 37, 0), - "red1" => array(255, 0, 0), - "red2" => array(238, 0, 0), - "red3" => array(205, 0, 0), - "red4" => array(139, 0, 0), - "DeepPink1" => array(255, 20, 147), - "DeepPink2" => array(238, 18, 137), - "DeepPink3" => array(205, 16, 118), - "DeepPink4" => array(139, 10, 80), - "HotPink1" => array(255, 110, 180), - "HotPink2" => array(238, 106, 167), - "HotPink3" => array(205, 96, 144), - "HotPink4" => array(139, 58, 98), - "pink1" => array(255, 181, 197), - "pink2" => array(238, 169, 184), - "pink3" => array(205, 145, 158), - "pink4" => array(139, 99, 108), - "LightPink1" => array(255, 174, 185), - "LightPink2" => array(238, 162, 173), - "LightPink3" => array(205, 140, 149), - "LightPink4" => array(139, 95, 101), - "PaleVioletRed1" => array(255, 130, 171), - "PaleVioletRed2" => array(238, 121, 159), - "PaleVioletRed3" => array(205, 104, 137), - "PaleVioletRed4" => array(139, 71, 93), - "maroon1" => array(255, 52, 179), - "maroon2" => array(238, 48, 167), - "maroon3" => array(205, 41, 144), - "maroon4" => array(139, 28, 98), - "VioletRed1" => array(255, 62, 150), - "VioletRed2" => array(238, 58, 140), - "VioletRed3" => array(205, 50, 120), - "VioletRed4" => array(139, 34, 82), - "magenta1" => array(255, 0, 255), - "magenta2" => array(238, 0, 238), - "magenta3" => array(205, 0, 205), - "magenta4" => array(139, 0, 139), - "orchid1" => array(255, 131, 250), - "orchid2" => array(238, 122, 233), - "orchid3" => array(205, 105, 201), - "orchid4" => array(139, 71, 137), - "plum1" => array(255, 187, 255), - "plum2" => array(238, 174, 238), - "plum3" => array(205, 150, 205), - "plum4" => array(139, 102, 139), - "MediumOrchid1" => array(224, 102, 255), - "MediumOrchid2" => array(209, 95, 238), - "MediumOrchid3" => array(180, 82, 205), - "MediumOrchid4" => array(122, 55, 139), - "DarkOrchid1" => array(191, 62, 255), - "DarkOrchid2" => array(178, 58, 238), - "DarkOrchid3" => array(154, 50, 205), - "DarkOrchid4" => array(104, 34, 139), - "purple1" => array(155, 48, 255), - "purple2" => array(145, 44, 238), - "purple3" => array(125, 38, 205), - "purple4" => array( 85, 26, 139), - "MediumPurple1" => array(171, 130, 255), - "MediumPurple2" => array(159, 121, 238), - "MediumPurple3" => array(137, 104, 205), - "MediumPurple4" => array( 93, 71, 139), - "thistle1" => array(255, 225, 255), - "thistle2" => array(238, 210, 238), - "thistle3" => array(205, 181, 205), - "thistle4" => array(139, 123, 139), - "gray0" => array( 0, 0, 0), - "grey0" => array( 0, 0, 0), - "gray1" => array( 3, 3, 3), - "grey1" => array( 3, 3, 3), - "gray2" => array( 5, 5, 5), - "grey2" => array( 5, 5, 5), - "gray3" => array( 8, 8, 8), - "grey3" => array( 8, 8, 8), - "gray4" => array( 10, 10, 10), - "grey4" => array( 10, 10, 10), - "gray5" => array( 13, 13, 13), - "grey5" => array( 13, 13, 13), - "gray6" => array( 15, 15, 15), - "grey6" => array( 15, 15, 15), - "gray7" => array( 18, 18, 18), - "grey7" => array( 18, 18, 18), - "gray8" => array( 20, 20, 20), - "grey8" => array( 20, 20, 20), - "gray9" => array( 23, 23, 23), - "grey9" => array( 23, 23, 23), - "gray10" => array( 26, 26, 26), - "grey10" => array( 26, 26, 26), - "gray11" => array( 28, 28, 28), - "grey11" => array( 28, 28, 28), - "gray12" => array( 31, 31, 31), - "grey12" => array( 31, 31, 31), - "gray13" => array( 33, 33, 33), - "grey13" => array( 33, 33, 33), - "gray14" => array( 36, 36, 36), - "grey14" => array( 36, 36, 36), - "gray15" => array( 38, 38, 38), - "grey15" => array( 38, 38, 38), - "gray16" => array( 41, 41, 41), - "grey16" => array( 41, 41, 41), - "gray17" => array( 43, 43, 43), - "grey17" => array( 43, 43, 43), - "gray18" => array( 46, 46, 46), - "grey18" => array( 46, 46, 46), - "gray19" => array( 48, 48, 48), - "grey19" => array( 48, 48, 48), - "gray20" => array( 51, 51, 51), - "grey20" => array( 51, 51, 51), - "gray21" => array( 54, 54, 54), - "grey21" => array( 54, 54, 54), - "gray22" => array( 56, 56, 56), - "grey22" => array( 56, 56, 56), - "gray23" => array( 59, 59, 59), - "grey23" => array( 59, 59, 59), - "gray24" => array( 61, 61, 61), - "grey24" => array( 61, 61, 61), - "gray25" => array( 64, 64, 64), - "grey25" => array( 64, 64, 64), - "gray26" => array( 66, 66, 66), - "grey26" => array( 66, 66, 66), - "gray27" => array( 69, 69, 69), - "grey27" => array( 69, 69, 69), - "gray28" => array( 71, 71, 71), - "grey28" => array( 71, 71, 71), - "gray29" => array( 74, 74, 74), - "grey29" => array( 74, 74, 74), - "gray30" => array( 77, 77, 77), - "grey30" => array( 77, 77, 77), - "gray31" => array( 79, 79, 79), - "grey31" => array( 79, 79, 79), - "gray32" => array( 82, 82, 82), - "grey32" => array( 82, 82, 82), - "gray33" => array( 84, 84, 84), - "grey33" => array( 84, 84, 84), - "gray34" => array( 87, 87, 87), - "grey34" => array( 87, 87, 87), - "gray35" => array( 89, 89, 89), - "grey35" => array( 89, 89, 89), - "gray36" => array( 92, 92, 92), - "grey36" => array( 92, 92, 92), - "gray37" => array( 94, 94, 94), - "grey37" => array( 94, 94, 94), - "gray38" => array( 97, 97, 97), - "grey38" => array( 97, 97, 97), - "gray39" => array( 99, 99, 99), - "grey39" => array( 99, 99, 99), - "gray40" => array(102, 102, 102), - "grey40" => array(102, 102, 102), - "gray41" => array(105, 105, 105), - "grey41" => array(105, 105, 105), - "gray42" => array(107, 107, 107), - "grey42" => array(107, 107, 107), - "gray43" => array(110, 110, 110), - "grey43" => array(110, 110, 110), - "gray44" => array(112, 112, 112), - "grey44" => array(112, 112, 112), - "gray45" => array(115, 115, 115), - "grey45" => array(115, 115, 115), - "gray46" => array(117, 117, 117), - "grey46" => array(117, 117, 117), - "gray47" => array(120, 120, 120), - "grey47" => array(120, 120, 120), - "gray48" => array(122, 122, 122), - "grey48" => array(122, 122, 122), - "gray49" => array(125, 125, 125), - "grey49" => array(125, 125, 125), - "gray50" => array(127, 127, 127), - "grey50" => array(127, 127, 127), - "gray51" => array(130, 130, 130), - "grey51" => array(130, 130, 130), - "gray52" => array(133, 133, 133), - "grey52" => array(133, 133, 133), - "gray53" => array(135, 135, 135), - "grey53" => array(135, 135, 135), - "gray54" => array(138, 138, 138), - "grey54" => array(138, 138, 138), - "gray55" => array(140, 140, 140), - "grey55" => array(140, 140, 140), - "gray56" => array(143, 143, 143), - "grey56" => array(143, 143, 143), - "gray57" => array(145, 145, 145), - "grey57" => array(145, 145, 145), - "gray58" => array(148, 148, 148), - "grey58" => array(148, 148, 148), - "gray59" => array(150, 150, 150), - "grey59" => array(150, 150, 150), - "gray60" => array(153, 153, 153), - "grey60" => array(153, 153, 153), - "gray61" => array(156, 156, 156), - "grey61" => array(156, 156, 156), - "gray62" => array(158, 158, 158), - "grey62" => array(158, 158, 158), - "gray63" => array(161, 161, 161), - "grey63" => array(161, 161, 161), - "gray64" => array(163, 163, 163), - "grey64" => array(163, 163, 163), - "gray65" => array(166, 166, 166), - "grey65" => array(166, 166, 166), - "gray66" => array(168, 168, 168), - "grey66" => array(168, 168, 168), - "gray67" => array(171, 171, 171), - "grey67" => array(171, 171, 171), - "gray68" => array(173, 173, 173), - "grey68" => array(173, 173, 173), - "gray69" => array(176, 176, 176), - "grey69" => array(176, 176, 176), - "gray70" => array(179, 179, 179), - "grey70" => array(179, 179, 179), - "gray71" => array(181, 181, 181), - "grey71" => array(181, 181, 181), - "gray72" => array(184, 184, 184), - "grey72" => array(184, 184, 184), - "gray73" => array(186, 186, 186), - "grey73" => array(186, 186, 186), - "gray74" => array(189, 189, 189), - "grey74" => array(189, 189, 189), - "gray75" => array(191, 191, 191), - "grey75" => array(191, 191, 191), - "gray76" => array(194, 194, 194), - "grey76" => array(194, 194, 194), - "gray77" => array(196, 196, 196), - "grey77" => array(196, 196, 196), - "gray78" => array(199, 199, 199), - "grey78" => array(199, 199, 199), - "gray79" => array(201, 201, 201), - "grey79" => array(201, 201, 201), - "gray80" => array(204, 204, 204), - "grey80" => array(204, 204, 204), - "gray81" => array(207, 207, 207), - "grey81" => array(207, 207, 207), - "gray82" => array(209, 209, 209), - "grey82" => array(209, 209, 209), - "gray83" => array(212, 212, 212), - "grey83" => array(212, 212, 212), - "gray84" => array(214, 214, 214), - "grey84" => array(214, 214, 214), - "gray85" => array(217, 217, 217), - "grey85" => array(217, 217, 217), - "gray86" => array(219, 219, 219), - "grey86" => array(219, 219, 219), - "gray87" => array(222, 222, 222), - "grey87" => array(222, 222, 222), - "gray88" => array(224, 224, 224), - "grey88" => array(224, 224, 224), - "gray89" => array(227, 227, 227), - "grey89" => array(227, 227, 227), - "gray90" => array(229, 229, 229), - "grey90" => array(229, 229, 229), - "gray91" => array(232, 232, 232), - "grey91" => array(232, 232, 232), - "gray92" => array(235, 235, 235), - "grey92" => array(235, 235, 235), - "gray93" => array(237, 237, 237), - "grey93" => array(237, 237, 237), - "gray94" => array(240, 240, 240), - "grey94" => array(240, 240, 240), - "gray95" => array(242, 242, 242), - "grey95" => array(242, 242, 242), - "gray96" => array(245, 245, 245), - "grey96" => array(245, 245, 245), - "gray97" => array(247, 247, 247), - "grey97" => array(247, 247, 247), - "gray98" => array(250, 250, 250), - "grey98" => array(250, 250, 250), - "gray99" => array(252, 252, 252), - "grey99" => array(252, 252, 252), - "gray100" => array(255, 255, 255) -); -?> diff --git a/gui/bacula-web/external_packages/smarty/COPYING.lib b/gui/bacula-web/external_packages/smarty/COPYING.lib deleted file mode 100644 index 3b204400cf..0000000000 --- a/gui/bacula-web/external_packages/smarty/COPYING.lib +++ /dev/null @@ -1,458 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS diff --git a/gui/bacula-web/external_packages/smarty/Config_File.class.php b/gui/bacula-web/external_packages/smarty/Config_File.class.php deleted file mode 100644 index a8cc755167..0000000000 --- a/gui/bacula-web/external_packages/smarty/Config_File.class.php +++ /dev/null @@ -1,389 +0,0 @@ - - * @access public - * @package Smarty - */ - -/* $Id$ */ - -/** - * Config file reading class - * @package Smarty - */ -class Config_File { - /**#@+ - * Options - * @var boolean - */ - /** - * Controls whether variables with the same name overwrite each other. - */ - var $overwrite = true; - - /** - * Controls whether config values of on/true/yes and off/false/no get - * converted to boolean values automatically. - */ - var $booleanize = true; - - /** - * Controls whether hidden config sections/vars are read from the file. - */ - var $read_hidden = true; - - /** - * Controls whether or not to fix mac or dos formatted newlines. - * If set to true, \r or \r\n will be changed to \n. - */ - var $fix_newlines = true; - /**#@-*/ - - /** @access private */ - var $_config_path = ""; - var $_config_data = array(); - /**#@-*/ - - /** - * Constructs a new config file class. - * - * @param string $config_path (optional) path to the config files - */ - function Config_File($config_path = NULL) - { - if (isset($config_path)) - $this->set_path($config_path); - } - - - /** - * Set the path where configuration files can be found. - * - * @param string $config_path path to the config files - */ - function set_path($config_path) - { - if (!empty($config_path)) { - if (!is_string($config_path) || !file_exists($config_path) || !is_dir($config_path)) { - $this->_trigger_error_msg("Bad config file path '$config_path'"); - return; - } - if(substr($config_path, -1) != DIRECTORY_SEPARATOR) { - $config_path .= DIRECTORY_SEPARATOR; - } - - $this->_config_path = $config_path; - } - } - - - /** - * Retrieves config info based on the file, section, and variable name. - * - * @param string $file_name config file to get info for - * @param string $section_name (optional) section to get info for - * @param string $var_name (optional) variable to get info for - * @return string|array a value or array of values - */ - function get($file_name, $section_name = NULL, $var_name = NULL) - { - if (empty($file_name)) { - $this->_trigger_error_msg('Empty config file name'); - return; - } else { - $file_name = $this->_config_path . $file_name; - if (!isset($this->_config_data[$file_name])) - $this->load_file($file_name, false); - } - - if (!empty($var_name)) { - if (empty($section_name)) { - return $this->_config_data[$file_name]["vars"][$var_name]; - } else { - if(isset($this->_config_data[$file_name]["sections"][$section_name]["vars"][$var_name])) - return $this->_config_data[$file_name]["sections"][$section_name]["vars"][$var_name]; - else - return array(); - } - } else { - if (empty($section_name)) { - return (array)$this->_config_data[$file_name]["vars"]; - } else { - if(isset($this->_config_data[$file_name]["sections"][$section_name]["vars"])) - return (array)$this->_config_data[$file_name]["sections"][$section_name]["vars"]; - else - return array(); - } - } - } - - - /** - * Retrieves config info based on the key. - * - * @param $file_name string config key (filename/section/var) - * @return string|array same as get() - * @uses get() retrieves information from config file and returns it - */ - function &get_key($config_key) - { - list($file_name, $section_name, $var_name) = explode('/', $config_key, 3); - $result = &$this->get($file_name, $section_name, $var_name); - return $result; - } - - /** - * Get all loaded config file names. - * - * @return array an array of loaded config file names - */ - function get_file_names() - { - return array_keys($this->_config_data); - } - - - /** - * Get all section names from a loaded file. - * - * @param string $file_name config file to get section names from - * @return array an array of section names from the specified file - */ - function get_section_names($file_name) - { - $file_name = $this->_config_path . $file_name; - if (!isset($this->_config_data[$file_name])) { - $this->_trigger_error_msg("Unknown config file '$file_name'"); - return; - } - - return array_keys($this->_config_data[$file_name]["sections"]); - } - - - /** - * Get all global or section variable names. - * - * @param string $file_name config file to get info for - * @param string $section_name (optional) section to get info for - * @return array an array of variables names from the specified file/section - */ - function get_var_names($file_name, $section = NULL) - { - if (empty($file_name)) { - $this->_trigger_error_msg('Empty config file name'); - return; - } else if (!isset($this->_config_data[$file_name])) { - $this->_trigger_error_msg("Unknown config file '$file_name'"); - return; - } - - if (empty($section)) - return array_keys($this->_config_data[$file_name]["vars"]); - else - return array_keys($this->_config_data[$file_name]["sections"][$section]["vars"]); - } - - - /** - * Clear loaded config data for a certain file or all files. - * - * @param string $file_name file to clear config data for - */ - function clear($file_name = NULL) - { - if ($file_name === NULL) - $this->_config_data = array(); - else if (isset($this->_config_data[$file_name])) - $this->_config_data[$file_name] = array(); - } - - - /** - * Load a configuration file manually. - * - * @param string $file_name file name to load - * @param boolean $prepend_path whether current config path should be - * prepended to the filename - */ - function load_file($file_name, $prepend_path = true) - { - if ($prepend_path && $this->_config_path != "") - $config_file = $this->_config_path . $file_name; - else - $config_file = $file_name; - - ini_set('track_errors', true); - $fp = @fopen($config_file, "r"); - if (!is_resource($fp)) { - $this->_trigger_error_msg("Could not open config file '$config_file'"); - return false; - } - - $contents = ($size = filesize($config_file)) ? fread($fp, $size) : ''; - fclose($fp); - - $this->_config_data[$config_file] = $this->parse_contents($contents); - return true; - } - - /** - * Store the contents of a file manually. - * - * @param string $config_file file name of the related contents - * @param string $contents the file-contents to parse - */ - function set_file_contents($config_file, $contents) - { - $this->_config_data[$config_file] = $this->parse_contents($contents); - return true; - } - - /** - * parse the source of a configuration file manually. - * - * @param string $contents the file-contents to parse - */ - function parse_contents($contents) - { - if($this->fix_newlines) { - // fix mac/dos formatted newlines - $contents = preg_replace('!\r\n?!', "\n", $contents); - } - - $config_data = array(); - $config_data['sections'] = array(); - $config_data['vars'] = array(); - - /* reference to fill with data */ - $vars =& $config_data['vars']; - - /* parse file line by line */ - preg_match_all('!^.*\r?\n?!m', $contents, $match); - $lines = $match[0]; - for ($i=0, $count=count($lines); $i<$count; $i++) { - $line = $lines[$i]; - if (empty($line)) continue; - - if ( $line{0} == '[' && preg_match('!^\[(.*?)\]!', $line, $match) ) { - /* section found */ - if ($match[1]{0} == '.') { - /* hidden section */ - if ($this->read_hidden) { - $section_name = substr($match[1], 1); - } else { - /* break reference to $vars to ignore hidden section */ - unset($vars); - $vars = array(); - continue; - } - } else { - $section_name = $match[1]; - } - if (!isset($config_data['sections'][$section_name])) - $config_data['sections'][$section_name] = array('vars' => array()); - $vars =& $config_data['sections'][$section_name]['vars']; - continue; - } - - if (preg_match('/^\s*(\.?\w+)\s*=\s*(.*)/s', $line, $match)) { - /* variable found */ - $var_name = rtrim($match[1]); - if (strpos($match[2], '"""') === 0) { - /* handle multiline-value */ - $lines[$i] = substr($match[2], 3); - $var_value = ''; - while ($i<$count) { - if (($pos = strpos($lines[$i], '"""')) === false) { - $var_value .= $lines[$i++]; - } else { - /* end of multiline-value */ - $var_value .= substr($lines[$i], 0, $pos); - break; - } - } - $booleanize = false; - - } else { - /* handle simple value */ - $var_value = preg_replace('/^([\'"])(.*)\1$/', '\2', rtrim($match[2])); - $booleanize = $this->booleanize; - - } - $this->_set_config_var($vars, $var_name, $var_value, $booleanize); - } - /* else unparsable line / means it is a comment / means ignore it */ - } - return $config_data; - } - - /**#@+ @access private */ - /** - * @param array &$container - * @param string $var_name - * @param mixed $var_value - * @param boolean $booleanize determines whether $var_value is converted to - * to true/false - */ - function _set_config_var(&$container, $var_name, $var_value, $booleanize) - { - if ($var_name{0} == '.') { - if (!$this->read_hidden) - return; - else - $var_name = substr($var_name, 1); - } - - if (!preg_match("/^[a-zA-Z_]\w*$/", $var_name)) { - $this->_trigger_error_msg("Bad variable name '$var_name'"); - return; - } - - if ($booleanize) { - if (preg_match("/^(on|true|yes)$/i", $var_value)) - $var_value = true; - else if (preg_match("/^(off|false|no)$/i", $var_value)) - $var_value = false; - } - - if (!isset($container[$var_name]) || $this->overwrite) - $container[$var_name] = $var_value; - else { - settype($container[$var_name], 'array'); - $container[$var_name][] = $var_value; - } - } - - /** - * @uses trigger_error() creates a PHP warning/error - * @param string $error_msg - * @param integer $error_type one of - */ - function _trigger_error_msg($error_msg, $error_type = E_USER_WARNING) - { - trigger_error("Config_File error: $error_msg", $error_type); - } - /**#@-*/ -} - -?> diff --git a/gui/bacula-web/external_packages/smarty/Smarty.class.php b/gui/bacula-web/external_packages/smarty/Smarty.class.php deleted file mode 100644 index ebc04c02b3..0000000000 --- a/gui/bacula-web/external_packages/smarty/Smarty.class.php +++ /dev/null @@ -1,1934 +0,0 @@ - - * @author Andrei Zmievski - * @package Smarty - * @version 2.6.10 - */ - -/* $Id$ */ - -/** - * DIR_SEP isn't used anymore, but third party apps might - */ -if(!defined('DIR_SEP')) { - define('DIR_SEP', DIRECTORY_SEPARATOR); -} - -/** - * set SMARTY_DIR to absolute path to Smarty library files. - * if not defined, include_path will be used. Sets SMARTY_DIR only if user - * application has not already defined it. - */ - -if (!defined('SMARTY_DIR')) { - define('SMARTY_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR); -} - -if (!defined('SMARTY_CORE_DIR')) { - define('SMARTY_CORE_DIR', SMARTY_DIR . 'internals' . DIRECTORY_SEPARATOR); -} - -define('SMARTY_PHP_PASSTHRU', 0); -define('SMARTY_PHP_QUOTE', 1); -define('SMARTY_PHP_REMOVE', 2); -define('SMARTY_PHP_ALLOW', 3); - -/** - * @package Smarty - */ -class Smarty -{ - /**#@+ - * Smarty Configuration Section - */ - - /** - * The name of the directory where templates are located. - * - * @var string - */ - var $template_dir = 'templates'; - - /** - * The directory where compiled templates are located. - * - * @var string - */ - var $compile_dir = 'templates_c'; - - /** - * The directory where config files are located. - * - * @var string - */ - var $config_dir = 'configs'; - - /** - * An array of directories searched for plugins. - * - * @var array - */ - var $plugins_dir = array('plugins'); - - /** - * If debugging is enabled, a debug console window will display - * when the page loads (make sure your browser allows unrequested - * popup windows) - * - * @var boolean - */ - var $debugging = false; - - /** - * When set, smarty does uses this value as error_reporting-level. - * - * @var boolean - */ - var $error_reporting = null; - - /** - * This is the path to the debug console template. If not set, - * the default one will be used. - * - * @var string - */ - var $debug_tpl = ''; - - /** - * This determines if debugging is enable-able from the browser. - *

      - *
    • NONE => no debugging control allowed
    • - *
    • URL => enable debugging when SMARTY_DEBUG is found in the URL.
    • - *
    - * @link http://www.foo.dom/index.php?SMARTY_DEBUG - * @var string - */ - var $debugging_ctrl = 'NONE'; - - /** - * This tells Smarty whether to check for recompiling or not. Recompiling - * does not need to happen unless a template or config file is changed. - * Typically you enable this during development, and disable for - * production. - * - * @var boolean - */ - var $compile_check = true; - - /** - * This forces templates to compile every time. Useful for development - * or debugging. - * - * @var boolean - */ - var $force_compile = false; - - /** - * This enables template caching. - *
      - *
    • 0 = no caching
    • - *
    • 1 = use class cache_lifetime value
    • - *
    • 2 = use cache_lifetime in cache file
    • - *
    - * @var integer - */ - var $caching = 0; - - /** - * The name of the directory for cache files. - * - * @var string - */ - var $cache_dir = 'cache'; - - /** - * This is the number of seconds cached content will persist. - *
      - *
    • 0 = always regenerate cache
    • - *
    • -1 = never expires
    • - *
    - * - * @var integer - */ - var $cache_lifetime = 3600; - - /** - * Only used when $caching is enabled. If true, then If-Modified-Since headers - * are respected with cached content, and appropriate HTTP headers are sent. - * This way repeated hits to a cached page do not send the entire page to the - * client every time. - * - * @var boolean - */ - var $cache_modified_check = false; - - /** - * This determines how Smarty handles "" tags in templates. - * possible values: - *
      - *
    • SMARTY_PHP_PASSTHRU -> print tags as plain text
    • - *
    • SMARTY_PHP_QUOTE -> escape tags as entities
    • - *
    • SMARTY_PHP_REMOVE -> remove php tags
    • - *
    • SMARTY_PHP_ALLOW -> execute php tags
    • - *
    - * - * @var integer - */ - var $php_handling = SMARTY_PHP_PASSTHRU; - - /** - * This enables template security. When enabled, many things are restricted - * in the templates that normally would go unchecked. This is useful when - * untrusted parties are editing templates and you want a reasonable level - * of security. (no direct execution of PHP in templates for example) - * - * @var boolean - */ - var $security = false; - - /** - * This is the list of template directories that are considered secure. This - * is used only if {@link $security} is enabled. One directory per array - * element. {@link $template_dir} is in this list implicitly. - * - * @var array - */ - var $secure_dir = array(); - - /** - * These are the security settings for Smarty. They are used only when - * {@link $security} is enabled. - * - * @var array - */ - var $security_settings = array( - 'PHP_HANDLING' => false, - 'IF_FUNCS' => array('array', 'list', - 'isset', 'empty', - 'count', 'sizeof', - 'in_array', 'is_array', - 'true', 'false', 'null'), - 'INCLUDE_ANY' => false, - 'PHP_TAGS' => false, - 'MODIFIER_FUNCS' => array('count'), - 'ALLOW_CONSTANTS' => false - ); - - /** - * This is an array of directories where trusted php scripts reside. - * {@link $security} is disabled during their inclusion/execution. - * - * @var array - */ - var $trusted_dir = array(); - - /** - * The left delimiter used for the template tags. - * - * @var string - */ - var $left_delimiter = '{'; - - /** - * The right delimiter used for the template tags. - * - * @var string - */ - var $right_delimiter = '}'; - - /** - * The order in which request variables are registered, similar to - * variables_order in php.ini E = Environment, G = GET, P = POST, - * C = Cookies, S = Server - * - * @var string - */ - var $request_vars_order = 'EGPCS'; - - /** - * Indicates wether $HTTP_*_VARS[] (request_use_auto_globals=false) - * are uses as request-vars or $_*[]-vars. note: if - * request_use_auto_globals is true, then $request_vars_order has - * no effect, but the php-ini-value "gpc_order" - * - * @var boolean - */ - var $request_use_auto_globals = true; - - /** - * Set this if you want different sets of compiled files for the same - * templates. This is useful for things like different languages. - * Instead of creating separate sets of templates per language, you - * set different compile_ids like 'en' and 'de'. - * - * @var string - */ - var $compile_id = null; - - /** - * This tells Smarty whether or not to use sub dirs in the cache/ and - * templates_c/ directories. sub directories better organized, but - * may not work well with PHP safe mode enabled. - * - * @var boolean - * - */ - var $use_sub_dirs = false; - - /** - * This is a list of the modifiers to apply to all template variables. - * Put each modifier in a separate array element in the order you want - * them applied. example: array('escape:"htmlall"'); - * - * @var array - */ - var $default_modifiers = array(); - - /** - * This is the resource type to be used when not specified - * at the beginning of the resource path. examples: - * $smarty->display('file:index.tpl'); - * $smarty->display('db:index.tpl'); - * $smarty->display('index.tpl'); // will use default resource type - * {include file="file:index.tpl"} - * {include file="db:index.tpl"} - * {include file="index.tpl"} {* will use default resource type *} - * - * @var array - */ - var $default_resource_type = 'file'; - - /** - * The function used for cache file handling. If not set, built-in caching is used. - * - * @var null|string function name - */ - var $cache_handler_func = null; - - /** - * This indicates which filters are automatically loaded into Smarty. - * - * @var array array of filter names - */ - var $autoload_filters = array(); - - /**#@+ - * @var boolean - */ - /** - * This tells if config file vars of the same name overwrite each other or not. - * if disabled, same name variables are accumulated in an array. - */ - var $config_overwrite = true; - - /** - * This tells whether or not to automatically booleanize config file variables. - * If enabled, then the strings "on", "true", and "yes" are treated as boolean - * true, and "off", "false" and "no" are treated as boolean false. - */ - var $config_booleanize = true; - - /** - * This tells whether hidden sections [.foobar] are readable from the - * tempalates or not. Normally you would never allow this since that is - * the point behind hidden sections: the application can access them, but - * the templates cannot. - */ - var $config_read_hidden = false; - - /** - * This tells whether or not automatically fix newlines in config files. - * It basically converts \r (mac) or \r\n (dos) to \n - */ - var $config_fix_newlines = true; - /**#@-*/ - - /** - * If a template cannot be found, this PHP function will be executed. - * Useful for creating templates on-the-fly or other special action. - * - * @var string function name - */ - var $default_template_handler_func = ''; - - /** - * The file that contains the compiler class. This can a full - * pathname, or relative to the php_include path. - * - * @var string - */ - var $compiler_file = 'Smarty_Compiler.class.php'; - - /** - * The class used for compiling templates. - * - * @var string - */ - var $compiler_class = 'Smarty_Compiler'; - - /** - * The class used to load config vars. - * - * @var string - */ - var $config_class = 'Config_File'; - -/**#@+ - * END Smarty Configuration Section - * There should be no need to touch anything below this line. - * @access private - */ - /** - * where assigned template vars are kept - * - * @var array - */ - var $_tpl_vars = array(); - - /** - * stores run-time $smarty.* vars - * - * @var null|array - */ - var $_smarty_vars = null; - - /** - * keeps track of sections - * - * @var array - */ - var $_sections = array(); - - /** - * keeps track of foreach blocks - * - * @var array - */ - var $_foreach = array(); - - /** - * keeps track of tag hierarchy - * - * @var array - */ - var $_tag_stack = array(); - - /** - * configuration object - * - * @var Config_file - */ - var $_conf_obj = null; - - /** - * loaded configuration settings - * - * @var array - */ - var $_config = array(array('vars' => array(), 'files' => array())); - - /** - * md5 checksum of the string 'Smarty' - * - * @var string - */ - var $_smarty_md5 = 'f8d698aea36fcbead2b9d5359ffca76f'; - - /** - * Smarty version number - * - * @var string - */ - var $_version = '2.6.10'; - - /** - * current template inclusion depth - * - * @var integer - */ - var $_inclusion_depth = 0; - - /** - * for different compiled templates - * - * @var string - */ - var $_compile_id = null; - - /** - * text in URL to enable debug mode - * - * @var string - */ - var $_smarty_debug_id = 'SMARTY_DEBUG'; - - /** - * debugging information for debug console - * - * @var array - */ - var $_smarty_debug_info = array(); - - /** - * info that makes up a cache file - * - * @var array - */ - var $_cache_info = array(); - - /** - * default file permissions - * - * @var integer - */ - var $_file_perms = 0644; - - /** - * default dir permissions - * - * @var integer - */ - var $_dir_perms = 0771; - - /** - * registered objects - * - * @var array - */ - var $_reg_objects = array(); - - /** - * table keeping track of plugins - * - * @var array - */ - var $_plugins = array( - 'modifier' => array(), - 'function' => array(), - 'block' => array(), - 'compiler' => array(), - 'prefilter' => array(), - 'postfilter' => array(), - 'outputfilter' => array(), - 'resource' => array(), - 'insert' => array()); - - - /** - * cache serials - * - * @var array - */ - var $_cache_serials = array(); - - /** - * name of optional cache include file - * - * @var string - */ - var $_cache_include = null; - - /** - * indicate if the current code is used in a compiled - * include - * - * @var string - */ - var $_cache_including = false; - - /**#@-*/ - /** - * The class constructor. - */ - function Smarty() - { - $this->assign('SCRIPT_NAME', isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] - : @$GLOBALS['HTTP_SERVER_VARS']['SCRIPT_NAME']); - } - - /** - * assigns values to template variables - * - * @param array|string $tpl_var the template variable name(s) - * @param mixed $value the value to assign - */ - function assign($tpl_var, $value = null) - { - if (is_array($tpl_var)){ - foreach ($tpl_var as $key => $val) { - if ($key != '') { - $this->_tpl_vars[$key] = $val; - } - } - } else { - if ($tpl_var != '') - $this->_tpl_vars[$tpl_var] = $value; - } - } - - /** - * assigns values to template variables by reference - * - * @param string $tpl_var the template variable name - * @param mixed $value the referenced value to assign - */ - function assign_by_ref($tpl_var, &$value) - { - if ($tpl_var != '') - $this->_tpl_vars[$tpl_var] = &$value; - } - - /** - * appends values to template variables - * - * @param array|string $tpl_var the template variable name(s) - * @param mixed $value the value to append - */ - function append($tpl_var, $value=null, $merge=false) - { - if (is_array($tpl_var)) { - // $tpl_var is an array, ignore $value - foreach ($tpl_var as $_key => $_val) { - if ($_key != '') { - if(!@is_array($this->_tpl_vars[$_key])) { - settype($this->_tpl_vars[$_key],'array'); - } - if($merge && is_array($_val)) { - foreach($_val as $_mkey => $_mval) { - $this->_tpl_vars[$_key][$_mkey] = $_mval; - } - } else { - $this->_tpl_vars[$_key][] = $_val; - } - } - } - } else { - if ($tpl_var != '' && isset($value)) { - if(!@is_array($this->_tpl_vars[$tpl_var])) { - settype($this->_tpl_vars[$tpl_var],'array'); - } - if($merge && is_array($value)) { - foreach($value as $_mkey => $_mval) { - $this->_tpl_vars[$tpl_var][$_mkey] = $_mval; - } - } else { - $this->_tpl_vars[$tpl_var][] = $value; - } - } - } - } - - /** - * appends values to template variables by reference - * - * @param string $tpl_var the template variable name - * @param mixed $value the referenced value to append - */ - function append_by_ref($tpl_var, &$value, $merge=false) - { - if ($tpl_var != '' && isset($value)) { - if(!@is_array($this->_tpl_vars[$tpl_var])) { - settype($this->_tpl_vars[$tpl_var],'array'); - } - if ($merge && is_array($value)) { - foreach($value as $_key => $_val) { - $this->_tpl_vars[$tpl_var][$_key] = &$value[$_key]; - } - } else { - $this->_tpl_vars[$tpl_var][] = &$value; - } - } - } - - - /** - * clear the given assigned template variable. - * - * @param string $tpl_var the template variable to clear - */ - function clear_assign($tpl_var) - { - if (is_array($tpl_var)) - foreach ($tpl_var as $curr_var) - unset($this->_tpl_vars[$curr_var]); - else - unset($this->_tpl_vars[$tpl_var]); - } - - - /** - * Registers custom function to be used in templates - * - * @param string $function the name of the template function - * @param string $function_impl the name of the PHP function to register - */ - function register_function($function, $function_impl, $cacheable=true, $cache_attrs=null) - { - $this->_plugins['function'][$function] = - array($function_impl, null, null, false, $cacheable, $cache_attrs); - - } - - /** - * Unregisters custom function - * - * @param string $function name of template function - */ - function unregister_function($function) - { - unset($this->_plugins['function'][$function]); - } - - /** - * Registers object to be used in templates - * - * @param string $object name of template object - * @param object &$object_impl the referenced PHP object to register - * @param null|array $allowed list of allowed methods (empty = all) - * @param boolean $smarty_args smarty argument format, else traditional - * @param null|array $block_functs list of methods that are block format - */ - function register_object($object, &$object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) - { - settype($allowed, 'array'); - settype($smarty_args, 'boolean'); - $this->_reg_objects[$object] = - array(&$object_impl, $allowed, $smarty_args, $block_methods); - } - - /** - * Unregisters object - * - * @param string $object name of template object - */ - function unregister_object($object) - { - unset($this->_reg_objects[$object]); - } - - - /** - * Registers block function to be used in templates - * - * @param string $block name of template block - * @param string $block_impl PHP function to register - */ - function register_block($block, $block_impl, $cacheable=true, $cache_attrs=null) - { - $this->_plugins['block'][$block] = - array($block_impl, null, null, false, $cacheable, $cache_attrs); - } - - /** - * Unregisters block function - * - * @param string $block name of template function - */ - function unregister_block($block) - { - unset($this->_plugins['block'][$block]); - } - - /** - * Registers compiler function - * - * @param string $function name of template function - * @param string $function_impl name of PHP function to register - */ - function register_compiler_function($function, $function_impl, $cacheable=true) - { - $this->_plugins['compiler'][$function] = - array($function_impl, null, null, false, $cacheable); - } - - /** - * Unregisters compiler function - * - * @param string $function name of template function - */ - function unregister_compiler_function($function) - { - unset($this->_plugins['compiler'][$function]); - } - - /** - * Registers modifier to be used in templates - * - * @param string $modifier name of template modifier - * @param string $modifier_impl name of PHP function to register - */ - function register_modifier($modifier, $modifier_impl) - { - $this->_plugins['modifier'][$modifier] = - array($modifier_impl, null, null, false); - } - - /** - * Unregisters modifier - * - * @param string $modifier name of template modifier - */ - function unregister_modifier($modifier) - { - unset($this->_plugins['modifier'][$modifier]); - } - - /** - * Registers a resource to fetch a template - * - * @param string $type name of resource - * @param array $functions array of functions to handle resource - */ - function register_resource($type, $functions) - { - if (count($functions)==4) { - $this->_plugins['resource'][$type] = - array($functions, false); - - } elseif (count($functions)==5) { - $this->_plugins['resource'][$type] = - array(array(array(&$functions[0], $functions[1]) - ,array(&$functions[0], $functions[2]) - ,array(&$functions[0], $functions[3]) - ,array(&$functions[0], $functions[4])) - ,false); - - } else { - $this->trigger_error("malformed function-list for '$type' in register_resource"); - - } - } - - /** - * Unregisters a resource - * - * @param string $type name of resource - */ - function unregister_resource($type) - { - unset($this->_plugins['resource'][$type]); - } - - /** - * Registers a prefilter function to apply - * to a template before compiling - * - * @param string $function name of PHP function to register - */ - function register_prefilter($function) - { - $_name = (is_array($function)) ? $function[1] : $function; - $this->_plugins['prefilter'][$_name] - = array($function, null, null, false); - } - - /** - * Unregisters a prefilter function - * - * @param string $function name of PHP function - */ - function unregister_prefilter($function) - { - unset($this->_plugins['prefilter'][$function]); - } - - /** - * Registers a postfilter function to apply - * to a compiled template after compilation - * - * @param string $function name of PHP function to register - */ - function register_postfilter($function) - { - $_name = (is_array($function)) ? $function[1] : $function; - $this->_plugins['postfilter'][$_name] - = array($function, null, null, false); - } - - /** - * Unregisters a postfilter function - * - * @param string $function name of PHP function - */ - function unregister_postfilter($function) - { - unset($this->_plugins['postfilter'][$function]); - } - - /** - * Registers an output filter function to apply - * to a template output - * - * @param string $function name of PHP function - */ - function register_outputfilter($function) - { - $_name = (is_array($function)) ? $function[1] : $function; - $this->_plugins['outputfilter'][$_name] - = array($function, null, null, false); - } - - /** - * Unregisters an outputfilter function - * - * @param string $function name of PHP function - */ - function unregister_outputfilter($function) - { - unset($this->_plugins['outputfilter'][$function]); - } - - /** - * load a filter of specified type and name - * - * @param string $type filter type - * @param string $name filter name - */ - function load_filter($type, $name) - { - switch ($type) { - case 'output': - $_params = array('plugins' => array(array($type . 'filter', $name, null, null, false))); - require_once(SMARTY_CORE_DIR . 'core.load_plugins.php'); - smarty_core_load_plugins($_params, $this); - break; - - case 'pre': - case 'post': - if (!isset($this->_plugins[$type . 'filter'][$name])) - $this->_plugins[$type . 'filter'][$name] = false; - break; - } - } - - /** - * clear cached content for the given template and cache id - * - * @param string $tpl_file name of template file - * @param string $cache_id name of cache_id - * @param string $compile_id name of compile_id - * @param string $exp_time expiration time - * @return boolean - */ - function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null) - { - - if (!isset($compile_id)) - $compile_id = $this->compile_id; - - if (!isset($tpl_file)) - $compile_id = null; - - $_auto_id = $this->_get_auto_id($cache_id, $compile_id); - - if (!empty($this->cache_handler_func)) { - return call_user_func_array($this->cache_handler_func, - array('clear', &$this, &$dummy, $tpl_file, $cache_id, $compile_id, $exp_time)); - } else { - $_params = array('auto_base' => $this->cache_dir, - 'auto_source' => $tpl_file, - 'auto_id' => $_auto_id, - 'exp_time' => $exp_time); - require_once(SMARTY_CORE_DIR . 'core.rm_auto.php'); - return smarty_core_rm_auto($_params, $this); - } - - } - - - /** - * clear the entire contents of cache (all templates) - * - * @param string $exp_time expire time - * @return boolean results of {@link smarty_core_rm_auto()} - */ - function clear_all_cache($exp_time = null) - { - return $this->clear_cache(null, null, null, $exp_time); - } - - - /** - * test to see if valid cache exists for this template - * - * @param string $tpl_file name of template file - * @param string $cache_id - * @param string $compile_id - * @return string|false results of {@link _read_cache_file()} - */ - function is_cached($tpl_file, $cache_id = null, $compile_id = null) - { - if (!$this->caching) - return false; - - if (!isset($compile_id)) - $compile_id = $this->compile_id; - - $_params = array( - 'tpl_file' => $tpl_file, - 'cache_id' => $cache_id, - 'compile_id' => $compile_id - ); - require_once(SMARTY_CORE_DIR . 'core.read_cache_file.php'); - return smarty_core_read_cache_file($_params, $this); - } - - - /** - * clear all the assigned template variables. - * - */ - function clear_all_assign() - { - $this->_tpl_vars = array(); - } - - /** - * clears compiled version of specified template resource, - * or all compiled template files if one is not specified. - * This function is for advanced use only, not normally needed. - * - * @param string $tpl_file - * @param string $compile_id - * @param string $exp_time - * @return boolean results of {@link smarty_core_rm_auto()} - */ - function clear_compiled_tpl($tpl_file = null, $compile_id = null, $exp_time = null) - { - if (!isset($compile_id)) { - $compile_id = $this->compile_id; - } - $_params = array('auto_base' => $this->compile_dir, - 'auto_source' => $tpl_file, - 'auto_id' => $compile_id, - 'exp_time' => $exp_time, - 'extensions' => array('.inc', '.php')); - require_once(SMARTY_CORE_DIR . 'core.rm_auto.php'); - return smarty_core_rm_auto($_params, $this); - } - - /** - * Checks whether requested template exists. - * - * @param string $tpl_file - * @return boolean - */ - function template_exists($tpl_file) - { - $_params = array('resource_name' => $tpl_file, 'quiet'=>true, 'get_source'=>false); - return $this->_fetch_resource_info($_params); - } - - /** - * Returns an array containing template variables - * - * @param string $name - * @param string $type - * @return array - */ - function &get_template_vars($name=null) - { - if(!isset($name)) { - return $this->_tpl_vars; - } - if(isset($this->_tpl_vars[$name])) { - return $this->_tpl_vars[$name]; - } - } - - /** - * Returns an array containing config variables - * - * @param string $name - * @param string $type - * @return array - */ - function &get_config_vars($name=null) - { - if(!isset($name) && is_array($this->_config[0])) { - return $this->_config[0]['vars']; - } else if(isset($this->_config[0]['vars'][$name])) { - return $this->_config[0]['vars'][$name]; - } - } - - /** - * trigger Smarty error - * - * @param string $error_msg - * @param integer $error_type - */ - function trigger_error($error_msg, $error_type = E_USER_WARNING) - { - trigger_error("Smarty error: $error_msg", $error_type); - } - - - /** - * executes & displays the template results - * - * @param string $resource_name - * @param string $cache_id - * @param string $compile_id - */ - function display($resource_name, $cache_id = null, $compile_id = null) - { - $this->fetch($resource_name, $cache_id, $compile_id, true); - } - - /** - * executes & returns or displays the template results - * - * @param string $resource_name - * @param string $cache_id - * @param string $compile_id - * @param boolean $display - */ - function fetch($resource_name, $cache_id = null, $compile_id = null, $display = false) - { - static $_cache_info = array(); - - $_smarty_old_error_level = $this->debugging ? error_reporting() : error_reporting(isset($this->error_reporting) - ? $this->error_reporting : error_reporting() & ~E_NOTICE); - - if (!$this->debugging && $this->debugging_ctrl == 'URL') { - $_query_string = $this->request_use_auto_globals ? $_SERVER['QUERY_STRING'] : $GLOBALS['HTTP_SERVER_VARS']['QUERY_STRING']; - if (@strstr($_query_string, $this->_smarty_debug_id)) { - if (@strstr($_query_string, $this->_smarty_debug_id . '=on')) { - // enable debugging for this browser session - @setcookie('SMARTY_DEBUG', true); - $this->debugging = true; - } elseif (@strstr($_query_string, $this->_smarty_debug_id . '=off')) { - // disable debugging for this browser session - @setcookie('SMARTY_DEBUG', false); - $this->debugging = false; - } else { - // enable debugging for this page - $this->debugging = true; - } - } else { - $this->debugging = (bool)($this->request_use_auto_globals ? @$_COOKIE['SMARTY_DEBUG'] : @$GLOBALS['HTTP_COOKIE_VARS']['SMARTY_DEBUG']); - } - } - - if ($this->debugging) { - // capture time for debugging info - $_params = array(); - require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); - $_debug_start_time = smarty_core_get_microtime($_params, $this); - $this->_smarty_debug_info[] = array('type' => 'template', - 'filename' => $resource_name, - 'depth' => 0); - $_included_tpls_idx = count($this->_smarty_debug_info) - 1; - } - - if (!isset($compile_id)) { - $compile_id = $this->compile_id; - } - - $this->_compile_id = $compile_id; - $this->_inclusion_depth = 0; - - if ($this->caching) { - // save old cache_info, initialize cache_info - array_push($_cache_info, $this->_cache_info); - $this->_cache_info = array(); - $_params = array( - 'tpl_file' => $resource_name, - 'cache_id' => $cache_id, - 'compile_id' => $compile_id, - 'results' => null - ); - require_once(SMARTY_CORE_DIR . 'core.read_cache_file.php'); - if (smarty_core_read_cache_file($_params, $this)) { - $_smarty_results = $_params['results']; - if (!empty($this->_cache_info['insert_tags'])) { - $_params = array('plugins' => $this->_cache_info['insert_tags']); - require_once(SMARTY_CORE_DIR . 'core.load_plugins.php'); - smarty_core_load_plugins($_params, $this); - $_params = array('results' => $_smarty_results); - require_once(SMARTY_CORE_DIR . 'core.process_cached_inserts.php'); - $_smarty_results = smarty_core_process_cached_inserts($_params, $this); - } - if (!empty($this->_cache_info['cache_serials'])) { - $_params = array('results' => $_smarty_results); - require_once(SMARTY_CORE_DIR . 'core.process_compiled_include.php'); - $_smarty_results = smarty_core_process_compiled_include($_params, $this); - } - - - if ($display) { - if ($this->debugging) - { - // capture time for debugging info - $_params = array(); - require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); - $this->_smarty_debug_info[$_included_tpls_idx]['exec_time'] = smarty_core_get_microtime($_params, $this) - $_debug_start_time; - require_once(SMARTY_CORE_DIR . 'core.display_debug_console.php'); - $_smarty_results .= smarty_core_display_debug_console($_params, $this); - } - if ($this->cache_modified_check) { - $_server_vars = ($this->request_use_auto_globals) ? $_SERVER : $GLOBALS['HTTP_SERVER_VARS']; - $_last_modified_date = @substr($_server_vars['HTTP_IF_MODIFIED_SINCE'], 0, strpos($_server_vars['HTTP_IF_MODIFIED_SINCE'], 'GMT') + 3); - $_gmt_mtime = gmdate('D, d M Y H:i:s', $this->_cache_info['timestamp']).' GMT'; - if (@count($this->_cache_info['insert_tags']) == 0 - && !$this->_cache_serials - && $_gmt_mtime == $_last_modified_date) { - if (php_sapi_name()=='cgi') - header('Status: 304 Not Modified'); - else - header('HTTP/1.1 304 Not Modified'); - - } else { - header('Last-Modified: '.$_gmt_mtime); - echo $_smarty_results; - } - } else { - echo $_smarty_results; - } - error_reporting($_smarty_old_error_level); - // restore initial cache_info - $this->_cache_info = array_pop($_cache_info); - return true; - } else { - error_reporting($_smarty_old_error_level); - // restore initial cache_info - $this->_cache_info = array_pop($_cache_info); - return $_smarty_results; - } - } else { - $this->_cache_info['template'][$resource_name] = true; - if ($this->cache_modified_check && $display) { - header('Last-Modified: '.gmdate('D, d M Y H:i:s', time()).' GMT'); - } - } - } - - // load filters that are marked as autoload - if (count($this->autoload_filters)) { - foreach ($this->autoload_filters as $_filter_type => $_filters) { - foreach ($_filters as $_filter) { - $this->load_filter($_filter_type, $_filter); - } - } - } - - $_smarty_compile_path = $this->_get_compile_path($resource_name); - - // if we just need to display the results, don't perform output - // buffering - for speed - $_cache_including = $this->_cache_including; - $this->_cache_including = false; - if ($display && !$this->caching && count($this->_plugins['outputfilter']) == 0) { - if ($this->_is_compiled($resource_name, $_smarty_compile_path) - || $this->_compile_resource($resource_name, $_smarty_compile_path)) - { - include($_smarty_compile_path); - } - } else { - ob_start(); - if ($this->_is_compiled($resource_name, $_smarty_compile_path) - || $this->_compile_resource($resource_name, $_smarty_compile_path)) - { - include($_smarty_compile_path); - } - $_smarty_results = ob_get_contents(); - ob_end_clean(); - - foreach ((array)$this->_plugins['outputfilter'] as $_output_filter) { - $_smarty_results = call_user_func_array($_output_filter[0], array($_smarty_results, &$this)); - } - } - - if ($this->caching) { - $_params = array('tpl_file' => $resource_name, - 'cache_id' => $cache_id, - 'compile_id' => $compile_id, - 'results' => $_smarty_results); - require_once(SMARTY_CORE_DIR . 'core.write_cache_file.php'); - smarty_core_write_cache_file($_params, $this); - require_once(SMARTY_CORE_DIR . 'core.process_cached_inserts.php'); - $_smarty_results = smarty_core_process_cached_inserts($_params, $this); - - if ($this->_cache_serials) { - // strip nocache-tags from output - $_smarty_results = preg_replace('!(\{/?nocache\:[0-9a-f]{32}#\d+\})!s' - ,'' - ,$_smarty_results); - } - // restore initial cache_info - $this->_cache_info = array_pop($_cache_info); - } - $this->_cache_including = $_cache_including; - - if ($display) { - if (isset($_smarty_results)) { echo $_smarty_results; } - if ($this->debugging) { - // capture time for debugging info - $_params = array(); - require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); - $this->_smarty_debug_info[$_included_tpls_idx]['exec_time'] = (smarty_core_get_microtime($_params, $this) - $_debug_start_time); - require_once(SMARTY_CORE_DIR . 'core.display_debug_console.php'); - echo smarty_core_display_debug_console($_params, $this); - } - error_reporting($_smarty_old_error_level); - return; - } else { - error_reporting($_smarty_old_error_level); - if (isset($_smarty_results)) { return $_smarty_results; } - } - } - - /** - * load configuration values - * - * @param string $file - * @param string $section - * @param string $scope - */ - function config_load($file, $section = null, $scope = 'global') - { - require_once($this->_get_plugin_filepath('function', 'config_load')); - smarty_function_config_load(array('file' => $file, 'section' => $section, 'scope' => $scope), $this); - } - - /** - * return a reference to a registered object - * - * @param string $name - * @return object - */ - function &get_registered_object($name) { - if (!isset($this->_reg_objects[$name])) - $this->_trigger_fatal_error("'$name' is not a registered object"); - - if (!is_object($this->_reg_objects[$name][0])) - $this->_trigger_fatal_error("registered '$name' is not an object"); - - return $this->_reg_objects[$name][0]; - } - - /** - * clear configuration values - * - * @param string $var - */ - function clear_config($var = null) - { - if(!isset($var)) { - // clear all values - $this->_config = array(array('vars' => array(), - 'files' => array())); - } else { - unset($this->_config[0]['vars'][$var]); - } - } - - /** - * get filepath of requested plugin - * - * @param string $type - * @param string $name - * @return string|false - */ - function _get_plugin_filepath($type, $name) - { - $_params = array('type' => $type, 'name' => $name); - require_once(SMARTY_CORE_DIR . 'core.assemble_plugin_filepath.php'); - return smarty_core_assemble_plugin_filepath($_params, $this); - } - - /** - * test if resource needs compiling - * - * @param string $resource_name - * @param string $compile_path - * @return boolean - */ - function _is_compiled($resource_name, $compile_path) - { - if (!$this->force_compile && file_exists($compile_path)) { - if (!$this->compile_check) { - // no need to check compiled file - return true; - } else { - // get file source and timestamp - $_params = array('resource_name' => $resource_name, 'get_source'=>false); - if (!$this->_fetch_resource_info($_params)) { - return false; - } - if ($_params['resource_timestamp'] <= filemtime($compile_path)) { - // template not expired, no recompile - return true; - } else { - // compile template - return false; - } - } - } else { - // compiled template does not exist, or forced compile - return false; - } - } - - /** - * compile the template - * - * @param string $resource_name - * @param string $compile_path - * @return boolean - */ - function _compile_resource($resource_name, $compile_path) - { - - $_params = array('resource_name' => $resource_name); - if (!$this->_fetch_resource_info($_params)) { - return false; - } - - $_source_content = $_params['source_content']; - $_cache_include = substr($compile_path, 0, -4).'.inc'; - - if ($this->_compile_source($resource_name, $_source_content, $_compiled_content, $_cache_include)) { - // if a _cache_serial was set, we also have to write an include-file: - if ($this->_cache_include_info) { - require_once(SMARTY_CORE_DIR . 'core.write_compiled_include.php'); - smarty_core_write_compiled_include(array_merge($this->_cache_include_info, array('compiled_content'=>$_compiled_content, 'resource_name'=>$resource_name)), $this); - } - - $_params = array('compile_path'=>$compile_path, 'compiled_content' => $_compiled_content); - require_once(SMARTY_CORE_DIR . 'core.write_compiled_resource.php'); - smarty_core_write_compiled_resource($_params, $this); - - return true; - } else { - return false; - } - - } - - /** - * compile the given source - * - * @param string $resource_name - * @param string $source_content - * @param string $compiled_content - * @return boolean - */ - function _compile_source($resource_name, &$source_content, &$compiled_content, $cache_include_path=null) - { - if (file_exists(SMARTY_DIR . $this->compiler_file)) { - require_once(SMARTY_DIR . $this->compiler_file); - } else { - // use include_path - require_once($this->compiler_file); - } - - - $smarty_compiler = new $this->compiler_class; - - $smarty_compiler->template_dir = $this->template_dir; - $smarty_compiler->compile_dir = $this->compile_dir; - $smarty_compiler->plugins_dir = $this->plugins_dir; - $smarty_compiler->config_dir = $this->config_dir; - $smarty_compiler->force_compile = $this->force_compile; - $smarty_compiler->caching = $this->caching; - $smarty_compiler->php_handling = $this->php_handling; - $smarty_compiler->left_delimiter = $this->left_delimiter; - $smarty_compiler->right_delimiter = $this->right_delimiter; - $smarty_compiler->_version = $this->_version; - $smarty_compiler->security = $this->security; - $smarty_compiler->secure_dir = $this->secure_dir; - $smarty_compiler->security_settings = $this->security_settings; - $smarty_compiler->trusted_dir = $this->trusted_dir; - $smarty_compiler->use_sub_dirs = $this->use_sub_dirs; - $smarty_compiler->_reg_objects = &$this->_reg_objects; - $smarty_compiler->_plugins = &$this->_plugins; - $smarty_compiler->_tpl_vars = &$this->_tpl_vars; - $smarty_compiler->default_modifiers = $this->default_modifiers; - $smarty_compiler->compile_id = $this->_compile_id; - $smarty_compiler->_config = $this->_config; - $smarty_compiler->request_use_auto_globals = $this->request_use_auto_globals; - - if (isset($cache_include_path) && isset($this->_cache_serials[$cache_include_path])) { - $smarty_compiler->_cache_serial = $this->_cache_serials[$cache_include_path]; - } - $smarty_compiler->_cache_include = $cache_include_path; - - - $_results = $smarty_compiler->_compile_file($resource_name, $source_content, $compiled_content); - - if ($smarty_compiler->_cache_serial) { - $this->_cache_include_info = array( - 'cache_serial'=>$smarty_compiler->_cache_serial - ,'plugins_code'=>$smarty_compiler->_plugins_code - ,'include_file_path' => $cache_include_path); - - } else { - $this->_cache_include_info = null; - - } - - return $_results; - } - - /** - * Get the compile path for this resource - * - * @param string $resource_name - * @return string results of {@link _get_auto_filename()} - */ - function _get_compile_path($resource_name) - { - return $this->_get_auto_filename($this->compile_dir, $resource_name, - $this->_compile_id) . '.php'; - } - - /** - * fetch the template info. Gets timestamp, and source - * if get_source is true - * - * sets $source_content to the source of the template, and - * $resource_timestamp to its time stamp - * @param string $resource_name - * @param string $source_content - * @param integer $resource_timestamp - * @param boolean $get_source - * @param boolean $quiet - * @return boolean - */ - - function _fetch_resource_info(&$params) - { - if(!isset($params['get_source'])) { $params['get_source'] = true; } - if(!isset($params['quiet'])) { $params['quiet'] = false; } - - $_return = false; - $_params = array('resource_name' => $params['resource_name']) ; - if (isset($params['resource_base_path'])) - $_params['resource_base_path'] = $params['resource_base_path']; - else - $_params['resource_base_path'] = $this->template_dir; - - if ($this->_parse_resource_name($_params)) { - $_resource_type = $_params['resource_type']; - $_resource_name = $_params['resource_name']; - switch ($_resource_type) { - case 'file': - if ($params['get_source']) { - $params['source_content'] = $this->_read_file($_resource_name); - } - $params['resource_timestamp'] = filemtime($_resource_name); - $_return = is_file($_resource_name); - break; - - default: - // call resource functions to fetch the template source and timestamp - if ($params['get_source']) { - $_source_return = isset($this->_plugins['resource'][$_resource_type]) && - call_user_func_array($this->_plugins['resource'][$_resource_type][0][0], - array($_resource_name, &$params['source_content'], &$this)); - } else { - $_source_return = true; - } - - $_timestamp_return = isset($this->_plugins['resource'][$_resource_type]) && - call_user_func_array($this->_plugins['resource'][$_resource_type][0][1], - array($_resource_name, &$params['resource_timestamp'], &$this)); - - $_return = $_source_return && $_timestamp_return; - break; - } - } - - if (!$_return) { - // see if we can get a template with the default template handler - if (!empty($this->default_template_handler_func)) { - if (!is_callable($this->default_template_handler_func)) { - $this->trigger_error("default template handler function \"$this->default_template_handler_func\" doesn't exist."); - } else { - $_return = call_user_func_array( - $this->default_template_handler_func, - array($_params['resource_type'], $_params['resource_name'], &$params['source_content'], &$params['resource_timestamp'], &$this)); - } - } - } - - if (!$_return) { - if (!$params['quiet']) { - $this->trigger_error('unable to read resource: "' . $params['resource_name'] . '"'); - } - } else if ($_return && $this->security) { - require_once(SMARTY_CORE_DIR . 'core.is_secure.php'); - if (!smarty_core_is_secure($_params, $this)) { - if (!$params['quiet']) - $this->trigger_error('(secure mode) accessing "' . $params['resource_name'] . '" is not allowed'); - $params['source_content'] = null; - $params['resource_timestamp'] = null; - return false; - } - } - return $_return; - } - - - /** - * parse out the type and name from the resource - * - * @param string $resource_base_path - * @param string $resource_name - * @param string $resource_type - * @param string $resource_name - * @return boolean - */ - - function _parse_resource_name(&$params) - { - - // split tpl_path by the first colon - $_resource_name_parts = explode(':', $params['resource_name'], 2); - - if (count($_resource_name_parts) == 1) { - // no resource type given - $params['resource_type'] = $this->default_resource_type; - $params['resource_name'] = $_resource_name_parts[0]; - } else { - if(strlen($_resource_name_parts[0]) == 1) { - // 1 char is not resource type, but part of filepath - $params['resource_type'] = $this->default_resource_type; - $params['resource_name'] = $params['resource_name']; - } else { - $params['resource_type'] = $_resource_name_parts[0]; - $params['resource_name'] = $_resource_name_parts[1]; - } - } - - if ($params['resource_type'] == 'file') { - if (!preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $params['resource_name'])) { - // relative pathname to $params['resource_base_path'] - // use the first directory where the file is found - foreach ((array)$params['resource_base_path'] as $_curr_path) { - $_fullpath = $_curr_path . DIRECTORY_SEPARATOR . $params['resource_name']; - if (file_exists($_fullpath) && is_file($_fullpath)) { - $params['resource_name'] = $_fullpath; - return true; - } - // didn't find the file, try include_path - $_params = array('file_path' => $_fullpath); - require_once(SMARTY_CORE_DIR . 'core.get_include_path.php'); - if(smarty_core_get_include_path($_params, $this)) { - $params['resource_name'] = $_params['new_file_path']; - return true; - } - } - return false; - } else { - /* absolute path */ - return file_exists($params['resource_name']); - } - } elseif (empty($this->_plugins['resource'][$params['resource_type']])) { - $_params = array('type' => $params['resource_type']); - require_once(SMARTY_CORE_DIR . 'core.load_resource_plugin.php'); - smarty_core_load_resource_plugin($_params, $this); - } - - return true; - } - - - /** - * Handle modifiers - * - * @param string|null $modifier_name - * @param array|null $map_array - * @return string result of modifiers - */ - function _run_mod_handler() - { - $_args = func_get_args(); - list($_modifier_name, $_map_array) = array_splice($_args, 0, 2); - list($_func_name, $_tpl_file, $_tpl_line) = - $this->_plugins['modifier'][$_modifier_name]; - - $_var = $_args[0]; - foreach ($_var as $_key => $_val) { - $_args[0] = $_val; - $_var[$_key] = call_user_func_array($_func_name, $_args); - } - return $_var; - } - - /** - * Remove starting and ending quotes from the string - * - * @param string $string - * @return string - */ - function _dequote($string) - { - if (($string{0} == "'" || $string{0} == '"') && - $string{strlen($string)-1} == $string{0}) - return substr($string, 1, -1); - else - return $string; - } - - - /** - * read in a file - * - * @param string $filename - * @return string - */ - function _read_file($filename) - { - if ( file_exists($filename) && ($fd = @fopen($filename, 'rb')) ) { - $contents = ($size = filesize($filename)) ? fread($fd, $size) : ''; - fclose($fd); - return $contents; - } else { - return false; - } - } - - /** - * get a concrete filename for automagically created content - * - * @param string $auto_base - * @param string $auto_source - * @param string $auto_id - * @return string - * @staticvar string|null - * @staticvar string|null - */ - function _get_auto_filename($auto_base, $auto_source = null, $auto_id = null) - { - $_compile_dir_sep = $this->use_sub_dirs ? DIRECTORY_SEPARATOR : '^'; - $_return = $auto_base . DIRECTORY_SEPARATOR; - - if(isset($auto_id)) { - // make auto_id safe for directory names - $auto_id = str_replace('%7C',$_compile_dir_sep,(urlencode($auto_id))); - // split into separate directories - $_return .= $auto_id . $_compile_dir_sep; - } - - if(isset($auto_source)) { - // make source name safe for filename - $_filename = urlencode(basename($auto_source)); - $_crc32 = sprintf('%08X', crc32($auto_source)); - // prepend %% to avoid name conflicts with - // with $params['auto_id'] names - $_crc32 = substr($_crc32, 0, 2) . $_compile_dir_sep . - substr($_crc32, 0, 3) . $_compile_dir_sep . $_crc32; - $_return .= '%%' . $_crc32 . '%%' . $_filename; - } - - return $_return; - } - - /** - * unlink a file, possibly using expiration time - * - * @param string $resource - * @param integer $exp_time - */ - function _unlink($resource, $exp_time = null) - { - if(isset($exp_time)) { - if(time() - @filemtime($resource) >= $exp_time) { - return @unlink($resource); - } - } else { - return @unlink($resource); - } - } - - /** - * returns an auto_id for auto-file-functions - * - * @param string $cache_id - * @param string $compile_id - * @return string|null - */ - function _get_auto_id($cache_id=null, $compile_id=null) { - if (isset($cache_id)) - return (isset($compile_id)) ? $cache_id . '|' . $compile_id : $cache_id; - elseif(isset($compile_id)) - return $compile_id; - else - return null; - } - - /** - * trigger Smarty plugin error - * - * @param string $error_msg - * @param string $tpl_file - * @param integer $tpl_line - * @param string $file - * @param integer $line - * @param integer $error_type - */ - function _trigger_fatal_error($error_msg, $tpl_file = null, $tpl_line = null, - $file = null, $line = null, $error_type = E_USER_ERROR) - { - if(isset($file) && isset($line)) { - $info = ' ('.basename($file).", line $line)"; - } else { - $info = ''; - } - if (isset($tpl_line) && isset($tpl_file)) { - $this->trigger_error('[in ' . $tpl_file . ' line ' . $tpl_line . "]: $error_msg$info", $error_type); - } else { - $this->trigger_error($error_msg . $info, $error_type); - } - } - - - /** - * callback function for preg_replace, to call a non-cacheable block - * @return string - */ - function _process_compiled_include_callback($match) { - $_func = '_smarty_tplfunc_'.$match[2].'_'.$match[3]; - ob_start(); - $_func($this); - $_ret = ob_get_contents(); - ob_end_clean(); - return $_ret; - } - - - /** - * called for included templates - * - * @param string $_smarty_include_tpl_file - * @param string $_smarty_include_vars - */ - - // $_smarty_include_tpl_file, $_smarty_include_vars - - function _smarty_include($params) - { - if ($this->debugging) { - $_params = array(); - require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); - $debug_start_time = smarty_core_get_microtime($_params, $this); - $this->_smarty_debug_info[] = array('type' => 'template', - 'filename' => $params['smarty_include_tpl_file'], - 'depth' => ++$this->_inclusion_depth); - $included_tpls_idx = count($this->_smarty_debug_info) - 1; - } - - $this->_tpl_vars = array_merge($this->_tpl_vars, $params['smarty_include_vars']); - - // config vars are treated as local, so push a copy of the - // current ones onto the front of the stack - array_unshift($this->_config, $this->_config[0]); - - $_smarty_compile_path = $this->_get_compile_path($params['smarty_include_tpl_file']); - - - if ($this->_is_compiled($params['smarty_include_tpl_file'], $_smarty_compile_path) - || $this->_compile_resource($params['smarty_include_tpl_file'], $_smarty_compile_path)) - { - include($_smarty_compile_path); - } - - // pop the local vars off the front of the stack - array_shift($this->_config); - - $this->_inclusion_depth--; - - if ($this->debugging) { - // capture time for debugging info - $_params = array(); - require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); - $this->_smarty_debug_info[$included_tpls_idx]['exec_time'] = smarty_core_get_microtime($_params, $this) - $debug_start_time; - } - - if ($this->caching) { - $this->_cache_info['template'][$params['smarty_include_tpl_file']] = true; - } - } - - - /** - * get or set an array of cached attributes for function that is - * not cacheable - * @return array - */ - function &_smarty_cache_attrs($cache_serial, $count) { - $_cache_attrs =& $this->_cache_info['cache_attrs'][$cache_serial][$count]; - - if ($this->_cache_including) { - /* return next set of cache_attrs */ - $_return = current($_cache_attrs); - next($_cache_attrs); - return $_return; - - } else { - /* add a reference to a new set of cache_attrs */ - $_cache_attrs[] = array(); - return $_cache_attrs[count($_cache_attrs)-1]; - - } - - } - - - /** - * wrapper for include() retaining $this - * @return mixed - */ - function _include($filename, $once=false, $params=null) - { - if ($once) { - return include_once($filename); - } else { - return include($filename); - } - } - - - /** - * wrapper for eval() retaining $this - * @return mixed - */ - function _eval($code, $params=null) - { - return eval($code); - } - /**#@-*/ - -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/Smarty_Compiler.class.php b/gui/bacula-web/external_packages/smarty/Smarty_Compiler.class.php deleted file mode 100644 index 1b7217270f..0000000000 --- a/gui/bacula-web/external_packages/smarty/Smarty_Compiler.class.php +++ /dev/null @@ -1,2311 +0,0 @@ - - * @author Andrei Zmievski - * @version 2.6.10 - * @copyright 2001-2005 New Digital Group, Inc. - * @package Smarty - */ - -/* $Id$ */ - -/** - * Template compiling class - * @package Smarty - */ -class Smarty_Compiler extends Smarty { - - // internal vars - /**#@+ - * @access private - */ - var $_folded_blocks = array(); // keeps folded template blocks - var $_current_file = null; // the current template being compiled - var $_current_line_no = 1; // line number for error messages - var $_capture_stack = array(); // keeps track of nested capture buffers - var $_plugin_info = array(); // keeps track of plugins to load - var $_init_smarty_vars = false; - var $_permitted_tokens = array('true','false','yes','no','on','off','null'); - var $_db_qstr_regexp = null; // regexps are setup in the constructor - var $_si_qstr_regexp = null; - var $_qstr_regexp = null; - var $_func_regexp = null; - var $_reg_obj_regexp = null; - var $_var_bracket_regexp = null; - var $_num_const_regexp = null; - var $_dvar_guts_regexp = null; - var $_dvar_regexp = null; - var $_cvar_regexp = null; - var $_svar_regexp = null; - var $_avar_regexp = null; - var $_mod_regexp = null; - var $_var_regexp = null; - var $_parenth_param_regexp = null; - var $_func_call_regexp = null; - var $_obj_ext_regexp = null; - var $_obj_start_regexp = null; - var $_obj_params_regexp = null; - var $_obj_call_regexp = null; - var $_cacheable_state = 0; - var $_cache_attrs_count = 0; - var $_nocache_count = 0; - var $_cache_serial = null; - var $_cache_include = null; - - var $_strip_depth = 0; - var $_additional_newline = "\n"; - - /**#@-*/ - /** - * The class constructor. - */ - function Smarty_Compiler() - { - // matches double quoted strings: - // "foobar" - // "foo\"bar" - $this->_db_qstr_regexp = '"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"'; - - // matches single quoted strings: - // 'foobar' - // 'foo\'bar' - $this->_si_qstr_regexp = '\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\''; - - // matches single or double quoted strings - $this->_qstr_regexp = '(?:' . $this->_db_qstr_regexp . '|' . $this->_si_qstr_regexp . ')'; - - // matches bracket portion of vars - // [0] - // [foo] - // [$bar] - $this->_var_bracket_regexp = '\[\$?[\w\.]+\]'; - - // matches numerical constants - // 30 - // -12 - // 13.22 - $this->_num_const_regexp = '(?:\-?\d+(?:\.\d+)?)'; - - // matches $ vars (not objects): - // $foo - // $foo.bar - // $foo.bar.foobar - // $foo[0] - // $foo[$bar] - // $foo[5][blah] - // $foo[5].bar[$foobar][4] - $this->_dvar_math_regexp = '(?:[\+\*\/\%]|(?:-(?!>)))'; - $this->_dvar_math_var_regexp = '[\$\w\.\+\-\*\/\%\d\>\[\]]'; - $this->_dvar_guts_regexp = '\w+(?:' . $this->_var_bracket_regexp - . ')*(?:\.\$?\w+(?:' . $this->_var_bracket_regexp . ')*)*(?:' . $this->_dvar_math_regexp . '(?:' . $this->_num_const_regexp . '|' . $this->_dvar_math_var_regexp . ')*)?'; - $this->_dvar_regexp = '\$' . $this->_dvar_guts_regexp; - - // matches config vars: - // #foo# - // #foobar123_foo# - $this->_cvar_regexp = '\#\w+\#'; - - // matches section vars: - // %foo.bar% - $this->_svar_regexp = '\%\w+\.\w+\%'; - - // matches all valid variables (no quotes, no modifiers) - $this->_avar_regexp = '(?:' . $this->_dvar_regexp . '|' - . $this->_cvar_regexp . '|' . $this->_svar_regexp . ')'; - - // matches valid variable syntax: - // $foo - // $foo - // #foo# - // #foo# - // "text" - // "text" - $this->_var_regexp = '(?:' . $this->_avar_regexp . '|' . $this->_qstr_regexp . ')'; - - // matches valid object call (one level of object nesting allowed in parameters): - // $foo->bar - // $foo->bar() - // $foo->bar("text") - // $foo->bar($foo, $bar, "text") - // $foo->bar($foo, "foo") - // $foo->bar->foo() - // $foo->bar->foo->bar() - // $foo->bar($foo->bar) - // $foo->bar($foo->bar()) - // $foo->bar($foo->bar($blah,$foo,44,"foo",$foo[0].bar)) - $this->_obj_ext_regexp = '\->(?:\$?' . $this->_dvar_guts_regexp . ')'; - $this->_obj_restricted_param_regexp = '(?:' - . '(?:' . $this->_var_regexp . '|' . $this->_num_const_regexp . ')(?:' . $this->_obj_ext_regexp . '(?:\((?:(?:' . $this->_var_regexp . '|' . $this->_num_const_regexp . ')' - . '(?:\s*,\s*(?:' . $this->_var_regexp . '|' . $this->_num_const_regexp . '))*)?\))?)*)'; - $this->_obj_single_param_regexp = '(?:\w+|' . $this->_obj_restricted_param_regexp . '(?:\s*,\s*(?:(?:\w+|' - . $this->_var_regexp . $this->_obj_restricted_param_regexp . ')))*)'; - $this->_obj_params_regexp = '\((?:' . $this->_obj_single_param_regexp - . '(?:\s*,\s*' . $this->_obj_single_param_regexp . ')*)?\)'; - $this->_obj_start_regexp = '(?:' . $this->_dvar_regexp . '(?:' . $this->_obj_ext_regexp . ')+)'; - $this->_obj_call_regexp = '(?:' . $this->_obj_start_regexp . '(?:' . $this->_obj_params_regexp . ')?(?:' . $this->_dvar_math_regexp . '(?:' . $this->_num_const_regexp . '|' . $this->_dvar_math_var_regexp . ')*)?)'; - - // matches valid modifier syntax: - // |foo - // |@foo - // |foo:"bar" - // |foo:$bar - // |foo:"bar":$foobar - // |foo|bar - // |foo:$foo->bar - $this->_mod_regexp = '(?:\|@?\w+(?::(?:\w+|' . $this->_num_const_regexp . '|' - . $this->_obj_call_regexp . '|' . $this->_avar_regexp . '|' . $this->_qstr_regexp .'))*)'; - - // matches valid function name: - // foo123 - // _foo_bar - $this->_func_regexp = '[a-zA-Z_]\w*'; - - // matches valid registered object: - // foo->bar - $this->_reg_obj_regexp = '[a-zA-Z_]\w*->[a-zA-Z_]\w*'; - - // matches valid parameter values: - // true - // $foo - // $foo|bar - // #foo# - // #foo#|bar - // "text" - // "text"|bar - // $foo->bar - $this->_param_regexp = '(?:\s*(?:' . $this->_obj_call_regexp . '|' - . $this->_var_regexp . '|' . $this->_num_const_regexp . '|\w+)(?>' . $this->_mod_regexp . '*)\s*)'; - - // matches valid parenthesised function parameters: - // - // "text" - // $foo, $bar, "text" - // $foo|bar, "foo"|bar, $foo->bar($foo)|bar - $this->_parenth_param_regexp = '(?:\((?:\w+|' - . $this->_param_regexp . '(?:\s*,\s*(?:(?:\w+|' - . $this->_param_regexp . ')))*)?\))'; - - // matches valid function call: - // foo() - // foo_bar($foo) - // _foo_bar($foo,"bar") - // foo123($foo,$foo->bar(),"foo") - $this->_func_call_regexp = '(?:' . $this->_func_regexp . '\s*(?:' - . $this->_parenth_param_regexp . '))'; - } - - /** - * compile a resource - * - * sets $compiled_content to the compiled source - * @param string $resource_name - * @param string $source_content - * @param string $compiled_content - * @return true - */ - function _compile_file($resource_name, $source_content, &$compiled_content) - { - - if ($this->security) { - // do not allow php syntax to be executed unless specified - if ($this->php_handling == SMARTY_PHP_ALLOW && - !$this->security_settings['PHP_HANDLING']) { - $this->php_handling = SMARTY_PHP_PASSTHRU; - } - } - - $this->_load_filters(); - - $this->_current_file = $resource_name; - $this->_current_line_no = 1; - $ldq = preg_quote($this->left_delimiter, '~'); - $rdq = preg_quote($this->right_delimiter, '~'); - - // run template source through prefilter functions - if (count($this->_plugins['prefilter']) > 0) { - foreach ($this->_plugins['prefilter'] as $filter_name => $prefilter) { - if ($prefilter === false) continue; - if ($prefilter[3] || is_callable($prefilter[0])) { - $source_content = call_user_func_array($prefilter[0], - array($source_content, &$this)); - $this->_plugins['prefilter'][$filter_name][3] = true; - } else { - $this->_trigger_fatal_error("[plugin] prefilter '$filter_name' is not implemented"); - } - } - } - - /* fetch all special blocks */ - $search = "~{$ldq}\*(.*?)\*{$rdq}|{$ldq}\s*literal\s*{$rdq}(.*?){$ldq}\s*/literal\s*{$rdq}|{$ldq}\s*php\s*{$rdq}(.*?){$ldq}\s*/php\s*{$rdq}~s"; - - preg_match_all($search, $source_content, $match, PREG_SET_ORDER); - $this->_folded_blocks = $match; - reset($this->_folded_blocks); - - /* replace special blocks by "{php}" */ - $source_content = preg_replace($search.'e', "'" - . $this->_quote_replace($this->left_delimiter) . 'php' - . "' . str_repeat(\"\n\", substr_count('\\0', \"\n\")) .'" - . $this->_quote_replace($this->right_delimiter) - . "'" - , $source_content); - - /* Gather all template tags. */ - preg_match_all("~{$ldq}\s*(.*?)\s*{$rdq}~s", $source_content, $_match); - $template_tags = $_match[1]; - /* Split content by template tags to obtain non-template content. */ - $text_blocks = preg_split("~{$ldq}.*?{$rdq}~s", $source_content); - - /* loop through text blocks */ - for ($curr_tb = 0, $for_max = count($text_blocks); $curr_tb < $for_max; $curr_tb++) { - /* match anything resembling php tags */ - if (preg_match_all('~(<\?(?:\w+|=)?|\?>|language\s*=\s*[\"\']?php[\"\']?)~is', $text_blocks[$curr_tb], $sp_match)) { - /* replace tags with placeholders to prevent recursive replacements */ - $sp_match[1] = array_unique($sp_match[1]); - usort($sp_match[1], '_smarty_sort_length'); - for ($curr_sp = 0, $for_max2 = count($sp_match[1]); $curr_sp < $for_max2; $curr_sp++) { - $text_blocks[$curr_tb] = str_replace($sp_match[1][$curr_sp],'%%%SMARTYSP'.$curr_sp.'%%%',$text_blocks[$curr_tb]); - } - /* process each one */ - for ($curr_sp = 0, $for_max2 = count($sp_match[1]); $curr_sp < $for_max2; $curr_sp++) { - if ($this->php_handling == SMARTY_PHP_PASSTHRU) { - /* echo php contents */ - $text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%', ''."\n", $text_blocks[$curr_tb]); - } else if ($this->php_handling == SMARTY_PHP_QUOTE) { - /* quote php tags */ - $text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%', htmlspecialchars($sp_match[1][$curr_sp]), $text_blocks[$curr_tb]); - } else if ($this->php_handling == SMARTY_PHP_REMOVE) { - /* remove php tags */ - $text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%', '', $text_blocks[$curr_tb]); - } else { - /* SMARTY_PHP_ALLOW, but echo non php starting tags */ - $sp_match[1][$curr_sp] = preg_replace('~(<\?(?!php|=|$))~i', ''."\n", $sp_match[1][$curr_sp]); - $text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%', $sp_match[1][$curr_sp], $text_blocks[$curr_tb]); - } - } - } - } - - /* Compile the template tags into PHP code. */ - $compiled_tags = array(); - for ($i = 0, $for_max = count($template_tags); $i < $for_max; $i++) { - $this->_current_line_no += substr_count($text_blocks[$i], "\n"); - $compiled_tags[] = $this->_compile_tag($template_tags[$i]); - $this->_current_line_no += substr_count($template_tags[$i], "\n"); - } - if (count($this->_tag_stack)>0) { - list($_open_tag, $_line_no) = end($this->_tag_stack); - $this->_syntax_error("unclosed tag \{$_open_tag} (opened line $_line_no).", E_USER_ERROR, __FILE__, __LINE__); - return; - } - - /* Reformat $text_blocks between 'strip' and '/strip' tags, - removing spaces, tabs and newlines. */ - $strip = false; - for ($i = 0, $for_max = count($compiled_tags); $i < $for_max; $i++) { - if ($compiled_tags[$i] == '{strip}') { - $compiled_tags[$i] = ''; - $strip = true; - /* remove leading whitespaces */ - $text_blocks[$i + 1] = ltrim($text_blocks[$i + 1]); - } - if ($strip) { - /* strip all $text_blocks before the next '/strip' */ - for ($j = $i + 1; $j < $for_max; $j++) { - /* remove leading and trailing whitespaces of each line */ - $text_blocks[$j] = preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $text_blocks[$j]); - if ($compiled_tags[$j] == '{/strip}') { - /* remove trailing whitespaces from the last text_block */ - $text_blocks[$j] = rtrim($text_blocks[$j]); - } - $text_blocks[$j] = ""\'", "\\"=>"\\\\")) . "'; ?>"; - if ($compiled_tags[$j] == '{/strip}') { - $compiled_tags[$j] = "\n"; /* slurped by php, but necessary - if a newline is following the closing strip-tag */ - $strip = false; - $i = $j; - break; - } - } - } - } - $compiled_content = ''; - - /* Interleave the compiled contents and text blocks to get the final result. */ - for ($i = 0, $for_max = count($compiled_tags); $i < $for_max; $i++) { - if ($compiled_tags[$i] == '') { - // tag result empty, remove first newline from following text block - $text_blocks[$i+1] = preg_replace('~^(\r\n|\r|\n)~', '', $text_blocks[$i+1]); - } - $compiled_content .= $text_blocks[$i].$compiled_tags[$i]; - } - $compiled_content .= $text_blocks[$i]; - - // remove \n from the end of the file, if any - if (($_len=strlen($compiled_content)) && ($compiled_content{$_len - 1} == "\n" )) { - $compiled_content = substr($compiled_content, 0, -1); - } - - if (!empty($this->_cache_serial)) { - $compiled_content = "_cache_serials['".$this->_cache_include."'] = '".$this->_cache_serial."'; ?>" . $compiled_content; - } - - // remove unnecessary close/open tags - $compiled_content = preg_replace('~\?>\n?<\?php~', '', $compiled_content); - - // run compiled template through postfilter functions - if (count($this->_plugins['postfilter']) > 0) { - foreach ($this->_plugins['postfilter'] as $filter_name => $postfilter) { - if ($postfilter === false) continue; - if ($postfilter[3] || is_callable($postfilter[0])) { - $compiled_content = call_user_func_array($postfilter[0], - array($compiled_content, &$this)); - $this->_plugins['postfilter'][$filter_name][3] = true; - } else { - $this->_trigger_fatal_error("Smarty plugin error: postfilter '$filter_name' is not implemented"); - } - } - } - - // put header at the top of the compiled template - $template_header = "_version.", created on ".strftime("%Y-%m-%d %H:%M:%S")."\n"; - $template_header .= " compiled from ".strtr(urlencode($resource_name), array('%2F'=>'/', '%3A'=>':'))." */ ?>\n"; - - /* Emit code to load needed plugins. */ - $this->_plugins_code = ''; - if (count($this->_plugin_info)) { - $_plugins_params = "array('plugins' => array("; - foreach ($this->_plugin_info as $plugin_type => $plugins) { - foreach ($plugins as $plugin_name => $plugin_info) { - $_plugins_params .= "array('$plugin_type', '$plugin_name', '" . strtr($plugin_info[0], array("'" => "\\'", "\\" => "\\\\")) . "', $plugin_info[1], "; - $_plugins_params .= $plugin_info[2] ? 'true),' : 'false),'; - } - } - $_plugins_params .= '))'; - $plugins_code = "\n"; - $template_header .= $plugins_code; - $this->_plugin_info = array(); - $this->_plugins_code = $plugins_code; - } - - if ($this->_init_smarty_vars) { - $template_header .= "\n"; - $this->_init_smarty_vars = false; - } - - $compiled_content = $template_header . $compiled_content; - return true; - } - - /** - * Compile a template tag - * - * @param string $template_tag - * @return string - */ - function _compile_tag($template_tag) - { - /* Matched comment. */ - if ($template_tag{0} == '*' && $template_tag{strlen($template_tag) - 1} == '*') - return ''; - - /* Split tag into two three parts: command, command modifiers and the arguments. */ - if(! preg_match('~^(?:(' . $this->_num_const_regexp . '|' . $this->_obj_call_regexp . '|' . $this->_var_regexp - . '|\/?' . $this->_reg_obj_regexp . '|\/?' . $this->_func_regexp . ')(' . $this->_mod_regexp . '*)) - (?:\s+(.*))?$ - ~xs', $template_tag, $match)) { - $this->_syntax_error("unrecognized tag: $template_tag", E_USER_ERROR, __FILE__, __LINE__); - } - - $tag_command = $match[1]; - $tag_modifier = isset($match[2]) ? $match[2] : null; - $tag_args = isset($match[3]) ? $match[3] : null; - - if (preg_match('~^' . $this->_num_const_regexp . '|' . $this->_obj_call_regexp . '|' . $this->_var_regexp . '$~', $tag_command)) { - /* tag name is a variable or object */ - $_return = $this->_parse_var_props($tag_command . $tag_modifier); - return "" . $this->_additional_newline; - } - - /* If the tag name is a registered object, we process it. */ - if (preg_match('~^\/?' . $this->_reg_obj_regexp . '$~', $tag_command)) { - return $this->_compile_registered_object_tag($tag_command, $this->_parse_attrs($tag_args), $tag_modifier); - } - - switch ($tag_command) { - case 'include': - return $this->_compile_include_tag($tag_args); - - case 'include_php': - return $this->_compile_include_php_tag($tag_args); - - case 'if': - $this->_push_tag('if'); - return $this->_compile_if_tag($tag_args); - - case 'else': - list($_open_tag) = end($this->_tag_stack); - if ($_open_tag != 'if' && $_open_tag != 'elseif') - $this->_syntax_error('unexpected {else}', E_USER_ERROR, __FILE__, __LINE__); - else - $this->_push_tag('else'); - return ''; - - case 'elseif': - list($_open_tag) = end($this->_tag_stack); - if ($_open_tag != 'if' && $_open_tag != 'elseif') - $this->_syntax_error('unexpected {elseif}', E_USER_ERROR, __FILE__, __LINE__); - if ($_open_tag == 'if') - $this->_push_tag('elseif'); - return $this->_compile_if_tag($tag_args, true); - - case '/if': - $this->_pop_tag('if'); - return ''; - - case 'capture': - return $this->_compile_capture_tag(true, $tag_args); - - case '/capture': - return $this->_compile_capture_tag(false); - - case 'ldelim': - return $this->left_delimiter; - - case 'rdelim': - return $this->right_delimiter; - - case 'section': - $this->_push_tag('section'); - return $this->_compile_section_start($tag_args); - - case 'sectionelse': - $this->_push_tag('sectionelse'); - return ""; - break; - - case '/section': - $_open_tag = $this->_pop_tag('section'); - if ($_open_tag == 'sectionelse') - return ""; - else - return ""; - - case 'foreach': - $this->_push_tag('foreach'); - return $this->_compile_foreach_start($tag_args); - break; - - case 'foreachelse': - $this->_push_tag('foreachelse'); - return ""; - - case '/foreach': - $_open_tag = $this->_pop_tag('foreach'); - if ($_open_tag == 'foreachelse') - return ""; - else - return ""; - break; - - case 'strip': - case '/strip': - if ($tag_command{0}=='/') { - $this->_pop_tag('strip'); - if (--$this->_strip_depth==0) { /* outermost closing {/strip} */ - $this->_additional_newline = "\n"; - return '{' . $tag_command . '}'; - } - } else { - $this->_push_tag('strip'); - if ($this->_strip_depth++==0) { /* outermost opening {strip} */ - $this->_additional_newline = ""; - return '{' . $tag_command . '}'; - } - } - return ''; - - case 'php': - /* handle folded tags replaced by {php} */ - list(, $block) = each($this->_folded_blocks); - $this->_current_line_no += substr_count($block[0], "\n"); - /* the number of matched elements in the regexp in _compile_file() - determins the type of folded tag that was found */ - switch (count($block)) { - case 2: /* comment */ - return ''; - - case 3: /* literal */ - return ""\'", "\\"=>"\\\\")) . "'; ?>" . $this->_additional_newline; - - case 4: /* php */ - if ($this->security && !$this->security_settings['PHP_TAGS']) { - $this->_syntax_error("(secure mode) php tags not permitted", E_USER_WARNING, __FILE__, __LINE__); - return; - } - return ''; - } - break; - - case 'insert': - return $this->_compile_insert_tag($tag_args); - - default: - if ($this->_compile_compiler_tag($tag_command, $tag_args, $output)) { - return $output; - } else if ($this->_compile_block_tag($tag_command, $tag_args, $tag_modifier, $output)) { - return $output; - } else if ($this->_compile_custom_tag($tag_command, $tag_args, $tag_modifier, $output)) { - return $output; - } else { - $this->_syntax_error("unrecognized tag '$tag_command'", E_USER_ERROR, __FILE__, __LINE__); - } - - } - } - - - /** - * compile the custom compiler tag - * - * sets $output to the compiled custom compiler tag - * @param string $tag_command - * @param string $tag_args - * @param string $output - * @return boolean - */ - function _compile_compiler_tag($tag_command, $tag_args, &$output) - { - $found = false; - $have_function = true; - - /* - * First we check if the compiler function has already been registered - * or loaded from a plugin file. - */ - if (isset($this->_plugins['compiler'][$tag_command])) { - $found = true; - $plugin_func = $this->_plugins['compiler'][$tag_command][0]; - if (!is_callable($plugin_func)) { - $message = "compiler function '$tag_command' is not implemented"; - $have_function = false; - } - } - /* - * Otherwise we need to load plugin file and look for the function - * inside it. - */ - else if ($plugin_file = $this->_get_plugin_filepath('compiler', $tag_command)) { - $found = true; - - include_once $plugin_file; - - $plugin_func = 'smarty_compiler_' . $tag_command; - if (!is_callable($plugin_func)) { - $message = "plugin function $plugin_func() not found in $plugin_file\n"; - $have_function = false; - } else { - $this->_plugins['compiler'][$tag_command] = array($plugin_func, null, null, null, true); - } - } - - /* - * True return value means that we either found a plugin or a - * dynamically registered function. False means that we didn't and the - * compiler should now emit code to load custom function plugin for this - * tag. - */ - if ($found) { - if ($have_function) { - $output = call_user_func_array($plugin_func, array($tag_args, &$this)); - if($output != '') { - $output = '_push_cacheable_state('compiler', $tag_command) - . $output - . $this->_pop_cacheable_state('compiler', $tag_command) . ' ?>'; - } - } else { - $this->_syntax_error($message, E_USER_WARNING, __FILE__, __LINE__); - } - return true; - } else { - return false; - } - } - - - /** - * compile block function tag - * - * sets $output to compiled block function tag - * @param string $tag_command - * @param string $tag_args - * @param string $tag_modifier - * @param string $output - * @return boolean - */ - function _compile_block_tag($tag_command, $tag_args, $tag_modifier, &$output) - { - if ($tag_command{0} == '/') { - $start_tag = false; - $tag_command = substr($tag_command, 1); - } else - $start_tag = true; - - $found = false; - $have_function = true; - - /* - * First we check if the block function has already been registered - * or loaded from a plugin file. - */ - if (isset($this->_plugins['block'][$tag_command])) { - $found = true; - $plugin_func = $this->_plugins['block'][$tag_command][0]; - if (!is_callable($plugin_func)) { - $message = "block function '$tag_command' is not implemented"; - $have_function = false; - } - } - /* - * Otherwise we need to load plugin file and look for the function - * inside it. - */ - else if ($plugin_file = $this->_get_plugin_filepath('block', $tag_command)) { - $found = true; - - include_once $plugin_file; - - $plugin_func = 'smarty_block_' . $tag_command; - if (!function_exists($plugin_func)) { - $message = "plugin function $plugin_func() not found in $plugin_file\n"; - $have_function = false; - } else { - $this->_plugins['block'][$tag_command] = array($plugin_func, null, null, null, true); - - } - } - - if (!$found) { - return false; - } else if (!$have_function) { - $this->_syntax_error($message, E_USER_WARNING, __FILE__, __LINE__); - return true; - } - - /* - * Even though we've located the plugin function, compilation - * happens only once, so the plugin will still need to be loaded - * at runtime for future requests. - */ - $this->_add_plugin('block', $tag_command); - - if ($start_tag) - $this->_push_tag($tag_command); - else - $this->_pop_tag($tag_command); - - if ($start_tag) { - $output = '_push_cacheable_state('block', $tag_command); - $attrs = $this->_parse_attrs($tag_args); - $arg_list = $this->_compile_arg_list('block', $tag_command, $attrs, $_cache_attrs=''); - $output .= "$_cache_attrs\$this->_tag_stack[] = array('$tag_command', array(".implode(',', $arg_list).')); '; - $output .= $this->_compile_plugin_call('block', $tag_command).'($this->_tag_stack[count($this->_tag_stack)-1][1], null, $this, $_block_repeat=true);'; - $output .= 'while ($_block_repeat) { ob_start(); ?>'; - } else { - $output = '_compile_plugin_call('block', $tag_command).'($this->_tag_stack[count($this->_tag_stack)-1][1], $_block_content, $this, $_block_repeat=false)'; - if ($tag_modifier != '') { - $this->_parse_modifiers($_out_tag_text, $tag_modifier); - } - $output .= 'echo '.$_out_tag_text.'; } '; - $output .= " array_pop(\$this->_tag_stack); " . $this->_pop_cacheable_state('block', $tag_command) . '?>'; - } - - return true; - } - - - /** - * compile custom function tag - * - * @param string $tag_command - * @param string $tag_args - * @param string $tag_modifier - * @return string - */ - function _compile_custom_tag($tag_command, $tag_args, $tag_modifier, &$output) - { - $found = false; - $have_function = true; - - /* - * First we check if the custom function has already been registered - * or loaded from a plugin file. - */ - if (isset($this->_plugins['function'][$tag_command])) { - $found = true; - $plugin_func = $this->_plugins['function'][$tag_command][0]; - if (!is_callable($plugin_func)) { - $message = "custom function '$tag_command' is not implemented"; - $have_function = false; - } - } - /* - * Otherwise we need to load plugin file and look for the function - * inside it. - */ - else if ($plugin_file = $this->_get_plugin_filepath('function', $tag_command)) { - $found = true; - - include_once $plugin_file; - - $plugin_func = 'smarty_function_' . $tag_command; - if (!function_exists($plugin_func)) { - $message = "plugin function $plugin_func() not found in $plugin_file\n"; - $have_function = false; - } else { - $this->_plugins['function'][$tag_command] = array($plugin_func, null, null, null, true); - - } - } - - if (!$found) { - return false; - } else if (!$have_function) { - $this->_syntax_error($message, E_USER_WARNING, __FILE__, __LINE__); - return true; - } - - /* declare plugin to be loaded on display of the template that - we compile right now */ - $this->_add_plugin('function', $tag_command); - - $_cacheable_state = $this->_push_cacheable_state('function', $tag_command); - $attrs = $this->_parse_attrs($tag_args); - $arg_list = $this->_compile_arg_list('function', $tag_command, $attrs, $_cache_attrs=''); - - $output = $this->_compile_plugin_call('function', $tag_command).'(array('.implode(',', $arg_list)."), \$this)"; - if($tag_modifier != '') { - $this->_parse_modifiers($output, $tag_modifier); - } - - if($output != '') { - $output = '_pop_cacheable_state('function', $tag_command) . "?>" . $this->_additional_newline; - } - - return true; - } - - /** - * compile a registered object tag - * - * @param string $tag_command - * @param array $attrs - * @param string $tag_modifier - * @return string - */ - function _compile_registered_object_tag($tag_command, $attrs, $tag_modifier) - { - if ($tag_command{0} == '/') { - $start_tag = false; - $tag_command = substr($tag_command, 1); - } else { - $start_tag = true; - } - - list($object, $obj_comp) = explode('->', $tag_command); - - $arg_list = array(); - if(count($attrs)) { - $_assign_var = false; - foreach ($attrs as $arg_name => $arg_value) { - if($arg_name == 'assign') { - $_assign_var = $arg_value; - unset($attrs['assign']); - continue; - } - if (is_bool($arg_value)) - $arg_value = $arg_value ? 'true' : 'false'; - $arg_list[] = "'$arg_name' => $arg_value"; - } - } - - if($this->_reg_objects[$object][2]) { - // smarty object argument format - $args = "array(".implode(',', (array)$arg_list)."), \$this"; - } else { - // traditional argument format - $args = implode(',', array_values($attrs)); - if (empty($args)) { - $args = 'null'; - } - } - - $prefix = ''; - $postfix = ''; - $newline = ''; - if(!is_object($this->_reg_objects[$object][0])) { - $this->_trigger_fatal_error("registered '$object' is not an object" , $this->_current_file, $this->_current_line_no, __FILE__, __LINE__); - } elseif(!empty($this->_reg_objects[$object][1]) && !in_array($obj_comp, $this->_reg_objects[$object][1])) { - $this->_trigger_fatal_error("'$obj_comp' is not a registered component of object '$object'", $this->_current_file, $this->_current_line_no, __FILE__, __LINE__); - } elseif(method_exists($this->_reg_objects[$object][0], $obj_comp)) { - // method - if(in_array($obj_comp, $this->_reg_objects[$object][3])) { - // block method - if ($start_tag) { - $prefix = "\$this->_tag_stack[] = array('$obj_comp', $args); "; - $prefix .= "\$this->_reg_objects['$object'][0]->$obj_comp(\$this->_tag_stack[count(\$this->_tag_stack)-1][1], null, \$this, \$_block_repeat=true); "; - $prefix .= "while (\$_block_repeat) { ob_start();"; - $return = null; - $postfix = ''; - } else { - $prefix = "\$_obj_block_content = ob_get_contents(); ob_end_clean(); "; - $return = "\$this->_reg_objects['$object'][0]->$obj_comp(\$this->_tag_stack[count(\$this->_tag_stack)-1][1], \$_obj_block_content, \$this, \$_block_repeat=false)"; - $postfix = "} array_pop(\$this->_tag_stack);"; - } - } else { - // non-block method - $return = "\$this->_reg_objects['$object'][0]->$obj_comp($args)"; - } - } else { - // property - $return = "\$this->_reg_objects['$object'][0]->$obj_comp"; - } - - if($return != null) { - if($tag_modifier != '') { - $this->_parse_modifiers($return, $tag_modifier); - } - - if(!empty($_assign_var)) { - $output = "\$this->assign('" . $this->_dequote($_assign_var) ."', $return);"; - } else { - $output = 'echo ' . $return . ';'; - $newline = $this->_additional_newline; - } - } else { - $output = ''; - } - - return '" . $newline; - } - - /** - * Compile {insert ...} tag - * - * @param string $tag_args - * @return string - */ - function _compile_insert_tag($tag_args) - { - $attrs = $this->_parse_attrs($tag_args); - $name = $this->_dequote($attrs['name']); - - if (empty($name)) { - $this->_syntax_error("missing insert name", E_USER_ERROR, __FILE__, __LINE__); - } - - if (!empty($attrs['script'])) { - $delayed_loading = true; - } else { - $delayed_loading = false; - } - - foreach ($attrs as $arg_name => $arg_value) { - if (is_bool($arg_value)) - $arg_value = $arg_value ? 'true' : 'false'; - $arg_list[] = "'$arg_name' => $arg_value"; - } - - $this->_add_plugin('insert', $name, $delayed_loading); - - $_params = "array('args' => array(".implode(', ', (array)$arg_list)."))"; - - return "" . $this->_additional_newline; - } - - /** - * Compile {include ...} tag - * - * @param string $tag_args - * @return string - */ - function _compile_include_tag($tag_args) - { - $attrs = $this->_parse_attrs($tag_args); - $arg_list = array(); - - if (empty($attrs['file'])) { - $this->_syntax_error("missing 'file' attribute in include tag", E_USER_ERROR, __FILE__, __LINE__); - } - - foreach ($attrs as $arg_name => $arg_value) { - if ($arg_name == 'file') { - $include_file = $arg_value; - continue; - } else if ($arg_name == 'assign') { - $assign_var = $arg_value; - continue; - } - if (is_bool($arg_value)) - $arg_value = $arg_value ? 'true' : 'false'; - $arg_list[] = "'$arg_name' => $arg_value"; - } - - $output = '_tpl_vars;\n"; - - - $_params = "array('smarty_include_tpl_file' => " . $include_file . ", 'smarty_include_vars' => array(".implode(',', (array)$arg_list)."))"; - $output .= "\$this->_smarty_include($_params);\n" . - "\$this->_tpl_vars = \$_smarty_tpl_vars;\n" . - "unset(\$_smarty_tpl_vars);\n"; - - if (isset($assign_var)) { - $output .= "\$this->assign(" . $assign_var . ", ob_get_contents()); ob_end_clean();\n"; - } - - $output .= ' ?>'; - - return $output; - - } - - /** - * Compile {include ...} tag - * - * @param string $tag_args - * @return string - */ - function _compile_include_php_tag($tag_args) - { - $attrs = $this->_parse_attrs($tag_args); - - if (empty($attrs['file'])) { - $this->_syntax_error("missing 'file' attribute in include_php tag", E_USER_ERROR, __FILE__, __LINE__); - } - - $assign_var = (empty($attrs['assign'])) ? '' : $this->_dequote($attrs['assign']); - $once_var = (empty($attrs['once']) || $attrs['once']=='false') ? 'false' : 'true'; - - $arg_list = array(); - foreach($attrs as $arg_name => $arg_value) { - if($arg_name != 'file' AND $arg_name != 'once' AND $arg_name != 'assign') { - if(is_bool($arg_value)) - $arg_value = $arg_value ? 'true' : 'false'; - $arg_list[] = "'$arg_name' => $arg_value"; - } - } - - $_params = "array('smarty_file' => " . $attrs['file'] . ", 'smarty_assign' => '$assign_var', 'smarty_once' => $once_var, 'smarty_include_vars' => array(".implode(',', $arg_list)."))"; - - return "" . $this->_additional_newline; - } - - - /** - * Compile {section ...} tag - * - * @param string $tag_args - * @return string - */ - function _compile_section_start($tag_args) - { - $attrs = $this->_parse_attrs($tag_args); - $arg_list = array(); - - $output = '_syntax_error("missing section name", E_USER_ERROR, __FILE__, __LINE__); - } - - $output .= "unset(\$this->_sections[$section_name]);\n"; - $section_props = "\$this->_sections[$section_name]"; - - foreach ($attrs as $attr_name => $attr_value) { - switch ($attr_name) { - case 'loop': - $output .= "{$section_props}['loop'] = is_array(\$_loop=$attr_value) ? count(\$_loop) : max(0, (int)\$_loop); unset(\$_loop);\n"; - break; - - case 'show': - if (is_bool($attr_value)) - $show_attr_value = $attr_value ? 'true' : 'false'; - else - $show_attr_value = "(bool)$attr_value"; - $output .= "{$section_props}['show'] = $show_attr_value;\n"; - break; - - case 'name': - $output .= "{$section_props}['$attr_name'] = $attr_value;\n"; - break; - - case 'max': - case 'start': - $output .= "{$section_props}['$attr_name'] = (int)$attr_value;\n"; - break; - - case 'step': - $output .= "{$section_props}['$attr_name'] = ((int)$attr_value) == 0 ? 1 : (int)$attr_value;\n"; - break; - - default: - $this->_syntax_error("unknown section attribute - '$attr_name'", E_USER_ERROR, __FILE__, __LINE__); - break; - } - } - - if (!isset($attrs['show'])) - $output .= "{$section_props}['show'] = true;\n"; - - if (!isset($attrs['loop'])) - $output .= "{$section_props}['loop'] = 1;\n"; - - if (!isset($attrs['max'])) - $output .= "{$section_props}['max'] = {$section_props}['loop'];\n"; - else - $output .= "if ({$section_props}['max'] < 0)\n" . - " {$section_props}['max'] = {$section_props}['loop'];\n"; - - if (!isset($attrs['step'])) - $output .= "{$section_props}['step'] = 1;\n"; - - if (!isset($attrs['start'])) - $output .= "{$section_props}['start'] = {$section_props}['step'] > 0 ? 0 : {$section_props}['loop']-1;\n"; - else { - $output .= "if ({$section_props}['start'] < 0)\n" . - " {$section_props}['start'] = max({$section_props}['step'] > 0 ? 0 : -1, {$section_props}['loop'] + {$section_props}['start']);\n" . - "else\n" . - " {$section_props}['start'] = min({$section_props}['start'], {$section_props}['step'] > 0 ? {$section_props}['loop'] : {$section_props}['loop']-1);\n"; - } - - $output .= "if ({$section_props}['show']) {\n"; - if (!isset($attrs['start']) && !isset($attrs['step']) && !isset($attrs['max'])) { - $output .= " {$section_props}['total'] = {$section_props}['loop'];\n"; - } else { - $output .= " {$section_props}['total'] = min(ceil(({$section_props}['step'] > 0 ? {$section_props}['loop'] - {$section_props}['start'] : {$section_props}['start']+1)/abs({$section_props}['step'])), {$section_props}['max']);\n"; - } - $output .= " if ({$section_props}['total'] == 0)\n" . - " {$section_props}['show'] = false;\n" . - "} else\n" . - " {$section_props}['total'] = 0;\n"; - - $output .= "if ({$section_props}['show']):\n"; - $output .= " - for ({$section_props}['index'] = {$section_props}['start'], {$section_props}['iteration'] = 1; - {$section_props}['iteration'] <= {$section_props}['total']; - {$section_props}['index'] += {$section_props}['step'], {$section_props}['iteration']++):\n"; - $output .= "{$section_props}['rownum'] = {$section_props}['iteration'];\n"; - $output .= "{$section_props}['index_prev'] = {$section_props}['index'] - {$section_props}['step'];\n"; - $output .= "{$section_props}['index_next'] = {$section_props}['index'] + {$section_props}['step'];\n"; - $output .= "{$section_props}['first'] = ({$section_props}['iteration'] == 1);\n"; - $output .= "{$section_props}['last'] = ({$section_props}['iteration'] == {$section_props}['total']);\n"; - - $output .= "?>"; - - return $output; - } - - - /** - * Compile {foreach ...} tag. - * - * @param string $tag_args - * @return string - */ - function _compile_foreach_start($tag_args) - { - $attrs = $this->_parse_attrs($tag_args); - $arg_list = array(); - - if (empty($attrs['from'])) { - return $this->_syntax_error("foreach: missing 'from' attribute", E_USER_ERROR, __FILE__, __LINE__); - } - $from = $attrs['from']; - - if (empty($attrs['item'])) { - return $this->_syntax_error("foreach: missing 'item' attribute", E_USER_ERROR, __FILE__, __LINE__); - } - $item = $this->_dequote($attrs['item']); - if (!preg_match('~^\w+$~', $item)) { - return $this->_syntax_error("'foreach: item' must be a variable name (literal string)", E_USER_ERROR, __FILE__, __LINE__); - } - - if (isset($attrs['key'])) { - $key = $this->_dequote($attrs['key']); - if (!preg_match('~^\w+$~', $key)) { - return $this->_syntax_error("foreach: 'key' must to be a variable name (literal string)", E_USER_ERROR, __FILE__, __LINE__); - } - $key_part = "\$this->_tpl_vars['$key'] => "; - } else { - $key = null; - $key_part = ''; - } - - if (isset($attrs['name'])) { - $name = $attrs['name']; - } else { - $name = null; - } - - $output = '_foreach[$name]"; - $output .= "{$foreach_props} = array('total' => count(\$_from), 'iteration' => 0);\n"; - $output .= "if ({$foreach_props}['total'] > 0):\n"; - $output .= " foreach (\$_from as $key_part\$this->_tpl_vars['$item']):\n"; - $output .= " {$foreach_props}['iteration']++;\n"; - } else { - $output .= "if (count(\$_from)):\n"; - $output .= " foreach (\$_from as $key_part\$this->_tpl_vars['$item']):\n"; - } - $output .= '?>'; - - return $output; - } - - - /** - * Compile {capture} .. {/capture} tags - * - * @param boolean $start true if this is the {capture} tag - * @param string $tag_args - * @return string - */ - - function _compile_capture_tag($start, $tag_args = '') - { - $attrs = $this->_parse_attrs($tag_args); - - if ($start) { - if (isset($attrs['name'])) - $buffer = $attrs['name']; - else - $buffer = "'default'"; - - if (isset($attrs['assign'])) - $assign = $attrs['assign']; - else - $assign = null; - $output = ""; - $this->_capture_stack[] = array($buffer, $assign); - } else { - list($buffer, $assign) = array_pop($this->_capture_stack); - $output = "_smarty_vars['capture'][$buffer] = ob_get_contents(); "; - if (isset($assign)) { - $output .= " \$this->assign($assign, ob_get_contents());"; - } - $output .= "ob_end_clean(); ?>"; - } - - return $output; - } - - /** - * Compile {if ...} tag - * - * @param string $tag_args - * @param boolean $elseif if true, uses elseif instead of if - * @return string - */ - function _compile_if_tag($tag_args, $elseif = false) - { - - /* Tokenize args for 'if' tag. */ - preg_match_all('~(?> - ' . $this->_obj_call_regexp . '(?:' . $this->_mod_regexp . '*)? | # valid object call - ' . $this->_var_regexp . '(?:' . $this->_mod_regexp . '*)? | # var or quoted string - \-?0[xX][0-9a-fA-F]+|\-?\d+(?:\.\d+)?|\.\d+|!==|===|==|!=|<>|<<|>>|<=|>=|\&\&|\|\||\(|\)|,|\!|\^|=|\&|\~|<|>|\||\%|\+|\-|\/|\*|\@ | # valid non-word token - \b\w+\b | # valid word token - \S+ # anything else - )~x', $tag_args, $match); - - $tokens = $match[0]; - - if(empty($tokens)) { - $_error_msg .= $elseif ? "'elseif'" : "'if'"; - $_error_msg .= ' statement requires arguments'; - $this->_syntax_error($_error_msg, E_USER_ERROR, __FILE__, __LINE__); - } - - - // make sure we have balanced parenthesis - $token_count = array_count_values($tokens); - if(isset($token_count['(']) && $token_count['('] != $token_count[')']) { - $this->_syntax_error("unbalanced parenthesis in if statement", E_USER_ERROR, __FILE__, __LINE__); - } - - $is_arg_stack = array(); - - for ($i = 0; $i < count($tokens); $i++) { - - $token = &$tokens[$i]; - - switch (strtolower($token)) { - case '!': - case '%': - case '!==': - case '==': - case '===': - case '>': - case '<': - case '!=': - case '<>': - case '<<': - case '>>': - case '<=': - case '>=': - case '&&': - case '||': - case '|': - case '^': - case '&': - case '~': - case ')': - case ',': - case '+': - case '-': - case '*': - case '/': - case '@': - break; - - case 'eq': - $token = '=='; - break; - - case 'ne': - case 'neq': - $token = '!='; - break; - - case 'lt': - $token = '<'; - break; - - case 'le': - case 'lte': - $token = '<='; - break; - - case 'gt': - $token = '>'; - break; - - case 'ge': - case 'gte': - $token = '>='; - break; - - case 'and': - $token = '&&'; - break; - - case 'or': - $token = '||'; - break; - - case 'not': - $token = '!'; - break; - - case 'mod': - $token = '%'; - break; - - case '(': - array_push($is_arg_stack, $i); - break; - - case 'is': - /* If last token was a ')', we operate on the parenthesized - expression. The start of the expression is on the stack. - Otherwise, we operate on the last encountered token. */ - if ($tokens[$i-1] == ')') - $is_arg_start = array_pop($is_arg_stack); - else - $is_arg_start = $i-1; - /* Construct the argument for 'is' expression, so it knows - what to operate on. */ - $is_arg = implode(' ', array_slice($tokens, $is_arg_start, $i - $is_arg_start)); - - /* Pass all tokens from next one until the end to the - 'is' expression parsing function. The function will - return modified tokens, where the first one is the result - of the 'is' expression and the rest are the tokens it - didn't touch. */ - $new_tokens = $this->_parse_is_expr($is_arg, array_slice($tokens, $i+1)); - - /* Replace the old tokens with the new ones. */ - array_splice($tokens, $is_arg_start, count($tokens), $new_tokens); - - /* Adjust argument start so that it won't change from the - current position for the next iteration. */ - $i = $is_arg_start; - break; - - default: - if(preg_match('~^' . $this->_func_regexp . '$~', $token) ) { - // function call - if($this->security && - !in_array($token, $this->security_settings['IF_FUNCS'])) { - $this->_syntax_error("(secure mode) '$token' not allowed in if statement", E_USER_ERROR, __FILE__, __LINE__); - } - } elseif(preg_match('~^' . $this->_var_regexp . '$~', $token) && isset($tokens[$i+1]) && $tokens[$i+1] == '(') { - // variable function call - $this->_syntax_error("variable function call '$token' not allowed in if statement", E_USER_ERROR, __FILE__, __LINE__); - } elseif(preg_match('~^' . $this->_obj_call_regexp . '|' . $this->_var_regexp . '(?:' . $this->_mod_regexp . '*)$~', $token)) { - // object or variable - $token = $this->_parse_var_props($token); - } elseif(is_numeric($token)) { - // number, skip it - } else { - $this->_syntax_error("unidentified token '$token'", E_USER_ERROR, __FILE__, __LINE__); - } - break; - } - } - - if ($elseif) - return ''; - else - return ''; - } - - - function _compile_arg_list($type, $name, $attrs, &$cache_code) { - $arg_list = array(); - - if (isset($type) && isset($name) - && isset($this->_plugins[$type]) - && isset($this->_plugins[$type][$name]) - && empty($this->_plugins[$type][$name][4]) - && is_array($this->_plugins[$type][$name][5]) - ) { - /* we have a list of parameters that should be cached */ - $_cache_attrs = $this->_plugins[$type][$name][5]; - $_count = $this->_cache_attrs_count++; - $cache_code = "\$_cache_attrs =& \$this->_smarty_cache_attrs('$this->_cache_serial','$_count');"; - - } else { - /* no parameters are cached */ - $_cache_attrs = null; - } - - foreach ($attrs as $arg_name => $arg_value) { - if (is_bool($arg_value)) - $arg_value = $arg_value ? 'true' : 'false'; - if (is_null($arg_value)) - $arg_value = 'null'; - if ($_cache_attrs && in_array($arg_name, $_cache_attrs)) { - $arg_list[] = "'$arg_name' => (\$this->_cache_including) ? \$_cache_attrs['$arg_name'] : (\$_cache_attrs['$arg_name']=$arg_value)"; - } else { - $arg_list[] = "'$arg_name' => $arg_value"; - } - } - return $arg_list; - } - - /** - * Parse is expression - * - * @param string $is_arg - * @param array $tokens - * @return array - */ - function _parse_is_expr($is_arg, $tokens) - { - $expr_end = 0; - $negate_expr = false; - - if (($first_token = array_shift($tokens)) == 'not') { - $negate_expr = true; - $expr_type = array_shift($tokens); - } else - $expr_type = $first_token; - - switch ($expr_type) { - case 'even': - if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') { - $expr_end++; - $expr_arg = $tokens[$expr_end++]; - $expr = "!(1 & ($is_arg / " . $this->_parse_var_props($expr_arg) . "))"; - } else - $expr = "!(1 & $is_arg)"; - break; - - case 'odd': - if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') { - $expr_end++; - $expr_arg = $tokens[$expr_end++]; - $expr = "(1 & ($is_arg / " . $this->_parse_var_props($expr_arg) . "))"; - } else - $expr = "(1 & $is_arg)"; - break; - - case 'div': - if (@$tokens[$expr_end] == 'by') { - $expr_end++; - $expr_arg = $tokens[$expr_end++]; - $expr = "!($is_arg % " . $this->_parse_var_props($expr_arg) . ")"; - } else { - $this->_syntax_error("expecting 'by' after 'div'", E_USER_ERROR, __FILE__, __LINE__); - } - break; - - default: - $this->_syntax_error("unknown 'is' expression - '$expr_type'", E_USER_ERROR, __FILE__, __LINE__); - break; - } - - if ($negate_expr) { - $expr = "!($expr)"; - } - - array_splice($tokens, 0, $expr_end, $expr); - - return $tokens; - } - - - /** - * Parse attribute string - * - * @param string $tag_args - * @return array - */ - function _parse_attrs($tag_args) - { - - /* Tokenize tag attributes. */ - preg_match_all('~(?:' . $this->_obj_call_regexp . '|' . $this->_qstr_regexp . ' | (?>[^"\'=\s]+) - )+ | - [=] - ~x', $tag_args, $match); - $tokens = $match[0]; - - $attrs = array(); - /* Parse state: - 0 - expecting attribute name - 1 - expecting '=' - 2 - expecting attribute value (not '=') */ - $state = 0; - - foreach ($tokens as $token) { - switch ($state) { - case 0: - /* If the token is a valid identifier, we set attribute name - and go to state 1. */ - if (preg_match('~^\w+$~', $token)) { - $attr_name = $token; - $state = 1; - } else - $this->_syntax_error("invalid attribute name: '$token'", E_USER_ERROR, __FILE__, __LINE__); - break; - - case 1: - /* If the token is '=', then we go to state 2. */ - if ($token == '=') { - $state = 2; - } else - $this->_syntax_error("expecting '=' after attribute name '$last_token'", E_USER_ERROR, __FILE__, __LINE__); - break; - - case 2: - /* If token is not '=', we set the attribute value and go to - state 0. */ - if ($token != '=') { - /* We booleanize the token if it's a non-quoted possible - boolean value. */ - if (preg_match('~^(on|yes|true)$~', $token)) { - $token = 'true'; - } else if (preg_match('~^(off|no|false)$~', $token)) { - $token = 'false'; - } else if ($token == 'null') { - $token = 'null'; - } else if (preg_match('~^' . $this->_num_const_regexp . '|0[xX][0-9a-fA-F]+$~', $token)) { - /* treat integer literally */ - } else if (!preg_match('~^' . $this->_obj_call_regexp . '|' . $this->_var_regexp . '(?:' . $this->_mod_regexp . ')*$~', $token)) { - /* treat as a string, double-quote it escaping quotes */ - $token = '"'.addslashes($token).'"'; - } - - $attrs[$attr_name] = $token; - $state = 0; - } else - $this->_syntax_error("'=' cannot be an attribute value", E_USER_ERROR, __FILE__, __LINE__); - break; - } - $last_token = $token; - } - - if($state != 0) { - if($state == 1) { - $this->_syntax_error("expecting '=' after attribute name '$last_token'", E_USER_ERROR, __FILE__, __LINE__); - } else { - $this->_syntax_error("missing attribute value", E_USER_ERROR, __FILE__, __LINE__); - } - } - - $this->_parse_vars_props($attrs); - - return $attrs; - } - - /** - * compile multiple variables and section properties tokens into - * PHP code - * - * @param array $tokens - */ - function _parse_vars_props(&$tokens) - { - foreach($tokens as $key => $val) { - $tokens[$key] = $this->_parse_var_props($val); - } - } - - /** - * compile single variable and section properties token into - * PHP code - * - * @param string $val - * @param string $tag_attrs - * @return string - */ - function _parse_var_props($val) - { - $val = trim($val); - - if(preg_match('~^(' . $this->_obj_call_regexp . '|' . $this->_dvar_regexp . ')(' . $this->_mod_regexp . '*)$~', $val, $match)) { - // $ variable or object - $return = $this->_parse_var($match[1]); - $modifiers = $match[2]; - if (!empty($this->default_modifiers) && !preg_match('~(^|\|)smarty:nodefaults($|\|)~',$modifiers)) { - $_default_mod_string = implode('|',(array)$this->default_modifiers); - $modifiers = empty($modifiers) ? $_default_mod_string : $_default_mod_string . '|' . $modifiers; - } - $this->_parse_modifiers($return, $modifiers); - return $return; - } elseif (preg_match('~^' . $this->_db_qstr_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) { - // double quoted text - preg_match('~^(' . $this->_db_qstr_regexp . ')('. $this->_mod_regexp . '*)$~', $val, $match); - $return = $this->_expand_quoted_text($match[1]); - if($match[2] != '') { - $this->_parse_modifiers($return, $match[2]); - } - return $return; - } - elseif(preg_match('~^' . $this->_num_const_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) { - // numerical constant - preg_match('~^(' . $this->_num_const_regexp . ')('. $this->_mod_regexp . '*)$~', $val, $match); - if($match[2] != '') { - $this->_parse_modifiers($match[1], $match[2]); - return $match[1]; - } - } - elseif(preg_match('~^' . $this->_si_qstr_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) { - // single quoted text - preg_match('~^(' . $this->_si_qstr_regexp . ')('. $this->_mod_regexp . '*)$~', $val, $match); - if($match[2] != '') { - $this->_parse_modifiers($match[1], $match[2]); - return $match[1]; - } - } - elseif(preg_match('~^' . $this->_cvar_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) { - // config var - return $this->_parse_conf_var($val); - } - elseif(preg_match('~^' . $this->_svar_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) { - // section var - return $this->_parse_section_prop($val); - } - elseif(!in_array($val, $this->_permitted_tokens) && !is_numeric($val)) { - // literal string - return $this->_expand_quoted_text('"' . strtr($val, array('\\' => '\\\\', '"' => '\\"')) .'"'); - } - return $val; - } - - /** - * expand quoted text with embedded variables - * - * @param string $var_expr - * @return string - */ - function _expand_quoted_text($var_expr) - { - // if contains unescaped $, expand it - if(preg_match_all('~(?:\`(?_dvar_guts_regexp . '(?:' . $this->_obj_ext_regexp . ')*\`)|(?:(?_parse_var(str_replace('`','',$_var)) . ')."', $var_expr); - } - $_return = preg_replace('~\.""|(?_dvar_math_regexp.'|'.$this->_qstr_regexp.')~', $var_expr, -1, PREG_SPLIT_DELIM_CAPTURE); - - if(count($_math_vars) > 1) { - $_first_var = ""; - $_complete_var = ""; - $_output = ""; - // simple check if there is any math, to stop recursion (due to modifiers with "xx % yy" as parameter) - foreach($_math_vars as $_k => $_math_var) { - $_math_var = $_math_vars[$_k]; - - if(!empty($_math_var) || is_numeric($_math_var)) { - // hit a math operator, so process the stuff which came before it - if(preg_match('~^' . $this->_dvar_math_regexp . '$~', $_math_var)) { - $_has_math = true; - if(!empty($_complete_var) || is_numeric($_complete_var)) { - $_output .= $this->_parse_var($_complete_var); - } - - // just output the math operator to php - $_output .= $_math_var; - - if(empty($_first_var)) - $_first_var = $_complete_var; - - $_complete_var = ""; - } else { - $_complete_var .= $_math_var; - } - } - } - if($_has_math) { - if(!empty($_complete_var) || is_numeric($_complete_var)) - $_output .= $this->_parse_var($_complete_var); - - // get the modifiers working (only the last var from math + modifier is left) - $var_expr = $_complete_var; - } - } - - // prevent cutting of first digit in the number (we _definitly_ got a number if the first char is a digit) - if(is_numeric($var_expr{0})) - $_var_ref = $var_expr; - else - $_var_ref = substr($var_expr, 1); - - if(!$_has_math) { - - // get [foo] and .foo and ->foo and (...) pieces - preg_match_all('~(?:^\w+)|' . $this->_obj_params_regexp . '|(?:' . $this->_var_bracket_regexp . ')|->\$?\w+|\.\$?\w+|\S+~', $_var_ref, $match); - - $_indexes = $match[0]; - $_var_name = array_shift($_indexes); - - /* Handle $smarty.* variable references as a special case. */ - if ($_var_name == 'smarty') { - /* - * If the reference could be compiled, use the compiled output; - * otherwise, fall back on the $smarty variable generated at - * run-time. - */ - if (($smarty_ref = $this->_compile_smarty_ref($_indexes)) !== null) { - $_output = $smarty_ref; - } else { - $_var_name = substr(array_shift($_indexes), 1); - $_output = "\$this->_smarty_vars['$_var_name']"; - } - } elseif(is_numeric($_var_name) && is_numeric($var_expr{0})) { - // because . is the operator for accessing arrays thru inidizes we need to put it together again for floating point numbers - if(count($_indexes) > 0) - { - $_var_name .= implode("", $_indexes); - $_indexes = array(); - } - $_output = $_var_name; - } else { - $_output = "\$this->_tpl_vars['$_var_name']"; - } - - foreach ($_indexes as $_index) { - if ($_index{0} == '[') { - $_index = substr($_index, 1, -1); - if (is_numeric($_index)) { - $_output .= "[$_index]"; - } elseif ($_index{0} == '$') { - if (strpos($_index, '.') !== false) { - $_output .= '[' . $this->_parse_var($_index) . ']'; - } else { - $_output .= "[\$this->_tpl_vars['" . substr($_index, 1) . "']]"; - } - } else { - $_var_parts = explode('.', $_index); - $_var_section = $_var_parts[0]; - $_var_section_prop = isset($_var_parts[1]) ? $_var_parts[1] : 'index'; - $_output .= "[\$this->_sections['$_var_section']['$_var_section_prop']]"; - } - } else if ($_index{0} == '.') { - if ($_index{1} == '$') - $_output .= "[\$this->_tpl_vars['" . substr($_index, 2) . "']]"; - else - $_output .= "['" . substr($_index, 1) . "']"; - } else if (substr($_index,0,2) == '->') { - if(substr($_index,2,2) == '__') { - $this->_syntax_error('call to internal object members is not allowed', E_USER_ERROR, __FILE__, __LINE__); - } elseif($this->security && substr($_index, 2, 1) == '_') { - $this->_syntax_error('(secure) call to private object member is not allowed', E_USER_ERROR, __FILE__, __LINE__); - } elseif ($_index{2} == '$') { - if ($this->security) { - $this->_syntax_error('(secure) call to dynamic object member is not allowed', E_USER_ERROR, __FILE__, __LINE__); - } else { - $_output .= '->{(($_var=$this->_tpl_vars[\''.substr($_index,3).'\']) && substr($_var,0,2)!=\'__\') ? $_var : $this->trigger_error("cannot access property \\"$_var\\"")}'; - } - } else { - $_output .= $_index; - } - } elseif ($_index{0} == '(') { - $_index = $this->_parse_parenth_args($_index); - $_output .= $_index; - } else { - $_output .= $_index; - } - } - } - - return $_output; - } - - /** - * parse arguments in function call parenthesis - * - * @param string $parenth_args - * @return string - */ - function _parse_parenth_args($parenth_args) - { - preg_match_all('~' . $this->_param_regexp . '~',$parenth_args, $match); - $orig_vals = $match = $match[0]; - $this->_parse_vars_props($match); - $replace = array(); - for ($i = 0, $count = count($match); $i < $count; $i++) { - $replace[$orig_vals[$i]] = $match[$i]; - } - return strtr($parenth_args, $replace); - } - - /** - * parse configuration variable expression into PHP code - * - * @param string $conf_var_expr - */ - function _parse_conf_var($conf_var_expr) - { - $parts = explode('|', $conf_var_expr, 2); - $var_ref = $parts[0]; - $modifiers = isset($parts[1]) ? $parts[1] : ''; - - $var_name = substr($var_ref, 1, -1); - - $output = "\$this->_config[0]['vars']['$var_name']"; - - $this->_parse_modifiers($output, $modifiers); - - return $output; - } - - /** - * parse section property expression into PHP code - * - * @param string $section_prop_expr - * @return string - */ - function _parse_section_prop($section_prop_expr) - { - $parts = explode('|', $section_prop_expr, 2); - $var_ref = $parts[0]; - $modifiers = isset($parts[1]) ? $parts[1] : ''; - - preg_match('!%(\w+)\.(\w+)%!', $var_ref, $match); - $section_name = $match[1]; - $prop_name = $match[2]; - - $output = "\$this->_sections['$section_name']['$prop_name']"; - - $this->_parse_modifiers($output, $modifiers); - - return $output; - } - - - /** - * parse modifier chain into PHP code - * - * sets $output to parsed modified chain - * @param string $output - * @param string $modifier_string - */ - function _parse_modifiers(&$output, $modifier_string) - { - preg_match_all('~\|(@?\w+)((?>:(?:'. $this->_qstr_regexp . '|[^|]+))*)~', '|' . $modifier_string, $_match); - list(, $_modifiers, $modifier_arg_strings) = $_match; - - for ($_i = 0, $_for_max = count($_modifiers); $_i < $_for_max; $_i++) { - $_modifier_name = $_modifiers[$_i]; - - if($_modifier_name == 'smarty') { - // skip smarty modifier - continue; - } - - preg_match_all('~:(' . $this->_qstr_regexp . '|[^:]+)~', $modifier_arg_strings[$_i], $_match); - $_modifier_args = $_match[1]; - - if ($_modifier_name{0} == '@') { - $_map_array = false; - $_modifier_name = substr($_modifier_name, 1); - } else { - $_map_array = true; - } - - if (empty($this->_plugins['modifier'][$_modifier_name]) - && !$this->_get_plugin_filepath('modifier', $_modifier_name) - && function_exists($_modifier_name)) { - if ($this->security && !in_array($_modifier_name, $this->security_settings['MODIFIER_FUNCS'])) { - $this->_trigger_fatal_error("[plugin] (secure mode) modifier '$_modifier_name' is not allowed" , $this->_current_file, $this->_current_line_no, __FILE__, __LINE__); - } else { - $this->_plugins['modifier'][$_modifier_name] = array($_modifier_name, null, null, false); - } - } - $this->_add_plugin('modifier', $_modifier_name); - - $this->_parse_vars_props($_modifier_args); - - if($_modifier_name == 'default') { - // supress notifications of default modifier vars and args - if($output{0} == '$') { - $output = '@' . $output; - } - if(isset($_modifier_args[0]) && $_modifier_args[0]{0} == '$') { - $_modifier_args[0] = '@' . $_modifier_args[0]; - } - } - if (count($_modifier_args) > 0) - $_modifier_args = ', '.implode(', ', $_modifier_args); - else - $_modifier_args = ''; - - if ($_map_array) { - $output = "((is_array(\$_tmp=$output)) ? \$this->_run_mod_handler('$_modifier_name', true, \$_tmp$_modifier_args) : " . $this->_compile_plugin_call('modifier', $_modifier_name) . "(\$_tmp$_modifier_args))"; - - } else { - - $output = $this->_compile_plugin_call('modifier', $_modifier_name)."($output$_modifier_args)"; - - } - } - } - - - /** - * add plugin - * - * @param string $type - * @param string $name - * @param boolean? $delayed_loading - */ - function _add_plugin($type, $name, $delayed_loading = null) - { - if (!isset($this->_plugin_info[$type])) { - $this->_plugin_info[$type] = array(); - } - if (!isset($this->_plugin_info[$type][$name])) { - $this->_plugin_info[$type][$name] = array($this->_current_file, - $this->_current_line_no, - $delayed_loading); - } - } - - - /** - * Compiles references of type $smarty.foo - * - * @param string $indexes - * @return string - */ - function _compile_smarty_ref(&$indexes) - { - /* Extract the reference name. */ - $_ref = substr($indexes[0], 1); - foreach($indexes as $_index_no=>$_index) { - if ($_index{0} != '.' && $_index_no<2 || !preg_match('~^(\.|\[|->)~', $_index)) { - $this->_syntax_error('$smarty' . implode('', array_slice($indexes, 0, 2)) . ' is an invalid reference', E_USER_ERROR, __FILE__, __LINE__); - } - } - - switch ($_ref) { - case 'now': - $compiled_ref = 'time()'; - $_max_index = 1; - break; - - case 'foreach': - array_shift($indexes); - $_var = $this->_parse_var_props(substr($indexes[0], 1)); - $_propname = substr($indexes[1], 1); - $_max_index = 1; - switch ($_propname) { - case 'index': - array_shift($indexes); - $compiled_ref = "(\$this->_foreach[$_var]['iteration']-1)"; - break; - - case 'first': - array_shift($indexes); - $compiled_ref = "(\$this->_foreach[$_var]['iteration'] <= 1)"; - break; - - case 'last': - array_shift($indexes); - $compiled_ref = "(\$this->_foreach[$_var]['iteration'] == \$this->_foreach[$_var]['total'])"; - break; - - case 'show': - array_shift($indexes); - $compiled_ref = "(\$this->_foreach[$_var]['total'] > 0)"; - break; - - default: - unset($_max_index); - $compiled_ref = "\$this->_foreach[$_var]"; - } - break; - - case 'section': - array_shift($indexes); - $_var = $this->_parse_var_props(substr($indexes[0], 1)); - $compiled_ref = "\$this->_sections[$_var]"; - break; - - case 'get': - $compiled_ref = ($this->request_use_auto_globals) ? '$_GET' : "\$GLOBALS['HTTP_GET_VARS']"; - break; - - case 'post': - $compiled_ref = ($this->request_use_auto_globals) ? '$_POST' : "\$GLOBALS['HTTP_POST_VARS']"; - break; - - case 'cookies': - $compiled_ref = ($this->request_use_auto_globals) ? '$_COOKIE' : "\$GLOBALS['HTTP_COOKIE_VARS']"; - break; - - case 'env': - $compiled_ref = ($this->request_use_auto_globals) ? '$_ENV' : "\$GLOBALS['HTTP_ENV_VARS']"; - break; - - case 'server': - $compiled_ref = ($this->request_use_auto_globals) ? '$_SERVER' : "\$GLOBALS['HTTP_SERVER_VARS']"; - break; - - case 'session': - $compiled_ref = ($this->request_use_auto_globals) ? '$_SESSION' : "\$GLOBALS['HTTP_SESSION_VARS']"; - break; - - /* - * These cases are handled either at run-time or elsewhere in the - * compiler. - */ - case 'request': - if ($this->request_use_auto_globals) { - $compiled_ref = '$_REQUEST'; - break; - } else { - $this->_init_smarty_vars = true; - } - return null; - - case 'capture': - return null; - - case 'template': - $compiled_ref = "'$this->_current_file'"; - $_max_index = 1; - break; - - case 'version': - $compiled_ref = "'$this->_version'"; - $_max_index = 1; - break; - - case 'const': - if ($this->security && !$this->security_settings['ALLOW_CONSTANTS']) { - $this->_syntax_error("(secure mode) constants not permitted", - E_USER_WARNING, __FILE__, __LINE__); - return; - } - array_shift($indexes); - if (preg_match('!^\.\w+$!', $indexes[0])) { - $compiled_ref = '@' . substr($indexes[0], 1); - } else { - $_val = $this->_parse_var_props(substr($indexes[0], 1)); - $compiled_ref = '@constant(' . $_val . ')'; - } - $_max_index = 1; - break; - - case 'config': - $compiled_ref = "\$this->_config[0]['vars']"; - $_max_index = 3; - break; - - case 'ldelim': - $compiled_ref = "'$this->left_delimiter'"; - break; - - case 'rdelim': - $compiled_ref = "'$this->right_delimiter'"; - break; - - default: - $this->_syntax_error('$smarty.' . $_ref . ' is an unknown reference', E_USER_ERROR, __FILE__, __LINE__); - break; - } - - if (isset($_max_index) && count($indexes) > $_max_index) { - $this->_syntax_error('$smarty' . implode('', $indexes) .' is an invalid reference', E_USER_ERROR, __FILE__, __LINE__); - } - - array_shift($indexes); - return $compiled_ref; - } - - /** - * compiles call to plugin of type $type with name $name - * returns a string containing the function-name or method call - * without the paramter-list that would have follow to make the - * call valid php-syntax - * - * @param string $type - * @param string $name - * @return string - */ - function _compile_plugin_call($type, $name) { - if (isset($this->_plugins[$type][$name])) { - /* plugin loaded */ - if (is_array($this->_plugins[$type][$name][0])) { - return ((is_object($this->_plugins[$type][$name][0][0])) ? - "\$this->_plugins['$type']['$name'][0][0]->" /* method callback */ - : (string)($this->_plugins[$type][$name][0][0]).'::' /* class callback */ - ). $this->_plugins[$type][$name][0][1]; - - } else { - /* function callback */ - return $this->_plugins[$type][$name][0]; - - } - } else { - /* plugin not loaded -> auto-loadable-plugin */ - return 'smarty_'.$type.'_'.$name; - - } - } - - /** - * load pre- and post-filters - */ - function _load_filters() - { - if (count($this->_plugins['prefilter']) > 0) { - foreach ($this->_plugins['prefilter'] as $filter_name => $prefilter) { - if ($prefilter === false) { - unset($this->_plugins['prefilter'][$filter_name]); - $_params = array('plugins' => array(array('prefilter', $filter_name, null, null, false))); - require_once(SMARTY_CORE_DIR . 'core.load_plugins.php'); - smarty_core_load_plugins($_params, $this); - } - } - } - if (count($this->_plugins['postfilter']) > 0) { - foreach ($this->_plugins['postfilter'] as $filter_name => $postfilter) { - if ($postfilter === false) { - unset($this->_plugins['postfilter'][$filter_name]); - $_params = array('plugins' => array(array('postfilter', $filter_name, null, null, false))); - require_once(SMARTY_CORE_DIR . 'core.load_plugins.php'); - smarty_core_load_plugins($_params, $this); - } - } - } - } - - - /** - * Quote subpattern references - * - * @param string $string - * @return string - */ - function _quote_replace($string) - { - return strtr($string, array('\\' => '\\\\', '$' => '\\$')); - } - - /** - * display Smarty syntax error - * - * @param string $error_msg - * @param integer $error_type - * @param string $file - * @param integer $line - */ - function _syntax_error($error_msg, $error_type = E_USER_ERROR, $file=null, $line=null) - { - $this->_trigger_fatal_error("syntax error: $error_msg", $this->_current_file, $this->_current_line_no, $file, $line, $error_type); - } - - - /** - * check if the compilation changes from cacheable to - * non-cacheable state with the beginning of the current - * plugin. return php-code to reflect the transition. - * @return string - */ - function _push_cacheable_state($type, $name) { - $_cacheable = !isset($this->_plugins[$type][$name]) || $this->_plugins[$type][$name][4]; - if ($_cacheable - || 0<$this->_cacheable_state++) return ''; - if (!isset($this->_cache_serial)) $this->_cache_serial = md5(uniqid('Smarty')); - $_ret = 'if ($this->caching && !$this->_cache_including) { echo \'{nocache:' - . $this->_cache_serial . '#' . $this->_nocache_count - . '}\';}'; - return $_ret; - } - - - /** - * check if the compilation changes from non-cacheable to - * cacheable state with the end of the current plugin return - * php-code to reflect the transition. - * @return string - */ - function _pop_cacheable_state($type, $name) { - $_cacheable = !isset($this->_plugins[$type][$name]) || $this->_plugins[$type][$name][4]; - if ($_cacheable - || --$this->_cacheable_state>0) return ''; - return 'if ($this->caching && !$this->_cache_including) { echo \'{/nocache:' - . $this->_cache_serial . '#' . ($this->_nocache_count++) - . '}\';}'; - } - - - /** - * push opening tag-name, file-name and line-number on the tag-stack - * @param string the opening tag's name - */ - function _push_tag($open_tag) - { - array_push($this->_tag_stack, array($open_tag, $this->_current_line_no)); - } - - /** - * pop closing tag-name - * raise an error if this stack-top doesn't match with the closing tag - * @param string the closing tag's name - * @return string the opening tag's name - */ - function _pop_tag($close_tag) - { - $message = ''; - if (count($this->_tag_stack)>0) { - list($_open_tag, $_line_no) = array_pop($this->_tag_stack); - if ($close_tag == $_open_tag) { - return $_open_tag; - } - if ($close_tag == 'if' && ($_open_tag == 'else' || $_open_tag == 'elseif' )) { - return $this->_pop_tag($close_tag); - } - if ($close_tag == 'section' && $_open_tag == 'sectionelse') { - $this->_pop_tag($close_tag); - return $_open_tag; - } - if ($close_tag == 'foreach' && $_open_tag == 'foreachelse') { - $this->_pop_tag($close_tag); - return $_open_tag; - } - if ($_open_tag == 'else' || $_open_tag == 'elseif') { - $_open_tag = 'if'; - } elseif ($_open_tag == 'sectionelse') { - $_open_tag = 'section'; - } elseif ($_open_tag == 'foreachelse') { - $_open_tag = 'foreach'; - } - $message = " expected {/$_open_tag} (opened line $_line_no)."; - } - $this->_syntax_error("mismatched tag {/$close_tag}.$message", - E_USER_ERROR, __FILE__, __LINE__); - } - -} - -/** - * compare to values by their string length - * - * @access private - * @param string $a - * @param string $b - * @return 0|-1|1 - */ -function _smarty_sort_length($a, $b) -{ - if($a == $b) - return 0; - - if(strlen($a) == strlen($b)) - return ($a > $b) ? -1 : 1; - - return (strlen($a) > strlen($b)) ? -1 : 1; -} - - -/* vim: set et: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/debug.tpl b/gui/bacula-web/external_packages/smarty/debug.tpl deleted file mode 100644 index 7f1c9d4258..0000000000 --- a/gui/bacula-web/external_packages/smarty/debug.tpl +++ /dev/null @@ -1,64 +0,0 @@ -{* Smarty *} - -{* debug.tpl, last updated version 2.0.1 *} - -{assign_debug_info} - -{if isset($_smarty_debug_output) and $_smarty_debug_output eq "html"} - - - - {section name=templates loop=$_debug_tpls} - - {sectionelse} - - {/section} - - {section name=vars loop=$_debug_keys} - - {sectionelse} - - {/section} - - {section name=config_vars loop=$_debug_config_keys} - - {sectionelse} - - {/section} -
    Smarty Debug Console
    included templates & config files (load time in seconds):
    {section name=indent loop=$_debug_tpls[templates].depth}   {/section}{$_debug_tpls[templates].filename|escape:html}{if isset($_debug_tpls[templates].exec_time)} ({$_debug_tpls[templates].exec_time|string_format:"%.5f"}){if %templates.index% eq 0} (total){/if}{/if}
    no templates included
    assigned template variables:
    {ldelim}${$_debug_keys[vars]}{rdelim}{$_debug_vals[vars]|@debug_print_var}
    no template variables assigned
    assigned config file variables (outer template scope):
    {ldelim}#{$_debug_config_keys[config_vars]}#{rdelim}{$_debug_config_vals[config_vars]|@debug_print_var}
    no config vars assigned
    - -{else} - -{/if} diff --git a/gui/bacula-web/external_packages/smarty/internals/core.assemble_plugin_filepath.php b/gui/bacula-web/external_packages/smarty/internals/core.assemble_plugin_filepath.php deleted file mode 100644 index 690d3ddbc2..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.assemble_plugin_filepath.php +++ /dev/null @@ -1,67 +0,0 @@ -plugins_dir as $_plugin_dir) { - - $_plugin_filepath = $_plugin_dir . DIRECTORY_SEPARATOR . $_plugin_filename; - - // see if path is relative - if (!preg_match("/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/", $_plugin_dir)) { - $_relative_paths[] = $_plugin_dir; - // relative path, see if it is in the SMARTY_DIR - if (@is_readable(SMARTY_DIR . $_plugin_filepath)) { - $_return = SMARTY_DIR . $_plugin_filepath; - break; - } - } - // try relative to cwd (or absolute) - if (@is_readable($_plugin_filepath)) { - $_return = $_plugin_filepath; - break; - } - } - - if($_return === false) { - // still not found, try PHP include_path - if(isset($_relative_paths)) { - foreach ((array)$_relative_paths as $_plugin_dir) { - - $_plugin_filepath = $_plugin_dir . DIRECTORY_SEPARATOR . $_plugin_filename; - - $_params = array('file_path' => $_plugin_filepath); - require_once(SMARTY_CORE_DIR . 'core.get_include_path.php'); - if(smarty_core_get_include_path($_params, $smarty)) { - $_return = $_params['new_file_path']; - break; - } - } - } - } - $_filepaths_cache[$_plugin_filename] = $_return; - return $_return; -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/internals/core.assign_smarty_interface.php b/gui/bacula-web/external_packages/smarty/internals/core.assign_smarty_interface.php deleted file mode 100644 index 7e65a73ec2..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.assign_smarty_interface.php +++ /dev/null @@ -1,43 +0,0 @@ - - * Name: assign_smarty_interface
    - * Purpose: assign the $smarty interface variable - * @param array Format: null - * @param Smarty - */ -function smarty_core_assign_smarty_interface($params, &$smarty) -{ - if (isset($smarty->_smarty_vars) && isset($smarty->_smarty_vars['request'])) { - return; - } - - $_globals_map = array('g' => 'HTTP_GET_VARS', - 'p' => 'HTTP_POST_VARS', - 'c' => 'HTTP_COOKIE_VARS', - 's' => 'HTTP_SERVER_VARS', - 'e' => 'HTTP_ENV_VARS'); - - $_smarty_vars_request = array(); - - foreach (preg_split('!!', strtolower($smarty->request_vars_order)) as $_c) { - if (isset($_globals_map[$_c])) { - $_smarty_vars_request = array_merge($_smarty_vars_request, $GLOBALS[$_globals_map[$_c]]); - } - } - $_smarty_vars_request = @array_merge($_smarty_vars_request, $GLOBALS['HTTP_SESSION_VARS']); - - $smarty->_smarty_vars['request'] = $_smarty_vars_request; -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/internals/core.create_dir_structure.php b/gui/bacula-web/external_packages/smarty/internals/core.create_dir_structure.php deleted file mode 100644 index 999cf59302..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.create_dir_structure.php +++ /dev/null @@ -1,79 +0,0 @@ -_dir_perms) && !is_dir($_new_dir)) { - $smarty->trigger_error("problem creating directory '" . $_new_dir . "'"); - return false; - } - $_new_dir .= '/'; - } - } -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/internals/core.display_debug_console.php b/gui/bacula-web/external_packages/smarty/internals/core.display_debug_console.php deleted file mode 100644 index 1a80f39096..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.display_debug_console.php +++ /dev/null @@ -1,61 +0,0 @@ - - * Name: display_debug_console
    - * Purpose: display the javascript debug console window - * @param array Format: null - * @param Smarty - */ -function smarty_core_display_debug_console($params, &$smarty) -{ - // we must force compile the debug template in case the environment - // changed between separate applications. - - if(empty($smarty->debug_tpl)) { - // set path to debug template from SMARTY_DIR - $smarty->debug_tpl = SMARTY_DIR . 'debug.tpl'; - if($smarty->security && is_file($smarty->debug_tpl)) { - $smarty->secure_dir[] = realpath($smarty->debug_tpl); - } - $smarty->debug_tpl = 'file:' . SMARTY_DIR . 'debug.tpl'; - } - - $_ldelim_orig = $smarty->left_delimiter; - $_rdelim_orig = $smarty->right_delimiter; - - $smarty->left_delimiter = '{'; - $smarty->right_delimiter = '}'; - - $_compile_id_orig = $smarty->_compile_id; - $smarty->_compile_id = null; - - $_compile_path = $smarty->_get_compile_path($smarty->debug_tpl); - if ($smarty->_compile_resource($smarty->debug_tpl, $_compile_path)) - { - ob_start(); - $smarty->_include($_compile_path); - $_results = ob_get_contents(); - ob_end_clean(); - } else { - $_results = ''; - } - - $smarty->_compile_id = $_compile_id_orig; - - $smarty->left_delimiter = $_ldelim_orig; - $smarty->right_delimiter = $_rdelim_orig; - - return $_results; -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/internals/core.get_include_path.php b/gui/bacula-web/external_packages/smarty/internals/core.get_include_path.php deleted file mode 100644 index 43432412b8..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.get_include_path.php +++ /dev/null @@ -1,44 +0,0 @@ - diff --git a/gui/bacula-web/external_packages/smarty/internals/core.get_microtime.php b/gui/bacula-web/external_packages/smarty/internals/core.get_microtime.php deleted file mode 100644 index f1a28e0425..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.get_microtime.php +++ /dev/null @@ -1,23 +0,0 @@ - diff --git a/gui/bacula-web/external_packages/smarty/internals/core.get_php_resource.php b/gui/bacula-web/external_packages/smarty/internals/core.get_php_resource.php deleted file mode 100644 index 786d4e78e8..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.get_php_resource.php +++ /dev/null @@ -1,80 +0,0 @@ -trusted_dir; - $smarty->_parse_resource_name($params, $smarty); - - /* - * Find out if the resource exists. - */ - - if ($params['resource_type'] == 'file') { - $_readable = false; - if(file_exists($params['resource_name']) && is_readable($params['resource_name'])) { - $_readable = true; - } else { - // test for file in include_path - $_params = array('file_path' => $params['resource_name']); - require_once(SMARTY_CORE_DIR . 'core.get_include_path.php'); - if(smarty_core_get_include_path($_params, $smarty)) { - $_include_path = $_params['new_file_path']; - $_readable = true; - } - } - } else if ($params['resource_type'] != 'file') { - $_template_source = null; - $_readable = is_callable($smarty->_plugins['resource'][$params['resource_type']][0][0]) - && call_user_func_array($smarty->_plugins['resource'][$params['resource_type']][0][0], - array($params['resource_name'], &$_template_source, &$smarty)); - } - - /* - * Set the error function, depending on which class calls us. - */ - if (method_exists($smarty, '_syntax_error')) { - $_error_funcc = '_syntax_error'; - } else { - $_error_funcc = 'trigger_error'; - } - - if ($_readable) { - if ($smarty->security) { - require_once(SMARTY_CORE_DIR . 'core.is_trusted.php'); - if (!smarty_core_is_trusted($params, $smarty)) { - $smarty->$_error_funcc('(secure mode) ' . $params['resource_type'] . ':' . $params['resource_name'] . ' is not trusted'); - return false; - } - } - } else { - $smarty->$_error_funcc($params['resource_type'] . ':' . $params['resource_name'] . ' is not readable'); - return false; - } - - if ($params['resource_type'] == 'file') { - $params['php_resource'] = $params['resource_name']; - } else { - $params['php_resource'] = $_template_source; - } - return true; -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/internals/core.is_secure.php b/gui/bacula-web/external_packages/smarty/internals/core.is_secure.php deleted file mode 100644 index 9bec5c21ef..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.is_secure.php +++ /dev/null @@ -1,59 +0,0 @@ -security || $smarty->security_settings['INCLUDE_ANY']) { - return true; - } - - if ($params['resource_type'] == 'file') { - $_rp = realpath($params['resource_name']); - if (isset($params['resource_base_path'])) { - foreach ((array)$params['resource_base_path'] as $curr_dir) { - if ( ($_cd = realpath($curr_dir)) !== false && - strncmp($_rp, $_cd, strlen($_cd)) == 0 && - $_rp{strlen($_cd)} == DIRECTORY_SEPARATOR ) { - return true; - } - } - } - if (!empty($smarty->secure_dir)) { - foreach ((array)$smarty->secure_dir as $curr_dir) { - if ( ($_cd = realpath($curr_dir)) !== false) { - if( strncmp($_rp, $_cd, strlen($_cd)) == 0 && - $_rp{strlen($_cd)} == DIRECTORY_SEPARATOR ) { - return true; - } elseif ($_cd == $_rp) { - return true; - } - } - } - } - } else { - // resource is not on local file system - return call_user_func_array( - $smarty->_plugins['resource'][$params['resource_type']][0][2], - array($params['resource_name'], &$smarty)); - } - - return false; -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/internals/core.is_trusted.php b/gui/bacula-web/external_packages/smarty/internals/core.is_trusted.php deleted file mode 100644 index f0bd2fb8c9..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.is_trusted.php +++ /dev/null @@ -1,47 +0,0 @@ -trusted_dir)) { - $_rp = realpath($params['resource_name']); - foreach ((array)$smarty->trusted_dir as $curr_dir) { - if (!empty($curr_dir) && is_readable ($curr_dir)) { - $_cd = realpath($curr_dir); - if (strncmp($_rp, $_cd, strlen($_cd)) == 0 - && $_rp{strlen($_cd)} == DIRECTORY_SEPARATOR ) { - $_smarty_trusted = true; - break; - } - } - } - } - - } else { - // resource is not on local file system - $_smarty_trusted = call_user_func_array($smarty->_plugins['resource'][$params['resource_type']][0][3], - array($params['resource_name'], $smarty)); - } - - return $_smarty_trusted; -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/internals/core.load_plugins.php b/gui/bacula-web/external_packages/smarty/internals/core.load_plugins.php deleted file mode 100644 index 6db1dc51d2..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.load_plugins.php +++ /dev/null @@ -1,125 +0,0 @@ -_plugins[$_type][$_name]; - - /* - * We do not load plugin more than once for each instance of Smarty. - * The following code checks for that. The plugin can also be - * registered dynamically at runtime, in which case template file - * and line number will be unknown, so we fill them in. - * - * The final element of the info array is a flag that indicates - * whether the dynamically registered plugin function has been - * checked for existence yet or not. - */ - if (isset($_plugin)) { - if (empty($_plugin[3])) { - if (!is_callable($_plugin[0])) { - $smarty->_trigger_fatal_error("[plugin] $_type '$_name' is not implemented", $_tpl_file, $_tpl_line, __FILE__, __LINE__); - } else { - $_plugin[1] = $_tpl_file; - $_plugin[2] = $_tpl_line; - $_plugin[3] = true; - if (!isset($_plugin[4])) $_plugin[4] = true; /* cacheable */ - } - } - continue; - } else if ($_type == 'insert') { - /* - * For backwards compatibility, we check for insert functions in - * the symbol table before trying to load them as a plugin. - */ - $_plugin_func = 'insert_' . $_name; - if (function_exists($_plugin_func)) { - $_plugin = array($_plugin_func, $_tpl_file, $_tpl_line, true, false); - continue; - } - } - - $_plugin_file = $smarty->_get_plugin_filepath($_type, $_name); - - if (! $_found = ($_plugin_file != false)) { - $_message = "could not load plugin file '$_type.$_name.php'\n"; - } - - /* - * If plugin file is found, it -must- provide the properly named - * plugin function. In case it doesn't, simply output the error and - * do not fall back on any other method. - */ - if ($_found) { - include_once $_plugin_file; - - $_plugin_func = 'smarty_' . $_type . '_' . $_name; - if (!function_exists($_plugin_func)) { - $smarty->_trigger_fatal_error("[plugin] function $_plugin_func() not found in $_plugin_file", $_tpl_file, $_tpl_line, __FILE__, __LINE__); - continue; - } - } - /* - * In case of insert plugins, their code may be loaded later via - * 'script' attribute. - */ - else if ($_type == 'insert' && $_delayed_loading) { - $_plugin_func = 'smarty_' . $_type . '_' . $_name; - $_found = true; - } - - /* - * Plugin specific processing and error checking. - */ - if (!$_found) { - if ($_type == 'modifier') { - /* - * In case modifier falls back on using PHP functions - * directly, we only allow those specified in the security - * context. - */ - if ($smarty->security && !in_array($_name, $smarty->security_settings['MODIFIER_FUNCS'])) { - $_message = "(secure mode) modifier '$_name' is not allowed"; - } else { - if (!function_exists($_name)) { - $_message = "modifier '$_name' is not implemented"; - } else { - $_plugin_func = $_name; - $_found = true; - } - } - } else if ($_type == 'function') { - /* - * This is a catch-all situation. - */ - $_message = "unknown tag - '$_name'"; - } - } - - if ($_found) { - $smarty->_plugins[$_type][$_name] = array($_plugin_func, $_tpl_file, $_tpl_line, true, true); - } else { - // output error - $smarty->_trigger_fatal_error('[plugin] ' . $_message, $_tpl_file, $_tpl_line, __FILE__, __LINE__); - } - } -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/internals/core.load_resource_plugin.php b/gui/bacula-web/external_packages/smarty/internals/core.load_resource_plugin.php deleted file mode 100644 index a7d37d1afc..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.load_resource_plugin.php +++ /dev/null @@ -1,74 +0,0 @@ -_plugins['resource'][$params['type']]; - if (isset($_plugin)) { - if (!$_plugin[1] && count($_plugin[0])) { - $_plugin[1] = true; - foreach ($_plugin[0] as $_plugin_func) { - if (!is_callable($_plugin_func)) { - $_plugin[1] = false; - break; - } - } - } - - if (!$_plugin[1]) { - $smarty->_trigger_fatal_error("[plugin] resource '" . $params['type'] . "' is not implemented", null, null, __FILE__, __LINE__); - } - - return; - } - - $_plugin_file = $smarty->_get_plugin_filepath('resource', $params['type']); - $_found = ($_plugin_file != false); - - if ($_found) { /* - * If the plugin file is found, it -must- provide the properly named - * plugin functions. - */ - include_once($_plugin_file); - - /* - * Locate functions that we require the plugin to provide. - */ - $_resource_ops = array('source', 'timestamp', 'secure', 'trusted'); - $_resource_funcs = array(); - foreach ($_resource_ops as $_op) { - $_plugin_func = 'smarty_resource_' . $params['type'] . '_' . $_op; - if (!function_exists($_plugin_func)) { - $smarty->_trigger_fatal_error("[plugin] function $_plugin_func() not found in $_plugin_file", null, null, __FILE__, __LINE__); - return; - } else { - $_resource_funcs[] = $_plugin_func; - } - } - - $smarty->_plugins['resource'][$params['type']] = array($_resource_funcs, true); - } -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/internals/core.process_cached_inserts.php b/gui/bacula-web/external_packages/smarty/internals/core.process_cached_inserts.php deleted file mode 100644 index 29cb007eb1..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.process_cached_inserts.php +++ /dev/null @@ -1,71 +0,0 @@ -_smarty_md5.'{insert_cache (.*)}'.$smarty->_smarty_md5.'!Uis', - $params['results'], $match); - list($cached_inserts, $insert_args) = $match; - - for ($i = 0, $for_max = count($cached_inserts); $i < $for_max; $i++) { - if ($smarty->debugging) { - $_params = array(); - require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); - $debug_start_time = smarty_core_get_microtime($_params, $smarty); - } - - $args = unserialize($insert_args[$i]); - $name = $args['name']; - - if (isset($args['script'])) { - $_params = array('resource_name' => $smarty->_dequote($args['script'])); - require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php'); - if(!smarty_core_get_php_resource($_params, $smarty)) { - return false; - } - $resource_type = $_params['resource_type']; - $php_resource = $_params['php_resource']; - - - if ($resource_type == 'file') { - $smarty->_include($php_resource, true); - } else { - $smarty->_eval($php_resource); - } - } - - $function_name = $smarty->_plugins['insert'][$name][0]; - if (empty($args['assign'])) { - $replace = $function_name($args, $smarty); - } else { - $smarty->assign($args['assign'], $function_name($args, $smarty)); - $replace = ''; - } - - $params['results'] = str_replace($cached_inserts[$i], $replace, $params['results']); - if ($smarty->debugging) { - $_params = array(); - require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); - $smarty->_smarty_debug_info[] = array('type' => 'insert', - 'filename' => 'insert_'.$name, - 'depth' => $smarty->_inclusion_depth, - 'exec_time' => smarty_core_get_microtime($_params, $smarty) - $debug_start_time); - } - } - - return $params['results']; -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/internals/core.process_compiled_include.php b/gui/bacula-web/external_packages/smarty/internals/core.process_compiled_include.php deleted file mode 100644 index d539423bf7..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.process_compiled_include.php +++ /dev/null @@ -1,37 +0,0 @@ -_cache_including; - $smarty->_cache_including = true; - - $_return = $params['results']; - - foreach ($smarty->_cache_info['cache_serials'] as $_include_file_path=>$_cache_serial) { - $smarty->_include($_include_file_path, true); - } - - foreach ($smarty->_cache_serials as $_include_file_path=>$_cache_serial) { - $_return = preg_replace_callback('!(\{nocache\:('.$_cache_serial.')#(\d+)\})!s', - array(&$smarty, '_process_compiled_include_callback'), - $_return); - } - $smarty->_cache_including = $_cache_including; - return $_return; -} - -?> diff --git a/gui/bacula-web/external_packages/smarty/internals/core.read_cache_file.php b/gui/bacula-web/external_packages/smarty/internals/core.read_cache_file.php deleted file mode 100644 index c60e113a71..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.read_cache_file.php +++ /dev/null @@ -1,101 +0,0 @@ -force_compile) { - // force compile enabled, always regenerate - return false; - } - - if (isset($content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']])) { - list($params['results'], $smarty->_cache_info) = $content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']]; - return true; - } - - if (!empty($smarty->cache_handler_func)) { - // use cache_handler function - call_user_func_array($smarty->cache_handler_func, - array('read', &$smarty, &$params['results'], $params['tpl_file'], $params['cache_id'], $params['compile_id'], null)); - } else { - // use local cache file - $_auto_id = $smarty->_get_auto_id($params['cache_id'], $params['compile_id']); - $_cache_file = $smarty->_get_auto_filename($smarty->cache_dir, $params['tpl_file'], $_auto_id); - $params['results'] = $smarty->_read_file($_cache_file); - } - - if (empty($params['results'])) { - // nothing to parse (error?), regenerate cache - return false; - } - - $_contents = $params['results']; - $_info_start = strpos($_contents, "\n") + 1; - $_info_len = (int)substr($_contents, 0, $_info_start - 1); - $_cache_info = unserialize(substr($_contents, $_info_start, $_info_len)); - $params['results'] = substr($_contents, $_info_start + $_info_len); - - if ($smarty->caching == 2 && isset ($_cache_info['expires'])){ - // caching by expiration time - if ($_cache_info['expires'] > -1 && (time() > $_cache_info['expires'])) { - // cache expired, regenerate - return false; - } - } else { - // caching by lifetime - if ($smarty->cache_lifetime > -1 && (time() - $_cache_info['timestamp'] > $smarty->cache_lifetime)) { - // cache expired, regenerate - return false; - } - } - - if ($smarty->compile_check) { - $_params = array('get_source' => false, 'quiet'=>true); - foreach (array_keys($_cache_info['template']) as $_template_dep) { - $_params['resource_name'] = $_template_dep; - if (!$smarty->_fetch_resource_info($_params) || $_cache_info['timestamp'] < $_params['resource_timestamp']) { - // template file has changed, regenerate cache - return false; - } - } - - if (isset($_cache_info['config'])) { - $_params = array('resource_base_path' => $smarty->config_dir, 'get_source' => false, 'quiet'=>true); - foreach (array_keys($_cache_info['config']) as $_config_dep) { - $_params['resource_name'] = $_config_dep; - if (!$smarty->_fetch_resource_info($_params) || $_cache_info['timestamp'] < $_params['resource_timestamp']) { - // config file has changed, regenerate cache - return false; - } - } - } - } - - $content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']] = array($params['results'], $_cache_info); - - $smarty->_cache_info = $_cache_info; - return true; -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/internals/core.rm_auto.php b/gui/bacula-web/external_packages/smarty/internals/core.rm_auto.php deleted file mode 100644 index b251f64911..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.rm_auto.php +++ /dev/null @@ -1,71 +0,0 @@ - $params['auto_base'], - 'level' => 0, - 'exp_time' => $params['exp_time'] - ); - require_once(SMARTY_CORE_DIR . 'core.rmdir.php'); - $_res = smarty_core_rmdir($_params, $smarty); - } else { - $_tname = $smarty->_get_auto_filename($params['auto_base'], $params['auto_source'], $params['auto_id']); - - if(isset($params['auto_source'])) { - if (isset($params['extensions'])) { - $_res = false; - foreach ((array)$params['extensions'] as $_extension) - $_res |= $smarty->_unlink($_tname.$_extension, $params['exp_time']); - } else { - $_res = $smarty->_unlink($_tname, $params['exp_time']); - } - } elseif ($smarty->use_sub_dirs) { - $_params = array( - 'dirname' => $_tname, - 'level' => 1, - 'exp_time' => $params['exp_time'] - ); - require_once(SMARTY_CORE_DIR . 'core.rmdir.php'); - $_res = smarty_core_rmdir($_params, $smarty); - } else { - // remove matching file names - $_handle = opendir($params['auto_base']); - $_res = true; - while (false !== ($_filename = readdir($_handle))) { - if($_filename == '.' || $_filename == '..') { - continue; - } elseif (substr($params['auto_base'] . DIRECTORY_SEPARATOR . $_filename, 0, strlen($_tname)) == $_tname) { - $_res &= (bool)$smarty->_unlink($params['auto_base'] . DIRECTORY_SEPARATOR . $_filename, $params['exp_time']); - } - } - } - } - - return $_res; -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/internals/core.rmdir.php b/gui/bacula-web/external_packages/smarty/internals/core.rmdir.php deleted file mode 100644 index 2166c44d28..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.rmdir.php +++ /dev/null @@ -1,54 +0,0 @@ - keep root) - * WARNING: no tests, it will try to remove what you tell it! - * - * @param string $dirname - * @param integer $level - * @param integer $exp_time - * @return boolean - */ - -// $dirname, $level = 1, $exp_time = null - -function smarty_core_rmdir($params, &$smarty) -{ - if(!isset($params['level'])) { $params['level'] = 1; } - if(!isset($params['exp_time'])) { $params['exp_time'] = null; } - - if($_handle = @opendir($params['dirname'])) { - - while (false !== ($_entry = readdir($_handle))) { - if ($_entry != '.' && $_entry != '..') { - if (@is_dir($params['dirname'] . DIRECTORY_SEPARATOR . $_entry)) { - $_params = array( - 'dirname' => $params['dirname'] . DIRECTORY_SEPARATOR . $_entry, - 'level' => $params['level'] + 1, - 'exp_time' => $params['exp_time'] - ); - smarty_core_rmdir($_params, $smarty); - } - else { - $smarty->_unlink($params['dirname'] . DIRECTORY_SEPARATOR . $_entry, $params['exp_time']); - } - } - } - closedir($_handle); - } - - if ($params['level']) { - return @rmdir($params['dirname']); - } - return (bool)$_handle; - -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/internals/core.run_insert_handler.php b/gui/bacula-web/external_packages/smarty/internals/core.run_insert_handler.php deleted file mode 100644 index 71c3845080..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.run_insert_handler.php +++ /dev/null @@ -1,71 +0,0 @@ -debugging) { - $_params = array(); - $_debug_start_time = smarty_core_get_microtime($_params, $smarty); - } - - if ($smarty->caching) { - $_arg_string = serialize($params['args']); - $_name = $params['args']['name']; - if (!isset($smarty->_cache_info['insert_tags'][$_name])) { - $smarty->_cache_info['insert_tags'][$_name] = array('insert', - $_name, - $smarty->_plugins['insert'][$_name][1], - $smarty->_plugins['insert'][$_name][2], - !empty($params['args']['script']) ? true : false); - } - return $smarty->_smarty_md5."{insert_cache $_arg_string}".$smarty->_smarty_md5; - } else { - if (isset($params['args']['script'])) { - $_params = array('resource_name' => $smarty->_dequote($params['args']['script'])); - require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php'); - if(!smarty_core_get_php_resource($_params, $smarty)) { - return false; - } - - if ($_params['resource_type'] == 'file') { - $smarty->_include($_params['php_resource'], true); - } else { - $smarty->_eval($_params['php_resource']); - } - unset($params['args']['script']); - } - - $_funcname = $smarty->_plugins['insert'][$params['args']['name']][0]; - $_content = $_funcname($params['args'], $smarty); - if ($smarty->debugging) { - $_params = array(); - require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); - $smarty->_smarty_debug_info[] = array('type' => 'insert', - 'filename' => 'insert_'.$params['args']['name'], - 'depth' => $smarty->_inclusion_depth, - 'exec_time' => smarty_core_get_microtime($_params, $smarty) - $_debug_start_time); - } - - if (!empty($params['args']["assign"])) { - $smarty->assign($params['args']["assign"], $_content); - } else { - return $_content; - } - } -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/internals/core.smarty_include_php.php b/gui/bacula-web/external_packages/smarty/internals/core.smarty_include_php.php deleted file mode 100644 index 30c6e76549..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.smarty_include_php.php +++ /dev/null @@ -1,50 +0,0 @@ - $params['smarty_file']); - require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php'); - smarty_core_get_php_resource($_params, $smarty); - $_smarty_resource_type = $_params['resource_type']; - $_smarty_php_resource = $_params['php_resource']; - - if (!empty($params['smarty_assign'])) { - ob_start(); - if ($_smarty_resource_type == 'file') { - $smarty->_include($_smarty_php_resource, $params['smarty_once'], $params['smarty_include_vars']); - } else { - $smarty->_eval($_smarty_php_resource, $params['smarty_include_vars']); - } - $smarty->assign($params['smarty_assign'], ob_get_contents()); - ob_end_clean(); - } else { - if ($_smarty_resource_type == 'file') { - $smarty->_include($_smarty_php_resource, $params['smarty_once'], $params['smarty_include_vars']); - } else { - $smarty->_eval($_smarty_php_resource, $params['smarty_include_vars']); - } - } -} - - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/internals/core.write_cache_file.php b/gui/bacula-web/external_packages/smarty/internals/core.write_cache_file.php deleted file mode 100644 index 72f785b74e..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.write_cache_file.php +++ /dev/null @@ -1,96 +0,0 @@ -_cache_info['timestamp'] = time(); - if ($smarty->cache_lifetime > -1){ - // expiration set - $smarty->_cache_info['expires'] = $smarty->_cache_info['timestamp'] + $smarty->cache_lifetime; - } else { - // cache will never expire - $smarty->_cache_info['expires'] = -1; - } - - // collapse nocache.../nocache-tags - if (preg_match_all('!\{(/?)nocache\:[0-9a-f]{32}#\d+\}!', $params['results'], $match, PREG_PATTERN_ORDER)) { - // remove everything between every pair of outermost noache.../nocache-tags - // and replace it by a single nocache-tag - // this new nocache-tag will be replaced by dynamic contents in - // smarty_core_process_compiled_includes() on a cache-read - - $match_count = count($match[0]); - $results = preg_split('!(\{/?nocache\:[0-9a-f]{32}#\d+\})!', $params['results'], -1, PREG_SPLIT_DELIM_CAPTURE); - - $level = 0; - $j = 0; - for ($i=0, $results_count = count($results); $i < $results_count && $j < $match_count; $i++) { - if ($results[$i] == $match[0][$j]) { - // nocache tag - if ($match[1][$j]) { // closing tag - $level--; - unset($results[$i]); - } else { // opening tag - if ($level++ > 0) unset($results[$i]); - } - $j++; - } elseif ($level > 0) { - unset($results[$i]); - } - } - $params['results'] = implode('', $results); - } - $smarty->_cache_info['cache_serials'] = $smarty->_cache_serials; - - // prepend the cache header info into cache file - $_cache_info = serialize($smarty->_cache_info); - $params['results'] = strlen($_cache_info) . "\n" . $_cache_info . $params['results']; - - if (!empty($smarty->cache_handler_func)) { - // use cache_handler function - call_user_func_array($smarty->cache_handler_func, - array('write', &$smarty, &$params['results'], $params['tpl_file'], $params['cache_id'], $params['compile_id'], null)); - } else { - // use local cache file - - if(!@is_writable($smarty->cache_dir)) { - // cache_dir not writable, see if it exists - if(!@is_dir($smarty->cache_dir)) { - $smarty->trigger_error('the $cache_dir \'' . $smarty->cache_dir . '\' does not exist, or is not a directory.', E_USER_ERROR); - return false; - } - $smarty->trigger_error('unable to write to $cache_dir \'' . realpath($smarty->cache_dir) . '\'. Be sure $cache_dir is writable by the web server user.', E_USER_ERROR); - return false; - } - - $_auto_id = $smarty->_get_auto_id($params['cache_id'], $params['compile_id']); - $_cache_file = $smarty->_get_auto_filename($smarty->cache_dir, $params['tpl_file'], $_auto_id); - $_params = array('filename' => $_cache_file, 'contents' => $params['results'], 'create_dirs' => true); - require_once(SMARTY_CORE_DIR . 'core.write_file.php'); - smarty_core_write_file($_params, $smarty); - return true; - } -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/internals/core.write_compiled_include.php b/gui/bacula-web/external_packages/smarty/internals/core.write_compiled_include.php deleted file mode 100644 index 5e0b2e0dde..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.write_compiled_include.php +++ /dev/null @@ -1,91 +0,0 @@ -caching && \!\$this->_cache_including\) \{ echo \'\{nocache\:('.$params['cache_serial'].')#(\d+)\}\';\}'; - $_tag_end = 'if \(\$this->caching && \!\$this->_cache_including\) \{ echo \'\{/nocache\:(\\2)#(\\3)\}\';\}'; - - preg_match_all('!('.$_tag_start.'(.*)'.$_tag_end.')!Us', - $params['compiled_content'], $_match_source, PREG_SET_ORDER); - - // no nocache-parts found: done - if (count($_match_source)==0) return; - - // convert the matched php-code to functions - $_include_compiled = "_version.", created on ".strftime("%Y-%m-%d %H:%M:%S")."\n"; - $_include_compiled .= " compiled from " . strtr(urlencode($params['resource_name']), array('%2F'=>'/', '%3A'=>':')) . " */\n\n"; - - $_compile_path = $params['include_file_path']; - - $smarty->_cache_serials[$_compile_path] = $params['cache_serial']; - $_include_compiled .= "\$this->_cache_serials['".$_compile_path."'] = '".$params['cache_serial']."';\n\n?>"; - - $_include_compiled .= $params['plugins_code']; - $_include_compiled .= "= 5.0) ? '_smarty' : 'this'; - for ($_i = 0, $_for_max = count($_match_source); $_i < $_for_max; $_i++) { - $_match =& $_match_source[$_i]; - $source = $_match[4]; - if ($this_varname == '_smarty') { - /* rename $this to $_smarty in the sourcecode */ - $tokens = token_get_all('\n"; - - $_params = array('filename' => $_compile_path, - 'contents' => $_include_compiled, 'create_dirs' => true); - - require_once(SMARTY_CORE_DIR . 'core.write_file.php'); - smarty_core_write_file($_params, $smarty); - return true; -} - - -?> diff --git a/gui/bacula-web/external_packages/smarty/internals/core.write_compiled_resource.php b/gui/bacula-web/external_packages/smarty/internals/core.write_compiled_resource.php deleted file mode 100644 index b902eff3cb..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.write_compiled_resource.php +++ /dev/null @@ -1,35 +0,0 @@ -compile_dir)) { - // compile_dir not writable, see if it exists - if(!@is_dir($smarty->compile_dir)) { - $smarty->trigger_error('the $compile_dir \'' . $smarty->compile_dir . '\' does not exist, or is not a directory.', E_USER_ERROR); - return false; - } - $smarty->trigger_error('unable to write to $compile_dir \'' . realpath($smarty->compile_dir) . '\'. Be sure $compile_dir is writable by the web server user.', E_USER_ERROR); - return false; - } - - $_params = array('filename' => $params['compile_path'], 'contents' => $params['compiled_content'], 'create_dirs' => true); - require_once(SMARTY_CORE_DIR . 'core.write_file.php'); - smarty_core_write_file($_params, $smarty); - return true; -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/internals/core.write_file.php b/gui/bacula-web/external_packages/smarty/internals/core.write_file.php deleted file mode 100644 index 09e1698403..0000000000 --- a/gui/bacula-web/external_packages/smarty/internals/core.write_file.php +++ /dev/null @@ -1,54 +0,0 @@ - $_dirname); - require_once(SMARTY_CORE_DIR . 'core.create_dir_structure.php'); - smarty_core_create_dir_structure($_params, $smarty); - } - - // write to tmp file, then rename it to avoid - // file locking race condition - $_tmp_file = tempnam($_dirname, 'wrt'); - - if (!($fd = @fopen($_tmp_file, 'wb'))) { - $_tmp_file = $_dirname . DIRECTORY_SEPARATOR . uniqid('wrt'); - if (!($fd = @fopen($_tmp_file, 'wb'))) { - $smarty->trigger_error("problem writing temporary file '$_tmp_file'"); - return false; - } - } - - fwrite($fd, $params['contents']); - fclose($fd); - - // Delete the file if it allready exists (this is needed on Win, - // because it cannot overwrite files with rename() - if (file_exists($params['filename'])) { - @unlink($params['filename']); - } - @rename($_tmp_file, $params['filename']); - @chmod($params['filename'], $smarty->_file_perms); - - return true; -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/plugins/block.textformat.php b/gui/bacula-web/external_packages/smarty/plugins/block.textformat.php deleted file mode 100644 index aaebab2f51..0000000000 --- a/gui/bacula-web/external_packages/smarty/plugins/block.textformat.php +++ /dev/null @@ -1,102 +0,0 @@ - - * Name: textformat
    - * Purpose: format text a certain way with preset styles - * or custom wrap/indent settings
    - * @link http://smarty.php.net/manual/en/language.function.textformat.php {textformat} - * (Smarty online manual) - * @param array - *
    - * Params:   style: string (email)
    - *           indent: integer (0)
    - *           wrap: integer (80)
    - *           wrap_char string ("\n")
    - *           indent_char: string (" ")
    - *           wrap_boundary: boolean (true)
    - * 
    - * @param string contents of the block - * @param Smarty clever simulation of a method - * @return string string $content re-formatted - */ -function smarty_block_textformat($params, $content, &$smarty) -{ - if (is_null($content)) { - return; - } - - $style = null; - $indent = 0; - $indent_first = 0; - $indent_char = ' '; - $wrap = 80; - $wrap_char = "\n"; - $wrap_cut = false; - $assign = null; - - foreach ($params as $_key => $_val) { - switch ($_key) { - case 'style': - case 'indent_char': - case 'wrap_char': - case 'assign': - $$_key = (string)$_val; - break; - - case 'indent': - case 'indent_first': - case 'wrap': - $$_key = (int)$_val; - break; - - case 'wrap_cut': - $$_key = (bool)$_val; - break; - - default: - $smarty->trigger_error("textformat: unknown attribute '$_key'"); - } - } - - if ($style == 'email') { - $wrap = 72; - } - - // split into paragraphs - $_paragraphs = preg_split('![\r\n][\r\n]!',$content); - $_output = ''; - - for($_x = 0, $_y = count($_paragraphs); $_x < $_y; $_x++) { - if ($_paragraphs[$_x] == '') { - continue; - } - // convert mult. spaces & special chars to single space - $_paragraphs[$_x] = preg_replace(array('!\s+!','!(^\s+)|(\s+$)!'), array(' ',''), $_paragraphs[$_x]); - // indent first line - if($indent_first > 0) { - $_paragraphs[$_x] = str_repeat($indent_char, $indent_first) . $_paragraphs[$_x]; - } - // wordwrap sentences - $_paragraphs[$_x] = wordwrap($_paragraphs[$_x], $wrap - $indent, $wrap_char, $wrap_cut); - // indent lines - if($indent > 0) { - $_paragraphs[$_x] = preg_replace('!^!m', str_repeat($indent_char, $indent), $_paragraphs[$_x]); - } - } - $_output = implode($wrap_char . $wrap_char, $_paragraphs); - - return $assign ? $smarty->assign($assign, $_output) : $_output; - -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/plugins/compiler.assign.php b/gui/bacula-web/external_packages/smarty/plugins/compiler.assign.php deleted file mode 100644 index 2e02017796..0000000000 --- a/gui/bacula-web/external_packages/smarty/plugins/compiler.assign.php +++ /dev/null @@ -1,38 +0,0 @@ - - * Name: assign
    - * Purpose: assign a value to a template variable - * @link http://smarty.php.net/manual/en/language.custom.functions.php#LANGUAGE.FUNCTION.ASSIGN {assign} - * (Smarty online manual) - * @param string containing var-attribute and value-attribute - * @param Smarty_Compiler - */ -function smarty_compiler_assign($tag_attrs, &$compiler) -{ - $_params = $compiler->_parse_attrs($tag_attrs); - - if (!isset($_params['var'])) { - $compiler->_syntax_error("assign: missing 'var' parameter", E_USER_WARNING); - return; - } - - if (!isset($_params['value'])) { - $compiler->_syntax_error("assign: missing 'value' parameter", E_USER_WARNING); - return; - } - - return "\$this->assign({$_params['var']}, {$_params['value']});"; -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/plugins/function.assign_debug_info.php b/gui/bacula-web/external_packages/smarty/plugins/function.assign_debug_info.php deleted file mode 100644 index 8015624b1f..0000000000 --- a/gui/bacula-web/external_packages/smarty/plugins/function.assign_debug_info.php +++ /dev/null @@ -1,39 +0,0 @@ - - * Name: assign_debug_info
    - * Purpose: assign debug info to the template
    - * @param array unused in this plugin, this plugin uses {@link Smarty::$_config}, - * {@link Smarty::$_tpl_vars} and {@link Smarty::$_smarty_debug_info} - * @param Smarty - */ -function smarty_function_assign_debug_info($params, &$smarty) -{ - $assigned_vars = $smarty->_tpl_vars; - ksort($assigned_vars); - if (@is_array($smarty->_config[0])) { - $config_vars = $smarty->_config[0]; - ksort($config_vars); - $smarty->assign("_debug_config_keys", array_keys($config_vars)); - $smarty->assign("_debug_config_vals", array_values($config_vars)); - } - - $included_templates = $smarty->_smarty_debug_info; - - $smarty->assign("_debug_keys", array_keys($assigned_vars)); - $smarty->assign("_debug_vals", array_values($assigned_vars)); - - $smarty->assign("_debug_tpls", $included_templates); -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/plugins/function.config_load.php b/gui/bacula-web/external_packages/smarty/plugins/function.config_load.php deleted file mode 100644 index db7f8f6b9b..0000000000 --- a/gui/bacula-web/external_packages/smarty/plugins/function.config_load.php +++ /dev/null @@ -1,140 +0,0 @@ - - * Name: config_load
    - * Purpose: load config file vars - * @link http://smarty.php.net/manual/en/language.function.config.load.php {config_load} - * (Smarty online manual) - * @param array Format: - *
    - * array('file' => required config file name,
    - *       'section' => optional config file section to load
    - *       'scope' => local/parent/global
    - *       'global' => overrides scope, setting to parent if true)
    - * 
    - * @param Smarty - */ -function smarty_function_config_load($params, &$smarty) -{ - if ($smarty->debugging) { - $_params = array(); - require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); - $_debug_start_time = smarty_core_get_microtime($_params, $smarty); - } - - $_file = isset($params['file']) ? $smarty->_dequote($params['file']) : null; - $_section = isset($params['section']) ? $smarty->_dequote($params['section']) : null; - $_scope = isset($params['scope']) ? $smarty->_dequote($params['scope']) : 'global'; - $_global = isset($params['global']) ? $smarty->_dequote($params['global']) : false; - - if (!isset($_file) || strlen($_file) == 0) { - $smarty->trigger_error("missing 'file' attribute in config_load tag", E_USER_ERROR, __FILE__, __LINE__); - } - - if (isset($_scope)) { - if ($_scope != 'local' && - $_scope != 'parent' && - $_scope != 'global') { - $smarty->trigger_error("invalid 'scope' attribute value", E_USER_ERROR, __FILE__, __LINE__); - } - } else { - if ($_global) { - $_scope = 'parent'; - } else { - $_scope = 'local'; - } - } - - $_params = array('resource_name' => $_file, - 'resource_base_path' => $smarty->config_dir, - 'get_source' => false); - $smarty->_parse_resource_name($_params); - $_file_path = $_params['resource_type'] . ':' . $_params['resource_name']; - if (isset($_section)) - $_compile_file = $smarty->_get_compile_path($_file_path.'|'.$_section); - else - $_compile_file = $smarty->_get_compile_path($_file_path); - - if($smarty->force_compile || !file_exists($_compile_file)) { - $_compile = true; - } elseif ($smarty->compile_check) { - $_params = array('resource_name' => $_file, - 'resource_base_path' => $smarty->config_dir, - 'get_source' => false); - $_compile = $smarty->_fetch_resource_info($_params) && - $_params['resource_timestamp'] > filemtime($_compile_file); - } else { - $_compile = false; - } - - if($_compile) { - // compile config file - if(!is_object($smarty->_conf_obj)) { - require_once SMARTY_DIR . $smarty->config_class . '.class.php'; - $smarty->_conf_obj = new $smarty->config_class(); - $smarty->_conf_obj->overwrite = $smarty->config_overwrite; - $smarty->_conf_obj->booleanize = $smarty->config_booleanize; - $smarty->_conf_obj->read_hidden = $smarty->config_read_hidden; - $smarty->_conf_obj->fix_newlines = $smarty->config_fix_newlines; - } - - $_params = array('resource_name' => $_file, - 'resource_base_path' => $smarty->config_dir, - $_params['get_source'] = true); - if (!$smarty->_fetch_resource_info($_params)) { - return; - } - $smarty->_conf_obj->set_file_contents($_file, $_params['source_content']); - $_config_vars = array_merge($smarty->_conf_obj->get($_file), - $smarty->_conf_obj->get($_file, $_section)); - if(function_exists('var_export')) { - $_output = ''; - } else { - $_output = ''\\\'', '\\'=>'\\\\')) . '\'); ?>'; - } - $_params = (array('compile_path' => $_compile_file, 'compiled_content' => $_output, 'resource_timestamp' => $_params['resource_timestamp'])); - require_once(SMARTY_CORE_DIR . 'core.write_compiled_resource.php'); - smarty_core_write_compiled_resource($_params, $smarty); - } else { - include($_compile_file); - } - - if ($smarty->caching) { - $smarty->_cache_info['config'][$_file] = true; - } - - $smarty->_config[0]['vars'] = @array_merge($smarty->_config[0]['vars'], $_config_vars); - $smarty->_config[0]['files'][$_file] = true; - - if ($_scope == 'parent') { - $smarty->_config[1]['vars'] = @array_merge($smarty->_config[1]['vars'], $_config_vars); - $smarty->_config[1]['files'][$_file] = true; - } else if ($_scope == 'global') { - for ($i = 1, $for_max = count($smarty->_config); $i < $for_max; $i++) { - $smarty->_config[$i]['vars'] = @array_merge($smarty->_config[$i]['vars'], $_config_vars); - $smarty->_config[$i]['files'][$_file] = true; - } - } - - if ($smarty->debugging) { - $_params = array(); - require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); - $smarty->_smarty_debug_info[] = array('type' => 'config', - 'filename' => $_file.' ['.$_section.'] '.$_scope, - 'depth' => $smarty->_inclusion_depth, - 'exec_time' => smarty_core_get_microtime($_params, $smarty) - $_debug_start_time); - } - -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/plugins/function.counter.php b/gui/bacula-web/external_packages/smarty/plugins/function.counter.php deleted file mode 100644 index cfe5dd886f..0000000000 --- a/gui/bacula-web/external_packages/smarty/plugins/function.counter.php +++ /dev/null @@ -1,79 +0,0 @@ - - * Name: counter
    - * Purpose: print out a counter value - * @link http://smarty.php.net/manual/en/language.function.counter.php {counter} - * (Smarty online manual) - * @param array parameters - * @param Smarty - * @return string|null - */ -function smarty_function_counter($params, &$smarty) -{ - static $counters = array(); - - $name = (isset($params['name'])) ? $params['name'] : 'default'; - if (!isset($counters[$name])) { - $counters[$name] = array( - 'start'=>1, - 'skip'=>1, - 'direction'=>'up', - 'count'=>1 - ); - } - $counter =& $counters[$name]; - - if (isset($params['start'])) { - $counter['start'] = $counter['count'] = (int)$params['start']; - } - - if (!empty($params['assign'])) { - $counter['assign'] = $params['assign']; - } - - if (isset($counter['assign'])) { - $smarty->assign($counter['assign'], $counter['count']); - } - - if (isset($params['print'])) { - $print = (bool)$params['print']; - } else { - $print = empty($counter['assign']); - } - - if ($print) { - $retval = $counter['count']; - } else { - $retval = null; - } - - if (isset($params['skip'])) { - $counter['skip'] = $params['skip']; - } - - if (isset($params['direction'])) { - $counter['direction'] = $params['direction']; - } - - if ($counter['direction'] == "down") - $counter['count'] -= $counter['skip']; - else - $counter['count'] += $counter['skip']; - - return $retval; - -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/plugins/function.cycle.php b/gui/bacula-web/external_packages/smarty/plugins/function.cycle.php deleted file mode 100644 index fe78bb87da..0000000000 --- a/gui/bacula-web/external_packages/smarty/plugins/function.cycle.php +++ /dev/null @@ -1,102 +0,0 @@ - - * Name: cycle
    - * Date: May 3, 2002
    - * Purpose: cycle through given values
    - * Input: - * - name = name of cycle (optional) - * - values = comma separated list of values to cycle, - * or an array of values to cycle - * (this can be left out for subsequent calls) - * - reset = boolean - resets given var to true - * - print = boolean - print var or not. default is true - * - advance = boolean - whether or not to advance the cycle - * - delimiter = the value delimiter, default is "," - * - assign = boolean, assigns to template var instead of - * printed. - * - * Examples:
    - *
    - * {cycle values="#eeeeee,#d0d0d0d"}
    - * {cycle name=row values="one,two,three" reset=true}
    - * {cycle name=row}
    - * 
    - * @link http://smarty.php.net/manual/en/language.function.cycle.php {cycle} - * (Smarty online manual) - * @author Monte Ohrt - * @author credit to Mark Priatel - * @author credit to Gerard - * @author credit to Jason Sweat - * @version 1.3 - * @param array - * @param Smarty - * @return string|null - */ -function smarty_function_cycle($params, &$smarty) -{ - static $cycle_vars; - - $name = (empty($params['name'])) ? 'default' : $params['name']; - $print = (isset($params['print'])) ? (bool)$params['print'] : true; - $advance = (isset($params['advance'])) ? (bool)$params['advance'] : true; - $reset = (isset($params['reset'])) ? (bool)$params['reset'] : false; - - if (!in_array('values', array_keys($params))) { - if(!isset($cycle_vars[$name]['values'])) { - $smarty->trigger_error("cycle: missing 'values' parameter"); - return; - } - } else { - if(isset($cycle_vars[$name]['values']) - && $cycle_vars[$name]['values'] != $params['values'] ) { - $cycle_vars[$name]['index'] = 0; - } - $cycle_vars[$name]['values'] = $params['values']; - } - - $cycle_vars[$name]['delimiter'] = (isset($params['delimiter'])) ? $params['delimiter'] : ','; - - if(is_array($cycle_vars[$name]['values'])) { - $cycle_array = $cycle_vars[$name]['values']; - } else { - $cycle_array = explode($cycle_vars[$name]['delimiter'],$cycle_vars[$name]['values']); - } - - if(!isset($cycle_vars[$name]['index']) || $reset ) { - $cycle_vars[$name]['index'] = 0; - } - - if (isset($params['assign'])) { - $print = false; - $smarty->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]); - } - - if($print) { - $retval = $cycle_array[$cycle_vars[$name]['index']]; - } else { - $retval = null; - } - - if($advance) { - if ( $cycle_vars[$name]['index'] >= count($cycle_array) -1 ) { - $cycle_vars[$name]['index'] = 0; - } else { - $cycle_vars[$name]['index']++; - } - } - - return $retval; -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/plugins/function.debug.php b/gui/bacula-web/external_packages/smarty/plugins/function.debug.php deleted file mode 100644 index 43452307bc..0000000000 --- a/gui/bacula-web/external_packages/smarty/plugins/function.debug.php +++ /dev/null @@ -1,35 +0,0 @@ - - * Name: debug
    - * Date: July 1, 2002
    - * Purpose: popup debug window - * @link http://smarty.php.net/manual/en/language.function.debug.php {debug} - * (Smarty online manual) - * @author Monte Ohrt - * @version 1.0 - * @param array - * @param Smarty - * @return string output from {@link Smarty::_generate_debug_output()} - */ -function smarty_function_debug($params, &$smarty) -{ - if (isset($params['output'])) { - $smarty->assign('_smarty_debug_output', $params['output']); - } - require_once(SMARTY_CORE_DIR . 'core.display_debug_console.php'); - return smarty_core_display_debug_console(null, $smarty); -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/plugins/function.eval.php b/gui/bacula-web/external_packages/smarty/plugins/function.eval.php deleted file mode 100644 index 3a4b8b2b8c..0000000000 --- a/gui/bacula-web/external_packages/smarty/plugins/function.eval.php +++ /dev/null @@ -1,48 +0,0 @@ - - * Name: eval
    - * Purpose: evaluate a template variable as a template
    - * @link http://smarty.php.net/manual/en/language.function.eval.php {eval} - * (Smarty online manual) - * @param array - * @param Smarty - */ -function smarty_function_eval($params, &$smarty) -{ - - if (!isset($params['var'])) { - $smarty->trigger_error("eval: missing 'var' parameter"); - return; - } - - if($params['var'] == '') { - return; - } - - $smarty->_compile_source('evaluated template', $params['var'], $_var_compiled); - - ob_start(); - $smarty->_eval('?>' . $_var_compiled); - $_contents = ob_get_contents(); - ob_end_clean(); - - if (!empty($params['assign'])) { - $smarty->assign($params['assign'], $_contents); - } else { - return $_contents; - } -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/plugins/function.fetch.php b/gui/bacula-web/external_packages/smarty/plugins/function.fetch.php deleted file mode 100644 index f5a6987a90..0000000000 --- a/gui/bacula-web/external_packages/smarty/plugins/function.fetch.php +++ /dev/null @@ -1,220 +0,0 @@ - - * Name: fetch
    - * Purpose: fetch file, web or ftp data and display results - * @link http://smarty.php.net/manual/en/language.function.fetch.php {fetch} - * (Smarty online manual) - * @param array - * @param Smarty - * @return string|null if the assign parameter is passed, Smarty assigns the - * result to a template variable - */ -function smarty_function_fetch($params, &$smarty) -{ - if (empty($params['file'])) { - $smarty->_trigger_fatal_error("[plugin] parameter 'file' cannot be empty"); - return; - } - - $content = ''; - if ($smarty->security && !preg_match('!^(http|ftp)://!i', $params['file'])) { - $_params = array('resource_type' => 'file', 'resource_name' => $params['file']); - require_once(SMARTY_CORE_DIR . 'core.is_secure.php'); - if(!smarty_core_is_secure($_params, $smarty)) { - $smarty->_trigger_fatal_error('[plugin] (secure mode) fetch \'' . $params['file'] . '\' is not allowed'); - return; - } - - // fetch the file - if($fp = @fopen($params['file'],'r')) { - while(!feof($fp)) { - $content .= fgets ($fp,4096); - } - fclose($fp); - } else { - $smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] . '\''); - return; - } - } else { - // not a local file - if(preg_match('!^http://!i',$params['file'])) { - // http fetch - if($uri_parts = parse_url($params['file'])) { - // set defaults - $host = $server_name = $uri_parts['host']; - $timeout = 30; - $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; - $agent = "Smarty Template Engine ".$smarty->_version; - $referer = ""; - $uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/'; - $uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : ''; - $_is_proxy = false; - if(empty($uri_parts['port'])) { - $port = 80; - } else { - $port = $uri_parts['port']; - } - if(!empty($uri_parts['user'])) { - $user = $uri_parts['user']; - } - if(!empty($uri_parts['pass'])) { - $pass = $uri_parts['pass']; - } - // loop through parameters, setup headers - foreach($params as $param_key => $param_value) { - switch($param_key) { - case "file": - case "assign": - case "assign_headers": - break; - case "user": - if(!empty($param_value)) { - $user = $param_value; - } - break; - case "pass": - if(!empty($param_value)) { - $pass = $param_value; - } - break; - case "accept": - if(!empty($param_value)) { - $accept = $param_value; - } - break; - case "header": - if(!empty($param_value)) { - if(!preg_match('![\w\d-]+: .+!',$param_value)) { - $smarty->_trigger_fatal_error("[plugin] invalid header format '".$param_value."'"); - return; - } else { - $extra_headers[] = $param_value; - } - } - break; - case "proxy_host": - if(!empty($param_value)) { - $proxy_host = $param_value; - } - break; - case "proxy_port": - if(!preg_match('!\D!', $param_value)) { - $proxy_port = (int) $param_value; - } else { - $smarty->_trigger_fatal_error("[plugin] invalid value for attribute '".$param_key."'"); - return; - } - break; - case "agent": - if(!empty($param_value)) { - $agent = $param_value; - } - break; - case "referer": - if(!empty($param_value)) { - $referer = $param_value; - } - break; - case "timeout": - if(!preg_match('!\D!', $param_value)) { - $timeout = (int) $param_value; - } else { - $smarty->_trigger_fatal_error("[plugin] invalid value for attribute '".$param_key."'"); - return; - } - break; - default: - $smarty->_trigger_fatal_error("[plugin] unrecognized attribute '".$param_key."'"); - return; - } - } - if(!empty($proxy_host) && !empty($proxy_port)) { - $_is_proxy = true; - $fp = fsockopen($proxy_host,$proxy_port,$errno,$errstr,$timeout); - } else { - $fp = fsockopen($server_name,$port,$errno,$errstr,$timeout); - } - - if(!$fp) { - $smarty->_trigger_fatal_error("[plugin] unable to fetch: $errstr ($errno)"); - return; - } else { - if($_is_proxy) { - fputs($fp, 'GET ' . $params['file'] . " HTTP/1.0\r\n"); - } else { - fputs($fp, "GET $uri HTTP/1.0\r\n"); - } - if(!empty($host)) { - fputs($fp, "Host: $host\r\n"); - } - if(!empty($accept)) { - fputs($fp, "Accept: $accept\r\n"); - } - if(!empty($agent)) { - fputs($fp, "User-Agent: $agent\r\n"); - } - if(!empty($referer)) { - fputs($fp, "Referer: $referer\r\n"); - } - if(isset($extra_headers) && is_array($extra_headers)) { - foreach($extra_headers as $curr_header) { - fputs($fp, $curr_header."\r\n"); - } - } - if(!empty($user) && !empty($pass)) { - fputs($fp, "Authorization: BASIC ".base64_encode("$user:$pass")."\r\n"); - } - - fputs($fp, "\r\n"); - while(!feof($fp)) { - $content .= fgets($fp,4096); - } - fclose($fp); - $csplit = split("\r\n\r\n",$content,2); - - $content = $csplit[1]; - - if(!empty($params['assign_headers'])) { - $smarty->assign($params['assign_headers'],split("\r\n",$csplit[0])); - } - } - } else { - $smarty->_trigger_fatal_error("[plugin] unable to parse URL, check syntax"); - return; - } - } else { - // ftp fetch - if($fp = @fopen($params['file'],'r')) { - while(!feof($fp)) { - $content .= fgets ($fp,4096); - } - fclose($fp); - } else { - $smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] .'\''); - return; - } - } - - } - - - if (!empty($params['assign'])) { - $smarty->assign($params['assign'],$content); - } else { - return $content; - } -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/plugins/function.html_checkboxes.php b/gui/bacula-web/external_packages/smarty/plugins/function.html_checkboxes.php deleted file mode 100644 index ed8ad7f33d..0000000000 --- a/gui/bacula-web/external_packages/smarty/plugins/function.html_checkboxes.php +++ /dev/null @@ -1,143 +0,0 @@ - - * Type: function
    - * Name: html_checkboxes
    - * Date: 24.Feb.2003
    - * Purpose: Prints out a list of checkbox input types
    - * Input:
    - * - name (optional) - string default "checkbox" - * - values (required) - array - * - options (optional) - associative array - * - checked (optional) - array default not set - * - separator (optional) - ie
    or   - * - output (optional) - the output next to each checkbox - * - assign (optional) - assign the output as an array to this variable - * Examples: - *
    - * {html_checkboxes values=$ids output=$names}
    - * {html_checkboxes values=$ids name='box' separator='
    ' output=$names} - * {html_checkboxes values=$ids checked=$checked separator='
    ' output=$names} - *
    - * @link http://smarty.php.net/manual/en/language.function.html.checkboxes.php {html_checkboxes} - * (Smarty online manual) - * @author Christopher Kvarme - * @author credits to Monte Ohrt - * @version 1.0 - * @param array - * @param Smarty - * @return string - * @uses smarty_function_escape_special_chars() - */ -function smarty_function_html_checkboxes($params, &$smarty) -{ - require_once $smarty->_get_plugin_filepath('shared','escape_special_chars'); - - $name = 'checkbox'; - $values = null; - $options = null; - $selected = null; - $separator = ''; - $labels = true; - $output = null; - - $extra = ''; - - foreach($params as $_key => $_val) { - switch($_key) { - case 'name': - case 'separator': - $$_key = $_val; - break; - - case 'labels': - $$_key = (bool)$_val; - break; - - case 'options': - $$_key = (array)$_val; - break; - - case 'values': - case 'output': - $$_key = array_values((array)$_val); - break; - - case 'checked': - case 'selected': - $selected = array_map('strval', array_values((array)$_val)); - break; - - case 'checkboxes': - $smarty->trigger_error('html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead', E_USER_WARNING); - $options = (array)$_val; - break; - - case 'assign': - break; - - default: - if(!is_array($_val)) { - $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"'; - } else { - $smarty->trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE); - } - break; - } - } - - if (!isset($options) && !isset($values)) - return ''; /* raise error here? */ - - settype($selected, 'array'); - $_html_result = array(); - - if (isset($options)) { - - foreach ($options as $_key=>$_val) - $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels); - - - } else { - foreach ($values as $_i=>$_key) { - $_val = isset($output[$_i]) ? $output[$_i] : ''; - $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels); - } - - } - - if(!empty($params['assign'])) { - $smarty->assign($params['assign'], $_html_result); - } else { - return implode("\n",$_html_result); - } - -} - -function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels) { - $_output = ''; - if ($labels) $_output .= ''; - $_output .= $separator; - - return $_output; -} - -?> diff --git a/gui/bacula-web/external_packages/smarty/plugins/function.html_image.php b/gui/bacula-web/external_packages/smarty/plugins/function.html_image.php deleted file mode 100644 index c62b0fea69..0000000000 --- a/gui/bacula-web/external_packages/smarty/plugins/function.html_image.php +++ /dev/null @@ -1,139 +0,0 @@ - - * Name: html_image
    - * Date: Feb 24, 2003
    - * Purpose: format HTML tags for the image
    - * Input:
    - * - file = file (and path) of image (required) - * - height = image height (optional, default actual height) - * - width = image width (optional, default actual width) - * - basedir = base directory for absolute paths, default - * is environment variable DOCUMENT_ROOT - * - * Examples: {html_image file="images/masthead.gif"} - * Output: - * @link http://smarty.php.net/manual/en/language.function.html.image.php {html_image} - * (Smarty online manual) - * @author Monte Ohrt - * @author credits to Duda - wrote first image function - * in repository, helped with lots of functionality - * @version 1.0 - * @param array - * @param Smarty - * @return string - * @uses smarty_function_escape_special_chars() - */ -function smarty_function_html_image($params, &$smarty) -{ - require_once $smarty->_get_plugin_filepath('shared','escape_special_chars'); - - $alt = ''; - $file = ''; - $height = ''; - $width = ''; - $extra = ''; - $prefix = ''; - $suffix = ''; - $server_vars = ($smarty->request_use_auto_globals) ? $_SERVER : $GLOBALS['HTTP_SERVER_VARS']; - $basedir = isset($server_vars['DOCUMENT_ROOT']) ? $server_vars['DOCUMENT_ROOT'] : ''; - foreach($params as $_key => $_val) { - switch($_key) { - case 'file': - case 'height': - case 'width': - case 'dpi': - case 'basedir': - $$_key = $_val; - break; - - case 'alt': - if(!is_array($_val)) { - $$_key = smarty_function_escape_special_chars($_val); - } else { - $smarty->trigger_error("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE); - } - break; - - case 'link': - case 'href': - $prefix = ''; - $suffix = ''; - break; - - default: - if(!is_array($_val)) { - $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"'; - } else { - $smarty->trigger_error("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE); - } - break; - } - } - - if (empty($file)) { - $smarty->trigger_error("html_image: missing 'file' parameter", E_USER_NOTICE); - return; - } - - if (substr($file,0,1) == '/') { - $_image_path = $basedir . $file; - } else { - $_image_path = $file; - } - - if(!isset($params['width']) || !isset($params['height'])) { - if ($smarty->security && - ($_params = array('resource_type' => 'file', 'resource_name' => $_image_path)) && - (require_once(SMARTY_CORE_DIR . 'core.is_secure.php')) && - (!smarty_core_is_secure($_params, $smarty)) ) { - $smarty->trigger_error("html_image: (secure) '$_image_path' not in secure directory", E_USER_NOTICE); - - } elseif (!$_image_data = @getimagesize($_image_path)) { - if(!file_exists($_image_path)) { - $smarty->trigger_error("html_image: unable to find '$_image_path'", E_USER_NOTICE); - return; - } else if(!is_readable($_image_path)) { - $smarty->trigger_error("html_image: unable to read '$_image_path'", E_USER_NOTICE); - return; - } else { - $smarty->trigger_error("html_image: '$_image_path' is not a valid image file", E_USER_NOTICE); - return; - } - } - - if(!isset($params['width'])) { - $width = $_image_data[0]; - } - if(!isset($params['height'])) { - $height = $_image_data[1]; - } - - } - - if(isset($params['dpi'])) { - if(strstr($server_vars['HTTP_USER_AGENT'], 'Mac')) { - $dpi_default = 72; - } else { - $dpi_default = 96; - } - $_resize = $dpi_default/$params['dpi']; - $width = round($width * $_resize); - $height = round($height * $_resize); - } - - return $prefix . ''.$alt.'' . $suffix; -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/plugins/function.html_options.php b/gui/bacula-web/external_packages/smarty/plugins/function.html_options.php deleted file mode 100644 index ae864f7327..0000000000 --- a/gui/bacula-web/external_packages/smarty/plugins/function.html_options.php +++ /dev/null @@ -1,121 +0,0 @@ - - * Name: html_options
    - * Input:
    - * - name (optional) - string default "select" - * - values (required if no options supplied) - array - * - options (required if no values supplied) - associative array - * - selected (optional) - string default not set - * - output (required if not options supplied) - array - * Purpose: Prints the list of ' . "\n"; - foreach ($values as $key => $value) { - $optgroup_html .= smarty_function_html_options_optoutput($key, $value, $selected); - } - $optgroup_html .= "\n"; - return $optgroup_html; -} - -/* vim: set expandtab: */ - -?> diff --git a/gui/bacula-web/external_packages/smarty/plugins/function.html_radios.php b/gui/bacula-web/external_packages/smarty/plugins/function.html_radios.php deleted file mode 100644 index 7503cfaca8..0000000000 --- a/gui/bacula-web/external_packages/smarty/plugins/function.html_radios.php +++ /dev/null @@ -1,156 +0,0 @@ - - * Type: function
    - * Name: html_radios
    - * Date: 24.Feb.2003
    - * Purpose: Prints out a list of radio input types
    - * Input:
    - * - name (optional) - string default "radio" - * - values (required) - array - * - options (optional) - associative array - * - checked (optional) - array default not set - * - separator (optional) - ie
    or   - * - output (optional) - the output next to each radio button - * - assign (optional) - assign the output as an array to this variable - * Examples: - *
    - * {html_radios values=$ids output=$names}
    - * {html_radios values=$ids name='box' separator='
    ' output=$names} - * {html_radios values=$ids checked=$checked separator='
    ' output=$names} - *
    - * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios} - * (Smarty online manual) - * @author Christopher Kvarme - * @author credits to Monte Ohrt - * @version 1.0 - * @param array - * @param Smarty - * @return string - * @uses smarty_function_escape_special_chars() - */ -function smarty_function_html_radios($params, &$smarty) -{ - require_once $smarty->_get_plugin_filepath('shared','escape_special_chars'); - - $name = 'radio'; - $values = null; - $options = null; - $selected = null; - $separator = ''; - $labels = true; - $label_ids = false; - $output = null; - $extra = ''; - - foreach($params as $_key => $_val) { - switch($_key) { - case 'name': - case 'separator': - $$_key = (string)$_val; - break; - - case 'checked': - case 'selected': - if(is_array($_val)) { - $smarty->trigger_error('html_radios: the "' . $_key . '" attribute cannot be an array', E_USER_WARNING); - } else { - $selected = (string)$_val; - } - break; - - case 'labels': - case 'label_ids': - $$_key = (bool)$_val; - break; - - case 'options': - $$_key = (array)$_val; - break; - - case 'values': - case 'output': - $$_key = array_values((array)$_val); - break; - - case 'radios': - $smarty->trigger_error('html_radios: the use of the "radios" attribute is deprecated, use "options" instead', E_USER_WARNING); - $options = (array)$_val; - break; - - case 'assign': - break; - - default: - if(!is_array($_val)) { - $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"'; - } else { - $smarty->trigger_error("html_radios: extra attribute '$_key' cannot be an array", E_USER_NOTICE); - } - break; - } - } - - if (!isset($options) && !isset($values)) - return ''; /* raise error here? */ - - $_html_result = array(); - - if (isset($options)) { - - foreach ($options as $_key=>$_val) - $_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids); - - } else { - - foreach ($values as $_i=>$_key) { - $_val = isset($output[$_i]) ? $output[$_i] : ''; - $_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids); - } - - } - - if(!empty($params['assign'])) { - $smarty->assign($params['assign'], $_html_result); - } else { - return implode("\n",$_html_result); - } - -} - -function smarty_function_html_radios_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids) { - $_output = ''; - if ($labels) { - if($label_ids) { - $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!', '_', $name . '_' . $value)); - $_output .= '