]> git.sur5r.net Git - bacula/bacula/commitdiff
kes Remove some duplicated code in tls.c
authorKern Sibbald <kern@sibbald.com>
Sat, 23 Jun 2007 09:58:34 +0000 (09:58 +0000)
committerKern Sibbald <kern@sibbald.com>
Sat, 23 Jun 2007 09:58:34 +0000 (09:58 +0000)
kes  Move more of the bsock member variables into private and access
     them with methods.
kes  Add Frank Sweetser's tls-test to the regression suite.

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@5066 91ce42f0-d328-0410-95d8-f526ca767f89

17 files changed:
bacula/src/dird/getmsg.c
bacula/src/dird/msgchan.c
bacula/src/filed/heartbeat.c
bacula/src/filed/job.c
bacula/src/jcr.h
bacula/src/lib/bnet.c
bacula/src/lib/bsock.c
bacula/src/lib/bsock.h
bacula/src/lib/btimers.c
bacula/src/lib/jcr.c
bacula/src/lib/tls.c
bacula/src/stored/append.c
bacula/src/stored/mac.c
bacula/src/stored/spool.c
bacula/src/stored/stored.c
bacula/src/version.h
bacula/technotes-2.1

index 6ce63bf5e85c10aeb3bd17e3cf57cf34dc169361..7a183ba43b71809a58315f3089b98f331fb0fb6b 100644 (file)
@@ -121,7 +121,7 @@ int bget_dirmsg(BSOCK *bs)
             bs->fsend(OK_msg);/* send response */
             return n;              /* end of data */
          case BNET_TERMINATE:
-            bs->m_terminated = 1;
+            bs->set_terminated();
             return n;
          case BNET_POLL:
             bs->fsend(OK_msg); /* send response */
index ea1bfa390beacd254de324a81373113b1fe6a9d9..bdf82f7bd3ef1731f57fa6da52f363242e95fd29 100644 (file)
@@ -409,8 +409,8 @@ void wait_for_storage_daemon_termination(JCR *jcr)
       V(mutex);
       if (job_canceled(jcr)) {
          if (jcr->SD_msg_chan) {
-            jcr->store_bsock->m_timed_out = 1;
-            jcr->store_bsock->m_terminated = 1;
+            jcr->store_bsock->set_timed_out();
+            jcr->store_bsock->set_terminated();
             Dmsg2(400, "kill jobid=%d use=%d\n", (int)jcr->JobId, jcr->use_count());
             pthread_kill(jcr->SD_msg_chan, TIMEOUT_SIGNAL);
          }
index ef2f455a1f1cfb6bdaa3556f80d22ec0554743ba..0d45d1dae245eda644949120e1d758cfba3a2295 100644 (file)
@@ -129,12 +129,12 @@ void stop_heartbeat_monitor(JCR *jcr)
    }
 
    if (jcr->hb_bsock) {
-      jcr->hb_bsock->m_timed_out = true;    /* set timed_out to terminate read */
-      jcr->hb_bsock->m_terminated = true;   /* set to terminate read */
+      jcr->hb_bsock->set_timed_out();       /* set timed_out to terminate read */
+      jcr->hb_bsock->set_terminated();      /* set to terminate read */
    }
    if (jcr->hb_dir_bsock) {
-      jcr->hb_dir_bsock->m_timed_out = true;  /* set timed_out to terminate read */
-      jcr->hb_dir_bsock->m_terminated = true; /* set to terminate read */
+      jcr->hb_dir_bsock->set_timed_out();     /* set timed_out to terminate read */
+      jcr->hb_dir_bsock->set_terminated();    /* set to terminate read */
    }
    Dmsg0(100, "Send kill to heartbeat id\n");
    pthread_kill(jcr->heartbeat_id, TIMEOUT_SIGNAL);  /* make heartbeat thread go away */
index ad0d4d68bde1b1298e56202e4ecfb7a03f006f52..fed4e2f5f010e6793f5885d9ee2eaf040252a78b 100644 (file)
@@ -373,8 +373,8 @@ static int cancel_cmd(JCR *jcr)
          bnet_fsend(dir, _("2901 Job %s not found.\n"), Job);
       } else {
          if (cjcr->store_bsock) {
-            cjcr->store_bsock->m_timed_out = 1;
-            cjcr->store_bsock->m_terminated = 1;
+            cjcr->store_bsock->set_timed_out();
+            cjcr->store_bsock->set_terminated();
             pthread_kill(cjcr->my_thread_id, TIMEOUT_SIGNAL);
          }
          set_jcr_job_status(cjcr, JS_Canceled);
index 81611df8c24f3aade84fccad74a7ebc52a0af867..89e2095cdbc2308cdf4e1c4413eee8f1bfe1c685 100644 (file)
@@ -283,8 +283,8 @@ public:
    uint32_t StartBlock;
    uint32_t EndBlock;
    pthread_t heartbeat_id;            /* id of heartbeat thread */
-   volatile BSOCK *hb_bsock;          /* duped SD socket */
-   volatile BSOCK *hb_dir_bsock;      /* duped DIR socket */
+   BSOCK *hb_bsock;                   /* duped SD socket */
+   BSOCK *hb_dir_bsock;               /* duped DIR socket */
    alist *RunScripts;                 /* Commands to run before and after job */
    bool pki_sign;                     /* Enable PKI Signatures? */
    bool pki_encrypt;                  /* Enable PKI Encryption? */
index beec5573cb9cb7a4470d5629e51a1d66914abe5b..08481133c0ced1839e5ea5e9281e6e7096596b0a 100644 (file)
@@ -110,7 +110,7 @@ int32_t write_nbytes(BSOCK * bsock, char *ptr, int32_t nbytes)
 {
    int32_t nleft, nwritten;
 
-   if (bsock->m_spool) {
+   if (bsock->is_spooling()) {
       nwritten = fwrite(ptr, 1, nbytes, bsock->m_spool_fd);
       if (nwritten != nbytes) {
          berrno be;
@@ -698,7 +698,7 @@ BSOCK *dup_bsock(BSOCK * osock)
    if (osock->host()) {
       bsock->set_host(bstrdup(osock->host()));
    }
-   bsock->m_duped = true;
+   bsock->set_duped();
    return bsock;
 }
 
index 21642ea207fe9f3abce02602cb7609fbb19fe22a..809431f40a4f5d8f6c94c25d3bcc442ac8fe8f66 100644 (file)
@@ -287,7 +287,7 @@ bool BSOCK::send()
 
    /* send data packet */
    timer_start = watchdog_time;  /* start timer */
-   m_timed_out = 0;
+   clear_timed_out();
    /* Full I/O done in one write */
    rc = write_nbytes(this, (char *)hdr, pktsiz);
    timer_start = 0;         /* clear timer */
@@ -376,7 +376,7 @@ int32_t BSOCK::recv()
 
    read_seqno++;            /* bump sequence number */
    timer_start = watchdog_time;  /* set start wait time */
-   m_timed_out = 0;
+   clear_timed_out();
    /* get data size -- in int32_t */
    if ((nbytes = read_nbytes(this, (char *)&pktsiz, sizeof(int32_t))) <= 0) {
       timer_start = 0;      /* clear timer */
@@ -430,7 +430,7 @@ int32_t BSOCK::recv()
    }
 
    timer_start = watchdog_time;  /* set start wait time */
-   m_timed_out = 0;
+   clear_timed_out();
    /* now read the actual data */
    if ((nbytes = read_nbytes(this, msg, pktsiz)) <= 0) {
       timer_start = 0;      /* clear timer */
index aeea39cf39ec115cf980184703c951569876911b..0f963bafebd61ee9e0f8ff45137d53dd4c695b54 100644 (file)
@@ -58,6 +58,10 @@ private:
    char *m_host;                      /* Host name/IP */
    int m_port;                        /* desired port */
    btimer_t *m_tid;                   /* timer id */
+   volatile bool m_timed_out: 1;      /* timed out in read/write */
+   volatile bool m_terminated: 1;     /* set when BNET_TERMINATE arrives */
+   bool m_duped: 1;                   /* set if duped BSOCK */
+   bool m_spool: 1;                   /* set for spooling */
 
    void fin_init(JCR * jcr, int sockfd, const char *who, const char *host, int port,
                struct sockaddr *lclient_addr);
@@ -75,10 +79,6 @@ public:
    int m_blocking;                    /* blocking state (0 = nonblocking, 1 = blocking) */
    volatile int errors;               /* incremented for each error on socket */
    volatile bool m_suppress_error_msgs: 1; /* set to suppress error messages */
-   volatile bool m_timed_out: 1;      /* timed out in read/write */
-   volatile bool m_terminated: 1;     /* set when BNET_TERMINATE arrives */
-   bool m_duped: 1;                   /* set if duped BSOCK */
-   bool m_spool: 1;                   /* set for spooling */
    volatile time_t timer_start;       /* time started read/write */
    volatile time_t timeout;           /* timeout BSOCK after this interval */
    POOLMEM *msg;                      /* message pool buffer */
@@ -122,8 +122,15 @@ public:
    int port() { return m_port; };
    JCR *jcr() { return m_jcr; };
    JCR *get_jcr() { return m_jcr; };
+   bool is_spooling() { return m_spool; };
+   bool is_duped() { return m_duped; };
    bool is_terminated() { return m_terminated; };
    bool is_timed_out() { return m_timed_out; };
+   void set_spooling() { m_spool = true; };
+   void clear_spooling() { m_spool = false; };
+   void set_duped() { m_duped = true; };
+   void set_timed_out() { m_timed_out = true; };
+   void clear_timed_out() { m_timed_out = false; };
    void set_terminated() { m_terminated = true; };
    void start_timer(int sec) { m_tid = start_bsock_timer(this, sec); };
    void stop_timer() { stop_bsock_timer(m_tid); };
index 5f388fe0facbaf156d27bd2a20c5116c1fd0ab67..2e59cf0f7efecbf647a0ac5db8808a0bc36654ec 100644 (file)
@@ -225,7 +225,7 @@ static void callback_thread_timer(watchdog_t *self)
       wid->type == TYPE_BSOCK ? "bsock" : "thread", wid->tid, time(NULL));
 
    if (wid->type == TYPE_BSOCK && wid->bsock) {
-      wid->bsock->m_timed_out = true;
+      wid->bsock->set_timed_out();
    }
    pthread_kill(wid->tid, TIMEOUT_SIGNAL);
 }
index 638c451892898306c3eeb7ebeda4610e494d775d..a93e53346fda509ee2115b016f51ba46e85b9814 100644 (file)
@@ -745,7 +745,7 @@ static void jcr_timeout_check(watchdog_t *self)
          timer_start = fd->timer_start;
          if (timer_start && (watchdog_time - timer_start) > fd->timeout) {
             fd->timer_start = 0;      /* turn off timer */
-            fd->m_timed_out = true;
+            fd->set_timed_out();
             Jmsg(jcr, M_ERROR, 0, _(
 "Watchdog sending kill after %d secs to thread stalled reading Storage daemon.\n"),
                  watchdog_time - timer_start);
@@ -757,7 +757,7 @@ static void jcr_timeout_check(watchdog_t *self)
          timer_start = fd->timer_start;
          if (timer_start && (watchdog_time - timer_start) > fd->timeout) {
             fd->timer_start = 0;      /* turn off timer */
-            fd->m_timed_out = true;
+            fd->set_timed_out();
             Jmsg(jcr, M_ERROR, 0, _(
 "Watchdog sending kill after %d secs to thread stalled reading File daemon.\n"),
                  watchdog_time - timer_start);
@@ -769,7 +769,7 @@ static void jcr_timeout_check(watchdog_t *self)
          timer_start = fd->timer_start;
          if (timer_start && (watchdog_time - timer_start) > fd->timeout) {
             fd->timer_start = 0;      /* turn off timer */
-            fd->m_timed_out = true;
+            fd->set_timed_out();
             Jmsg(jcr, M_ERROR, 0, _(
 "Watchdog sending kill after %d secs to thread stalled reading Director.\n"),
                  watchdog_time - timer_start);
index 0a8a15ef6166c811b0fcfcc8f6e6b905543ae339..54a3f88b10924fd0005dbf01e188ce7a7861909f 100644 (file)
@@ -1,24 +1,3 @@
-/*
- * tls.c TLS support functions
- *
- * Author: Landon Fuller <landonf@threerings.net>
- *
- * Version $Id$
- *
- * This file was contributed to the Bacula project by Landon Fuller
- * and Three Rings Design, Inc.
- *
- * Three Rings Design, Inc. has been granted a perpetual, worldwide,
- * non-exclusive, no-charge, royalty-free, irrevocable copyright
- * license to reproduce, prepare derivative works of, publicly
- * display, publicly perform, sublicense, and distribute the original
- * work contributed by Three Rings Design, Inc. and its employees to
- * the Bacula project in source or object form.
- *
- * If you wish to license contributions from Three Rings Design, Inc,
- * under an alternate open source license please contact
- * Landon Fuller <landonf@threerings.net>.
- */
 /*
    Bacula® - The Network Backup Solution
 
    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
    Switzerland, email:ftf@fsfeurope.org.
 */
+/*
+ * tls.c TLS support functions
+ *
+ * Author: Landon Fuller <landonf@threerings.net>
+ *
+ * Version $Id$
+ *
+ * This file was contributed to the Bacula project by Landon Fuller
+ * and Three Rings Design, Inc.
+ *
+ * Three Rings Design, Inc. has been granted a perpetual, worldwide,
+ * non-exclusive, no-charge, royalty-free, irrevocable copyright
+ * license to reproduce, prepare derivative works of, publicly
+ * display, publicly perform, sublicense, and distribute the original
+ * work contributed by Three Rings Design, Inc. and its employees to
+ * the Bacula project in source or object form.
+ *
+ * If you wish to license contributions from Three Rings Design, Inc,
+ * under an alternate open source license please contact
+ * Landon Fuller <landonf@threerings.net>.
+ */
 
 
 #include "bacula.h"
@@ -431,7 +431,6 @@ err:
    BIO_free(bio);
    SSL_free(tls->openssl);
    free(tls);
-
    return NULL;
 }
 
@@ -459,11 +458,11 @@ static inline bool openssl_bsock_session_start(BSOCK *bsock, bool server)
    fdmax = bsock->m_fd + 1;
 
    /* Ensure that socket is non-blocking */
-   flags = bnet_set_nonblocking(bsock);
+   flags = bsock->set_nonblocking();
 
    /* start timer */
    bsock->timer_start = watchdog_time;
-   bsock->m_timed_out = 0;
+   bsock->set_timed_out(false);
 
    for (;;) { 
       if (server) {
@@ -514,7 +513,7 @@ static inline bool openssl_bsock_session_start(BSOCK *bsock, bool server)
 
 cleanup:
    /* Restore saved flags */
-   bnet_restore_blocking(bsock, flags);
+   bsock->restore_blocking(flags);
    /* Clear timer */
    bsock->timer_start = 0;
 
@@ -529,7 +528,7 @@ cleanup:
 bool tls_bsock_connect(BSOCK *bsock)
 {
    /* SSL_connect(bsock->tls) */
-   return (openssl_bsock_session_start(bsock, false));
+   return openssl_bsock_session_start(bsock, false);
 }
 
 /*
@@ -540,7 +539,7 @@ bool tls_bsock_connect(BSOCK *bsock)
 bool tls_bsock_accept(BSOCK *bsock)
 {
    /* SSL_accept(bsock->tls) */
-   return (openssl_bsock_session_start(bsock, true));
+   return openssl_bsock_session_start(bsock, true);
 }
 
 /*
@@ -575,16 +574,16 @@ void tls_bsock_shutdown(BSOCK *bsock)
    err = SSL_shutdown(bsock->tls->openssl);
 
    switch (SSL_get_error(bsock->tls->openssl, err)) {
-      case SSL_ERROR_NONE:
-         break;
-      case SSL_ERROR_ZERO_RETURN:
-         /* TLS connection was shut down on us via a TLS protocol-level closure */
-         openssl_post_errors(M_ERROR, _("TLS shutdown failure."));
-         break;
-      default:
-         /* Socket Error Occured */
-         openssl_post_errors(M_ERROR, _("TLS shutdown failure."));
-         break;
+   case SSL_ERROR_NONE:
+      break;
+   case SSL_ERROR_ZERO_RETURN:
+      /* TLS connection was shut down on us via a TLS protocol-level closure */
+      openssl_post_errors(M_ERROR, _("TLS shutdown failure."));
+      break;
+   default:
+      /* Socket Error Occured */
+      openssl_post_errors(M_ERROR, _("TLS shutdown failure."));
+      break;
    }
 
    /* Restore saved flags */
@@ -610,12 +609,11 @@ static inline int openssl_bsock_readwrite(BSOCK *bsock, char *ptr, int nbytes, b
 
    /* start timer */
    bsock->timer_start = watchdog_time;
-   bsock->m_timed_out = 0;
+   bsock->set_timed_out(false);
 
    nleft = nbytes;
 
    while (nleft > 0) { 
-
       if (write) {
          nwritten = SSL_write(tls->openssl, ptr, nleft);
       } else {
@@ -630,26 +628,20 @@ static inline int openssl_bsock_readwrite(BSOCK *bsock, char *ptr, int nbytes, b
             ptr += nwritten;
          }
          break;
-      case SSL_ERROR_ZERO_RETURN:
-         /* TLS connection was cleanly shut down */
-         openssl_post_errors(M_ERROR, _("TLS read/write failure."));
-         goto cleanup;
+
       case SSL_ERROR_WANT_READ:
-         /* If we timeout of a select, this will be unset */
-         FD_SET((unsigned) bsock->m_fd, &fdset);
-         tv.tv_sec = 10;
-         tv.tv_usec = 0;
-         /* Block until we can read */
-         select(fdmax, &fdset, NULL, &fdset, &tv);
-         break;
       case SSL_ERROR_WANT_WRITE:
-         /* If we timeout of a select, this will be unset */
-         FD_SET((unsigned) bsock->m_fd, &fdset);
+         /* If we timeout on a select, this will be unset */
+         FD_SET((unsigned)bsock->m_fd, &fdset);
          tv.tv_sec = 10;
          tv.tv_usec = 0;
-         /* Block until we can write */
+         /* Block until we can read or write */
          select(fdmax, NULL, &fdset, &fdset, &tv);
          break;
+
+      case SSL_ERROR_ZERO_RETURN:
+         /* TLS connection was cleanly shut down */
+         /* Fall through wanted */
       default:
          /* Socket Error Occured */
          openssl_post_errors(M_ERROR, _("TLS read/write failure."));
@@ -673,26 +665,29 @@ cleanup:
 
    /* Clear timer */
    bsock->timer_start = 0;
-
    return nbytes - nleft;
 }
 
 
-int tls_bsock_writen(BSOCK *bsock, char *ptr, int32_t nbytes) {
+int tls_bsock_writen(BSOCK *bsock, char *ptr, int32_t nbytes) 
+{
    /* SSL_write(bsock->tls->openssl, ptr, nbytes) */
-   return (openssl_bsock_readwrite(bsock, ptr, nbytes, true));
+   return openssl_bsock_readwrite(bsock, ptr, nbytes, true);
 }
 
-int tls_bsock_readn(BSOCK *bsock, char *ptr, int32_t nbytes) {
+int tls_bsock_readn(BSOCK *bsock, char *ptr, int32_t nbytes) 
+{
    /* SSL_read(bsock->tls->openssl, ptr, nbytes) */
-   return (openssl_bsock_readwrite(bsock, ptr, nbytes, false));
+   return openssl_bsock_readwrite(bsock, ptr, nbytes, false);
 }
 
 #else /* HAVE_OPENSSL */
 # error No TLS implementation available.
 #endif /* !HAVE_OPENSSL */
 
-#else
+
+#else     /* TLS NOT enabled, dummy routines substituted */
+
 
 /* Dummy routines */
 TLS_CONTEXT *new_tls_context(const char *ca_certfile, const char *ca_certdir,
index f93af93fa31ada83f6b796d6310b196b8c012a08..1bda34c632c1eeb22aa03c5ced91d4795bc1bb0d 100644 (file)
@@ -236,17 +236,17 @@ bool do_append_data(JCR *jcr)
              crypto_digest_stream_type(stream) != CRYPTO_DIGEST_NONE) {
             if (!jcr->no_attributes) {
                if (are_attributes_spooled(jcr)) {
-                  jcr->dir_bsock->m_spool = true;
+                  jcr->dir_bsock->set_spooling();
                }
                Dmsg0(850, "Send attributes to dir.\n");
                if (!dir_update_file_attributes(dcr, &rec)) {
-                  jcr->dir_bsock->m_spool = false;
+                  jcr->dir_bsock->clear_spooling();
                   Jmsg(jcr, M_FATAL, 0, _("Error updating file attributes. ERR=%s\n"),
                      bnet_strerror(jcr->dir_bsock));
                   ok = false;
                   break;
                }
-               jcr->dir_bsock->m_spool = false;
+               jcr->dir_bsock->clear_spooling();
             }
          }
          Dmsg0(650, "Enter bnet_get\n");
index a1ad6a3a89d3575c5fb08e244762d284ef661ba7..16640f4e92259926734d2b46f5201658ba375baa 100644 (file)
@@ -240,16 +240,16 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec)
        crypto_digest_stream_type(stream) != CRYPTO_DIGEST_NONE) {
       if (!jcr->no_attributes) {
          if (are_attributes_spooled(jcr)) {
-            jcr->dir_bsock->m_spool = true;
+            jcr->dir_bsock->set_spooling();
          }
          Dmsg0(850, "Send attributes to dir.\n");
          if (!dir_update_file_attributes(jcr->dcr, rec)) {
-            jcr->dir_bsock->m_spool = false;
+            jcr->dir_bsock->clear_spooling();
             Jmsg(jcr, M_FATAL, 0, _("Error updating file attributes. ERR=%s\n"),
                bnet_strerror(jcr->dir_bsock));
             return false;
          }
-         jcr->dir_bsock->m_spool = false;
+         jcr->dir_bsock->clear_spooling();
       }
    }
 
index 1c8be6c8e2dc4785600867834e6ccef2198c5610..62426a0c34c13947a23327364ba5607e808869a4 100644 (file)
@@ -677,6 +677,6 @@ bool close_attr_spool_file(JCR *jcr, BSOCK *bs)
    unlink(name);
    free_pool_memory(name);
    bs->m_spool_fd = NULL;
-   bs->m_spool = false;
+   bs->clear_spooling();
    return true;
 }
index 8eff4fc49517cfd5af964dc7ed1e915da1d4803e..996f4fc358956d80e0708a4f7d0b0f2ffe6dca85 100644 (file)
@@ -555,7 +555,7 @@ void terminate_stored(int sig)
          set_jcr_job_status(jcr, JS_Canceled);
          fd = jcr->file_bsock;
          if (fd) {
-            fd->m_timed_out = true;
+            fd->set_timed_out();
             Dmsg1(100, "term_stored killing JobId=%d\n", jcr->JobId);
             pthread_kill(jcr->my_thread_id, TIMEOUT_SIGNAL);
             /* ***FIXME*** wiffle through all dcrs */
index ddd9938c56aef7aa196e097dcb12c490c9478516..5476016a83b74bb1ca0f6c11dcdc855f5a0a76f4 100644 (file)
@@ -4,8 +4,8 @@
 
 #undef  VERSION
 #define VERSION "2.1.21"
-#define BDATE   "21 June 2007"
-#define LSMDATE "21Jun07"
+#define BDATE   "23 June 2007"
+#define LSMDATE "23Jun07"
 
 #define PROG_COPYRIGHT "Copyright (C) %d-2007 Free Software Foundation Europe e.V.\n"
 #define BYEAR "2007"       /* year for copyright messages in progs */
index 40e5d68f488f66cde489763983f33d51ab2d47e3..cc0d7ea8859f82179e164cf0d568facbe2d1f068 100644 (file)
@@ -1,6 +1,11 @@
               Technical notes on version 2.1
 
 General:
+23Jun07
+kes  Remove some duplicated code in tls.c
+kes  Move more of the bsock member variables into private and access
+     them with methods.
+kes  Add Frank Sweetser's tls-test to the regression suite.
 22Jun07
 kes  Add Swedish sv.po file
 21Jun07