1 From af393297b65456d07122f3e372ee3985dc747f06 Mon Sep 17 00:00:00 2001
2 From: Eric Bollengier <eric@eb.homelinux.org>
3 Date: Wed, 9 Sep 2009 10:24:20 +0200
4 Subject: [PATCH] Fix #1369 about segfault when using ExcludeDirContaining before defining Options{} block.
7 bacula/src/dird/dird_conf.c | 6 ++++++
8 bacula/src/dird/dird_conf.h | 2 +-
9 bacula/src/dird/fd_cmds.c | 6 +++---
10 bacula/src/dird/inc_conf.c | 2 +-
11 4 files changed, 11 insertions(+), 5 deletions(-)
13 diff --git a/bacula/src/dird/dird_conf.c b/bacula/src/dird/dird_conf.c
14 index d9995ad..0819e76 100644
15 --- a/bacula/src/dird/dird_conf.c
16 +++ b/bacula/src/dird/dird_conf.c
17 @@ -806,6 +806,9 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm
21 + if (incexe->ignoredir) {
22 + sendit(sock, " Z %s\n", incexe->ignoredir);
24 for (j=0; j<incexe->name_list.size(); j++) {
25 sendit(sock, " I %s\n", incexe->name_list.get(j));
27 @@ -1026,6 +1029,9 @@ static void free_incexe(INCEXE *incexe)
28 if (incexe->opts_list) {
29 free(incexe->opts_list);
31 + if (incexe->ignoredir) {
32 + free(incexe->ignoredir);
37 diff --git a/bacula/src/dird/dird_conf.h b/bacula/src/dird/dird_conf.h
38 index 231dfab..55706ec 100644
39 --- a/bacula/src/dird/dird_conf.h
40 +++ b/bacula/src/dird/dird_conf.h
41 @@ -462,7 +462,6 @@ struct FOPTS {
42 alist drivetype; /* drive type limitation */
43 char *reader; /* reader program */
44 char *writer; /* writer program */
45 - char *ignoredir; /* ignoredir string */
46 char *plugin; /* plugin program */
49 @@ -474,6 +473,7 @@ struct INCEXE {
50 int32_t num_opts; /* number of options items */
51 alist name_list; /* filename list -- holds char * */
52 alist plugin_list; /* filename list for plugins */
53 + char *ignoredir; /* ignoredir string */
57 diff --git a/bacula/src/dird/fd_cmds.c b/bacula/src/dird/fd_cmds.c
58 index 71d9fc3..2ef63d9 100644
59 --- a/bacula/src/dird/fd_cmds.c
60 +++ b/bacula/src/dird/fd_cmds.c
61 @@ -354,6 +354,9 @@ static bool send_fileset(JCR *jcr)
62 ie = fileset->exclude_items[i];
65 + if (ie->ignoredir) {
66 + bnet_fsend(fd, "Z %s\n", ie->ignoredir);
68 for (j=0; j<ie->num_opts; j++) {
69 FOPTS *fo = ie->opts_list[j];
70 fd->fsend("O %s\n", fo->opts);
71 @@ -399,9 +402,6 @@ static bool send_fileset(JCR *jcr)
73 fd->fsend("G %s\n", fo->plugin);
75 - if (fo->ignoredir) {
76 - bnet_fsend(fd, "Z %s\n", fo->ignoredir);
79 fd->fsend("D %s\n", fo->reader);
81 diff --git a/bacula/src/dird/inc_conf.c b/bacula/src/dird/inc_conf.c
82 index ef15d3f..aedde44 100644
83 --- a/bacula/src/dird/inc_conf.c
84 +++ b/bacula/src/dird/inc_conf.c
85 @@ -588,7 +588,7 @@ static void store_excludedir(LEX *lc, RES_ITEM2 *item, int index, int pass, bool
87 token = lex_get_token(lc, T_NAME);
89 - res_incexe.current_opts->ignoredir = bstrdup(lc->str);
90 + res_incexe.ignoredir = bstrdup(lc->str);