/*
Bacula® - The Network Backup Solution
- Copyright (C) 2000-2008 Free Software Foundation Europe e.V.
+ Copyright (C) 2000-2009 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.
static void store_fstype(LEX *lc, RES_ITEM *item, int index, int pass);
static void store_drivetype(LEX *lc, RES_ITEM *item, int index, int pass);
static void store_opts(LEX *lc, RES_ITEM *item, int index, int pass);
-static void store_fname(LEX *lc, RES_ITEM *item, int index, int pass);
-static void store_plugin_name(LEX *lc, RES_ITEM *item, int index, int pass);
-static void options_res(LEX *lc, RES_ITEM *item, int index, int pass);
static void store_base(LEX *lc, RES_ITEM *item, int index, int pass);
static void store_plugin(LEX *lc, RES_ITEM *item, int index, int pass);
-static void store_ignoredir(LEX *lc, RES_ITEM *item, int index, int pass);
static void setup_current_opts(void);
+/* Include and Exclude items */
+static void store_fname(LEX *lc, RES_ITEM2 *item, int index, int pass, bool exclude);
+static void store_plugin_name(LEX *lc, RES_ITEM2 *item, int index, int pass, bool exclude);
+static void options_res(LEX *lc, RES_ITEM2 *item, int index, int pass, bool exclude);
+static void store_excludedir(LEX *lc, RES_ITEM2 *item, int index, int pass, bool exclude);
+
/* We build the current resource here as we are
* scanning the resource configuration definition,
#else
extern URES res_all;
#endif
-extern int res_all_size;
+extern int32_t res_all_size;
/* We build the current new Include and Exclude items here */
static INCEXE res_incexe;
* new Include/Exclude items
* name handler value code flags default_value
*/
-static RES_ITEM newinc_items[] = {
+static RES_ITEM2 newinc_items[] = {
{"file", store_fname, {0}, 0, 0, 0},
{"plugin", store_plugin_name, {0}, 0, 0, 0},
- {"ignoredir", store_ignoredir, {0}, 0, 0, 0},
+ {"excludedircontaining", store_excludedir, {0}, 0, 0, 0},
{"options", options_res, {0}, 0, 0, 0},
{NULL, NULL, {0}, 0, 0, 0}
};
{"checkfilechanges",store_opts, {0}, 0, 0, 1},
{"strippath", store_opts, {0}, 0, 0, 0},
{"honornodumpflag", store_opts, {0}, 0, 0, 0},
+ {"xattrsupport", store_opts, {0}, 0, 0, 0},
{NULL, NULL, {0}, 0, 0, 0}
};
INC_KW_ENHANCEDWILD,
INC_KW_CHKCHANGES,
INC_KW_STRIPPATH,
- INC_KW_HONOR_NODUMP
+ INC_KW_HONOR_NODUMP,
+ INC_KW_XATTR
};
/*
{"noatime", INC_KW_NOATIME},
{"enhancedwild", INC_KW_ENHANCEDWILD},
{"checkfilechanges", INC_KW_CHKCHANGES},
- {"strippath", INC_KW_STRIPPATH},
- {"honornodumpflag", INC_KW_HONOR_NODUMP},
+ {"strippath", INC_KW_STRIPPATH},
+ {"honornodumpflag", INC_KW_HONOR_NODUMP},
+ {"xattrsupport", INC_KW_XATTR},
{NULL, 0}
};
{"no", INC_KW_CHKCHANGES, "0"},
{"yes", INC_KW_HONOR_NODUMP, "N"},
{"no", INC_KW_HONOR_NODUMP, "0"},
+ {"yes", INC_KW_XATTR, "X"},
+ {"no", INC_KW_XATTR, "0"},
{NULL, 0, 0}
};
/*
*
* Store FileSet Include/Exclude info
- * NEW style includes are handled in store_newinc()
+ * new style includes are handled in store_newinc()
*/
void store_inc(LEX *lc, RES_ITEM *item, int index, int pass)
{
/*
- * Store NEW style FileSet FInclude/FExclude info
+ * Store new style FileSet Include/Exclude info
*
* Note, when this routine is called, we are inside a FileSet
* resource. We treat the Include/Execlude like a sort of
}
}
/* Call item handler */
- newinc_items[i].handler(lc, &newinc_items[i], i, pass);
+ newinc_items[i].handler(lc, &newinc_items[i], i, pass, item->code);
i = -1;
break;
}
scan_to_eol(lc);
}
-/* Store ignoredir info */
-static void store_ignoredir(LEX *lc, RES_ITEM *item, int index, int pass)
+/* Store exclude directory containing info */
+static void store_excludedir(LEX *lc, RES_ITEM2 *item, int index, int pass, bool exclude)
{
int token;
+ if (exclude) {
+ scan_err0(lc, _("ExcludeDirContaining directive not permitted in Exclude.\n"));
+ /* NOT REACHED */
+ }
token = lex_get_token(lc, T_NAME);
if (pass == 1) {
- /*
- * Pickup reader command
- */
res_incexe.current_opts->ignoredir = bstrdup(lc->str);
}
scan_to_eol(lc);
* always increase the name buffer by 10 items because we expect
* to add more entries.
*/
-static void store_fname(LEX *lc, RES_ITEM *item, int index, int pass)
+static void store_fname(LEX *lc, RES_ITEM2 *item, int index, int pass, bool exclude)
{
int token;
INCEXE *incexe;
* always increase the name buffer by 10 items because we expect
* to add more entries.
*/
-static void store_plugin_name(LEX *lc, RES_ITEM *item, int index, int pass)
+static void store_plugin_name(LEX *lc, RES_ITEM2 *item, int index, int pass, bool exclude)
{
int token;
INCEXE *incexe;
+ if (exclude) {
+ scan_err0(lc, _("Plugin directive not permitted in Exclude\n"));
+ /* NOT REACHED */
+ }
token = lex_get_token(lc, T_SKIP_EOL);
if (pass == 1) {
/* Pickup Filename string
break;
default:
scan_err1(lc, _("Expected a filename, got: %s"), lc->str);
+ /* NOT REACHED */
}
}
scan_to_eol(lc);
/*
* Come here when Options seen in Include/Exclude
*/
-static void options_res(LEX *lc, RES_ITEM *item, int index, int pass)
+static void options_res(LEX *lc, RES_ITEM2 *item, int index, int pass, bool exclude)
{
int token, i;
+ if (exclude) {
+ scan_err0(lc, _("Options section not permitted in Exclude\n"));
+ /* NOT REACHED */
+ }
token = lex_get_token(lc, T_SKIP_EOL);
if (token != T_BOB) {
scan_err1(lc, _("Expecting open brace. Got %s"), lc->str);