X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fqt-console%2Fmain.cpp;h=9c315903edc061edf55f2339058afaa05a6f1075;hb=afd4ac31e0f65357c5264c04b804e86b2095a304;hp=ca50409f9bad5b47795bae32b35cb172b8658ed1;hpb=c99a0ee682e13b1d16403bbe8f46fe10ab2afb71;p=bacula%2Fbacula diff --git a/bacula/src/qt-console/main.cpp b/bacula/src/qt-console/main.cpp index ca50409f9b..9c315903ed 100644 --- a/bacula/src/qt-console/main.cpp +++ b/bacula/src/qt-console/main.cpp @@ -1,14 +1,14 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007 Free Software Foundation Europe e.V. + Copyright (C) 2007-2009 Free Software Foundation Europe e.V. The main author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. This program is Free Software; you can redistribute it and/or modify it under the terms of version two of the GNU General Public - License as published by the Free Software Foundation plus additions - that are listed in the file LICENSE. + License as published by the Free Software Foundation and included + in the file LICENSE. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -20,27 +20,236 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - Bacula® is a registered trademark of John Walker. + Bacula® is a registered trademark of Kern Sibbald. The licensor of Bacula is the Free Software Foundation Europe (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, Switzerland, email:ftf@fsfeurope.org. */ +/* + * Version $Id$ + * + * Main program for bat (qt-console) + * + * Kern Sibbald, January MMVII + * + */ + + +#include "bat.h" +#include +#include +MainWin *mainWin; +QApplication *app; +/* Forward referenced functions */ +void terminate_console(int sig); +static void usage(); +static int check_resources(); -#include "ui_main.h" -#include +extern bool parse_bat_config(CONFIG *config, const char *configfile, int exit_code); + +#define CONFIG_FILE "./bat.conf" /* default configuration file */ + +/* Static variables */ +static CONFIG *config; +static char *configfile = NULL; int main(int argc, char *argv[]) { - QApplication app(argc, argv); - app.setQuitOnLastWindowClosed(true); + int ch; + bool no_signals = true; + bool test_config = false; + + + app = new QApplication(argc, argv); + app->setQuitOnLastWindowClosed(true); + QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); + + QTranslator qtTranslator; + qtTranslator.load(QString("qt_") + QLocale::system().name()); + app->installTranslator(&qtTranslator); + + QTranslator batTranslator; + batTranslator.load(QString("bat_") + QLocale::system().name()); + app->installTranslator(&batTranslator); + + + +#ifdef xENABLE_NLS + setlocale(LC_ALL, ""); + bindtextdomain("bacula", LOCALEDIR); + textdomain("bacula"); +#endif + + init_stack_dump(); + my_name_is(argc, argv, "bat"); + init_msg(NULL, NULL); + working_directory = "/tmp"; + + struct sigaction sigignore; + sigignore.sa_flags = 0; + sigignore.sa_handler = SIG_IGN; + sigfillset(&sigignore.sa_mask); + sigaction(SIGPIPE, &sigignore, NULL); + sigaction(SIGUSR2, &sigignore, NULL); + + + while ((ch = getopt(argc, argv, "bc:d:r:st?")) != -1) { + switch (ch) { + case 'c': /* configuration file */ + if (configfile != NULL) { + free(configfile); + } + configfile = bstrdup(optarg); + break; + + case 'd': + debug_level = atoi(optarg); + if (debug_level <= 0) + debug_level = 1; + break; + + case 's': /* turn off signals */ + no_signals = true; + break; + + case 't': + test_config = true; + break; + + case '?': + default: + usage(); + } + } + argc -= optind; + argv += optind; + + + if (!no_signals) { + init_signals(terminate_console); + } + + if (argc) { + usage(); + } + + OSDependentInit(); +#ifdef HAVE_WIN32 + WSA_Init(); /* Initialize Windows sockets */ +#endif + + if (configfile == NULL) { + configfile = bstrdup(CONFIG_FILE); + } + + config = new_config_parser(); + parse_bat_config(config, configfile, M_ERROR_TERM); + + if (init_crypto() != 0) { + Emsg0(M_ERROR_TERM, 0, _("Cryptography library initialization failed.\n")); + } + + if (!check_resources()) { + Emsg1(M_ERROR_TERM, 0, _("Please correct configuration file: %s\n"), configfile); + } + + mainWin = new MainWin; + mainWin->show(); + + return app->exec(); +} + +void terminate_console(int /*sig*/) +{ +// WSA_Cleanup(); /* TODO: check when we have to call it */ + exit(0); +} + +static void usage() +{ + fprintf(stderr, _( +PROG_COPYRIGHT +"\nVersion: %s (%s) %s %s %s\n\n" +"Usage: bat [-s] [-c config_file] [-d debug_level] [config_file]\n" +" -c set configuration file to file\n" +" -dnn set debug level to nn\n" +" -s no signals\n" +" -t test - read configuration and exit\n" +" -? print this message.\n" +"\n"), 2007, VERSION, BDATE, HOST_OS, DISTNAME, DISTVER); + + exit(1); +} + +/* + * Make a quick check to see that we have all the + * resources needed. + */ +static int check_resources() +{ + bool ok = true; + DIRRES *director; + int numdir; + bool tls_needed; + + LockRes(); + + numdir = 0; + foreach_res(director, R_DIRECTOR) { + numdir++; + /* tls_require implies tls_enable */ + if (director->tls_require) { + if (have_tls) { + director->tls_enable = true; + } else { + Jmsg(NULL, M_FATAL, 0, _("TLS required but not configured in Bacula.\n")); + ok = false; + continue; + } + } + tls_needed = director->tls_enable || director->tls_authenticate; + + if ((!director->tls_ca_certfile && !director->tls_ca_certdir) && tls_needed) { + Emsg2(M_FATAL, 0, _("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"), + director->hdr.name, configfile); + ok = false; + } + } - QMainWindow *main = new QMainWindow; - Ui::MainWindow ui; - ui.setupUi(main); + if (numdir == 0) { + Emsg1(M_FATAL, 0, _("No Director resource defined in %s\n" + "Without that I don't how to speak to the Director :-(\n"), configfile); + ok = false; + } + + CONRES *cons; + /* Loop over Consoles */ + foreach_res(cons, R_CONSOLE) { + /* tls_require implies tls_enable */ + if (cons->tls_require) { + if (have_tls) { + cons->tls_enable = true; + } else { + Jmsg(NULL, M_FATAL, 0, _("TLS required but not configured in Bacula.\n")); + ok = false; + continue; + } + } + tls_needed = cons->tls_enable || cons->tls_authenticate; + + if ((!cons->tls_ca_certfile && !cons->tls_ca_certdir) && tls_needed) { + Emsg2(M_FATAL, 0, _("Neither \"TLS CA Certificate\"" + " or \"TLS CA Certificate Dir\" are defined for Console \"%s\" in %s.\n"), + cons->hdr.name, configfile); + ok = false; + } + } + + UnlockRes(); - ui.textEdit->setPlainText("Hello Baculites\nThis is the main console window."); - main->show(); - return app.exec(); + return ok; }