]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/dird.c
kes Fix display of Recycle flag after update volume=foo recycle=yes.
[bacula/bacula] / bacula / src / dird / dird.c
index 733b8dcfc1cf0d83707712f4d5ee8825d821c491..8f596ca73591676cb97314a078bf96519fdcccd7 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,6 +228,12 @@ int main (int argc, char *argv[])
       Jmsg((JCR *)NULL, M_ERROR_TERM, 0, _("Please correct configuration file: %s\n"), configfile);
    }
 
+   drop(uid, gid);                    /* reduce privileges if requested */
+
+   if (!check_catalog()) {
+      Jmsg((JCR *)NULL, M_ERROR_TERM, 0, _("Please correct configuration file: %s\n"), configfile);
+   }
+
    if (test_config) {
       terminate_dird(0);
    }
@@ -248,11 +256,6 @@ int main (int argc, char *argv[])
    create_pid_file(director->pid_directory, "bacula-dir", get_first_port_host_order(director->DIRaddrs));
    read_state_file(director->working_directory, "bacula-dir", get_first_port_host_order(director->DIRaddrs));
 
-   drop(uid, gid);                    /* reduce privileges if requested */
-
-   if (!check_catalog()) {
-      Jmsg((JCR *)NULL, M_ERROR_TERM, 0, _("Please correct configuration file: %s\n"), configfile);
-   }
 
 #if !defined(HAVE_WIN32)
    signal(SIGHUP, reload_config);
@@ -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;
@@ -959,5 +974,7 @@ static bool check_catalog()
       }
       db_close_database(NULL, db);
    }
+   /* Set type in global for debugging */
+   set_db_type(db_get_type());
    return OK;
 }