From: Kern Sibbald Date: Fri, 16 Feb 2007 08:45:16 +0000 (+0000) Subject: kes Add FD event sequence order prepared by Eric -- for RunScripts. X-Git-Tag: Release-7.0.0~6888 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=fbe26e3316ee5253da5bd448aa516374044ccf47;p=bacula%2Fbacula kes Add FD event sequence order prepared by Eric -- for RunScripts. kes Fix 12am/pm bug as reported in bug #782. git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@4186 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/src/dird/run_conf.c b/bacula/src/dird/run_conf.c index 334ef8a184..b92ee123e7 100644 --- a/bacula/src/dird/run_conf.c +++ b/bacula/src/dird/run_conf.c @@ -1,16 +1,7 @@ -/* - * - * Configuration parser for Director Run Configuration - * directives, which are part of the Schedule Resource - * - * Kern Sibbald, May MM - * - * Version $Id$ - */ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2006 Free Software Foundation Europe e.V. + Copyright (C) 2000-2007 Free Software Foundation Europe e.V. The main author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. @@ -34,6 +25,15 @@ (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, Switzerland, email:ftf@fsfeurope.org. */ +/* + * + * Configuration parser for Director Run Configuration + * directives, which are part of the Schedule Resource + * + * Kern Sibbald, May MM + * + * Version $Id$ + */ #include "bacula.h" #include "dird.h" @@ -66,7 +66,7 @@ enum e_state { }; struct s_keyw { - const char *name; /* keyword */ + const char *name; /* keyword */ enum e_state state; /* parser state */ int code; /* state value */ }; @@ -337,7 +337,8 @@ void store_run(LEX *lc, RES_ITEM *item, int index, int pass) set_defaults(); for ( ; token != T_EOL; (token = lex_get_token(lc, T_ALL))) { - int len, pm = 0; + int len; + bool pm = false; switch (token) { case T_NUMBER: state = s_mday; @@ -361,6 +362,7 @@ void store_run(LEX *lc, RES_ITEM *item, int index, int pass) code = atoi(lc->str+1); if (code < 0 || code > 53) { scan_err0(lc, _("Week number out of range (0-53)")); + /* NOT REACHED */ } state = s_woy; /* week of year */ break; @@ -442,24 +444,31 @@ void store_run(LEX *lc, RES_ITEM *item, int index, int pass) len = strlen(p); if (len > 2 && p[len-1] == 'm') { if (p[len-2] == 'a') { - pm = 0; + pm = false; } else if (p[len-2] == 'p') { - pm = 1; + pm = true; } else { scan_err0(lc, _("Bad time specification.")); /* NOT REACHED */ } } else { - pm = 0; + pm = false; } code2 = atoi(p); /* pick up minutes */ + /* + * Note, according to NIST, 12am and 12pm are ambiguous and + * can be defined to anything. However, 12:01am is the same + * as 00:01 and 12:01pm is the same as 12:01, so we define + * 12am as 00:00 and 12pm as 12:00. + */ if (pm) { /* Convert to 24 hour time */ - if (code == 12) { - code -= 12; - } else { + if (code != 12) { code += 12; } + /* am */ + } else if (code == 12) { + code -= 12; } if (code < 0 || code > 23 || code2 < 0 || code2 > 59) { scan_err0(lc, _("Bad time specification.")); diff --git a/bacula/src/filed/backup.c b/bacula/src/filed/backup.c index 8b63b528a4..1f970301f9 100644 --- a/bacula/src/filed/backup.c +++ b/bacula/src/filed/backup.c @@ -124,7 +124,7 @@ bool blast_data_to_storage_daemon(JCR *jcr, char *addr) /* Get the session data size */ if (crypto_session_encode(jcr->pki_session, (uint8_t *)0, &size) == false) { - Jmsg(jcr, M_FATAL, 0, _("An error occured while encrypting the stream.\n")); + Jmsg(jcr, M_FATAL, 0, _("An error occurred while encrypting the stream.\n")); return 0; } @@ -136,7 +136,7 @@ bool blast_data_to_storage_daemon(JCR *jcr, char *addr) /* Encode session data */ if (crypto_session_encode(jcr->pki_session, jcr->pki_session_encoded, &size) == false) { - Jmsg(jcr, M_FATAL, 0, _("An error occured while encrypting the stream.\n")); + Jmsg(jcr, M_FATAL, 0, _("An error occurred while encrypting the stream.\n")); return 0; } @@ -364,7 +364,7 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr, bool top_level) if (jcr->pki_sign) { signing_digest = crypto_digest_new(signing_algorithm); - /* Full-stop if a failure occured initializing the signature digest */ + /* Full-stop if a failure occurred initializing the signature digest */ if (signing_digest == NULL) { Jmsg(jcr, M_NOTSAVED, 0, _("%s signature digest initialization failed\n"), stream_to_ascii(signing_algorithm)); @@ -434,6 +434,7 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr, bool top_level) /* Set up the encryption context, send the session data to the SD */ if (jcr->pki_encrypt) { /* Send our header */ + Dmsg2(100, "Send hdr fi=%ld stream=%d\n", jcr->JobFiles, STREAM_ENCRYPTED_SESSION_DATA); bnet_fsend(sd, "%ld %d 0", jcr->JobFiles, STREAM_ENCRYPTED_SESSION_DATA); /* Grow the bsock buffer to fit our message if necessary */ @@ -446,6 +447,7 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr, bool top_level) sd->msglen = jcr->pki_session_encoded_size; jcr->JobBytes += sd->msglen; + Dmsg1(100, "Send data len=%d\n", sd->msglen); bnet_send(sd); bnet_sig(sd, BNET_EOD); } @@ -531,13 +533,13 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr, bool top_level) } if (crypto_sign_add_signer(sig, signing_digest, jcr->pki_keypair) == false) { - Jmsg(jcr, M_FATAL, 0, _("An error occured while signing the stream.\n")); + Jmsg(jcr, M_FATAL, 0, _("An error occurred while signing the stream.\n")); return 0; } /* Get signature size */ if (crypto_sign_encode(sig, NULL, &size) == false) { - Jmsg(jcr, M_FATAL, 0, _("An error occured while signing the stream.\n")); + Jmsg(jcr, M_FATAL, 0, _("An error occurred while signing the stream.\n")); return 0; } @@ -550,7 +552,7 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr, bool top_level) /* Encode signature data */ if (crypto_sign_encode(sig, buf, &size) == false) { - Jmsg(jcr, M_FATAL, 0, _("An error occured while signing the stream.\n")); + Jmsg(jcr, M_FATAL, 0, _("An error occurred while signing the stream.\n")); return 0; } diff --git a/bacula/src/filed/job.c b/bacula/src/filed/job.c index 89a7c52c95..c29b2461e5 100644 --- a/bacula/src/filed/job.c +++ b/bacula/src/filed/job.c @@ -1,11 +1,3 @@ -/* - * Bacula File Daemon Job processing - * - * Kern Sibbald, October MM - * - * Version $Id$ - * - */ /* Bacula® - The Network Backup Solution @@ -33,6 +25,14 @@ (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, Switzerland, email:ftf@fsfeurope.org. */ +/* + * Bacula File Daemon Job processing + * + * Kern Sibbald, October MM + * + * Version $Id$ + * + */ #include "bacula.h" #include "filed.h" @@ -179,7 +179,23 @@ static char read_close[] = "read close session %d\n"; * Accept commands one at a time from the Director * and execute them. * + * Concerning ClientRunBefore/After, the sequence of events + * is rather critical. If they are not done in the right + * order one can easily get FD->SD timeouts if the script + * runs a long time. + * + * The current sequence of events is: + * 1. Dir starts job with FD + * 2. Dir connects to SD + * 3. Dir connects to FD + * 4. FD connects to SD + * 5. FD gets/runs ClientRunBeforeJob and sends ClientRunAfterJob + * 6. Dir sends include/exclude + * 7. FD sends data to SD + * 8. SD/FD disconnects while SD despools data and attributes (optionnal) + * 9. FD runs ClientRunAfterJob */ + void *handle_client_request(void *dirp) { int i; diff --git a/bacula/src/filed/restore.c b/bacula/src/filed/restore.c index e7d0f1bfde..81c991e012 100644 --- a/bacula/src/filed/restore.c +++ b/bacula/src/filed/restore.c @@ -417,7 +417,7 @@ void do_restore(JCR *jcr) break; default: /* Shouldn't happen */ - Jmsg1(jcr, M_ERROR, 0, _("An error occured while decoding encrypted session data stream: %s\n"), crypto_strerror(cryptoerr)); + Jmsg1(jcr, M_ERROR, 0, _("An error occurred while decoding encrypted session data stream: %s\n"), crypto_strerror(cryptoerr)); break; } diff --git a/bacula/src/version.h b/bacula/src/version.h index e08264fc02..848c1621d1 100644 --- a/bacula/src/version.h +++ b/bacula/src/version.h @@ -4,8 +4,8 @@ #undef VERSION #define VERSION "2.1.4" -#define BDATE "12 February 2007" -#define LSMDATE "12Feb07" +#define BDATE "16 February 2007" +#define LSMDATE "16Feb07" #define PROG_COPYRIGHT "Copyright (C) %d-2007 Free Software Foundation Europe e.V.\n" #define BYEAR "2007" /* year for copyright messages in progs */ diff --git a/bacula/technotes-2.1 b/bacula/technotes-2.1 index 3dcef37cd9..3d4645a51d 100644 --- a/bacula/technotes-2.1 +++ b/bacula/technotes-2.1 @@ -1,6 +1,9 @@ Technical notes on version 2.1 General: +16Feb07 +kes Add FD event sequence order prepared by Eric -- for RunScripts. +kes Fix 12am/pm bug as reported in bug #782. 13Feb07 kes Apply Eric's ClientRunScriptAfter patch to 2.0 and 2.1. ebl Use btime_t instead of uint64_t in media patch.