/*
Bacula® - The Network Backup Solution
- Copyright (C) 2007 Free Software Foundation Europe e.V.
+ Copyright (C) 2007-2012 Free Software Foundation Europe e.V.
The main author of Bacula is Kern Sibbald, with contributions from
many others, a complete list can be found in the file AUTHORS.
This program is Free Software; you can redistribute it and/or
- modify it under the terms of version two of the GNU General Public
- License as published by the Free Software Foundation plus additions
- that are listed in the file LICENSE.
+ modify it under the terms of version three of the GNU Affero General Public
+ License as published by the Free Software Foundation and included
+ in the file LICENSE.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Affero General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- Bacula® is a registered trademark of 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.
*/
-
/*
* Main program for bat (qt-console)
*
- * Kern Sibbald, January MMVI
+ * Kern Sibbald, January MMVII
*
*/
-#include <QApplication>
#include "bat.h"
+#include <QApplication>
+#include <QTranslator>
+/*
+ * We need Qt version 4.7.4 or later to be able to comple correctly
+ */
+#if QT_VERSION < 0x040602
+#error "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+#error "You need Qt version 4.7.4 or later to build Bat"
+#error "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+#endif
-/* Imported functions */
-int authenticate_director(JCR *jcr, DIRRES *director, CONRES *cons);
+MainWin *mainWin;
+QApplication *app;
/* Forward referenced functions */
void terminate_console(int sig);
static void usage();
static int check_resources();
-#define CONFIG_FILE "./bat.conf" /* default configuration file */
+extern bool parse_bat_config(CONFIG *config, const char *configfile, int exit_code);
+extern void message_callback(int /* type */, char *msg);
+
+
+#define CONFIG_FILE "bat.conf" /* default configuration file */
/* Static variables */
+static CONFIG *config;
static char *configfile = NULL;
-MainWindow *mainWin;
-QApplication *app;
-
int main(int argc, char *argv[])
{
-
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);
- mainWin = new MainWindow;
+ QTranslator batTranslator;
+ batTranslator.load(QString("bat_") + QLocale::system().name());
+ app->installTranslator(&batTranslator);
- mainWin->show();
+ register_message_callback(message_callback);
-#ifdef ENABLE_NLS
+#ifdef xENABLE_NLS
setlocale(LC_ALL, "");
bindtextdomain("bacula", LOCALEDIR);
textdomain("bacula");
#endif
+#ifdef HAVE_WIN32
+ set_trace(true); /* output to trace file */
+#endif
+
init_stack_dump();
- my_name_is(argc, argv, "gnome-console");
+ my_name_is(argc, argv, "bat");
+ lmgr_init_thread();
init_msg(NULL, NULL);
working_directory = "/tmp";
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) {
usage();
}
+ OSDependentInit();
+#ifdef HAVE_WIN32
+ WSA_Init(); /* Initialize Windows sockets */
+#endif
+
if (configfile == NULL) {
configfile = bstrdup(CONFIG_FILE);
}
- parse_config(configfile);
+ 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);
}
+ if (test_config) {
+ exit(0);
+ }
+
+ mainWin = new MainWin;
+ mainWin->show();
return app->exec();
}
-void terminate_console(int sig)
+void terminate_console(int /*sig*/)
{
- (void)sig; /* avoid compiler complaints */
+// WSA_Cleanup(); /* TODO: check when we have to call it */
exit(0);
}
exit(1);
}
-/*
- * Call-back for reading a passphrase for an encrypted PEM file
- * This function uses getpass(), which uses a static buffer and is NOT thread-safe.
- */
-static int tls_pem_callback(char *buf, int size, const void *userdata)
-{
-#ifdef HAVE_TLS
- const char *prompt = (const char *) userdata;
- char *passwd;
-
- passwd = getpass(prompt);
- bstrncpy(buf, passwd, size);
- return (strlen(buf));
-#else
- buf[0] = 0;
- return 0;
-#endif
-}
-
-
/*
* Make a quick check to see that we have all the
* resources needed.
bool ok = true;
DIRRES *director;
int numdir;
+ bool tls_needed;
LockRes();
continue;
}
}
+ tls_needed = director->tls_enable || director->tls_authenticate;
- if ((!director->tls_ca_certfile && !director->tls_ca_certdir) && director->tls_enable) {
+ 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"),
continue;
}
}
+ tls_needed = cons->tls_enable || cons->tls_authenticate;
- if ((!cons->tls_ca_certfile && !cons->tls_ca_certdir) && cons->tls_enable) {
+ 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);