]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/stored_conf.c
First cut of restore
[bacula/bacula] / bacula / src / stored / stored_conf.c
index 43e86213b79b684afec068965790a432c275862a..36a54278a9a4602e46a07bd0fd0bb816b6271a30 100644 (file)
@@ -93,6 +93,12 @@ static struct res_items dev_items[] = {
    {"labelmedia",            store_yesno,  ITEM(res_dev.cap_bits), CAP_LABEL,      ITEM_DEFAULT, 0},
    {"mountanonymousvolumes", store_yesno,  ITEM(res_dev.cap_bits), CAP_ANONVOLS,   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},
+   {"changerdevice",         store_strname,ITEM(res_dev.changer_name), 0, 0, 0},
+   {"changercommand",        store_strname,ITEM(res_dev.changer_command), 0, 0, 0},
+   {"maximumchangerwait",    store_pint,   ITEM(res_dev.max_changer_wait), 0, ITEM_DEFAULT, 2 * 60},
+   {"maximumopenwait",       store_pint,   ITEM(res_dev.max_open_wait), 0, ITEM_DEFAULT, 5 * 60},
+   {"offlineonunmount",      store_yesno,  ITEM(res_dev.cap_bits), CAP_OFFLINEUNMOUNT, ITEM_DEFAULT, 0},
    {"maximumrewindwait",     store_pint,   ITEM(res_dev.max_rewind_wait), 0, ITEM_DEFAULT, 5 * 60},
    {"minimumblocksize",      store_pint,   ITEM(res_dev.min_block_size), 0, 0, 0},
    {"maximumblocksize",      store_pint,   ITEM(res_dev.max_block_size), 0, 0, 0},
@@ -254,6 +260,10 @@ void free_resource(int type)
            free(res->res_dev.media_type);
         if (res->res_dev.device_name)
            free(res->res_dev.device_name);
+        if (res->res_dev.changer_name)
+           free(res->res_dev.changer_name);
+        if (res->res_dev.changer_command)
+           free(res->res_dev.changer_command);
         break;
       case R_MSGS:
         if (res->res_msgs.mail_cmd)
@@ -342,6 +352,7 @@ void save_resource(int type, struct res_items *items, int pass)
       return;
    }
 
+   /* The following code is only executed on pass 1 */
    switch (type) {
       case R_DIRECTOR:
         size = sizeof(DIRRES);
@@ -362,9 +373,18 @@ void save_resource(int type, struct res_items *items, int pass)
    }
    /* Common */
    if (!error) {
-      res = (URES *) malloc(size);
+      res = (URES *)malloc(size);
       memcpy(res, &res_all, size);
-      res->res_dir.hdr.next = resources[rindex].res_head;
-      resources[rindex].res_head = (RES *)res;
+      if (!resources[rindex].res_head) {
+        resources[rindex].res_head = (RES *)res; /* store first entry */
+      } else {
+        RES *next;
+        /* Add new res to end of chain */
+        for (next=resources[rindex].res_head; next->next; next=next->next)
+           { }
+        next->next = (RES *)res;
+         Dmsg2(90, "Inserting %s res: %s\n", res_to_str(type),
+              res->res_dir.hdr.name);
+      }
    }
 }