gnutls code compiled according to pre-processor var HAVE_GNUTLS
This commit is contained in:
parent
5e8b47f187
commit
ae8f8a5700
19
configure.in
19
configure.in
@ -66,16 +66,17 @@ AC_CHECK_FUNCS([gethostbyname gethostname getsockname gettimeofday inet_ntoa mem
|
|||||||
AH_VERBATIM([PLUGINS], [#undef PLUGINS])
|
AH_VERBATIM([PLUGINS], [#undef PLUGINS])
|
||||||
AH_VERBATIM([PLUGIN_PERL], [#undef PLUGIN_PERL])
|
AH_VERBATIM([PLUGIN_PERL], [#undef PLUGIN_PERL])
|
||||||
AH_VERBATIM([PLUGIN_PYTHON], [#undef PLUGIN_PYTHON])
|
AH_VERBATIM([PLUGIN_PYTHON], [#undef PLUGIN_PYTHON])
|
||||||
|
AH_VERBATIM([HAVE_GNUTLS], [#undef HAVE_GNUTLS])
|
||||||
AH_VERBATIM([DEBUG], [#undef DEBUG])
|
AH_VERBATIM([DEBUG], [#undef DEBUG])
|
||||||
|
|
||||||
AC_ARG_ENABLE(ncurses, [ --disable-ncurses Turn off ncurses interface (default=auto)],enable_ncurses=$enableval,enable_ncurses=yes)
|
AC_ARG_ENABLE(ncurses, [ --disable-ncurses Turn off ncurses interface (default=auto)],enable_ncurses=$enableval,enable_ncurses=yes)
|
||||||
AC_ARG_ENABLE(wxwidgets,[ --enable-wxwidgets Turn on WxWidgets interface (default=no)],enable_wxwidgets=$enableval,enable_wxwidgets=no)
|
AC_ARG_ENABLE(wxwidgets,[ --enable-wxwidgets Turn on WxWidgets interface (default=no)],enable_wxwidgets=$enableval,enable_wxwidgets=no)
|
||||||
AC_ARG_ENABLE(gtk, [ --enable-gtk Turn on Gtk+ interface (default=no)],enable_gtk=$enableval,enable_gtk=no)
|
AC_ARG_ENABLE(gtk, [ --enable-gtk Turn on Gtk+ interface (default=no)],enable_gtk=$enableval,enable_gtk=no)
|
||||||
AC_ARG_ENABLE(qt, [ --enable-qt Turn on Qt interface (default=no)],enable_qt=$enableval,enable_qt=no)
|
AC_ARG_ENABLE(qt, [ --enable-qt Turn on Qt interface (default=no)],enable_qt=$enableval,enable_qt=no)
|
||||||
AC_ARG_ENABLE(perl, [ --enable-perl Turn on Perl plugins (default=no)],enable_perl=$enableval,enable_perl=no)
|
AC_ARG_ENABLE(perl, [ --enable-perl Turn on Perl plugins (default=no)],enable_perl=$enableval,enable_perl=no)
|
||||||
AC_ARG_ENABLE(python, [ --enable-python Turn on Python plugins (default=no)],enable_python=$enableval,enable_python=no)
|
AC_ARG_ENABLE(python, [ --enable-python Turn on Python plugins (default=no)],enable_python=$enableval,enable_python=no)
|
||||||
AC_ARG_ENABLE(gnutls, [ --disable-gnutls Turn off gnutls support (default=yes)], enable_gnutls=no,enable_gnutls=yes)
|
AC_ARG_ENABLE(gnutls, [ --disable-gnutls Turn off gnutls support (default=yes)], enable_gnutls=no,enable_gnutls=yes)
|
||||||
AC_ARG_WITH(debug, [ --with-debug Debugging: 0=no debug, 1=debug compilation, 2=debug compilation + verbose msgs (default=0)],debug=$withval,debug=0)
|
AC_ARG_WITH(debug, [ --with-debug Debugging: 0=no debug, 1=debug compilation, 2=debug compilation + verbose msgs (default=0)],debug=$withval,debug=0)
|
||||||
|
|
||||||
enable_plugins="no"
|
enable_plugins="no"
|
||||||
enable_ruby="no"
|
enable_ruby="no"
|
||||||
@ -88,6 +89,7 @@ AM_CONDITIONAL(GUI_QT, test "$enable_qt" = "yes")
|
|||||||
AM_CONDITIONAL(PLUGIN_PERL, test "$enable_perl" = "yes")
|
AM_CONDITIONAL(PLUGIN_PERL, test "$enable_perl" = "yes")
|
||||||
AM_CONDITIONAL(PLUGIN_PYTHON, test "$enable_python" = "yes")
|
AM_CONDITIONAL(PLUGIN_PYTHON, test "$enable_python" = "yes")
|
||||||
# AM_CONDITIONAL(PLUGIN_RUBY, test "$enable_ruby" = "yes")
|
# AM_CONDITIONAL(PLUGIN_RUBY, test "$enable_ruby" = "yes")
|
||||||
|
AM_CONDITIONAL(HAVE_GNUTLS, test "$enable_gnutls" = "yes")
|
||||||
|
|
||||||
if test "x$enable_ncurses" = "xyes" ; then
|
if test "x$enable_ncurses" = "xyes" ; then
|
||||||
if test "$LIBNCURSES_FOUND" = "0" ; then
|
if test "$LIBNCURSES_FOUND" = "0" ; then
|
||||||
@ -235,6 +237,9 @@ if test "x$enable_gnutls" = "xyes" ; then
|
|||||||
*** libgnutls was not found. You may want to get it from
|
*** libgnutls was not found. You may want to get it from
|
||||||
*** ftp://ftp.gnutls.org/pub/gnutls/
|
*** ftp://ftp.gnutls.org/pub/gnutls/
|
||||||
]]))
|
]]))
|
||||||
|
GNUTLS_LIBS="-lgnutls"
|
||||||
|
AC_SUBST(GNUTLS_LIBS)
|
||||||
|
AC_DEFINE(HAVE_GNUTLS)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
CFLAGS=`echo $CFLAGS | sed s/-g//g`
|
CFLAGS=`echo $CFLAGS | sed s/-g//g`
|
||||||
|
@ -47,7 +47,10 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
#include <gnutls/gnutls.h>
|
#include <gnutls/gnutls.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_ICONV
|
#ifdef HAVE_ICONV
|
||||||
#include <iconv.h>
|
#include <iconv.h>
|
||||||
@ -75,7 +78,9 @@ char *local_charset = NULL; /* local charset, for example: ISO-8859-1 */
|
|||||||
|
|
||||||
int server_cmd_line; /* at least one server on WeeChat command line */
|
int server_cmd_line; /* at least one server on WeeChat command line */
|
||||||
|
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
gnutls_certificate_credentials gnutls_xcred; /* gnutls client credentials */
|
gnutls_certificate_credentials gnutls_xcred; /* gnutls client credentials */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -521,9 +526,11 @@ wee_init_vars ()
|
|||||||
msgq_last_msg = NULL;
|
msgq_last_msg = NULL;
|
||||||
|
|
||||||
/* init gnutls */
|
/* init gnutls */
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
gnutls_global_init ();
|
gnutls_global_init ();
|
||||||
gnutls_certificate_allocate_credentials (&gnutls_xcred);
|
gnutls_certificate_allocate_credentials (&gnutls_xcred);
|
||||||
gnutls_certificate_set_x509_trust_file (gnutls_xcred, "ca.pem", GNUTLS_X509_FMT_PEM);
|
gnutls_certificate_set_x509_trust_file (gnutls_xcred, "ca.pem", GNUTLS_X509_FMT_PEM);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -617,8 +624,12 @@ wee_shutdown (int return_code)
|
|||||||
if (local_charset)
|
if (local_charset)
|
||||||
free (local_charset);
|
free (local_charset);
|
||||||
alias_free_all ();
|
alias_free_all ();
|
||||||
|
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
gnutls_certificate_free_credentials (gnutls_xcred);
|
gnutls_certificate_free_credentials (gnutls_xcred);
|
||||||
gnutls_global_deinit();
|
gnutls_global_deinit();
|
||||||
|
#endif
|
||||||
|
|
||||||
exit (return_code);
|
exit (return_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +27,10 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
#include <gnutls/gnutls.h>
|
#include <gnutls/gnutls.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(ENABLE_NLS) && !defined(_)
|
#if defined(ENABLE_NLS) && !defined(_)
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
@ -108,7 +111,10 @@
|
|||||||
extern int quit_weechat;
|
extern int quit_weechat;
|
||||||
extern char *weechat_home;
|
extern char *weechat_home;
|
||||||
extern char *local_charset;
|
extern char *local_charset;
|
||||||
|
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
extern gnutls_certificate_credentials gnutls_xcred;
|
extern gnutls_certificate_credentials gnutls_xcred;
|
||||||
|
#endif
|
||||||
|
|
||||||
extern void wee_log_printf (char *, ...);
|
extern void wee_log_printf (char *, ...);
|
||||||
extern void wee_dump (int);
|
extern void wee_dump (int);
|
||||||
|
@ -24,7 +24,7 @@ weechat_curses_LDADD = ../lib_weechat_gui_common.a \
|
|||||||
../../irc/lib_weechat_irc.a \
|
../../irc/lib_weechat_irc.a \
|
||||||
$(NCURSES_LIBS) \
|
$(NCURSES_LIBS) \
|
||||||
../../plugins/lib_weechat_plugins.a $(PLUGINS_LIBS) \
|
../../plugins/lib_weechat_plugins.a $(PLUGINS_LIBS) \
|
||||||
-lgnutls
|
$(GNUTLS_LIBS)
|
||||||
|
|
||||||
weechat_curses_SOURCES = gui-display.c \
|
weechat_curses_SOURCES = gui-display.c \
|
||||||
gui-input.c
|
gui-input.c
|
||||||
|
@ -38,7 +38,10 @@
|
|||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
#include <gnutls/gnutls.h>
|
#include <gnutls/gnutls.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "../common/weechat.h"
|
#include "../common/weechat.h"
|
||||||
#include "irc.h"
|
#include "irc.h"
|
||||||
@ -87,6 +90,9 @@ server_init (t_irc_server *server)
|
|||||||
server->child_write = -1;
|
server->child_write = -1;
|
||||||
server->sock = -1;
|
server->sock = -1;
|
||||||
server->is_connected = 0;
|
server->is_connected = 0;
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
|
server->ssl_connected = 0;
|
||||||
|
#endif
|
||||||
server->unterminated_message = NULL;
|
server->unterminated_message = NULL;
|
||||||
server->nick = NULL;
|
server->nick = NULL;
|
||||||
server->reconnect_start = 0;
|
server->reconnect_start = 0;
|
||||||
@ -383,9 +389,11 @@ server_send (t_irc_server *server, char *buffer, int size_buf)
|
|||||||
if (!server)
|
if (!server)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (server->ssl)
|
#ifdef HAVE_GNUTLS
|
||||||
|
if (server->ssl_connected)
|
||||||
return gnutls_record_send (server->gnutls_sess, buffer, size_buf);
|
return gnutls_record_send (server->gnutls_sess, buffer, size_buf);
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
return send (server->sock, buffer, size_buf, 0);
|
return send (server->sock, buffer, size_buf, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -660,9 +668,11 @@ server_recv (t_irc_server *server)
|
|||||||
if (!server)
|
if (!server)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (server->ssl)
|
#ifdef HAVE_GNUTLS
|
||||||
|
if (server->ssl_connected)
|
||||||
num_read = gnutls_record_recv (server->gnutls_sess, buffer, sizeof (buffer) - 2);
|
num_read = gnutls_record_recv (server->gnutls_sess, buffer, sizeof (buffer) - 2);
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
num_read = recv (server->sock, buffer, sizeof (buffer) - 2, 0);
|
num_read = recv (server->sock, buffer, sizeof (buffer) - 2, 0);
|
||||||
|
|
||||||
if (num_read > 0)
|
if (num_read > 0)
|
||||||
@ -721,12 +731,16 @@ server_close_connection (t_irc_server *server)
|
|||||||
/* close network socket */
|
/* close network socket */
|
||||||
if (server->sock != -1)
|
if (server->sock != -1)
|
||||||
{
|
{
|
||||||
if (server->ssl)
|
#ifdef HAVE_GNUTLS
|
||||||
|
if (server->ssl_connected)
|
||||||
gnutls_bye (server->gnutls_sess, GNUTLS_SHUT_RDWR);
|
gnutls_bye (server->gnutls_sess, GNUTLS_SHUT_RDWR);
|
||||||
|
#endif
|
||||||
close (server->sock);
|
close (server->sock);
|
||||||
server->sock = -1;
|
server->sock = -1;
|
||||||
if (server->ssl)
|
#ifdef HAVE_GNUTLS
|
||||||
|
if (server->ssl_connected)
|
||||||
gnutls_deinit (server->gnutls_sess);
|
gnutls_deinit (server->gnutls_sess);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* free any pending message */
|
/* free any pending message */
|
||||||
@ -738,6 +752,9 @@ server_close_connection (t_irc_server *server)
|
|||||||
|
|
||||||
/* server is now disconnected */
|
/* server is now disconnected */
|
||||||
server->is_connected = 0;
|
server->is_connected = 0;
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
|
server->ssl_connected = 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -776,7 +793,8 @@ server_child_read (t_irc_server *server)
|
|||||||
/* connection OK */
|
/* connection OK */
|
||||||
case '0':
|
case '0':
|
||||||
/* enable SSL if asked */
|
/* enable SSL if asked */
|
||||||
if (server->ssl)
|
#ifdef HAVE_GNUTLS
|
||||||
|
if (server->ssl_connected)
|
||||||
{
|
{
|
||||||
gnutls_transport_set_ptr (server->gnutls_sess, (gnutls_transport_ptr) server->sock);
|
gnutls_transport_set_ptr (server->gnutls_sess, (gnutls_transport_ptr) server->sock);
|
||||||
if (gnutls_handshake (server->gnutls_sess) < 0)
|
if (gnutls_handshake (server->gnutls_sess) < 0)
|
||||||
@ -790,6 +808,7 @@ server_child_read (t_irc_server *server)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
/* kill child and login to server */
|
/* kill child and login to server */
|
||||||
server_kill_child (server);
|
server_kill_child (server);
|
||||||
irc_login (server);
|
irc_login (server);
|
||||||
@ -878,8 +897,20 @@ server_connect (t_irc_server *server)
|
|||||||
{
|
{
|
||||||
int child_pipe[2], set;
|
int child_pipe[2], set;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
const int cert_type_prio[] = { GNUTLS_CRT_X509, GNUTLS_CRT_OPENPGP, 0 };
|
const int cert_type_prio[] = { GNUTLS_CRT_X509, GNUTLS_CRT_OPENPGP, 0 };
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_GNUTLS
|
||||||
|
if (server->ssl)
|
||||||
|
{
|
||||||
|
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||||
|
gui_printf (server->buffer,
|
||||||
|
_("%s cannot connect with SSL since WeeChat was not built "
|
||||||
|
"with GNUtls support\n"), WEECHAT_ERROR);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
irc_display_prefix (server->buffer, PREFIX_INFO);
|
irc_display_prefix (server->buffer, PREFIX_INFO);
|
||||||
gui_printf (server->buffer,
|
gui_printf (server->buffer,
|
||||||
_("%s: connecting to %s:%d%s...\n"),
|
_("%s: connecting to %s:%d%s...\n"),
|
||||||
@ -893,6 +924,8 @@ server_connect (t_irc_server *server)
|
|||||||
server_close_connection (server);
|
server_close_connection (server);
|
||||||
|
|
||||||
/* init SSL if asked */
|
/* init SSL if asked */
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
|
server->ssl_connected = 0;
|
||||||
if (server->ssl)
|
if (server->ssl)
|
||||||
{
|
{
|
||||||
if (gnutls_init (&server->gnutls_sess, GNUTLS_CLIENT) != 0)
|
if (gnutls_init (&server->gnutls_sess, GNUTLS_CLIENT) != 0)
|
||||||
@ -905,7 +938,9 @@ server_connect (t_irc_server *server)
|
|||||||
gnutls_set_default_priority (server->gnutls_sess);
|
gnutls_set_default_priority (server->gnutls_sess);
|
||||||
gnutls_certificate_type_set_priority (server->gnutls_sess, cert_type_prio);
|
gnutls_certificate_type_set_priority (server->gnutls_sess, cert_type_prio);
|
||||||
gnutls_credentials_set (server->gnutls_sess, GNUTLS_CRD_CERTIFICATE, gnutls_xcred);
|
gnutls_credentials_set (server->gnutls_sess, GNUTLS_CRD_CERTIFICATE, gnutls_xcred);
|
||||||
|
server->ssl_connected = 1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* create pipe for child process */
|
/* create pipe for child process */
|
||||||
if (pipe (child_pipe) < 0)
|
if (pipe (child_pipe) < 0)
|
||||||
|
@ -21,10 +21,18 @@
|
|||||||
#ifndef __WEECHAT_IRC_H
|
#ifndef __WEECHAT_IRC_H
|
||||||
#define __WEECHAT_IRC_H 1
|
#define __WEECHAT_IRC_H 1
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
#include <gnutls/gnutls.h>
|
#include <gnutls/gnutls.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "../gui/gui.h"
|
#include "../gui/gui.h"
|
||||||
|
|
||||||
/* prefixes for chat window */
|
/* prefixes for chat window */
|
||||||
@ -156,8 +164,12 @@ struct t_irc_server
|
|||||||
int child_read; /* to read into child pipe */
|
int child_read; /* to read into child pipe */
|
||||||
int child_write; /* to write into child pipe */
|
int child_write; /* to write into child pipe */
|
||||||
int sock; /* socket for server */
|
int sock; /* socket for server */
|
||||||
gnutls_session gnutls_sess; /* gnutls session (only if SSL is used) */
|
|
||||||
int is_connected; /* 1 if WeeChat is connected to server */
|
int is_connected; /* 1 if WeeChat is connected to server */
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
|
int ssl_connected; /* = 1 if connected with SSL */
|
||||||
|
gnutls_session gnutls_sess; /* gnutls session (only if SSL is used) */
|
||||||
|
#endif
|
||||||
|
|
||||||
char *unterminated_message; /* beginning of a message in input buf */
|
char *unterminated_message; /* beginning of a message in input buf */
|
||||||
char *nick; /* current nickname */
|
char *nick; /* current nickname */
|
||||||
time_t reconnect_start; /* this time + delay = reconnect time */
|
time_t reconnect_start; /* this time + delay = reconnect time */
|
||||||
|
@ -66,16 +66,17 @@ AC_CHECK_FUNCS([gethostbyname gethostname getsockname gettimeofday inet_ntoa mem
|
|||||||
AH_VERBATIM([PLUGINS], [#undef PLUGINS])
|
AH_VERBATIM([PLUGINS], [#undef PLUGINS])
|
||||||
AH_VERBATIM([PLUGIN_PERL], [#undef PLUGIN_PERL])
|
AH_VERBATIM([PLUGIN_PERL], [#undef PLUGIN_PERL])
|
||||||
AH_VERBATIM([PLUGIN_PYTHON], [#undef PLUGIN_PYTHON])
|
AH_VERBATIM([PLUGIN_PYTHON], [#undef PLUGIN_PYTHON])
|
||||||
|
AH_VERBATIM([HAVE_GNUTLS], [#undef HAVE_GNUTLS])
|
||||||
AH_VERBATIM([DEBUG], [#undef DEBUG])
|
AH_VERBATIM([DEBUG], [#undef DEBUG])
|
||||||
|
|
||||||
AC_ARG_ENABLE(ncurses, [ --disable-ncurses Turn off ncurses interface (default=auto)],enable_ncurses=$enableval,enable_ncurses=yes)
|
AC_ARG_ENABLE(ncurses, [ --disable-ncurses Turn off ncurses interface (default=auto)],enable_ncurses=$enableval,enable_ncurses=yes)
|
||||||
AC_ARG_ENABLE(wxwidgets,[ --enable-wxwidgets Turn on WxWidgets interface (default=no)],enable_wxwidgets=$enableval,enable_wxwidgets=no)
|
AC_ARG_ENABLE(wxwidgets,[ --enable-wxwidgets Turn on WxWidgets interface (default=no)],enable_wxwidgets=$enableval,enable_wxwidgets=no)
|
||||||
AC_ARG_ENABLE(gtk, [ --enable-gtk Turn on Gtk+ interface (default=no)],enable_gtk=$enableval,enable_gtk=no)
|
AC_ARG_ENABLE(gtk, [ --enable-gtk Turn on Gtk+ interface (default=no)],enable_gtk=$enableval,enable_gtk=no)
|
||||||
AC_ARG_ENABLE(qt, [ --enable-qt Turn on Qt interface (default=no)],enable_qt=$enableval,enable_qt=no)
|
AC_ARG_ENABLE(qt, [ --enable-qt Turn on Qt interface (default=no)],enable_qt=$enableval,enable_qt=no)
|
||||||
AC_ARG_ENABLE(perl, [ --enable-perl Turn on Perl plugins (default=no)],enable_perl=$enableval,enable_perl=no)
|
AC_ARG_ENABLE(perl, [ --enable-perl Turn on Perl plugins (default=no)],enable_perl=$enableval,enable_perl=no)
|
||||||
AC_ARG_ENABLE(python, [ --enable-python Turn on Python plugins (default=no)],enable_python=$enableval,enable_python=no)
|
AC_ARG_ENABLE(python, [ --enable-python Turn on Python plugins (default=no)],enable_python=$enableval,enable_python=no)
|
||||||
AC_ARG_ENABLE(gnutls, [ --disable-gnutls Turn off gnutls support (default=yes)], enable_gnutls=no,enable_gnutls=yes)
|
AC_ARG_ENABLE(gnutls, [ --disable-gnutls Turn off gnutls support (default=yes)], enable_gnutls=no,enable_gnutls=yes)
|
||||||
AC_ARG_WITH(debug, [ --with-debug Debugging: 0=no debug, 1=debug compilation, 2=debug compilation + verbose msgs (default=0)],debug=$withval,debug=0)
|
AC_ARG_WITH(debug, [ --with-debug Debugging: 0=no debug, 1=debug compilation, 2=debug compilation + verbose msgs (default=0)],debug=$withval,debug=0)
|
||||||
|
|
||||||
enable_plugins="no"
|
enable_plugins="no"
|
||||||
enable_ruby="no"
|
enable_ruby="no"
|
||||||
@ -88,6 +89,7 @@ AM_CONDITIONAL(GUI_QT, test "$enable_qt" = "yes")
|
|||||||
AM_CONDITIONAL(PLUGIN_PERL, test "$enable_perl" = "yes")
|
AM_CONDITIONAL(PLUGIN_PERL, test "$enable_perl" = "yes")
|
||||||
AM_CONDITIONAL(PLUGIN_PYTHON, test "$enable_python" = "yes")
|
AM_CONDITIONAL(PLUGIN_PYTHON, test "$enable_python" = "yes")
|
||||||
# AM_CONDITIONAL(PLUGIN_RUBY, test "$enable_ruby" = "yes")
|
# AM_CONDITIONAL(PLUGIN_RUBY, test "$enable_ruby" = "yes")
|
||||||
|
AM_CONDITIONAL(HAVE_GNUTLS, test "$enable_gnutls" = "yes")
|
||||||
|
|
||||||
if test "x$enable_ncurses" = "xyes" ; then
|
if test "x$enable_ncurses" = "xyes" ; then
|
||||||
if test "$LIBNCURSES_FOUND" = "0" ; then
|
if test "$LIBNCURSES_FOUND" = "0" ; then
|
||||||
@ -235,6 +237,9 @@ if test "x$enable_gnutls" = "xyes" ; then
|
|||||||
*** libgnutls was not found. You may want to get it from
|
*** libgnutls was not found. You may want to get it from
|
||||||
*** ftp://ftp.gnutls.org/pub/gnutls/
|
*** ftp://ftp.gnutls.org/pub/gnutls/
|
||||||
]]))
|
]]))
|
||||||
|
GNUTLS_LIBS="-lgnutls"
|
||||||
|
AC_SUBST(GNUTLS_LIBS)
|
||||||
|
AC_DEFINE(HAVE_GNUTLS)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
CFLAGS=`echo $CFLAGS | sed s/-g//g`
|
CFLAGS=`echo $CFLAGS | sed s/-g//g`
|
||||||
|
@ -47,7 +47,10 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
#include <gnutls/gnutls.h>
|
#include <gnutls/gnutls.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_ICONV
|
#ifdef HAVE_ICONV
|
||||||
#include <iconv.h>
|
#include <iconv.h>
|
||||||
@ -75,7 +78,9 @@ char *local_charset = NULL; /* local charset, for example: ISO-8859-1 */
|
|||||||
|
|
||||||
int server_cmd_line; /* at least one server on WeeChat command line */
|
int server_cmd_line; /* at least one server on WeeChat command line */
|
||||||
|
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
gnutls_certificate_credentials gnutls_xcred; /* gnutls client credentials */
|
gnutls_certificate_credentials gnutls_xcred; /* gnutls client credentials */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -521,9 +526,11 @@ wee_init_vars ()
|
|||||||
msgq_last_msg = NULL;
|
msgq_last_msg = NULL;
|
||||||
|
|
||||||
/* init gnutls */
|
/* init gnutls */
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
gnutls_global_init ();
|
gnutls_global_init ();
|
||||||
gnutls_certificate_allocate_credentials (&gnutls_xcred);
|
gnutls_certificate_allocate_credentials (&gnutls_xcred);
|
||||||
gnutls_certificate_set_x509_trust_file (gnutls_xcred, "ca.pem", GNUTLS_X509_FMT_PEM);
|
gnutls_certificate_set_x509_trust_file (gnutls_xcred, "ca.pem", GNUTLS_X509_FMT_PEM);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -617,8 +624,12 @@ wee_shutdown (int return_code)
|
|||||||
if (local_charset)
|
if (local_charset)
|
||||||
free (local_charset);
|
free (local_charset);
|
||||||
alias_free_all ();
|
alias_free_all ();
|
||||||
|
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
gnutls_certificate_free_credentials (gnutls_xcred);
|
gnutls_certificate_free_credentials (gnutls_xcred);
|
||||||
gnutls_global_deinit();
|
gnutls_global_deinit();
|
||||||
|
#endif
|
||||||
|
|
||||||
exit (return_code);
|
exit (return_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +27,10 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
#include <gnutls/gnutls.h>
|
#include <gnutls/gnutls.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(ENABLE_NLS) && !defined(_)
|
#if defined(ENABLE_NLS) && !defined(_)
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
@ -108,7 +111,10 @@
|
|||||||
extern int quit_weechat;
|
extern int quit_weechat;
|
||||||
extern char *weechat_home;
|
extern char *weechat_home;
|
||||||
extern char *local_charset;
|
extern char *local_charset;
|
||||||
|
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
extern gnutls_certificate_credentials gnutls_xcred;
|
extern gnutls_certificate_credentials gnutls_xcred;
|
||||||
|
#endif
|
||||||
|
|
||||||
extern void wee_log_printf (char *, ...);
|
extern void wee_log_printf (char *, ...);
|
||||||
extern void wee_dump (int);
|
extern void wee_dump (int);
|
||||||
|
@ -24,7 +24,7 @@ weechat_curses_LDADD = ../lib_weechat_gui_common.a \
|
|||||||
../../irc/lib_weechat_irc.a \
|
../../irc/lib_weechat_irc.a \
|
||||||
$(NCURSES_LIBS) \
|
$(NCURSES_LIBS) \
|
||||||
../../plugins/lib_weechat_plugins.a $(PLUGINS_LIBS) \
|
../../plugins/lib_weechat_plugins.a $(PLUGINS_LIBS) \
|
||||||
-lgnutls
|
$(GNUTLS_LIBS)
|
||||||
|
|
||||||
weechat_curses_SOURCES = gui-display.c \
|
weechat_curses_SOURCES = gui-display.c \
|
||||||
gui-input.c
|
gui-input.c
|
||||||
|
@ -38,7 +38,10 @@
|
|||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
#include <gnutls/gnutls.h>
|
#include <gnutls/gnutls.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "../common/weechat.h"
|
#include "../common/weechat.h"
|
||||||
#include "irc.h"
|
#include "irc.h"
|
||||||
@ -87,6 +90,9 @@ server_init (t_irc_server *server)
|
|||||||
server->child_write = -1;
|
server->child_write = -1;
|
||||||
server->sock = -1;
|
server->sock = -1;
|
||||||
server->is_connected = 0;
|
server->is_connected = 0;
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
|
server->ssl_connected = 0;
|
||||||
|
#endif
|
||||||
server->unterminated_message = NULL;
|
server->unterminated_message = NULL;
|
||||||
server->nick = NULL;
|
server->nick = NULL;
|
||||||
server->reconnect_start = 0;
|
server->reconnect_start = 0;
|
||||||
@ -383,9 +389,11 @@ server_send (t_irc_server *server, char *buffer, int size_buf)
|
|||||||
if (!server)
|
if (!server)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (server->ssl)
|
#ifdef HAVE_GNUTLS
|
||||||
|
if (server->ssl_connected)
|
||||||
return gnutls_record_send (server->gnutls_sess, buffer, size_buf);
|
return gnutls_record_send (server->gnutls_sess, buffer, size_buf);
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
return send (server->sock, buffer, size_buf, 0);
|
return send (server->sock, buffer, size_buf, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -660,9 +668,11 @@ server_recv (t_irc_server *server)
|
|||||||
if (!server)
|
if (!server)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (server->ssl)
|
#ifdef HAVE_GNUTLS
|
||||||
|
if (server->ssl_connected)
|
||||||
num_read = gnutls_record_recv (server->gnutls_sess, buffer, sizeof (buffer) - 2);
|
num_read = gnutls_record_recv (server->gnutls_sess, buffer, sizeof (buffer) - 2);
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
num_read = recv (server->sock, buffer, sizeof (buffer) - 2, 0);
|
num_read = recv (server->sock, buffer, sizeof (buffer) - 2, 0);
|
||||||
|
|
||||||
if (num_read > 0)
|
if (num_read > 0)
|
||||||
@ -721,12 +731,16 @@ server_close_connection (t_irc_server *server)
|
|||||||
/* close network socket */
|
/* close network socket */
|
||||||
if (server->sock != -1)
|
if (server->sock != -1)
|
||||||
{
|
{
|
||||||
if (server->ssl)
|
#ifdef HAVE_GNUTLS
|
||||||
|
if (server->ssl_connected)
|
||||||
gnutls_bye (server->gnutls_sess, GNUTLS_SHUT_RDWR);
|
gnutls_bye (server->gnutls_sess, GNUTLS_SHUT_RDWR);
|
||||||
|
#endif
|
||||||
close (server->sock);
|
close (server->sock);
|
||||||
server->sock = -1;
|
server->sock = -1;
|
||||||
if (server->ssl)
|
#ifdef HAVE_GNUTLS
|
||||||
|
if (server->ssl_connected)
|
||||||
gnutls_deinit (server->gnutls_sess);
|
gnutls_deinit (server->gnutls_sess);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* free any pending message */
|
/* free any pending message */
|
||||||
@ -738,6 +752,9 @@ server_close_connection (t_irc_server *server)
|
|||||||
|
|
||||||
/* server is now disconnected */
|
/* server is now disconnected */
|
||||||
server->is_connected = 0;
|
server->is_connected = 0;
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
|
server->ssl_connected = 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -776,7 +793,8 @@ server_child_read (t_irc_server *server)
|
|||||||
/* connection OK */
|
/* connection OK */
|
||||||
case '0':
|
case '0':
|
||||||
/* enable SSL if asked */
|
/* enable SSL if asked */
|
||||||
if (server->ssl)
|
#ifdef HAVE_GNUTLS
|
||||||
|
if (server->ssl_connected)
|
||||||
{
|
{
|
||||||
gnutls_transport_set_ptr (server->gnutls_sess, (gnutls_transport_ptr) server->sock);
|
gnutls_transport_set_ptr (server->gnutls_sess, (gnutls_transport_ptr) server->sock);
|
||||||
if (gnutls_handshake (server->gnutls_sess) < 0)
|
if (gnutls_handshake (server->gnutls_sess) < 0)
|
||||||
@ -790,6 +808,7 @@ server_child_read (t_irc_server *server)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
/* kill child and login to server */
|
/* kill child and login to server */
|
||||||
server_kill_child (server);
|
server_kill_child (server);
|
||||||
irc_login (server);
|
irc_login (server);
|
||||||
@ -878,8 +897,20 @@ server_connect (t_irc_server *server)
|
|||||||
{
|
{
|
||||||
int child_pipe[2], set;
|
int child_pipe[2], set;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
const int cert_type_prio[] = { GNUTLS_CRT_X509, GNUTLS_CRT_OPENPGP, 0 };
|
const int cert_type_prio[] = { GNUTLS_CRT_X509, GNUTLS_CRT_OPENPGP, 0 };
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_GNUTLS
|
||||||
|
if (server->ssl)
|
||||||
|
{
|
||||||
|
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||||
|
gui_printf (server->buffer,
|
||||||
|
_("%s cannot connect with SSL since WeeChat was not built "
|
||||||
|
"with GNUtls support\n"), WEECHAT_ERROR);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
irc_display_prefix (server->buffer, PREFIX_INFO);
|
irc_display_prefix (server->buffer, PREFIX_INFO);
|
||||||
gui_printf (server->buffer,
|
gui_printf (server->buffer,
|
||||||
_("%s: connecting to %s:%d%s...\n"),
|
_("%s: connecting to %s:%d%s...\n"),
|
||||||
@ -893,6 +924,8 @@ server_connect (t_irc_server *server)
|
|||||||
server_close_connection (server);
|
server_close_connection (server);
|
||||||
|
|
||||||
/* init SSL if asked */
|
/* init SSL if asked */
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
|
server->ssl_connected = 0;
|
||||||
if (server->ssl)
|
if (server->ssl)
|
||||||
{
|
{
|
||||||
if (gnutls_init (&server->gnutls_sess, GNUTLS_CLIENT) != 0)
|
if (gnutls_init (&server->gnutls_sess, GNUTLS_CLIENT) != 0)
|
||||||
@ -905,7 +938,9 @@ server_connect (t_irc_server *server)
|
|||||||
gnutls_set_default_priority (server->gnutls_sess);
|
gnutls_set_default_priority (server->gnutls_sess);
|
||||||
gnutls_certificate_type_set_priority (server->gnutls_sess, cert_type_prio);
|
gnutls_certificate_type_set_priority (server->gnutls_sess, cert_type_prio);
|
||||||
gnutls_credentials_set (server->gnutls_sess, GNUTLS_CRD_CERTIFICATE, gnutls_xcred);
|
gnutls_credentials_set (server->gnutls_sess, GNUTLS_CRD_CERTIFICATE, gnutls_xcred);
|
||||||
|
server->ssl_connected = 1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* create pipe for child process */
|
/* create pipe for child process */
|
||||||
if (pipe (child_pipe) < 0)
|
if (pipe (child_pipe) < 0)
|
||||||
|
@ -21,10 +21,18 @@
|
|||||||
#ifndef __WEECHAT_IRC_H
|
#ifndef __WEECHAT_IRC_H
|
||||||
#define __WEECHAT_IRC_H 1
|
#define __WEECHAT_IRC_H 1
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
#include <gnutls/gnutls.h>
|
#include <gnutls/gnutls.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "../gui/gui.h"
|
#include "../gui/gui.h"
|
||||||
|
|
||||||
/* prefixes for chat window */
|
/* prefixes for chat window */
|
||||||
@ -156,8 +164,12 @@ struct t_irc_server
|
|||||||
int child_read; /* to read into child pipe */
|
int child_read; /* to read into child pipe */
|
||||||
int child_write; /* to write into child pipe */
|
int child_write; /* to write into child pipe */
|
||||||
int sock; /* socket for server */
|
int sock; /* socket for server */
|
||||||
gnutls_session gnutls_sess; /* gnutls session (only if SSL is used) */
|
|
||||||
int is_connected; /* 1 if WeeChat is connected to server */
|
int is_connected; /* 1 if WeeChat is connected to server */
|
||||||
|
#ifdef HAVE_GNUTLS
|
||||||
|
int ssl_connected; /* = 1 if connected with SSL */
|
||||||
|
gnutls_session gnutls_sess; /* gnutls session (only if SSL is used) */
|
||||||
|
#endif
|
||||||
|
|
||||||
char *unterminated_message; /* beginning of a message in input buf */
|
char *unterminated_message; /* beginning of a message in input buf */
|
||||||
char *nick; /* current nickname */
|
char *nick; /* current nickname */
|
||||||
time_t reconnect_start; /* this time + delay = reconnect time */
|
time_t reconnect_start; /* this time + delay = reconnect time */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user