]> git.sur5r.net Git - bacula/bacula/blob - bacula/patches/3.0.2-exclude-dir-containing.patch
Tweak keep readall error messages
[bacula/bacula] / bacula / patches / 3.0.2-exclude-dir-containing.patch
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.
5
6 ---
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(-)
12
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
18              }
19              sendit(sock, "      N\n");
20           }
21 +         if (incexe->ignoredir) {
22 +            sendit(sock, "      Z %s\n", incexe->ignoredir);
23 +         }
24           for (j=0; j<incexe->name_list.size(); j++) {
25              sendit(sock, "      I %s\n", incexe->name_list.get(j));
26           }
27 @@ -1026,6 +1029,9 @@ static void free_incexe(INCEXE *incexe)
28     if (incexe->opts_list) {
29        free(incexe->opts_list);
30     }
31 +   if (incexe->ignoredir) {
32 +      free(incexe->ignoredir);
33 +   }
34     free(incexe);
35  }
36  
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 */
47  };
48  
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 */
54  };
55  
56  /*
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];
63              fd->fsend("E\n");
64           }
65 +         if (ie->ignoredir) {
66 +            bnet_fsend(fd, "Z %s\n", ie->ignoredir);
67 +         }
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)
72              if (fo->plugin) {
73                 fd->fsend("G %s\n", fo->plugin);
74              }
75 -            if (fo->ignoredir) {
76 -               bnet_fsend(fd, "Z %s\n", fo->ignoredir);
77 -            }
78              if (fo->reader) {
79                 fd->fsend("D %s\n", fo->reader);
80              }
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
86     }
87     token = lex_get_token(lc, T_NAME);
88     if (pass == 1) {
89 -      res_incexe.current_opts->ignoredir = bstrdup(lc->str);
90 +      res_incexe.ignoredir = bstrdup(lc->str);
91     }
92     scan_to_eol(lc);
93  }
94 -- 
95 1.6.3.1
96