]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/dird_conf.c
Fix newvol.c
[bacula/bacula] / bacula / src / dird / dird_conf.c
index d7e873134b76162aff01c2ea23bd02ac69cdbdcc..bebf9c27adfa92ba3b4b7ecc88e6199e7ac1ea08 100644 (file)
@@ -22,7 +22,7 @@
  *     Version $Id$
  */
 /*
-   Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker
+   Copyright (C) 2000-2003 Kern Sibbald and John Walker
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -227,16 +227,20 @@ static struct res_items group_items[] = {
  *   name            handler     value                        code flags default_value
  */
 static struct res_items pool_items[] = {
-   {"name",            store_name,    ITEM(res_pool.hdr.name),        0, ITEM_REQUIRED, 0},
-   {"description",     store_str,     ITEM(res_pool.hdr.desc),        0, 0,     0},
-   {"pooltype",        store_strname, ITEM(res_pool.pool_type),       0, ITEM_REQUIRED, 0},
-   {"labelformat",     store_strname, ITEM(res_pool.label_format),    0, 0,     0},
+   {"name",            store_name,    ITEM(res_pool.hdr.name),      0, ITEM_REQUIRED, 0},
+   {"description",     store_str,     ITEM(res_pool.hdr.desc),      0, 0,     0},
+   {"pooltype",        store_strname, ITEM(res_pool.pool_type),     0, ITEM_REQUIRED, 0},
+   {"labelformat",     store_strname, ITEM(res_pool.label_format),  0, 0,     0},
    {"usecatalog",      store_yesno, ITEM(res_pool.use_catalog),     1, ITEM_DEFAULT,  1},
-   {"usevolumeonce",   store_yesno, ITEM(res_pool.use_volume_once), 1, 0,       0},
-   {"maximumvolumes",  store_pint,  ITEM(res_pool.max_volumes),     0, 0,             0},
+   {"usevolumeonce",   store_yesno, ITEM(res_pool.use_volume_once), 1, 0,        0},
+   {"maximumvolumes",  store_pint,  ITEM(res_pool.max_volumes),     0, 0,        0},
+   {"maximumvolumejobs", store_pint,  ITEM(res_pool.MaxVolJobs),    0, 0,       0},
+   {"maximumvolumefiles", store_pint, ITEM(res_pool.MaxVolFiles),   0, 0,       0},
+   {"maximumvolumebytes", store_size, ITEM(res_pool.MaxVolBytes),   0, 0,       0},
    {"acceptanyvolume", store_yesno, ITEM(res_pool.accept_any_volume), 1, ITEM_DEFAULT,     1},
    {"catalogfiles",    store_yesno, ITEM(res_pool.catalog_files),   1, ITEM_DEFAULT,  1},
-   {"volumeretention", store_time,  ITEM(res_pool.VolRetention), 0, ITEM_DEFAULT, 60*60*24*365},
+   {"volumeretention", store_time,  ITEM(res_pool.VolRetention),    0, ITEM_DEFAULT, 60*60*24*365},
+   {"volumeuseduration", store_time,  ITEM(res_pool.VolUseDuration),0, 0, 0},
    {"autoprune",       store_yesno, ITEM(res_pool.AutoPrune), 1, ITEM_DEFAULT, 1},
    {"recycle",         store_yesno, ITEM(res_pool.Recycle),     1, ITEM_DEFAULT, 1},
    {NULL, NULL, NULL, 0, 0, 0} 
@@ -290,7 +294,6 @@ struct s_jl joblevels[] = {
    {"Full",          L_FULL,            JT_BACKUP},
    {"Incremental",   L_INCREMENTAL,     JT_BACKUP},
    {"Differential",  L_DIFFERENTIAL,    JT_BACKUP},
-   {"Level",         L_LEVEL,           JT_BACKUP},
    {"Since",         L_SINCE,           JT_BACKUP},
    {"Catalog",       L_VERIFY_CATALOG,  JT_VERIFY},
    {"Initcatalog",   L_VERIFY_INIT,     JT_VERIFY},
@@ -353,6 +356,7 @@ struct s_kw ReplaceOptions[] = {
 #define INC_KW_RECURSE     6
 #define INC_KW_SPARSE      7
 #define INC_KW_REPLACE     8         /* restore options */
+#define INC_KW_READFIFO     9        /* Causes fifo data to be read */
 
 /* Include keywords */
 static struct s_kw FS_option_kw[] = {
@@ -364,6 +368,7 @@ static struct s_kw FS_option_kw[] = {
    {"recurse",     INC_KW_RECURSE},
    {"sparse",      INC_KW_SPARSE},
    {"replace",     INC_KW_REPLACE},
+   {"readfifo",    INC_KW_READFIFO},
    {NULL,         0}
 };
 
@@ -399,6 +404,8 @@ static struct s_fs_opt FS_options[] = {
    {"always",   INC_KW_REPLACE,       "a"},
    {"ifnewer",  INC_KW_REPLACE,       "w"},
    {"never",    INC_KW_REPLACE,       "n"},
+   {"yes",      INC_KW_READFIFO,      "r"},
+   {"no",       INC_KW_READFIFO,      "0"},
    {NULL,      0,                   0}
 };
 
@@ -539,7 +546,7 @@ next_run:
             strcpy(buf, "      hour=");
            for (i=0; i<24; i++) {
               if (bit_is_set(i, run->hour)) {
-                  sprintf(num, "%d ", i+1);
+                  sprintf(num, "%d ", i);
                  strcat(buf, num);
               }
            }
@@ -572,6 +579,15 @@ next_run:
            }
             strcat(buf, "\n");
            sendit(sock, buf);
+            strcpy(buf, "      wpos=");
+           for (i=0; i<5; i++) {
+              if (bit_is_set(i, run->wpos)) {
+                  sprintf(num, "%d ", i+1);
+                 strcat(buf, num);
+              }
+           }
+            strcat(buf, "\n");
+           sendit(sock, buf);
             sendit(sock, "      mins=%d\n", run->minute);
            if (run->pool) {
                sendit(sock, "     --> ");
@@ -1223,34 +1239,33 @@ static void scan_include_options(LEX *lc, int keyword, char *opts, int optlen)
    char option[3];
 
    option[0] = 0;                    /* default option = none */
-   opts[0] = option[2] = 0;          /* terminate options */
-   for (;;) {
-      token = lex_get_token(lc, T_NAME);            /* expect at least one option */       
-      if (keyword == INC_KW_VERIFY) { /* special case */
-        /* ***FIXME**** ensure these are in permitted set */
-         bstrncat(opts, "V", optlen);         /* indicate Verify */
-        bstrncat(opts, lc->str, optlen);
-         bstrncat(opts, ":", optlen);         /* terminate it */
-      } else {
-        for (i=0; FS_options[i].name; i++) {
-           if (strcasecmp(lc->str, FS_options[i].name) == 0 && FS_options[i].keyword == keyword) {
-              /* NOTE! maximum 2 letters here or increase option[3] */
-              option[0] = FS_options[i].option[0];
-              option[1] = FS_options[i].option[1];
-              i = 0;
-              break;
-           }
-        }
-        if (i != 0) {
-            scan_err1(lc, "Expected a FileSet option keyword, got: %s", lc->str);
+   option[2] = 0;                    /* terminate options */
+   token = lex_get_token(lc, T_NAME);            /* expect at least one option */       
+   if (keyword == INC_KW_VERIFY) { /* special case */
+      /* ***FIXME**** ensure these are in permitted set */
+      bstrncat(opts, "V", optlen);         /* indicate Verify */
+      bstrncat(opts, lc->str, optlen);
+      bstrncat(opts, ":", optlen);         /* terminate it */
+   } else {
+      for (i=0; FS_options[i].name; i++) {
+        if (strcasecmp(lc->str, FS_options[i].name) == 0 && FS_options[i].keyword == keyword) {
+           /* NOTE! maximum 2 letters here or increase option[3] */
+           option[0] = FS_options[i].option[0];
+           option[1] = FS_options[i].option[1];
+           i = 0;
+           break;
         }
+      }
+      if (i != 0) {
+         scan_err1(lc, "Expected a FileSet option keyword, got:%s:", lc->str);
+      } else { /* add option */
         bstrncat(opts, option, optlen);
+         Dmsg3(200, "Catopts=%s option=%s optlen=%d\n", opts, option,optlen);
       }
+   }
 
-      /* check if more options are specified */
-      if (lc->ch != ',') {
-        break;                       /* no, get out */
-      }
+   /* If option terminated by comma, eat it */
+   if (lc->ch == ',') {
       token = lex_get_token(lc, T_ALL);      /* yes, eat comma */
    }
 }
@@ -1269,7 +1284,7 @@ static void store_inc(LEX *lc, struct res_items *item, int index, int pass)
    lc->options |= LOPT_NO_IDENT;      /* make spaces significant */
 
    /* Get include options */
-   strcpy(inc_opts, "0");             /* set no options */
+   inc_opts[0] = 0;
    while ((token=lex_get_token(lc, T_ALL)) != T_BOB) {
       keyword = INC_KW_NONE;
       for (i=0; FS_option_kw[i].name; i++) {
@@ -1290,10 +1305,13 @@ static void store_inc(LEX *lc, struct res_items *item, int index, int pass)
         break;
       }
    }
-   strcat(inc_opts, " ");             /* add field separator */
+   if (!inc_opts[0]) {
+      strcat(inc_opts, "0 ");         /* set no options */
+   } else {
+      strcat(inc_opts, " ");          /* add field separator */
+   }
    inc_opts_len = strlen(inc_opts);
 
-
    if (pass == 1) {
       if (!res_all.res_fs.have_MD5) {
         MD5Init(&res_all.res_fs.md5c);