* Version $Id$
*/
/*
- Copyright (C) 2000-2005 Kern Sibbald
+ Copyright (C) 2000-2006 Kern Sibbald
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
/*
* Establish a TLS connection -- server side
- * Returns: 1 on success
- * 0 failure
+ * Returns: true on success
+ * false on failure
*/
#ifdef HAVE_TLS
-int bnet_tls_server(TLS_CONTEXT *ctx, BSOCK * bsock, alist *verify_list)
+bool bnet_tls_server(TLS_CONTEXT *ctx, BSOCK * bsock, alist *verify_list)
{
TLS_CONNECTION *tls;
tls = new_tls_connection(ctx, bsock->fd);
if (!tls) {
Qmsg0(bsock->jcr, M_FATAL, 0, _("TLS connection initialization failed.\n"));
- return 0;
+ return false;
}
bsock->tls = tls;
goto err;
}
}
-
- return 1;
+ return true;
err:
free_tls_connection(tls);
bsock->tls = NULL;
- return 0;
+ return false;
}
/*
* Establish a TLS connection -- client side
- * Returns: 1 on success
- * 0 failure
+ * Returns: true on success
+ * false on failure
*/
-int bnet_tls_client(TLS_CONTEXT *ctx, BSOCK * bsock)
+bool bnet_tls_client(TLS_CONTEXT *ctx, BSOCK * bsock)
{
TLS_CONNECTION *tls;
tls = new_tls_connection(ctx, bsock->fd);
if (!tls) {
Qmsg0(bsock->jcr, M_FATAL, 0, _("TLS connection initialization failed.\n"));
- return 0;
+ return false;
}
bsock->tls = tls;
Qmsg1(bsock->jcr, M_FATAL, 0, _("TLS host certificate verification failed. Host %s did not match presented certificate\n"), bsock->host);
goto err;
}
-
- return 1;
+ return true;
err:
free_tls_connection(tls);
bsock->tls = NULL;
- return 0;
+ return false;
}
#else
-int bnet_tls_server(TLS_CONTEXT *ctx, BSOCK * bsock, alist *verify_list)
+bool bnet_tls_server(TLS_CONTEXT *ctx, BSOCK * bsock, alist *verify_list)
{
- Jmsg(bsock->jcr, M_ABORT, 0, _("TLS not configured.\n"));
- return 0;
+ Jmsg(bsock->jcr, M_ABORT, 0, _("TLS enabled but not configured.\n"));
+ return false;
}
-int bnet_tls_client(TLS_CONTEXT *ctx, BSOCK * bsock)
+bool bnet_tls_client(TLS_CONTEXT *ctx, BSOCK * bsock)
{
- Jmsg(bsock->jcr, M_ABORT, 0, _("TLS not configured.\n"));
- return 0;
+ Jmsg(bsock->jcr, M_ABORT, 0, _("TLS enable but not configured.\n"));
+ return false;
}
#endif /* HAVE_TLS */
}
if (!connected) {
- free_addresses(addr_list);
+ free_addresses(addr_list);
errno = save_errno;
return NULL;
}
return bnet_send(bs);
}
+int bnet_get_peer(BSOCK *bs, char *buf, socklen_t buflen) {
+#if !defined(HAVE_WIN32)
+ if (bs->peer_addr.sin_family == 0) {
+ socklen_t salen = sizeof(bs->peer_addr);
+ int rval = (getpeername)(bs->fd, (struct sockaddr *)&bs->peer_addr, &salen);
+ if (rval < 0) return rval;
+ }
+ if (!inet_ntop(bs->peer_addr.sin_family, &bs->peer_addr.sin_addr, buf, buflen))
+ return -1;
+
+ return 0;
+#else
+ return -1;
+#endif
+}
/*
* Set the network buffer size, suggested size is in size.
* Actual size obtained is returned in bs->msglen
* Returns previous socket flag
*/
int bnet_set_nonblocking (BSOCK *bsock) {
-#ifndef WIN32
+#ifndef HAVE_WIN32
int oflags;
/* Get current flags */
*/
int bnet_set_blocking (BSOCK *bsock)
{
-#ifndef WIN32
+#ifndef HAVE_WIN32
int oflags;
/* Get current flags */
if ((oflags = fcntl(bsock->fd, F_GETFL, 0)) < 0) {
*/
void bnet_restore_blocking (BSOCK *bsock, int flags)
{
-#ifndef WIN32
+#ifndef HAVE_WIN32
if ((fcntl(bsock->fd, F_SETFL, flags)) < 0) {
berrno be;
Jmsg1(bsock->jcr, M_ABORT, 0, _("fcntl F_SETFL error. ERR=%s\n"), be.strerror());
bsock->who = bstrdup(who);
bsock->host = bstrdup(host);
bsock->port = port;
+ memset(&bsock->peer_addr, 0, sizeof(bsock->peer_addr));
memcpy(&bsock->client_addr, client_addr, sizeof(bsock->client_addr));
/*
* ****FIXME**** reduce this to a few hours once