]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/dird.c
23Aug07
[bacula/bacula] / bacula / src / dird / dird.c
index 4f2e337100e6597df8871987024b86a87db1abc3..d34acd8efbbc1cb7b69033d8606160c9db3d88c7 100644 (file)
@@ -7,8 +7,8 @@
    many others, a complete list can 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
@@ -69,6 +69,7 @@ DIRRES *director;                     /* Director resource */
 int FDConnectTimeout;
 int SDConnectTimeout;
 char *configfile = NULL;
+void *start_heap;
 
 /* Globals Imported */
 extern int r_first, r_last;           /* first and last resources */
@@ -122,11 +123,12 @@ int main (int argc, char *argv[])
 {
    int ch;
    JCR *jcr;
-   int no_signals = FALSE;
-   int test_config = FALSE;
+   bool no_signals = false;
+   bool test_config = false;
    char *uid = NULL;
    char *gid = NULL;
 
+   start_heap = sbrk(0);
    setlocale(LC_ALL, "");
    bindtextdomain("bacula", LOCALEDIR);
    textdomain("bacula");
@@ -151,7 +153,7 @@ int main (int argc, char *argv[])
          if (debug_level <= 0) {
             debug_level = 1;
          }
-         Dmsg1(0, "Debug level = %d\n", debug_level);
+         Dmsg1(10, "Debug level = %d\n", debug_level);
          break;
 
       case 'f':                    /* run in foreground */
@@ -172,11 +174,11 @@ int main (int argc, char *argv[])
          break;
 
       case 's':                    /* turn off signals */
-         no_signals = TRUE;
+         no_signals = true;
          break;
 
       case 't':                    /* test config */
-         test_config = TRUE;
+         test_config = true;
          break;
 
       case 'u':                    /* set uid */
@@ -226,19 +228,6 @@ int main (int argc, char *argv[])
       Jmsg((JCR *)NULL, M_ERROR_TERM, 0, _("Please correct configuration file: %s\n"), configfile);
    }
 
-   if (test_config) {
-      terminate_dird(0);
-   }
-
-   my_name_is(0, NULL, director->name());    /* set user defined name */
-
-   /* Plug database interface for library routines */
-   p_sql_query = (sql_query)dir_sql_query;
-   p_sql_escape = (sql_escape)db_escape_string;
-
-   FDConnectTimeout = (int)director->FDConnectTimeout;
-   SDConnectTimeout = (int)director->SDConnectTimeout;
-
    if (background) {
       daemon_start();
       init_stack_dump();              /* grab new pid */
@@ -254,6 +243,20 @@ int main (int argc, char *argv[])
       Jmsg((JCR *)NULL, M_ERROR_TERM, 0, _("Please correct configuration file: %s\n"), configfile);
    }
 
+   if (test_config) {
+      terminate_dird(0);
+   }
+
+   my_name_is(0, NULL, director->name());    /* set user defined name */
+
+   /* Plug database interface for library routines */
+   p_sql_query = (sql_query)dir_sql_query;
+   p_sql_escape = (sql_escape)db_escape_string;
+
+   FDConnectTimeout = (int)director->FDConnectTimeout;
+   SDConnectTimeout = (int)director->SDConnectTimeout;
+
+
 #if !defined(HAVE_WIN32)
    signal(SIGHUP, reload_config);
 #endif
@@ -292,6 +295,14 @@ int main (int argc, char *argv[])
    return 0;
 }
 
+/*
+ * This allows the message handler to operate on the database
+ *   by using a pointer to this function. The pointer is
+ *   needed because the other daemons do not have access
+ *   to the database.  If the pointer is
+ *   not defined (other daemons), then writing the database
+ *   is disabled. 
+ */
 static void dir_sql_query(JCR *jcr, const char *cmd)
 {
    if (!jcr || !jcr->db) {
@@ -457,7 +468,7 @@ void reload_config(int sig)
    ok = parse_config(configfile, 0, M_ERROR);  /* no exit on error */
 
    Dmsg0(100, "Reloaded config file\n");
-   if (!ok || !check_resources()) {
+   if (!ok || !check_resources() || !check_catalog()) {
       rtable = find_free_reload_table_entry();    /* save new, bad table */
       if (rtable < 0) {
          Jmsg(NULL, M_ERROR, 0, _("Please correct configuration file: %s\n"), configfile);
@@ -493,7 +504,7 @@ void reload_config(int sig)
    set_working_directory(director->working_directory);
    FDConnectTimeout = director->FDConnectTimeout;
    SDConnectTimeout = director->SDConnectTimeout;
-   Dmsg0(0, "Director's configuration file reread.\n");
+   Dmsg0(10, "Director's configuration file reread.\n");
 
    /* Now release saved resources, if no jobs using the resources */
    if (njobs == 0) {
@@ -724,7 +735,7 @@ static bool check_resources()
       for (i=0; job_items[i].name; i++) {
          if (job_items[i].flags & ITEM_REQUIRED) {
                if (!bit_is_set(i, job->hdr.item_present)) {
-                  Jmsg(NULL, M_FATAL, 0, _("\"%s\" directive in Job \"%s\" resource is required, but not found.\n"),
+                  Jmsg(NULL, M_ERROR_TERM, 0, _("\"%s\" directive in Job \"%s\" resource is required, but not found.\n"),
                     job_items[i].name, job->name());
                   OK = false;
                 }
@@ -858,10 +869,14 @@ static bool check_catalog()
                          catalog->db_port, catalog->db_socket,
                          catalog->mult_db_connections);
       if (!db || !db_open_database(NULL, db)) {
+         Pmsg2(000, _("Could not open Catalog \"%s\", database \"%s\".\n"),
+              catalog->name(), catalog->db_name);
          Jmsg(NULL, M_FATAL, 0, _("Could not open Catalog \"%s\", database \"%s\".\n"),
               catalog->name(), catalog->db_name);
          if (db) {
             Jmsg(NULL, M_FATAL, 0, _("%s"), db_strerror(db));
+            Pmsg1(000, "%s", db_strerror(db));
+            db_close_database(NULL, db);
          }
          OK = false;
          continue;