From: Kern Sibbald Date: Fri, 25 Feb 2005 09:19:05 +0000 (+0000) Subject: 24Feb05 X-Git-Tag: Release-1.38.0~634 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=459aec47e094a6462ade480815a08924fa1de251;p=bacula%2Fbacula 24Feb05 - Fix an ASSERT that was triggering in stored/acquire.c attempt to fix a bug report. 23Feb05 - Corrected SunOs to SunOS in btraceback (user submitted). - Applied patch from Roger HÃ¥kansson to warn the user of defective AWKs during ./configure. git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@1839 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/autoconf/configure.in b/bacula/autoconf/configure.in index 846afa936d..bfdbc7e035 100644 --- a/bacula/autoconf/configure.in +++ b/bacula/autoconf/configure.in @@ -54,7 +54,6 @@ AC_PATH_PROG(MV, mv, mv) AC_PATH_PROG(RM, rm, rm) AC_PATH_PROG(CP, cp, cp) AC_PATH_PROG(SED, sed, sed) -AC_PATH_PROG(AWK, awk, awk) AC_PATH_PROG(ECHO, echo, echo) AC_PATH_PROG(CMP, cmp, cmp) AC_PATH_PROG(TBL, tbl, tbl) @@ -70,6 +69,20 @@ AC_PATH_PROG(PKGCONFIG, pkg-config, pkg-config) AC_PATH_PROG(WXCONFIG, wx-config, wx-config) AC_PATH_PROG(CDRECORD, cdrecord, cdrecord) AC_PATH_PROG(PIDOF, pidof, pidof) +AC_PROG_AWK +# Some AWK programs fail, so test it and warn the user +if echo xfoo | $AWK 'BEGIN { prog=ARGV[1]; ARGC=1 } + { if ((prog == $2) || (("(" prog ")") == $2) || + (("[" prog "]") == $2) || + ((prog ":") == $2)) { print $1 ; exit 0 } }' xfoo>/dev/null; then :; +else + AC_MSG_ERROR([!!!!!!!!! WARNING !!!!!!!!!!!!!! + The regex engine of $AWK is too broken to be used you + might want to install GNU AWK. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!]) +fi +THE_AWK=$AWK +AC_PATH_PROG(AWK, $THE_AWK, $THE_AWK) test -n "$ARFLAG" || ARFLAGS="cr" AC_SUBST(ARFLAGS) diff --git a/bacula/configure b/bacula/configure index df29d69ca6..4aafe1dbb5 100755 --- a/bacula/configure +++ b/bacula/configure @@ -309,7 +309,7 @@ ac_includes_default="\ # include #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS BUILD_DIR TRUEPRG FALSEPRG VERSION DATE LSMDATE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX CPP EGREP INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA RANLIB ac_ct_RANLIB MV RM CP SED AWK ECHO CMP TBL AR OPENSSL MTX MKISOFS PYTHON GROWISOFS DVDRWMEDIAINFO PKGCONFIG WXCONFIG CDRECORD PIDOF ARFLAGS MAKE_SHELL LOCAL_LIBS LOCAL_CFLAGS LOCAL_LDFLAGS LOCAL_DEFS build build_cpu build_vendor build_os host host_cpu host_vendor host_os HAVE_SUN_OS_TRUE HAVE_SUN_OS_FALSE HAVE_OSF1_OS_TRUE HAVE_OSF1_OS_FALSE HAVE_AIX_OS_TRUE HAVE_AIX_OS_FALSE HAVE_HPUX_OS_TRUE HAVE_HPUX_OS_FALSE HAVE_LINUX_OS_TRUE HAVE_LINUX_OS_FALSE HAVE_FREEBSD_OS_TRUE HAVE_FREEBSD_OS_FALSE HAVE_NETBSD_OS_TRUE HAVE_NETBSD_OS_FALSE HAVE_OPENBSD_OS_TRUE HAVE_OPENBSD_OS_FALSE HAVE_BSDI_OS_TRUE HAVE_BSDI_OS_FALSE HAVE_SGI_OS_TRUE HAVE_SGI_OS_FALSE HAVE_IRIX_OS_TRUE HAVE_IRIX_OS_FALSE HAVE_DARWIN_OS_TRUE HAVE_DARWIN_OS_FALSE INSIDE_GNOME_COMMON_TRUE INSIDE_GNOME_COMMON_FALSE MSGFMT GNOME_INCLUDEDIR GNOMEUI_LIBS GNOME_LIBDIR GNOME_LIBS GNOMEGNORBA_LIBS GTKXMHTML_LIBS ZVT_LIBS GNOME_CONFIG ORBIT_CONFIG ORBIT_IDL HAVE_ORBIT_TRUE HAVE_ORBIT_FALSE ORBIT_CFLAGS ORBIT_LIBS HAVE_GNORBA_TRUE HAVE_GNORBA_FALSE GNORBA_CFLAGS GNORBA_LIBS GNOME_APPLETS_LIBS GNOME_DOCKLETS_LIBS GNOME_CAPPLET_LIBS GNOME_DIR WXCONS_CPPFLAGS WXCONS_LDFLAGS WX_DIR TRAY_MONITOR_CPPFLAGS TRAY_MONITOR_LDFLAGS TRAY_MONITOR_DIR TTOOL_LDFLAGS STATIC_FD STATIC_SD STATIC_DIR STATIC_CONS STATIC_GNOME_CONS STATIC_WX_CONS ALL_DIRS CONS_INC CONS_OBJ CONS_SRC CONS_LIBS CONS_LDFLAGS READLINE_SRC PYTHON_LIBS PYTHON_INCDIR CDSTL working_dir scriptdir dump_email job_email smtp_host piddir subsysdir baseport dir_port fd_port sd_port dir_password fd_password sd_password mon_dir_password mon_fd_password mon_sd_password bimagemgr_cgidir bimagemgr_docdir bimagemgr_binowner bimagemgr_bingroup bimagemgr_dataowner bimagemgr_datagroup dir_user dir_group sd_user sd_group fd_user fd_group SBINPERM SQL_LFLAGS SQL_INCLUDE SQL_BINDIR cats DB_NAME GETCONF ac_ct_GETCONF X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS LIBOBJS ALLOCA FDLIBS DEBUG DINCLUDE DLIB DB_LIBS WCFLAGS WLDFLAGS OBJLIST hostname TAPEDRIVE PSCMD WIN32 MACOSX DISTNAME DISTVER LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS BUILD_DIR TRUEPRG FALSEPRG VERSION DATE LSMDATE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX CPP EGREP INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA RANLIB ac_ct_RANLIB MV RM CP SED ECHO CMP TBL AR OPENSSL MTX MKISOFS PYTHON GROWISOFS DVDRWMEDIAINFO PKGCONFIG WXCONFIG CDRECORD PIDOF AWK ARFLAGS MAKE_SHELL LOCAL_LIBS LOCAL_CFLAGS LOCAL_LDFLAGS LOCAL_DEFS build build_cpu build_vendor build_os host host_cpu host_vendor host_os HAVE_SUN_OS_TRUE HAVE_SUN_OS_FALSE HAVE_OSF1_OS_TRUE HAVE_OSF1_OS_FALSE HAVE_AIX_OS_TRUE HAVE_AIX_OS_FALSE HAVE_HPUX_OS_TRUE HAVE_HPUX_OS_FALSE HAVE_LINUX_OS_TRUE HAVE_LINUX_OS_FALSE HAVE_FREEBSD_OS_TRUE HAVE_FREEBSD_OS_FALSE HAVE_NETBSD_OS_TRUE HAVE_NETBSD_OS_FALSE HAVE_OPENBSD_OS_TRUE HAVE_OPENBSD_OS_FALSE HAVE_BSDI_OS_TRUE HAVE_BSDI_OS_FALSE HAVE_SGI_OS_TRUE HAVE_SGI_OS_FALSE HAVE_IRIX_OS_TRUE HAVE_IRIX_OS_FALSE HAVE_DARWIN_OS_TRUE HAVE_DARWIN_OS_FALSE INSIDE_GNOME_COMMON_TRUE INSIDE_GNOME_COMMON_FALSE MSGFMT GNOME_INCLUDEDIR GNOMEUI_LIBS GNOME_LIBDIR GNOME_LIBS GNOMEGNORBA_LIBS GTKXMHTML_LIBS ZVT_LIBS GNOME_CONFIG ORBIT_CONFIG ORBIT_IDL HAVE_ORBIT_TRUE HAVE_ORBIT_FALSE ORBIT_CFLAGS ORBIT_LIBS HAVE_GNORBA_TRUE HAVE_GNORBA_FALSE GNORBA_CFLAGS GNORBA_LIBS GNOME_APPLETS_LIBS GNOME_DOCKLETS_LIBS GNOME_CAPPLET_LIBS GNOME_DIR WXCONS_CPPFLAGS WXCONS_LDFLAGS WX_DIR TRAY_MONITOR_CPPFLAGS TRAY_MONITOR_LDFLAGS TRAY_MONITOR_DIR TTOOL_LDFLAGS STATIC_FD STATIC_SD STATIC_DIR STATIC_CONS STATIC_GNOME_CONS STATIC_WX_CONS ALL_DIRS CONS_INC CONS_OBJ CONS_SRC CONS_LIBS CONS_LDFLAGS READLINE_SRC PYTHON_LIBS PYTHON_INCDIR CDSTL working_dir scriptdir dump_email job_email smtp_host piddir subsysdir baseport dir_port fd_port sd_port dir_password fd_password sd_password mon_dir_password mon_fd_password mon_sd_password bimagemgr_cgidir bimagemgr_docdir bimagemgr_binowner bimagemgr_bingroup bimagemgr_dataowner bimagemgr_datagroup dir_user dir_group sd_user sd_group fd_user fd_group SBINPERM SQL_LFLAGS SQL_INCLUDE SQL_BINDIR cats DB_NAME GETCONF ac_ct_GETCONF X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS LIBOBJS ALLOCA FDLIBS DEBUG DINCLUDE DLIB DB_LIBS WCFLAGS WLDFLAGS OBJLIST hostname TAPEDRIVE PSCMD WIN32 MACOSX DISTNAME DISTVER LTLIBOBJS' ac_subst_files='MCOMMON' # Initialize some variables set by options. @@ -3518,46 +3518,6 @@ else echo "${ECHO_T}no" >&6 fi -# Extract the first word of "awk", so it can be a program name with args. -set dummy awk; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_AWK+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $AWK in - [\\/]* | ?:[\\/]*) - ac_cv_path_AWK="$AWK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_AWK="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - test -z "$ac_cv_path_AWK" && ac_cv_path_AWK="awk" - ;; -esac -fi -AWK=$ac_cv_path_AWK - -if test -n "$AWK"; then - echo "$as_me:$LINENO: result: $AWK" >&5 -echo "${ECHO_T}$AWK" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - # Extract the first word of "echo", so it can be a program name with args. set dummy echo; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 @@ -4118,6 +4078,103 @@ else echo "${ECHO_T}no" >&6 fi +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + echo "$as_me:$LINENO: result: $AWK" >&5 +echo "${ECHO_T}$AWK" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$AWK" && break +done + +# Some AWK programs fail, so test it and warn the user +if echo xfoo | $AWK 'BEGIN { prog=ARGV1; ARGC=1 } + { if ((prog == $2) || (("(" prog ")") == $2) || + (("" prog "") == $2) || + ((prog ":") == $2)) { print $1 ; exit 0 } }' xfoo>/dev/null; then :; +else + { { echo "$as_me:$LINENO: error: !!!!!!!!! WARNING !!!!!!!!!!!!!! + The regex engine of $AWK is too broken to be used you + might want to install GNU AWK. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >&5 +echo "$as_me: error: !!!!!!!!! WARNING !!!!!!!!!!!!!! + The regex engine of $AWK is too broken to be used you + might want to install GNU AWK. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >&2;} + { (exit 1); exit 1; }; } +fi +THE_AWK=$AWK +# Extract the first word of "$THE_AWK", so it can be a program name with args. +set dummy $THE_AWK; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $AWK in + [\\/]* | ?:[\\/]*) + ac_cv_path_AWK="$AWK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_AWK="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_AWK" && ac_cv_path_AWK="$THE_AWK" + ;; +esac +fi +AWK=$ac_cv_path_AWK + +if test -n "$AWK"; then + echo "$as_me:$LINENO: result: $AWK" >&5 +echo "${ECHO_T}$AWK" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + test -n "$ARFLAG" || ARFLAGS="cr" @@ -22252,7 +22309,6 @@ s,@MV@,$MV,;t t s,@RM@,$RM,;t t s,@CP@,$CP,;t t s,@SED@,$SED,;t t -s,@AWK@,$AWK,;t t s,@ECHO@,$ECHO,;t t s,@CMP@,$CMP,;t t s,@TBL@,$TBL,;t t @@ -22267,6 +22323,7 @@ s,@PKGCONFIG@,$PKGCONFIG,;t t s,@WXCONFIG@,$WXCONFIG,;t t s,@CDRECORD@,$CDRECORD,;t t s,@PIDOF@,$PIDOF,;t t +s,@AWK@,$AWK,;t t s,@ARFLAGS@,$ARFLAGS,;t t s,@MAKE_SHELL@,$MAKE_SHELL,;t t s,@LOCAL_LIBS@,$LOCAL_LIBS,;t t diff --git a/bacula/kernstodo b/bacula/kernstodo index 2348d10e62..29521136d2 100644 --- a/bacula/kernstodo +++ b/bacula/kernstodo @@ -1,5 +1,5 @@ Kern's ToDo List - 23 January 2005 + 22 February 2005 Major development: Project Developer @@ -30,6 +30,9 @@ Suggestions for Preben: - Optimized bootstrap. For 1.37: +- Device resource needs the "name" of the SD. +- Add and option to see if the file size changed + during backup. - Implement "update device" from SD so that DIR will always have current version of device. - Add disk seeking on restore. diff --git a/bacula/scripts/bacula.in b/bacula/scripts/bacula.in index b530ad8cf3..9697517383 100755 --- a/bacula/scripts/bacula.in +++ b/bacula/scripts/bacula.in @@ -15,7 +15,7 @@ PSCMD="@PSCMD@" # On Solaris, you may need to use nawk, or alternatively, # add the GNU binaries to your path, such as /usr/xpg4/bin # -AWK=awk +AWK=@AWK@ # All these are not *really* needed but it makes it # easier to "steal" this code for the development diff --git a/bacula/scripts/btraceback.in b/bacula/scripts/btraceback.in index 656e8b31ef..36e9eca8e1 100755 --- a/bacula/scripts/btraceback.in +++ b/bacula/scripts/btraceback.in @@ -9,7 +9,7 @@ # $2 = main pid of running program to be traced back. # PNAME=`basename $1` -if test `uname -s` = SunOs ; then +if test `uname -s` = SunOS ; then gcore -o @working_dir@/${PNAME} $2 dbx $1 $2 <@scriptdir@/btraceback.dbx 2>&1 \ | @sbindir@/bsmtp -h @smtp_host@ -s "Bacula DBX traceback of ${PNAME}" @dump_email@ diff --git a/bacula/src/stored/acquire.c b/bacula/src/stored/acquire.c index 94ddeb0976..599af52a2d 100644 --- a/bacula/src/stored/acquire.c +++ b/bacula/src/stored/acquire.c @@ -286,6 +286,7 @@ default_path: } dev->state &= ~ST_APPEND; /* clear any previous append mode */ + dev->num_writers = 0; dev->state |= ST_READ; /* set read mode */ set_jcr_job_status(jcr, JS_Running); dir_send_job_status(jcr); @@ -329,7 +330,7 @@ bool reserve_device_for_append(JCR *jcr, DEVICE *dev) goto get_out; } Dmsg1(190, "reserve_append device is %s\n", dev_is_tape(dev)?"tape":"disk"); - if (dev->can_append()) { + if (dev->can_append() || dev->num_writers > 0) { Dmsg0(190, "device already in append.\n"); /* * Device already in append mode diff --git a/bacula/src/stored/block.c b/bacula/src/stored/block.c index 47efa0ff00..9ccad4999e 100644 --- a/bacula/src/stored/block.c +++ b/bacula/src/stored/block.c @@ -413,7 +413,7 @@ bool write_block_to_dev(DCR *dcr) Jmsg(jcr, M_FATAL, 0, _("Cannot write block. Device at EOM.\n")); return false; } - if (!(dev->state & ST_APPEND)) { + if (!dev->can_append()) { dev->dev_errno = EIO; Jmsg(jcr, M_FATAL, 0, _("Attempt to write on read-only Volume.\n")); return false; diff --git a/bacula/src/stored/dvd.c b/bacula/src/stored/dvd.c index 7d46115f97..495ecefa89 100644 --- a/bacula/src/stored/dvd.c +++ b/bacula/src/stored/dvd.c @@ -462,7 +462,7 @@ int open_next_part(DEVICE *dev) { dev->part_start += dev->part_size; dev->part++; - if ((dev->num_parts < dev->part) && (dev->state & ST_APPEND)) { + if ((dev->num_parts < dev->part) && dev->can_append()) { dev->num_parts = dev->part; /* Check that the next part file does not exists. diff --git a/bacula/src/stored/status.c b/bacula/src/stored/status.c index d09b93cf65..7ebbd19666 100644 --- a/bacula/src/stored/status.c +++ b/bacula/src/stored/status.c @@ -106,7 +106,7 @@ bool status_cmd(JCR *jcr) bnet_fsend(user, _("Device \"%s\" open but no Bacula volume is mounted.\n"), dev_name(dev)); } send_blocked_status(jcr, dev); - if (dev_state(dev, ST_APPEND)) { + if (dev->can_append()) { bpb = dev->VolCatInfo.VolCatBlocks; if (bpb <= 0) { bpb = 1; diff --git a/bacula/src/version.h b/bacula/src/version.h index aa58181edd..ff33c08bd1 100644 --- a/bacula/src/version.h +++ b/bacula/src/version.h @@ -1,8 +1,8 @@ /* */ #undef VERSION #define VERSION "1.37.4" -#define BDATE "20 February 2005" -#define LSMDATE "20Feb05" +#define BDATE "24 February 2005" +#define LSMDATE "24Feb05" /* Debug flags */ #undef DEBUG