From: Kern Sibbald Date: Sun, 11 Nov 2018 11:33:33 +0000 (+0100) Subject: More Enterprise backports + changes to the backporting X-Git-Tag: Release-9.4.0~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ab6567d3c7b3661d6e0ef638c0ded3771043b91d;p=thirdparty%2Fbacula.git More Enterprise backports + changes to the backporting --- diff --git a/bacula/src/lib/Makefile.in b/bacula/src/lib/Makefile.in index b0aef3b26..8c4796ea1 100644 --- a/bacula/src/lib/Makefile.in +++ b/bacula/src/lib/Makefile.in @@ -120,8 +120,9 @@ Makefile: $(srcdir)/Makefile.in $(topdir)/config.status wait_test: Makefile bsys.c $(RMF) bsys.o - $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) bsys.c + $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) bsys.c $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -L../findlib -o $@ bsys.o $(DLIB) -lbac -lbacfind -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) bsys.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) bsys.c @@ -129,6 +130,7 @@ output_test: Makefile output.c unittests.o $(RMF) output.o $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) output.c $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ output.o unittests.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) output.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) output.c @@ -136,6 +138,7 @@ lockmgr_test: Makefile libbac.la lockmgr.c unittests.o $(RMF) lockmgr.o $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) lockmgr.c $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ lockmgr.o unittests.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) lockmgr.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) lockmgr.c @@ -143,6 +146,7 @@ base64_test: Makefile base64.c unittests.o $(RMF) base64.o $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) base64.c $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ base64.o unittests.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) base64.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) base64.c @@ -150,6 +154,7 @@ flist_test: Makefile flist.c unittests.o $(RMF) flist.o $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) flist.c $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ flist.o unittests.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) flist.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) flist.c @@ -157,6 +162,7 @@ fnmatch_test: Makefile fnmatch.c unittests.o $(RMF) fnmatch.o $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) fnmatch.c $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ fnmatch.o unittests.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) fnmatch.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) fnmatch.c @@ -164,6 +170,7 @@ worker_test: Makefile worker.c $(RMF) worker.o $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) worker.c $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ worker.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) worker.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) worker.c @@ -171,12 +178,14 @@ workq_test: Makefile workq.c $(RMF) workq.o $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) workq.c $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ workq.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) workq.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) workq.c rwlock_test: Makefile rwlock.c $(RMF) rwlock.o $(CXX) -DTEST_RWLOCK $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) rwlock.c + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ rwlock.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) $(RMF) rwlock.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) rwlock.c @@ -185,27 +194,31 @@ devlock_test: Makefile $(RMF) devlock.o $(CXX) -DTEST_devlock $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) devlock.c $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ devlock.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) devlock.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) devlock.c htable_test: Makefile libbac.la htable.c unittests.o $(RMF) htable.o $(CXX) -DTEST_SMALL_HTABLE -DTEST_NON_CHAR -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) htable.c - $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ htable.o unittests.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ htable.o unittests.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) htable.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) htable.c alist_test: Makefile alist.c unittests.o $(RMF) alist.o $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) alist.c - $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ alist.o unittests.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ alist.o unittests.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) alist.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) alist.c crc32_test: Makefile crc32.c unittests.o $(RMF) crc32.o $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) crc32.c - $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ crc32.o unittests.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ crc32.o unittests.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) crc32.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) crc32.c @@ -213,27 +226,31 @@ sellist_test: Makefile libbac.la sellist.c unittests.o $(RMF) sellist.o $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) sellist.c $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ sellist.o unittests.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) sellist.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) sellist.c -xml_test: Makefile xml.o +xml_test: Makefile libbac.la xml.c $(RMF) xml.o $(CXX) -DTEST_PROG $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) xml.c $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ xml.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) xml.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) xml.c -md5sum: Makefile md5.o +md5sum: Makefile libbac.la md5.c $(RMF) md5.o $(CXX) -DMD5_SUM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) md5.c $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ md5.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) md5.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) md5.c -sha1sum: Makefile sha1.o +sha1sum: Makefile libbac.la sha1.c $(RMF) sha1.o $(CXX) -DSHA1_SUM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) sha1.c $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ sha1.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) sha1.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) sha1.c @@ -241,13 +258,15 @@ sha1_test: Makefile libbac.la sha1.c unittests.o $(RMF) sha1.o $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) sha1.c $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ sha1.o unittests.o $(DLIB) -lbac -lm $(LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) sha1.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) sha1.c -bsnprintf_test: Makefile bsnprintf.c unittests.o +bsnprintf_test: Makefile libbac.la bsnprintf.c unittests.o $(RMF) bsnprintf.o $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) bsnprintf.c $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ bsnprintf.o unittests.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) bsnprintf.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) bsnprintf.c @@ -255,20 +274,23 @@ ini_test: Makefile libbac.la ini.c unittests.o $(RMF) ini.o $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) ini.c $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ ini.o unittests.o -lbaccfg -lbac $(DLIB) -lm $(LIBS) $(OPENSSL_LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) ini.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) ini.c -bsockcore_test: Makefile bsockcore.c unittests.o +bsockcore_test: Makefile libbac.la bsockcore.c unittests.o $(RMF) bsockcore.o $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) bsockcore.c $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ bsockcore.o unittests.o $(DLIB) -lbac -lm $(LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) bsockcore.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) bsockcore.c -bsock_test: Makefile bsock.c unittests.o +bsock_test: Makefile libbac.la bsock.c unittests.o $(RMF) bsock.o $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) bsock.c $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ bsock.o unittests.o $(DLIB) -lbac -lm $(LIBS) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ $(RMF) bsock.o $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) bsock.c diff --git a/bacula/src/lib/attr.c b/bacula/src/lib/attr.c index f6868b4dd..497939aac 100644 --- a/bacula/src/lib/attr.c +++ b/bacula/src/lib/attr.c @@ -1,7 +1,7 @@ /* Bacula(R) - The Network Backup Solution - Copyright (C) 2000-2017 Kern Sibbald + Copyright (C) 2000-2018 Kern Sibbald The original author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. @@ -11,7 +11,7 @@ Public License, v3.0 ("AGPLv3") and some additional permissions and terms pursuant to its AGPLv3 Section 7. - This notice must be preserved when any source code is + This notice must be preserved when any source code is conveyed and/or propagated. Bacula(R) is a registered trademark of Kern Sibbald. @@ -167,7 +167,7 @@ void build_attr_output_fnames(JCR *jcr, ATTR *attr) if (jcr->where_bregexp) { char *ret; - apply_bregexps(attr->fname, jcr->where_bregexp, &ret); + apply_bregexps(attr->fname, &attr->statp, jcr->where_bregexp, &ret); pm_strcpy(attr->ofname, ret); if (attr->type == FT_LNKSAVED || attr->type == FT_LNK) { @@ -176,7 +176,7 @@ void build_attr_output_fnames(JCR *jcr, ATTR *attr) */ if ((attr->type == FT_LNKSAVED || jcr->prefix_links)) { - apply_bregexps(attr->lname, jcr->where_bregexp, &ret); + apply_bregexps(attr->lname, &attr->statp, jcr->where_bregexp, &ret); pm_strcpy(attr->olname, ret); } else { @@ -262,7 +262,7 @@ void print_ls_output(JCR *jcr, ATTR *attr, int message_type /* M_RESTORED */) if (attr->type == FT_DELETED) { /* TODO: change this to get last seen values */ bsnprintf(buf, sizeof(buf), - "-*DELETED*- - - - - ---------- -------- %s\n", attr->ofname); + "-*DELETED- - - - - ---------- -------- %s\n", attr->ofname); Dmsg1(dbglvl, "%s", buf); Jmsg(jcr, message_type, 1, "%s", buf); return; @@ -277,7 +277,7 @@ void print_ls_output(JCR *jcr, ATTR *attr, int message_type /* M_RESTORED */) p += sprintf(p, "%-8.8s %-8.8s", guid->uid_to_name(attr->statp.st_uid, en1, sizeof(en1)), guid->gid_to_name(attr->statp.st_gid, en2, sizeof(en2))); - p += sprintf(p, "%12.12s ", edit_int64(attr->statp.st_size, ec1)); + p += sprintf(p, " %18.18s ", edit_int64(attr->statp.st_size, ec1)); p = encode_time(attr->statp.st_ctime, p); *p++ = ' '; *p++ = ' '; diff --git a/bacula/src/lib/base64.c b/bacula/src/lib/base64.c index 7f61bea72..28d0ce10a 100644 --- a/bacula/src/lib/base64.c +++ b/bacula/src/lib/base64.c @@ -1,7 +1,7 @@ /* Bacula(R) - The Network Backup Solution - Copyright (C) 2000-2016 Kern Sibbald + Copyright (C) 2000-2018 Kern Sibbald The original author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. @@ -11,7 +11,7 @@ Public License, v3.0 ("AGPLv3") and some additional permissions and terms pursuant to its AGPLv3 Section 7. - This notice must be preserved when any source code is + This notice must be preserved when any source code is conveyed and/or propagated. Bacula(R) is a registered trademark of Kern Sibbald. @@ -20,8 +20,6 @@ * Generic base 64 input and output routines * * Written by Kern E. Sibbald, March MM. - * - * Version $Id$ */ @@ -184,6 +182,11 @@ bin_to_base64(char *buf, int buflen, char *bin, int binlen, int compatible) * the base64_to_bin routine is compatible with what the rest of the world * uses. * + * 'dest_size' must be big enough! Giving the right size here could fail as + * we consider 'srclen' as an unpadded size, even if 'src' is padded + * we suggest to use dest_size=srclen for easiness or at least + * dest_size=((srclen + 3) / 4) * 3) for optimization lovers + * * Returns: the number of characters stored not * including the EOS */ @@ -439,4 +442,4 @@ int main() ok(len == 6, "Checking from_base64 decoded length - encoded"); return report(); }; -#endif /* TEST_PROGRAM */ \ No newline at end of file +#endif /* TEST_PROGRAM */ diff --git a/bacula/src/lib/breg.c b/bacula/src/lib/breg.c index 2e1a532e8..fbb713838 100644 --- a/bacula/src/lib/breg.c +++ b/bacula/src/lib/breg.c @@ -1,7 +1,7 @@ /* Bacula(R) - The Network Backup Solution - Copyright (C) 2000-2016 Kern Sibbald + Copyright (C) 2000-2018 Kern Sibbald The original author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. @@ -11,7 +11,7 @@ Public License, v3.0 ("AGPLv3") and some additional permissions and terms pursuant to its AGPLv3 Section 7. - This notice must be preserved when any source code is + This notice must be preserved when any source code is conveyed and/or propagated. Bacula(R) is a registered trademark of Kern Sibbald. @@ -79,16 +79,24 @@ void free_bregexps(alist *bregexps) } } + /* Apply all regexps to fname */ bool apply_bregexps(const char *fname, alist *bregexps, char **result) +{ + return apply_bregexps(fname, NULL, bregexps, result); +} + +/* Apply all regexps to fname + */ +bool apply_bregexps(const char *fname, struct stat *sp, alist *bregexps, char **result) { BREGEXP *elt; bool ok=false; char *ret = (char *) fname; foreach_alist(elt, bregexps) { - ret = elt->replace(ret); + ret = elt->replace(ret, sp); ok = ok || elt->success; } Dmsg2(500, "bregexp: fname=%s ret=%s\n", fname, ret); @@ -214,7 +222,7 @@ bool BREGEXP::extract_regexp(const char *motif) } /* return regexp->result */ -char *BREGEXP::replace(const char *fname) +char *BREGEXP::replace(const char *fname, struct stat *sp) { success = false; /* use this.success to known if it's ok */ int flen = strlen(fname); @@ -229,7 +237,7 @@ char *BREGEXP::replace(const char *fname) if (len) { result = check_pool_memory_size(result, len); - edit_subst(fname, regs); + edit_subst(fname, sp, regs); success = true; Dmsg2(500, "bregexp: len = %i, result_len = %i\n", len, strlen(result)); @@ -265,8 +273,12 @@ int BREGEXP::compute_dest_len(const char *fname, regmatch_t breg[]) } for (p = psubst++; *p ; p = psubst++) { + /* match a substitution with a struct stat field */ + if ((*p == '$') && (*psubst == 'm')) { + len += 50; /* Will add a integer */ + /* match $1 \1 back references */ - if ((*p == '$' || *p == '\\') && ('0' <= *psubst && *psubst <= '9')) { + } else if ((*p == '$' || *p == '\\') && ('0' <= *psubst && *psubst <= '9')) { no = *psubst++ - '0'; /* we check if the back reference exists */ @@ -288,10 +300,11 @@ int BREGEXP::compute_dest_len(const char *fname, regmatch_t breg[]) return len; } -char *BREGEXP::edit_subst(const char *fname, regmatch_t breg[]) +char *BREGEXP::edit_subst(const char *fname, struct stat *sp, regmatch_t breg[]) { int i; char *p; + char ed[50]; char *psubst = subst; int no; int len; @@ -305,10 +318,17 @@ char *BREGEXP::edit_subst(const char *fname, regmatch_t breg[]) } /* on recopie le motif de remplacement (avec tous les $x) */ - for (p = psubst++; *p ; p = psubst++) { + /* match specific % variables, coming from struct stat */ + if ((*p == '$' && *psubst == 'm')) { + edit_uint64(sp?sp->st_mtime : 0, ed); + len = strlen(ed); + bstrncpy(result + i, ed, len+1); + i+=len; + psubst++; /* Eat m */ + /* match $1 \1 back references */ - if ((*p == '$' || *p == '\\') && ('0' <= *psubst && *psubst <= '9')) { + } else if ((*p == '$' || *p == '\\') && ('0' <= *psubst && *psubst <= '9')) { no = *psubst++ - '0'; /* have a back reference ? */ diff --git a/bacula/src/lib/breg.h b/bacula/src/lib/breg.h index e21ffef51..e2d9da09f 100644 --- a/bacula/src/lib/breg.h +++ b/bacula/src/lib/breg.h @@ -1,7 +1,7 @@ /* Bacula(R) - The Network Backup Solution - Copyright (C) 2000-2016 Kern Sibbald + Copyright (C) 2000-2018 Kern Sibbald The original author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. @@ -11,7 +11,7 @@ Public License, v3.0 ("AGPLv3") and some additional permissions and terms pursuant to its AGPLv3 Section 7. - This notice must be preserved when any source code is + This notice must be preserved when any source code is conveyed and/or propagated. Bacula(R) is a registered trademark of Kern Sibbald. @@ -54,7 +54,7 @@ public: POOLMEM *result; /* match result */ bool success; /* match is ok */ - char *replace(const char *fname); /* return this.result */ + char *replace(const char *fname, struct stat *sp=NULL); /* return this.result */ void debug(); /* private */ @@ -65,7 +65,7 @@ public: char *eor; /* end of regexp in expr */ char *return_fname(const char *fname, int len); /* return fname as result */ - char *edit_subst(const char *fname, regmatch_t breg[]); + char *edit_subst(const char *fname, struct stat *sp, regmatch_t breg[]); int compute_dest_len(const char *fname, regmatch_t breg[]); bool extract_regexp(const char *motif); }; @@ -83,6 +83,7 @@ void free_bregexp(BREGEXP *script); alist *get_bregexps(const char *where); /* apply every regexps from the alist */ +bool apply_bregexps(const char *fname, struct stat *sp, alist *bregexps, char **result); bool apply_bregexps(const char *fname, alist *bregexps, char **result); /* foreach_alist free RUNSCRIPT */ diff --git a/bacula/src/lib/bsock.c b/bacula/src/lib/bsock.c index cca265241..c21b293a9 100644 --- a/bacula/src/lib/bsock.c +++ b/bacula/src/lib/bsock.c @@ -244,6 +244,8 @@ bail_out: * Returns: false on failure * true on success */ +#define display_errmsg() (!m_suppress_error_msgs && m_jcr && m_jcr->JobId != 0) + bool BSOCK::send(int aflags) { int32_t rc; @@ -258,22 +260,22 @@ bool BSOCK::send(int aflags) bool locked = false; if (is_closed()) { - if (!m_suppress_error_msgs) { + if (display_errmsg()) { Qmsg0(m_jcr, M_ERROR, 0, _("Socket is closed\n")); } return false; } if (errors) { - if (!m_suppress_error_msgs) { + if (display_errmsg()) { Qmsg4(m_jcr, M_ERROR, 0, _("Socket has errors=%d on call to %s:%s:%d\n"), - errors, m_who, m_host, m_port); + errors, m_who, m_host, m_port); } return false; } if (is_terminated()) { - if (!m_suppress_error_msgs) { + if (display_errmsg()) { Qmsg4(m_jcr, M_ERROR, 0, _("Bsock send while terminated=%d on call to %s:%s:%d\n"), - is_terminated(), m_who, m_host, m_port); + is_terminated(), m_who, m_host, m_port); } return false; } @@ -281,7 +283,7 @@ bool BSOCK::send(int aflags) if (msglen > 4000000) { if (!m_suppress_error_msgs) { Qmsg4(m_jcr, M_ERROR, 0, - _("Socket has insane msglen=%d on call to %s:%s:%d\n"), + _("Write socket has insane msglen=%d on call to %s:%s:%d\n"), msglen, m_who, m_host, m_port); } return false;