]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/lib/tls.c
Move bnet_despool() into class in bsock.c
[bacula/bacula] / bacula / src / lib / tls.c
index d9d3b510027adf54527fe7e7588f1242e59f0a47..d89d7676012d8ab64f2ea343dd1a8ddfd8dd8771 100644 (file)
@@ -5,8 +5,6 @@
  *
  * Version $Id$
  *
- * Copyright (C) 2005 Kern Sibbald
- *
  * This file was contributed to the Bacula project by Landon Fuller
  * and Three Rings Design, Inc.
  *
  * Landon Fuller <landonf@threerings.net>.
  */
 /*
-   Copyright (C) 2005 Kern Sibbald
+   Bacula® - The Network Backup Solution
 
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License
-   version 2 as amended with additional clauses defined in the
-   file LICENSE in the main source directory.
+   Copyright (C) 2005-2007 Free Software Foundation Europe e.V.
 
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
-   the file LICENSE for additional details.
+   The main author of Bacula is Kern Sibbald, with contributions from
+   many others, a complete list can be found in the file AUTHORS.
+   This program is Free Software; you can redistribute it and/or
+   modify it under the terms of version two of the GNU General Public
+   License as published by the Free Software Foundation plus additions
+   that are listed in the file LICENSE.
 
- */
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA.
+
+   Bacula® is a registered trademark of John Walker.
+   The licensor of Bacula is the Free Software Foundation Europe
+   (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
+   Switzerland, email:ftf@fsfeurope.org.
+*/
 
 
 #include "bacula.h"
@@ -230,7 +241,7 @@ bool tls_postconnect_verify_cn(TLS_CONNECTION *tls, alist *verify_list)
    SSL *ssl = tls->openssl;
    X509 *cert;
    X509_NAME *subject;
-   int auth_success = false;
+   bool auth_success = false;
    char data[256];
 
    /* Check if peer provided a certificate */
@@ -269,7 +280,7 @@ bool tls_postconnect_verify_host(TLS_CONNECTION *tls, const char *host)
    SSL *ssl = tls->openssl;
    X509 *cert;
    X509_NAME *subject;
-   int auth_success = false;
+   bool auth_success = false;
    int extensions;
    char data[256];
    int i, j;
@@ -432,8 +443,6 @@ static inline bool openssl_bsock_session_start(BSOCK *bsock, bool server)
 
    /* Zero the fdset, we'll set our fd prior to each invocation of select() */
    FD_ZERO(&fdset);
-   tv.tv_sec = 10;
-   tv.tv_usec = 0;
    fdmax = bsock->fd + 1;
 
    /* Ensure that socket is non-blocking */
@@ -452,31 +461,37 @@ static inline bool openssl_bsock_session_start(BSOCK *bsock, bool server)
 
       /* Handle errors */
       switch (SSL_get_error(tls->openssl, err)) {
-           case SSL_ERROR_NONE:
-              stat = true;
-              goto cleanup;
-           case SSL_ERROR_ZERO_RETURN:
-              /* TLS connection was cleanly shut down */
-              openssl_post_errors(M_ERROR, _("Connect failure"));
-              stat = false;
-              goto cleanup;
-           case SSL_ERROR_WANT_READ:
-              /* If we timeout of a select, this will be unset */
-              FD_SET((unsigned) bsock->fd, &fdset);
-              /* 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->fd, &fdset);
-              /* Block until we can write */
-              select(fdmax, NULL, &fdset, &fdset, &tv);
-              break;
-           default:
-              /* Socket Error Occured */
-              openssl_post_errors(M_ERROR, _("Connect failure"));
-              stat = false;
-              goto cleanup;
+      case SSL_ERROR_NONE:
+         stat = true;
+         goto cleanup;
+      case SSL_ERROR_ZERO_RETURN:
+         /* TLS connection was cleanly shut down */
+         openssl_post_errors(M_ERROR, _("Connect failure"));
+         stat = false;
+         goto cleanup;
+      case SSL_ERROR_WANT_READ:
+         /* If we timeout of a select, this will be unset */
+         FD_SET((unsigned) bsock->fd, &fdset);
+         /* Set our timeout */
+         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->fd, &fdset);
+         /* Set our timeout */
+         tv.tv_sec = 10;
+         tv.tv_usec = 0;
+         /* Block until we can write */
+         select(fdmax, NULL, &fdset, &fdset, &tv);
+         break;
+      default:
+         /* Socket Error Occured */
+         openssl_post_errors(M_ERROR, _("Connect failure"));
+         stat = false;
+         goto cleanup;
       }
 
       if (bsock->timed_out) {
@@ -575,8 +590,6 @@ static inline int openssl_bsock_readwrite(BSOCK *bsock, char *ptr, int nbytes, b
 
    /* Zero the fdset, we'll set our fd prior to each invocation of select() */
    FD_ZERO(&fdset);
-   tv.tv_sec = 10;
-   tv.tv_usec = 0;
    fdmax = bsock->fd + 1;
 
    /* Ensure that socket is non-blocking */
@@ -598,32 +611,36 @@ static inline int openssl_bsock_readwrite(BSOCK *bsock, char *ptr, int nbytes, b
 
       /* Handle errors */
       switch (SSL_get_error(tls->openssl, nwritten)) {
-         case SSL_ERROR_NONE:
-            nleft -= nwritten;
-            if (nleft) {
-               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->fd, &fdset);
-            /* 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->fd, &fdset);
-            /* Block until we can write */
-            select(fdmax, NULL, &fdset, &fdset, &tv);
-            break;
-         default:
-            /* Socket Error Occured */
-            openssl_post_errors(M_ERROR, _("TLS read/write failure."));
-            goto cleanup;
+      case SSL_ERROR_NONE:
+         nleft -= nwritten;
+         if (nleft) {
+            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->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->fd, &fdset);
+         tv.tv_sec = 10;
+         tv.tv_usec = 0;
+         /* Block until we can write */
+         select(fdmax, NULL, &fdset, &fdset, &tv);
+         break;
+      default:
+         /* Socket Error Occured */
+         openssl_post_errors(M_ERROR, _("TLS read/write failure."));
+         goto cleanup;
       }
 
       /* Everything done? */