This patch should correct a seg fault in the FD that occurs
at the end of a job when the job uses old style include/excludes.
Apply the patch to version 1.36.1 with:
cd <bacula-source>
patch -p0 <1.36.1-fileset.patch
make
make install
...
Index: src/findlib/match.c
===================================================================
RCS file: /cvsroot/bacula/bacula/src/findlib/match.c,v
retrieving revision 1.21
diff -u -r1.21 match.c
--- src/findlib/match.c 21 Dec 2004 16:18:37 -0000 1.21
+++ src/findlib/match.c 24 Dec 2004 10:17:29 -0000
@@ -10,7 +10,7 @@
*
*/
/*
- Copyright (C) 2001-2004 Kern Sibbald and John Walker
+ Copyright (C) 2001-2004 Kern Sibbald
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@@ -74,19 +74,21 @@
free(inc);
inc = next_inc;
}
+ ff->included_files_list = NULL;
for (exc=ff->excluded_files_list; exc; ) {
next_exc = exc->next;
free(exc);
exc = next_exc;
}
+ ff->excluded_files_list = NULL;
for (exc=ff->excluded_paths_list; exc; ) {
next_exc = exc->next;
free(exc);
exc = next_exc;
}
-
+ ff->excluded_paths_list = NULL;
}
/*
@@ -111,42 +113,42 @@
if (prefixed) {
for (rp=fname; *rp && *rp != ' '; rp++) {
switch (*rp) {
- case 'a': /* alway replace */
- case '0': /* no option */
+ case 'a': /* alway replace */
+ case '0': /* no option */
break;
- case 'f':
+ case 'f':
inc->options |= FO_MULTIFS;
break;
- case 'h': /* no recursion */
+ case 'h': /* no recursion */
inc->options |= FO_NO_RECURSION;
break;
- case 'M': /* MD5 */
+ case 'M': /* MD5 */
inc->options |= FO_MD5;
break;
- case 'n':
+ case 'n':
inc->options |= FO_NOREPLACE;
break;
- case 'p': /* use portable data format */
+ case 'p': /* use portable data format */
inc->options |= FO_PORTABLE;
break;
- case 'r': /* read fifo */
+ case 'r': /* read fifo */
inc->options |= FO_READFIFO;
break;
- case 'S':
+ case 'S':
inc->options |= FO_SHA1;
break;
- case 's':
+ case 's':
inc->options |= FO_SPARSE;
break;
- case 'm':
+ case 'm':
inc->options |= FO_MTIMEONLY;
break;
- case 'k':
+ case 'k':
inc->options |= FO_KEEPATIME;
break;
- case 'V': /* verify options */
+ case 'V': /* verify options */
/* Copy Verify Options */
- for (j=0; *rp && *rp != ':'; rp++) {
+ for (j=0; *rp && *rp != ':'; rp++) {
inc->VerifyOpts[j] = *rp;
if (j < (int)sizeof(inc->VerifyOpts) - 1) {
j++;
@@ -154,19 +156,19 @@
}
inc->VerifyOpts[j] = 0;
break;
- case 'w':
+ case 'w':
inc->options |= FO_IF_NEWER;
break;
- case 'A':
+ case 'A':
inc->options |= FO_ACL;
break;
- case 'Z': /* gzip compression */
+ case 'Z': /* gzip compression */
inc->options |= FO_GZIP;
- inc->level = *++rp - '0';
- Dmsg1(200, "Compression level=%d\n", inc->level);
+ inc->level = *++rp - '0';
+ Dmsg1(200, "Compression level=%d\n", inc->level);
break;
default:
- Emsg1(M_ERROR, 0, "Unknown include/exclude option: %c\n", *rp);
+ Emsg1(M_ERROR, 0, "Unknown include/exclude option: %c\n", *rp);
break;
}
}
@@ -199,7 +201,7 @@
/* Convert any \'s into /'s */
for (p=inc->fname; *p; p++) {
if (*p == '\\') {
- *p = '/';
+ *p = '/';
}
}
#endif
@@ -249,7 +251,7 @@
/* Convert any \'s into /'s */
for (char *p=exc->fname; *p; p++) {
if (*p == '\\') {
- *p = '/';
+ *p = '/';
}
}
#endif
@@ -329,7 +331,7 @@
}
for ( ; exc; exc=exc->next ) {
if (fnmatch(exc->fname, file, fnmode|FNM_PATHNAME) == 0) {
- Dmsg2(900, "Match exc pat=%s: file=%s:\n", exc->fname, file);
+ Dmsg2(900, "Match exc pat=%s: file=%s:\n", exc->fname, file);
return 1;
}
Dmsg2(900, "No match exc pat=%s: file=%s:\n", exc->fname, file);
syntax highlighted by Code2HTML, v. 0.9.1