Changes in / [164352e:e306fbf]


Ignore:
Files:
24 edited

Legend:

Unmodified
Added
Removed
  • bitlbee.conf

    r164352e re306fbf  
    116116## (Obviously, the username and password are optional)
    117117##
    118 # Proxy = http://john:doe@proxy.localnet.com:8080
    119 # Proxy = socks4://socksproxy.localnet.com
    120 # Proxy = socks5://socksproxy.localnet.com
     118## Proxy = http://john:doe@proxy.localnet.com:8080
     119## Proxy = socks4://socksproxy.localnet.com
     120## Proxy = socks5://socksproxy.localnet.com
    121121
    122122## Protocols offered by bitlbee
     
    126126## nothing is given, there are no restrictions.
    127127##
    128 # Protocols = jabber yahoo
     128## Protocols = jabber yahoo
    129129
    130 ## Trusted CAs
    131 ##
    132 ## Path to a file containing a list of trusted certificate authorities used in
    133 ## the verification of server certificates.
    134 ##
    135 ## Uncomment this and make sure the file actually exists and contains all
    136 ## certificate authorities you're willing to accept (default value should
    137 ## work on at least Debian/Ubuntu systems with the "ca-certificates" package
    138 ## installed). As long as the line is commented out, SSL certificate
    139 ## verification is completely disabled.
    140 ##
    141 ## The location of this file may be different on other distros/OSes. For
    142 ## example, try /etc/ssl/ca-bundle.pem on OpenSUSE.
    143 ##
    144 # CAfile = /etc/ssl/certs/ca-certificates.crt
    145130
    146131[defaults]
  • bitlbee.h

    r164352e re306fbf  
    2626#ifndef _BITLBEE_H
    2727#define _BITLBEE_H
    28 
    29 #ifdef __cplusplus
    30 extern "C" {
    31 #endif
    3228
    3329#ifndef _GNU_SOURCE
     
    179175extern global_t global;
    180176
    181 #ifdef __cplusplus
    182 }
    183177#endif
    184 
    185 #endif
    186 
  • conf.c

    r164352e re306fbf  
    6767        conf->ft_listen = NULL;
    6868        conf->protocols = NULL;
    69         conf->cafile = NULL;
    7069        proxytype = 0;
    7170       
     
    178177                fprintf( stderr, "Warning: Unable to read configuration file `%s'.\n", global.conf_file );
    179178       
    180         if( conf->cafile && access( conf->cafile, R_OK ) != 0 )
    181         {
    182                 /* Let's treat this as a serious problem so people won't think
    183                    they're secure when in fact they're not. */
    184                 fprintf( stderr, "Error: Could not read CA file %s: %s\n", conf->cafile, strerror( errno ) );
    185                 return NULL;
    186         }
    187        
    188179        return conf;
    189180}
     
    349340                                conf->protocols = g_strsplit_set( ini->value, " \t,;", -1 );
    350341                        }
    351                         else if( g_strcasecmp( ini->key, "cafile" ) == 0 )
    352                         {
    353                                 g_free( conf->cafile );
    354                                 conf->cafile = g_strdup( ini->value );
    355                         }
    356342                        else
    357343                        {
  • conf.h

    r164352e re306fbf  
    5454        char *ft_listen;
    5555        char **protocols;
    56         char *cafile;
    5756} conf_t;
    5857
  • configure

    r164352e re306fbf  
    283283EOF
    284284                ssl=gnutls
    285                 if ! pkg-config gnutls --atleast-version=2.8; then
    286                         echo
    287                         echo 'Warning: With GnuTLS versions <2.8, certificate expire dates are not verified.'
    288                 fi
    289285                ret=1
    290286        elif libgnutls-config --version > /dev/null 2> /dev/null; then
  • debian/changelog

    r164352e re306fbf  
    1 bitlbee (3.0.4+z-2) UNRELEASED; urgency=low
    2 
    3   * Removed some version override stuff from Debian build scripts. Instead,
    4     my buildbot now uses dch to generate a changelog entry with the right
    5     version number.
    6 
    7  -- Wilmer van der Gaast <wilmer@gaast.net>  Fri, 23 Dec 2011 09:45:55 +0100
    8 
    9 bitlbee (3.0.4+bzr855-1) unstable; urgency=low
    10 
    11   * New upstream release.
    12   * This is not a vanilla 3.0.4 tree but a Bazaar snapshot. The source
    13     release was a few weeks ago by now. There should be no significant
    14     differences.
     1bitlbee (3.0.4-1) unstable; urgency=low
     2
     3  * New upstream release.
    154  * Added bitlbee-plugin-skype and skyped packages, now part of BitlBee
    16     instead of a separate package. Not building these for Debian for now
    17     though since python-skype was removed.
     5    instead of a separate package.
     6  * Fixed dependencies of bitlbee-plugin-otr package to not break with
     7    binary MTUs. (Closes: #651612)
    188  * ^B and some other things are stripped in outgoing XMPP stanzas.
    199    (Closes: #507856)
     
    2111    one from bugs.bitlbee.org. I hope that covers it. (Closes: #646369)
    2212  * Closing a few old bugs that were filed against the Debian package
    23     instead of/as well as upstream:
     13    instead of upstream:
    2414    - Joining password-protected MUCs is working for a while already, set
    2515      the password using "chan set". (Closes: #615624)
     
    2818    - identi.ca support is documented. (Closes: #613789)
    2919
    30  -- Wilmer van der Gaast <wilmer@gaast.net>  Tue, 20 Dec 2011 12:46:42 +0100
    31 
    32 bitlbee (3.0.3-1.1) unstable; urgency=low
    33 
    34   * Non-maintainer upload.
    35   * Use the standard ${source:Version} and ${binary:Version} substvars instead
    36     of the custom and broken ${bee:Version} (closes: #651612).
    37 
    38  -- Julien Cristau <jcristau@debian.org>  Thu, 15 Dec 2011 20:34:32 +0100
     20 -- Wilmer van der Gaast <wilmer@gaast.net>  Sun, 11 Dec 2011 16:53:31 +0000
    3921
    4022bitlbee (3.0.3-1) unstable; urgency=low
  • debian/control

    r164352e re306fbf  
    1212Package: bitlbee
    1313Architecture: any
    14 Depends: ${misc:Depends}, ${shlibs:Depends}, debianutils (>= 1.16), bitlbee-common (= ${source:Version})
     14Depends: ${misc:Depends}, ${shlibs:Depends}, debianutils (>= 1.16), bitlbee-common (= ${bee:Version})
    1515Conflicts: bitlbee-libpurple
    1616Replaces: bitlbee-libpurple
     
    2222Package: bitlbee-libpurple
    2323Architecture: any
    24 Depends: ${misc:Depends}, ${shlibs:Depends}, debianutils (>= 1.16), bitlbee-common (= ${source:Version})
     24Depends: ${misc:Depends}, ${shlibs:Depends}, debianutils (>= 1.16), bitlbee-common (= ${bee:Version})
    2525Conflicts: bitlbee
    2626Replaces: bitlbee
     
    5151Package: bitlbee-dev
    5252Architecture: all
    53 Depends: ${misc:Depends}, bitlbee (>= ${source:Version}), bitlbee (<< ${source:Version}.1~), bitlbee-common (= ${source:Version})
     53Depends: ${misc:Depends}, bitlbee (>= ${bee:Version}), bitlbee (<< ${bee:Version}.1~), bitlbee-common (= ${bee:Version})
    5454Description: An IRC to other chat networks gateway (dev files)
    5555 This program can be used as an IRC server which forwards everything you
     
    6161Package: bitlbee-plugin-otr
    6262Architecture: any
    63 Depends: ${misc:Depends}, ${shlibs:Depends}, bitlbee (= ${binary:Version}) | bitlbee-libpurple (= ${binary:Version}), bitlbee-common (= ${source:Version})
     63Depends: ${misc:Depends}, ${shlibs:Depends}, bitlbee (>= ${bee:Version}) | bitlbee-libpurple (>= ${bee:Version}), bitlbee (<< ${bee:Version}.1~) | bitlbee-libpurple (<< ${bee:Version}.1~), bitlbee-common (= ${bee:Version})
    6464Description: An IRC to other chat networks gateway (OTR plugin)
    6565 This program can be used as an IRC server which forwards everything you
     
    7272Package: bitlbee-plugin-skype
    7373Architecture: any
    74 Depends: ${misc:Depends}, ${shlibs:Depends}, bitlbee (= ${binary:Version}) | bitlbee-libpurple (= ${binary:Version}), bitlbee-common (= ${source:Version})
     74Depends: ${shlibs:Depends}, ${misc:Depends}, bitlbee (>= ${bee:Version}) | bitlbee-libpurple (>= ${bee:Version}), bitlbee (<< ${bee:Version}.1~) | bitlbee-libpurple (<< ${bee:Version}.1~)
    7575Recommends: skyped
    7676Description: An IRC to other chat networks gateway (Skype plugin)
     
    8383
    8484Package: skyped
    85 Architecture: all
    86 Depends: ${misc:Depends}, ${shlibs:Depends}, python (>= 2.5), python-gnutls, python-skype (>=0.9.28.7)
     85Architecture: any
     86Depends: ${shlibs:Depends}, ${misc:Depends}, python (>= 2.5), python-gnutls, python-skype (>=0.9.28.7)
    8787Recommends: skype
    8888Description: Daemon to control Skype remotely
  • debian/rules

    r164352e re306fbf  
    88#
    99
    10 # Include the bitlbee-libpurple variant and OTR plugin by default.
    11 # Don't build skype by default since it depends on deleted/non-free
    12 # packages. Need to at least get python-skype back into Debian.
     10# Include the bitlbee-libpurple variant and OTR plugin by default
    1311BITLBEE_LIBPURPLE ?= 1
    1412BITLBEE_OTR ?= plugin
    15 BITLBEE_SKYPE ?= 0
     13BITLBEE_SKYPE ?= plugin
    1614BITLBEE_CONFIGURE_FLAGS ?=
    1715DEBUG ?= 0
     
    1917ifndef BITLBEE_VERSION
    2018# Want to use the full package version number instead of just the release.
    21 BITLBEE_CONFIGURE_VERSION ?= BITLBEE_VERSION=\"$(shell dpkg-parsechangelog | awk '/^Version:/ {print $$2}')\"
     19BITLBEE_CONFIGURE_VERSION ?= BITLBEE_VERSION=\"$(shell dpkg-parsechangelog | grep ^Version: | awk '{print $$2}')\"
    2220endif
    2321
     
    7472        $(MAKE) -C debian/build-native install-plugin-skype DESTDIR=`pwd`/debian/skyped
    7573
    76 ifneq ($(BITLBEE_SKYPE),0)
    7774        mkdir -p debian/bitlbee-plugin-skype/usr
    7875        mv debian/skyped/usr/lib debian/bitlbee-plugin-skype/usr
     
    8077        mkdir -p debian/skyped/usr/share/man/man1
    8178        mv debian/bitlbee-common/usr/share/man/man1/skyped* debian/skyped/usr/share/man/man1
    82 endif
    8379
    8480ifeq ($(BITLBEE_LIBPURPLE),1)
     
    110106        dh_installdeb
    111107        dh_shlibdeps
    112         dh_gencontrol
     108ifdef BITLBEE_VERSION
     109        dh_gencontrol -- -v$(BITLBEE_VERSION)  -Vbee:Version=$(BITLBEE_VERSION)
     110else
     111        dh_gencontrol -- -Vbee:Version=$(shell dpkg-parsechangelog | grep ^Version: | awk '{print $$2}' | sed -e 's/+b[0-9]\+$$//')
     112endif
    113113        dh_md5sums
    114114        dh_builddeb
  • doc/user-guide/commands.xml

    r164352e re306fbf  
    648648        </bitlbee-setting>
    649649
    650         <bitlbee-setting name="auto_connect" type="boolean" scope="account,global">
     650        <bitlbee-setting name="auto_connect" type="boolean" scope="both">
    651651                <default>true</default>
    652652
     
    672672        </bitlbee-setting>
    673673
    674         <bitlbee-setting name="auto_reconnect" type="boolean" scope="account,global">
     674        <bitlbee-setting name="auto_reconnect" type="boolean" scope="both">
    675675                <default>true</default>
    676676
     
    726726        </bitlbee-setting>
    727727
    728         <bitlbee-setting name="away" type="string" scope="account,global">
     728        <bitlbee-setting name="away" type="string" scope="both">
    729729                <description>
    730730                        <para>
     
    10761076        </bitlbee-setting>
    10771077
    1078         <bitlbee-setting name="nick_format" type="string" scope="account,global">
     1078        <bitlbee-setting name="nick_format" type="string" scope="both">
    10791079                <default>%-@nick</default>
    10801080
     
    11691169        </bitlbee-setting>
    11701170
    1171         <bitlbee-setting name="password" type="string" scope="account,global">
     1171        <bitlbee-setting name="password" type="string" scope="both">
    11721172                <description>
    11731173                        <para>
     
    13921392                <description>
    13931393                        <para>
    1394                                 Currently only available for Jabber connections. Set this to true if you want to connect to the server on an SSL-enabled port (usually 5223).
    1395                         </para>
    1396 
    1397                         <para>
    1398                                 Please note that this method of establishing a secure connection to the server has long been deprecated. You are encouraged to look at the <emphasis>tls</emphasis> setting instead.
    1399                         </para>
    1400                 </description>
    1401         </bitlbee-setting>
    1402 
    1403         <bitlbee-setting name="status" type="string" scope="account,global">
    1404                 <description>
    1405                         <para>
    1406                                 Most IM protocols support status messages, similar to away messages. They can be used to indicate things like your location or activity, without showing up as away/busy.
     1394                                Currently only available for Jabber connections. Set this to true if the server accepts SSL connections.
     1395                        </para>
     1396                </description>
     1397        </bitlbee-setting>
     1398
     1399        <bitlbee-setting name="status" type="string" scope="both">
     1400                <description>
     1401                        <para>
     1402                                Certain protocols (like Jabber/XMPP) support status messages, similar to away messages. They can be used to indicate things like your location or activity, without showing up as away/busy.
    14071403                        </para>
    14081404
     
    14121408
    14131409                        <para>
    1414                                 Away states set using <emphasis>/away</emphasis> or the <emphasis>away</emphasis> setting will override this setting. To clear the setting, use <emphasis>set -del status</emphasis>.
     1410                                Away states set using <emphasis>/away</emphasis> or the <emphasis>away</emphasis> setting will override this setting. To un-set the setting, use <emphasis>set -del status</emphasis>.
    14151411                        </para>
    14161412                </description>
     
    14851481                        <para>
    14861482                                If you want to force BitlBee to use TLS sessions only (and to give up if that doesn't seem to be possible) you can set this setting to <emphasis>true</emphasis>. Set it to <emphasis>false</emphasis> if you want the session to remain plain-text.
    1487                         </para>
    1488                 </description>
    1489         </bitlbee-setting>
    1490 
    1491         <bitlbee-setting name="tls_verify" type="boolean" scope="account">
    1492                 <default>true</default>
    1493 
    1494                 <description>
    1495                         <para>
    1496                                 Currently only available for Jabber connections in combination with the <emphasis>tls</emphasis> setting. Set this to <emphasis>true</emphasis> if you want BitlBee to strictly verify the server's certificate against a list of trusted certificate authorities.
    1497                         </para>
    1498 
    1499                         <para>
    1500                                 The hostname used in the certificate verification is the value of the <emphasis>server</emphasis> setting if the latter is nonempty and the domain of the username else. If you get a hostname related error when connecting to Google Talk with a username from the gmail.com or googlemail.com domain, please try to empty the <emphasis>server</emphasis> setting.
    1501                         </para>
    1502 
    1503                         <para>
    1504                                 Please note that no certificate verification is performed when the <emphasis>ssl</emphasis> setting is used, or when the <emphasis>CAfile</emphasis> setting in <emphasis>bitlbee.conf</emphasis> is not set.
    15051483                        </para>
    15061484                </description>
  • irc.h

    r164352e re306fbf  
    182182        gboolean (*join)( irc_channel_t *ic );
    183183        gboolean (*part)( irc_channel_t *ic, const char *msg );
    184         gboolean (*topic)( irc_channel_t *ic, const char *new_topic );
     184        gboolean (*topic)( irc_channel_t *ic, const char *new );
    185185        gboolean (*invite)( irc_channel_t *ic, irc_user_t *iu );
    186186       
     
    332332void irc_send_msg_raw( irc_user_t *iu, const char *type, const char *dst, const char *msg );
    333333void irc_send_msg_f( irc_user_t *iu, const char *type, const char *dst, const char *format, ... ) G_GNUC_PRINTF( 4, 5 );
    334 void irc_send_nick( irc_user_t *iu, const char *new_nick );
     334void irc_send_nick( irc_user_t *iu, const char *new );
    335335void irc_send_channel_user_mode_diff( irc_channel_t *ic, irc_user_t *iu,
    336                                       irc_channel_user_flags_t old_flags, irc_channel_user_flags_t new_flags );
     336                                      irc_channel_user_flags_t old, irc_channel_user_flags_t new );
    337337void irc_send_invite( irc_user_t *iu, irc_channel_t *ic );
    338338
     
    341341int irc_user_free( irc_t *irc, irc_user_t *iu );
    342342irc_user_t *irc_user_by_name( irc_t *irc, const char *nick );
    343 int irc_user_set_nick( irc_user_t *iu, const char *new_nick );
     343int irc_user_set_nick( irc_user_t *iu, const char *new );
    344344gint irc_user_cmp( gconstpointer a_, gconstpointer b_ );
    345345const char *irc_user_get_away( irc_user_t *iu );
  • lib/events_glib.c

    r164352e re306fbf  
    7575        b_input_condition gaim_cond = 0;
    7676        gboolean st;
    77        
    78         if (condition & G_IO_NVAL)
    79                 return FALSE;
    8077
    8178        if (condition & GAIM_READ_COND)
  • lib/http_client.c

    r164352e re306fbf  
    3333
    3434static gboolean http_connected( gpointer data, int source, b_input_condition cond );
    35 static gboolean http_ssl_connected( gpointer data, int returncode, void *source, b_input_condition cond );
     35static gboolean http_ssl_connected( gpointer data, void *source, b_input_condition cond );
    3636static gboolean http_incoming_data( gpointer data, int source, b_input_condition cond );
    3737static void http_free( struct http_request *req );
     
    4747        if( ssl )
    4848        {
    49                 req->ssl = ssl_connect( host, port, TRUE, http_ssl_connected, req );
     49                req->ssl = ssl_connect( host, port, http_ssl_connected, req );
    5050                if( req->ssl == NULL )
    5151                        error = 1;
     
    163163       
    164164error:
    165         if( req->status_string == NULL )
    166                 req->status_string = g_strdup( "Error while writing HTTP request" );
     165        req->status_string = g_strdup( "Error while writing HTTP request" );
    167166       
    168167        req->func( req );
     
    171170}
    172171
    173 static gboolean http_ssl_connected( gpointer data, int returncode, void *source, b_input_condition cond )
     172static gboolean http_ssl_connected( gpointer data, void *source, b_input_condition cond )
    174173{
    175174        struct http_request *req = data;
    176175       
    177176        if( source == NULL )
    178         {
    179                 if( returncode != 0 )
    180                 {
    181                         char *err = ssl_verify_strerror( returncode );
    182                         req->status_string = g_strdup_printf(
    183                                 "Certificate verification problem 0x%x: %s",
    184                                 returncode, err ? err : "Unknown" );
    185                         g_free( err );
    186                 }
    187177                return http_connected( data, -1, cond );
    188         }
    189178       
    190179        req->fd = ssl_getfd( source );
     
    450439                if( new_proto == PROTO_HTTPS )
    451440                {
    452                         req->ssl = ssl_connect( new_host, new_port, TRUE, http_ssl_connected, req );
     441                        req->ssl = ssl_connect( new_host, new_port, http_ssl_connected, req );
    453442                        if( req->ssl == NULL )
    454443                                error = 1;
  • lib/ssl_bogus.c

    r164352e re306fbf  
    3232}
    3333
    34 void *ssl_connect( char *host, int port, gboolean verify, ssl_input_function func, gpointer data )
     34void *ssl_connect( char *host, int port, ssl_input_function func, gpointer data )
    3535{
    3636        return( NULL );
     
    5656}
    5757
    58 void *ssl_starttls( int fd, char *hostname, gboolean verify, ssl_input_function func, gpointer data )
     58void *ssl_starttls( int fd, ssl_input_function func, gpointer data )
    5959{
    6060        return NULL;
     
    7070        return 0;
    7171}
    72 
    73 char *ssl_verify_strerror( int code )
    74 {
    75         return NULL;
    76 }
  • lib/ssl_client.h

    r164352e re306fbf  
    4040#define SSL_NOHANDSHAKE   1
    4141#define SSL_AGAIN         2
    42 #define VERIFY_CERT_ERROR 2
    43 #define VERIFY_CERT_INVALID 4
    44 #define VERIFY_CERT_REVOKED 8
    45 #define VERIFY_CERT_SIGNER_NOT_FOUND 16
    46 #define VERIFY_CERT_SIGNER_NOT_CA 32
    47 #define VERIFY_CERT_INSECURE_ALGORITHM 64
    48 #define VERIFY_CERT_NOT_ACTIVATED 128
    49 #define VERIFY_CERT_EXPIRED 256
    50 #define VERIFY_CERT_WRONG_HOSTNAME 512
    5142
    5243extern int ssl_errno;
    5344
    5445/* This is what your callback function should look like. */
    55 typedef gboolean (*ssl_input_function)(gpointer, int, void*, b_input_condition);
     46typedef gboolean (*ssl_input_function)(gpointer, void*, b_input_condition);
    5647
    5748
     
    6253   ready to be used for SSL traffic. This is all done asynchronously, no
    6354   blocking I/O! (Except for the DNS lookups, for now...) */
    64 G_MODULE_EXPORT void *ssl_connect( char *host, int port, gboolean verify, ssl_input_function func, gpointer data );
     55G_MODULE_EXPORT void *ssl_connect( char *host, int port, ssl_input_function func, gpointer data );
    6556
    6657/* Start an SSL session on an existing fd. Useful for STARTTLS functionality,
    6758   for example in Jabber. */
    68 G_MODULE_EXPORT void *ssl_starttls( int fd, char *hostname, gboolean verify, ssl_input_function func, gpointer data );
     59G_MODULE_EXPORT void *ssl_starttls( int fd, ssl_input_function func, gpointer data );
    6960
    7061/* Obviously you need special read/write functions to read data. */
     
    9990G_MODULE_EXPORT b_input_condition ssl_getdirection( void *conn );
    10091
    101 /* Converts a verification bitfield passed to ssl_input_function into
    102    a more useful string. Or NULL if it had no useful bits set. */
    103 G_MODULE_EXPORT char *ssl_verify_strerror( int code );
    104 
    10592G_MODULE_EXPORT size_t ssl_des3_encrypt(const unsigned char *key, size_t key_len, const unsigned char *input, size_t input_len, const unsigned char *iv, unsigned char **res);
  • lib/ssl_gnutls.c

    r164352e re306fbf  
    2525
    2626#include <gnutls/gnutls.h>
    27 #include <gnutls/x509.h>
    2827#include <gcrypt.h>
    2928#include <fcntl.h>
     
    3332#include "sock.h"
    3433#include "stdlib.h"
    35 #include "bitlbee.h"
    3634
    3735int ssl_errno = 0;
     
    5654        gboolean established;
    5755        int inpa;
    58         char *hostname;
    59         gboolean verify;
    6056       
    6157        gnutls_session session;
     
    7874}
    7975
    80 void *ssl_connect( char *host, int port, gboolean verify, ssl_input_function func, gpointer data )
     76void *ssl_connect( char *host, int port, ssl_input_function func, gpointer data )
    8177{
    8278        struct scd *conn = g_new0( struct scd, 1 );
     
    8682        conn->data = data;
    8783        conn->inpa = -1;
    88         conn->hostname = g_strdup( host );
    89         conn->verify = verify && global.conf->cafile;
    9084       
    9185        if( conn->fd < 0 )
     
    9892}
    9993
    100 void *ssl_starttls( int fd, char *hostname, gboolean verify, ssl_input_function func, gpointer data )
     94void *ssl_starttls( int fd, ssl_input_function func, gpointer data )
    10195{
    10296        struct scd *conn = g_new0( struct scd, 1 );
     
    106100        conn->data = data;
    107101        conn->inpa = -1;
    108         conn->hostname = hostname;
    109        
    110         /* For now, SSL verification is globally enabled by setting the cafile
    111            setting in bitlbee.conf. Commented out by default because probably
    112            not everyone has this file in the same place and plenty of folks
    113            may not have the cert of their private Jabber server in it. */
    114         conn->verify = verify && global.conf->cafile;
    115102       
    116103        /* This function should be called via a (short) timeout instead of
     
    135122}
    136123
    137 static int verify_certificate_callback( gnutls_session_t session )
    138 {
    139         unsigned int status;
    140         const gnutls_datum_t *cert_list;
    141         unsigned int cert_list_size;
    142         int gnutlsret;
    143         int verifyret = 0;
    144         gnutls_x509_crt_t cert;
    145         const char *hostname;
    146        
    147         hostname = gnutls_session_get_ptr(session );
    148 
    149         gnutlsret = gnutls_certificate_verify_peers2( session, &status );
    150         if( gnutlsret < 0 )
    151                 return VERIFY_CERT_ERROR;
    152 
    153         if( status & GNUTLS_CERT_INVALID )
    154                 verifyret |= VERIFY_CERT_INVALID;
    155 
    156         if( status & GNUTLS_CERT_REVOKED )
    157                 verifyret |= VERIFY_CERT_REVOKED;
    158 
    159         if( status & GNUTLS_CERT_SIGNER_NOT_FOUND )
    160                 verifyret |= VERIFY_CERT_SIGNER_NOT_FOUND;
    161 
    162         if( status & GNUTLS_CERT_SIGNER_NOT_CA )
    163                 verifyret |= VERIFY_CERT_SIGNER_NOT_CA;
    164 
    165         if( status & GNUTLS_CERT_INSECURE_ALGORITHM )
    166                 verifyret |= VERIFY_CERT_INSECURE_ALGORITHM;
    167 
    168 #ifdef GNUTLS_CERT_NOT_ACTIVATED
    169         /* Amusingly, the GnuTLS function used above didn't check for expiry
    170            until GnuTLS 2.8 or so. (See CVE-2009-1417) */
    171         if( status & GNUTLS_CERT_NOT_ACTIVATED )
    172                 verifyret |= VERIFY_CERT_NOT_ACTIVATED;
    173 
    174         if( status & GNUTLS_CERT_EXPIRED )
    175                 verifyret |= VERIFY_CERT_EXPIRED;
    176 #endif
    177 
    178         /* The following check is already performed inside
    179          * gnutls_certificate_verify_peers2, so we don't need it.
    180 
    181          * if( gnutls_certificate_type_get( session ) != GNUTLS_CRT_X509 )
    182          * return GNUTLS_E_CERTIFICATE_ERROR;
    183          */
    184 
    185         if( gnutls_x509_crt_init( &cert ) < 0 )
    186                 return VERIFY_CERT_ERROR;
    187 
    188         cert_list = gnutls_certificate_get_peers( session, &cert_list_size );
    189         if( cert_list == NULL || gnutls_x509_crt_import( cert, &cert_list[0], GNUTLS_X509_FMT_DER ) < 0 )
    190                 return VERIFY_CERT_ERROR;
    191 
    192         if( !gnutls_x509_crt_check_hostname( cert, hostname ) )
    193         {
    194                 verifyret |= VERIFY_CERT_INVALID;
    195                 verifyret |= VERIFY_CERT_WRONG_HOSTNAME;
    196         }
    197 
    198         gnutls_x509_crt_deinit( cert );
    199 
    200         return verifyret;
    201 }
    202 
    203 char *ssl_verify_strerror( int code )
    204 {
    205         GString *ret = g_string_new( "" );
    206        
    207         if( code & VERIFY_CERT_REVOKED )
    208                 g_string_append( ret, "certificate has been revoked, " );
    209         if( code & VERIFY_CERT_SIGNER_NOT_FOUND )
    210                 g_string_append( ret, "certificate hasn't got a known issuer, " );
    211         if( code & VERIFY_CERT_SIGNER_NOT_CA )
    212                 g_string_append( ret, "certificate's issuer is not a CA, " );
    213         if( code & VERIFY_CERT_INSECURE_ALGORITHM )
    214                 g_string_append( ret, "certificate uses an insecure algorithm, " );
    215         if( code & VERIFY_CERT_NOT_ACTIVATED )
    216                 g_string_append( ret, "certificate has not been activated, " );
    217         if( code & VERIFY_CERT_EXPIRED )
    218                 g_string_append( ret, "certificate has expired, " );
    219         if( code & VERIFY_CERT_WRONG_HOSTNAME )
    220                 g_string_append( ret, "certificate hostname mismatch, " );
    221        
    222         if( ret->len == 0 )
    223         {
    224                 g_string_free( ret, TRUE );
    225                 return NULL;
    226         }
    227         else
    228         {
    229                 g_string_truncate( ret, ret->len - 2 );
    230                 return g_string_free( ret, FALSE );
    231         }
    232 }
    233 
    234124static gboolean ssl_connected( gpointer data, gint source, b_input_condition cond )
    235125{
     
    238128        if( source == -1 )
    239129        {
    240                 conn->func( conn->data, 0, NULL, cond );
     130                conn->func( conn->data, NULL, cond );
    241131                g_free( conn );
    242132                return FALSE;
     
    246136       
    247137        gnutls_certificate_allocate_credentials( &conn->xcred );
    248         if( conn->verify && global.conf->cafile )
    249         {
    250                 gnutls_certificate_set_x509_trust_file( conn->xcred, global.conf->cafile, GNUTLS_X509_FMT_PEM );
    251                 gnutls_certificate_set_verify_flags( conn->xcred, GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT );
    252         }
    253 
    254138        gnutls_init( &conn->session, GNUTLS_CLIENT );
    255         if( conn->verify )
    256                 gnutls_session_set_ptr( conn->session, (void *) conn->hostname );
    257139#if GNUTLS_VERSION_NUMBER < 0x020c00
    258140        gnutls_transport_set_lowat( conn->session, 0 );
     
    270152{
    271153        struct scd *conn = data;
    272         int st, stver;
     154        int st;
    273155       
    274156        if( ( st = gnutls_handshake( conn->session ) ) < 0 )
     
    281163                else
    282164                {
    283                         conn->func( conn->data, 0, NULL, cond );
     165                        conn->func( conn->data, NULL, cond );
    284166                       
    285167                        gnutls_deinit( conn->session );
     
    292174        else
    293175        {
    294                 if( conn->verify && ( stver = verify_certificate_callback( conn->session ) ) != 0 )
    295                 {
    296                         conn->func( conn->data, stver, NULL, cond );
    297 
    298                         gnutls_deinit( conn->session );
    299                         gnutls_certificate_free_credentials( conn->xcred );
    300                         closesocket( conn->fd );
    301 
    302                         g_free( conn );
    303                 }
    304                 else
    305                 {
    306                         /* For now we can't handle non-blocking perfectly everywhere... */
    307                         sock_make_blocking( conn->fd );
     176                /* For now we can't handle non-blocking perfectly everywhere... */
     177                sock_make_blocking( conn->fd );
    308178               
    309                         conn->established = TRUE;
    310                         conn->func( conn->data, 0, conn, cond );
    311                 }
     179                conn->established = TRUE;
     180                conn->func( conn->data, conn, cond );
    312181        }
    313182       
  • lib/ssl_nss.c

    r164352e re306fbf  
    5252        PRFileDesc *prfd;
    5353        gboolean established;
    54         gboolean verify;
    5554};
    5655
     
    103102}
    104103
    105 void *ssl_connect( char *host, int port, gboolean verify, ssl_input_function func, gpointer data )
     104void *ssl_connect( char *host, int port, ssl_input_function func, gpointer data )
    106105{
    107106        struct scd *conn = g_new0( struct scd, 1 );
     
    133132}
    134133
    135 void *ssl_starttls( int fd, char *hostname, gboolean verify, ssl_input_function func, gpointer data )
     134void *ssl_starttls( int fd, ssl_input_function func, gpointer data )
    136135{
    137136        struct scd *conn = g_new0( struct scd, 1 );
     
    140139        conn->func = func;
    141140        conn->data = data;
    142         conn->verify = verify && global.conf->cafile;
    143141
    144142        /* This function should be called via a (short) timeout instead of
     
    159157{
    160158        struct scd *conn = data;
    161        
    162         /* Right now we don't have any verification functionality for NSS. */
    163 
    164         if( conn->verify )
    165         {
    166                 conn->func( conn->data, 1, NULL, cond );
    167                 if( source >= 0 ) closesocket( source );
    168                 g_free( conn );
    169 
    170                 return FALSE;
    171         }
    172159       
    173160        if( source == -1 )
     
    190177       
    191178        conn->established = TRUE;
    192         conn->func( conn->data, 0, conn, cond );
     179        conn->func( conn->data, conn, cond );
    193180        return FALSE;
    194181       
    195182        ssl_connected_failure:
    196183       
    197         conn->func( conn->data, 0, NULL, cond );
     184        conn->func( conn->data, NULL, cond );
    198185       
    199186        PR_Close( conn -> prfd );
     
    251238        return B_EV_IO_READ;
    252239}
    253 
    254 char *ssl_verify_strerror( int code )
    255 {
    256         return g_strdup( "SSL certificate verification not supported by BitlBee NSS code." );
    257 }
  • lib/ssl_openssl.c

    r164352e re306fbf  
    4545        int fd;
    4646        gboolean established;
    47         gboolean verify;
    4847       
    4948        int inpa;
     
    6564}
    6665
    67 void *ssl_connect( char *host, int port, gboolean verify, ssl_input_function func, gpointer data )
     66void *ssl_connect( char *host, int port, ssl_input_function func, gpointer data )
    6867{
    6968        struct scd *conn = g_new0( struct scd, 1 );
     
    8382}
    8483
    85 void *ssl_starttls( int fd, char *hostname, gboolean verify, ssl_input_function func, gpointer data )
     84void *ssl_starttls( int fd, ssl_input_function func, gpointer data )
    8685{
    8786        struct scd *conn = g_new0( struct scd, 1 );
     
    9190        conn->data = data;
    9291        conn->inpa = -1;
    93         conn->verify = verify && global.conf->cafile;
    9492       
    9593        /* This function should be called via a (short) timeout instead of
     
    119117        SSL_METHOD *meth;
    120118       
    121         /* Right now we don't have any verification functionality for OpenSSL. */
    122 
    123         if( conn->verify )
    124         {
    125                 conn->func( conn->data, 1, NULL, cond );
    126                 if( source >= 0 ) closesocket( source );
    127                 g_free( conn );
    128 
    129                 return FALSE;
    130         }
    131 
    132119        if( source == -1 )
    133120                goto ssl_connected_failure;
     
    154141
    155142ssl_connected_failure:
    156         conn->func( conn->data, 0, NULL, cond );
     143        conn->func( conn->data, NULL, cond );
    157144       
    158145        if( conn->ssl )
     
    182169                if( conn->lasterr != SSL_ERROR_WANT_READ && conn->lasterr != SSL_ERROR_WANT_WRITE )
    183170                {
    184                         conn->func( conn->data, 0, NULL, cond );
     171                        conn->func( conn->data, NULL, cond );
    185172                       
    186173                        SSL_shutdown( conn->ssl );
     
    200187        conn->established = TRUE;
    201188        sock_make_blocking( conn->fd );         /* For now... */
    202         conn->func( conn->data, 0, conn, cond );
     189        conn->func( conn->data, conn, cond );
    203190        return FALSE;
    204191}
     
    285272{
    286273        return( ((struct scd*)conn)->lasterr == SSL_ERROR_WANT_WRITE ? B_EV_IO_WRITE : B_EV_IO_READ );
    287 }
    288 
    289 char *ssl_verify_strerror( int code )
    290 {
    291         return g_strdup( "SSL certificate verification not supported by BitlBee OpenSSL code." );
    292274}
    293275
  • protocols/bee.h

    r164352e re306fbf  
    123123        gboolean (*chat_add_user)( bee_t *bee, struct groupchat *c, bee_user_t *bu );
    124124        gboolean (*chat_remove_user)( bee_t *bee, struct groupchat *c, bee_user_t *bu );
    125         gboolean (*chat_topic)( bee_t *bee, struct groupchat *c, const char *new_topic, bee_user_t *bu );
     125        gboolean (*chat_topic)( bee_t *bee, struct groupchat *c, const char *new, bee_user_t *bu );
    126126        gboolean (*chat_name_hint)( bee_t *bee, struct groupchat *c, const char *name );
    127127        gboolean (*chat_invite)( bee_t *bee, bee_user_t *bu, const char *name, const char *msg );
  • protocols/jabber/io.c

    r164352e re306fbf  
    276276}
    277277
    278 gboolean jabber_connected_ssl( gpointer data, int returncode, void *source, b_input_condition cond )
     278gboolean jabber_connected_ssl( gpointer data, void *source, b_input_condition cond )
    279279{
    280280        struct im_connection *ic = data;
     
    292292                jd->ssl = NULL;
    293293               
    294                 if( returncode != 0 )
    295                 {
    296                         char *err = ssl_verify_strerror( returncode );
    297                         imcb_error( ic, "Certificate verification problem 0x%x: %s",
    298                                     returncode, err ? err : "Unknown" );
    299                         g_free( err );
    300                         imc_logout( ic, FALSE );
    301                 }
    302                 else
    303                 {
    304                         imcb_error( ic, "Could not connect to server" );
    305                         imc_logout( ic, TRUE );
    306                 }
    307                
     294                imcb_error( ic, "Could not connect to server" );
     295                imc_logout( ic, TRUE );
    308296                return FALSE;
    309297        }
     
    409397        struct im_connection *ic = data;
    410398        struct jabber_data *jd = ic->proto_data;
    411         char *xmlns, *tlsname;
     399        char *xmlns;
    412400       
    413401        xmlns = xt_find_attr( node, "xmlns" );
     
    435423       
    436424        jd->flags |= JFLAG_STARTTLS_DONE;
    437 
    438         /* If the user specified a server for the account, use this server as the
    439          * hostname in the certificate verification. Else we use the domain from
    440          * the username. */
    441         if( ic->acc->server && *ic->acc->server )
    442                 tlsname = ic->acc->server;
    443         else
    444                 tlsname = jd->server;
    445        
    446         jd->ssl = ssl_starttls( jd->fd, tlsname, set_getbool( &ic->acc->set, "tls_verify" ),
    447                                 jabber_connected_ssl, ic );
     425        jd->ssl = ssl_starttls( jd->fd, jabber_connected_ssl, ic );
    448426       
    449427        return XT_HANDLED;
  • protocols/jabber/jabber.c

    r164352e re306fbf  
    8787        s = set_add( &acc->set, "tls", "try", set_eval_tls, acc );
    8888        s->flags |= ACC_SET_OFFLINE_ONLY;
    89        
    90         s = set_add( &acc->set, "tls_verify", "true", set_eval_bool, acc );
    91         s->flags |= ACC_SET_OFFLINE_ONLY;
    92        
     89
    9390        s = set_add( &acc->set, "user_agent", "BitlBee", NULL, acc );
    9491       
     
    231228        if( set_getbool( &acc->set, "ssl" ) )
    232229        {
    233                 jd->ssl = ssl_connect( connect_to, set_getint( &acc->set, "port" ), FALSE, jabber_connected_ssl, ic );
     230                jd->ssl = ssl_connect( connect_to, set_getint( &acc->set, "port" ), jabber_connected_ssl, ic );
    234231                jd->fd = jd->ssl ? ssl_getfd( jd->ssl ) : -1;
    235232        }
  • protocols/jabber/jabber.h

    r164352e re306fbf  
    317317int jabber_write( struct im_connection *ic, char *buf, int len );
    318318gboolean jabber_connected_plain( gpointer data, gint source, b_input_condition cond );
    319 gboolean jabber_connected_ssl( gpointer data, int returncode, void *source, b_input_condition cond );
     319gboolean jabber_connected_ssl( gpointer data, void *source, b_input_condition cond );
    320320gboolean jabber_start_stream( struct im_connection *ic );
    321321void jabber_end_stream( struct im_connection *ic );
  • protocols/msn/soap.c

    r164352e re306fbf  
    6060        struct im_connection *ic;
    6161        int ttl;
    62         char *error;
    6362       
    6463        char *url, *action, *payload;
     
    159158        }
    160159       
    161         if( http_req->status_code != 200 )
    162                 soap_req->error = g_strdup( http_req->status_string );
    163        
    164160        st = soap_req->handle_response( soap_req );
    165161
     
    168164        g_free( soap_req->action );
    169165        g_free( soap_req->payload );
    170         g_free( soap_req->error );
    171         soap_req->url = soap_req->action = soap_req->payload = soap_req->error = NULL;
     166        soap_req->url = soap_req->action = soap_req->payload = NULL;
    172167       
    173168        if( st == MSN_SOAP_RETRY && --soap_req->ttl )
     
    258253        g_free( soap_req->action );
    259254        g_free( soap_req->payload );
    260         g_free( soap_req->error );
    261255        g_free( soap_req );
    262256}
     
    416410        if( sd->secret == NULL )
    417411        {
    418                 msn_auth_got_passport_token( ic, NULL, sd->error ? sd->error : soap_req->error );
     412                msn_auth_got_passport_token( ic, NULL, sd->error );
    419413                return MSN_SOAP_OK;
    420414        }
  • protocols/skype/skype.c

    r164352e re306fbf  
    11571157}
    11581158
    1159 gboolean skype_connected(gpointer data, int returncode, void *source, b_input_condition cond)
     1159gboolean skype_connected(gpointer data, void *source, b_input_condition cond)
    11601160{
    11611161        struct im_connection *ic = data;
     
    11851185        imcb_log(ic, "Connecting");
    11861186        sd->ssl = ssl_connect(set_getstr(&acc->set, "server"),
    1187                 set_getint(&acc->set, "port"), FALSE, skype_connected, ic);
     1187                set_getint(&acc->set, "port"), skype_connected, ic);
    11881188        sd->fd = sd->ssl ? ssl_getfd(sd->ssl) : -1;
    11891189        sd->username = g_strdup(acc->user);
  • unix.c

    r164352e re306fbf  
    4141#include <pwd.h>
    4242#include <locale.h>
    43 #include <grp.h>
    4443
    4544#if defined(OTR_BI) || defined(OTR_PI)
     
    153152                if( pw )
    154153                {
    155                         initgroups( global.conf->user, pw->pw_gid );
    156154                        setgid( pw->pw_gid );
    157155                        setuid( pw->pw_uid );
    158                 }
    159                 else
    160                 {
    161                         log_message( LOGLVL_WARNING, "Failed to look up user %s.", global.conf->user );
    162156                }
    163157        }
Note: See TracChangeset for help on using the changeset viewer.