+androsyn 2008/06/24 14:04:50 UTC (25588)
+ Log:
+ move some of the common accept code into a function
+
+ Modified:
+ libratbox/trunk/src/openssl.c (File Modified)
+
+
+androsyn 2008/06/20 21:49:53 UTC (25576)
+ Log:
+ rerun autoconf again
+
+ Modified:
+ libratbox/trunk/configure (File Modified)
+
+
+androsyn 2008/06/20 21:49:06 UTC (25574)
+ Log:
+ enable Id tags on configure.ac
+
+ Modified:
+ libratbox/trunk/configure.ac (File Modified) (Property Modified)
+
+
+jilles 2008/06/20 21:42:48 UTC (25572)
+ Log:
+ Rerun autoconf.
+
+
+ Modified:
+ libratbox/trunk/configure (File Modified)
+
+
+jilles 2008/06/20 21:42:29 UTC (25570)
+ Log:
+ Change == in test to =.
+
+
+ Modified:
+ libratbox/trunk/configure.ac (File Modified)
+
+
+androsyn 2008/06/20 18:46:08 UTC (25568)
+ Log:
+ add a missing commio-ssl.h include in gnutls.c
+
+ Modified:
+ libratbox/trunk/src/gnutls.c (File Modified)
+
+
+androsyn 2008/06/19 19:05:46 UTC (25556)
+ Log:
+ don't load the certificate twice and remember to close the file after opening it
+
+ Modified:
+ libratbox/trunk/src/gnutls.c (File Modified)
+
+
+androsyn 2008/06/11 14:40:44 UTC (25532)
+ Log:
+ All sorts of autotools goo for GNUTLS. Partially based on nenolod's patch.
+
+
+ Modified:
+ libratbox/trunk/Makefile.in (File Modified)
+ libratbox/trunk/aclocal.m4 (File Modified)
+ libratbox/trunk/configure (File Modified)
+ libratbox/trunk/configure.ac (File Modified)
+ libratbox/trunk/include/libratbox_config.h.in (File Modified)
+ libratbox/trunk/src/Makefile.am (File Modified)
+ libratbox/trunk/src/Makefile.in (File Modified)
+ libratbox/trunk/src/nossl.c (File Modified)
+
+
+androsyn 2008/06/11 06:12:55 UTC (25530)
+ Log:
+ first pass at gnutls code..
+
+ Modified:
+ libratbox/trunk/src/gnutls.c (File Added)
+
+
+jilles 2008/05/17 13:36:55 UTC (25387)
+ Log:
+ Remove static inline symbols from export-syms.txt.
+ These do not exist in the library and some platforms
+ such as MacOS X don't like that.
+
+
+ Modified:
+ libratbox/trunk/src/export-syms.txt (File Modified)
+
+
+androsyn 2008/05/16 16:06:02 UTC (25377)
+ Log:
+ fix a compile warning
+
+ Modified:
+ libratbox/trunk/src/openssl.c (File Modified)
+
+
+androsyn 2008/05/16 15:19:51 UTC (25375)
+ Log:
+ fix up the soft assert stuff for libratbox and rename likely/unlikely to rb_likely/rb_unlikely
+
+ Modified:
+ libratbox/trunk/include/commio-int.h (File Modified)
+ libratbox/trunk/include/ratbox_lib.h (File Modified)
+ libratbox/trunk/include/rb_memory.h (File Modified)
+ libratbox/trunk/src/balloc.c (File Modified)
+ libratbox/trunk/src/commio.c (File Modified)
+ libratbox/trunk/src/linebuf.c (File Modified)
+ libratbox/trunk/src/poll.c (File Modified)
+ libratbox/trunk/src/ratbox_lib.c (File Modified)
+ libratbox/trunk/src/sigio.c (File Modified)
+ libratbox/trunk/src/snprintf.c (File Modified)
+
+
+jilles 2008/05/14 17:55:22 UTC (25364)
+ Log:
+ Fix a mistake in kqueue 'overflow' handling.
+ If there is no space in the output buffer to report an
+ error adding to the kqueue, kevent(2) will abort and
+ return the error in errno (I was correct that it does
+ not tell you where it failed). So do not abort the loop
+ if kevent(2) fails and do not log (expected) EBADF.
+
+
+ Modified:
+ libratbox/trunk/src/kqueue.c (File Modified)
+
+
+androsyn 2008/05/13 14:48:46 UTC (25358)
+ Log:
+ save connect errno so that we get a correct connect failure reason
+
+ Modified:
+ libratbox/trunk/src/commio.c (File Modified)
+
+
+jilles 2008/05/12 17:52:22 UTC (25356)
+ Log:
+ Fix a possible crash with SSL connections closing early.
+
+
+ Modified:
+ libratbox/trunk/src/openssl.c (File Modified)
+
+
+jilles 2008/05/12 16:51:54 UTC (25354)
+ Log:
+ Fix kqueue sometimes dropping updates.
+ (ircd wouldn't read or write anymore to certain clients)
+ This happens because kqueue.c will often try to add
+ already closed file descriptors to the kqueue. The kernel
+ tries to report bad file descriptors in the eventlist; if
+ the eventlist has no space, processing of the changelist
+ is silently halted.
+ The fix:
+ 1. allocate two kqlst things, one for what kqlst currently does
+ and one as output buffer
+ this ensures the kevent(2) call in rb_select_kqueue() never
+ drops updates
+ 2. replace the kevent(2) call in kq_update_events() by a loop
+ that processes the updates one at a time
+ that doesn't happen much, and it's the only way to be sure
+ without also getting events out of the queue we cannot process
+ at that time
+
+
+ Modified:
+ libratbox/trunk/src/kqueue.c (File Modified)
+
+
+androsyn 2008/05/08 19:32:13 UTC (25327)
+ Log:
+ forgot prototypes and nossl versions of rb_ssl handshake stuff
+
+ Modified:
+ libratbox/trunk/include/rb_commio.h (File Modified)
+ libratbox/trunk/src/nossl.c (File Modified)
+
+
+androsyn 2008/05/08 19:09:42 UTC (25325)
+ Log:
+ keep track of the number of openssl handshakes and export rb_ssl_handshake_count and rb_ssl_clear_handshake_count
+
+ Modified:
+ libratbox/trunk/include/commio-int.h (File Modified)
+ libratbox/trunk/src/export-syms.txt (File Modified)
+ libratbox/trunk/src/openssl.c (File Modified)
+
+
+androsyn 2008/05/02 12:41:05 UTC (25291)
+ Log:
+ fix build for bsd platforms with lack EVFILT_TIMER
+
+ Modified:
+ libratbox/trunk/src/kqueue.c (File Modified)
+
+
+androsyn 2008/04/21 18:38:23 UTC (25245)
+ Log:
+ kill a process with SIGKILL when calling helper_close to be certain the process goes away
+
+ Modified:
+ libratbox/trunk/src/helper.c (File Modified)
+
+
+river 2008/04/16 20:33:35 UTC (25235)
+ Log:
+ support for compiling on OpenVMS (untested)
+
+
+ Modified:
+ libratbox/trunk/include/libratbox_config.h_vms (File Added)
+ libratbox/trunk/src/descrip.mms (File Added)
+ libratbox/trunk/src/rawbuf.c (File Modified)
+
+
+androsyn 2008/04/16 20:11:37 UTC (25233)
+ Log:
+ less than zero doesn't make sense for size_t
+
+ Modified:
+ libratbox/trunk/src/balloc.c (File Modified)
+
+
+jilles 2008/04/13 16:19:04 UTC (25229)
+ Log:
+ patricia: remove ugly abuse of K&R style function declaration
+ It left the argument types unspecified in a function
+ pointer, then called it using different numbers of
+ arguments.
+
+
+ Modified:
+ libratbox/trunk/include/rb_patricia.h (File Modified)
+ libratbox/trunk/src/patricia.c (File Modified)
+
+
+jilles 2008/04/12 22:20:43 UTC (25227)
+ Log:
+ Remove linebuf's per-line flushing flag, as it's per-head state.
+ In rare cases, this sharing caused the ircd to skip
+ part of outgoing traffic, e.g. appearing as "not enough
+ parameters" errors on the other side.
+ The purpose of this flag can be fulfilled by the writeofs
+ in the bufhead.
+
+
+ Modified:
+ libratbox/trunk/include/rb_linebuf.h (File Modified)
+ libratbox/trunk/src/linebuf.c (File Modified)
+
+
+jilles 2008/04/12 14:30:19 UTC (25225)
+ Log:
+ read/write return type should be ssize_t, not int or size_t.
+ The writev emulation used size_t, which is unsigned,
+ preventing negative values to be seen.
+
+
+ Modified:
+ libratbox/trunk/src/commio.c (File Modified)
+
+
+jilles 2008/04/11 08:48:21 UTC (25223)
+ Log:
+ kqueue: also use EV_ONESHOT for read events
+ This makes the kernel's state agree with our handler pointer.
+ SSL may need to suspend selecting for reading to write
+ something, e.g. with renegotiation.
+
+
+ Modified:
+ libratbox/trunk/src/kqueue.c (File Modified)
+
+
+jilles 2008/04/09 19:43:08 UTC (25219)
+ Log:
+ Call the accept callback when timing out an SSL accept.
+ The callback will close the F.
+
+
+ Modified:
+ libratbox/trunk/src/openssl.c (File Modified)
+
+
+jilles 2008/04/09 19:26:04 UTC (25217)
+ Log:
+ Fix up ssl_accept WANT_READ/WANT_WRITE a bit.
+ Only select for the exact thing asked, and if
+ SSL_ERROR_SYSCALL happens abort it even if the
+ errno is "ignorable".
+
+
+ Modified:
+ libratbox/trunk/src/openssl.c (File Modified)
+
+
+jilles 2008/04/05 19:09:32 UTC (25205)
+ Log:
+ Fix SET_SS_LEN so that it also works correctly outside libratbox.
+ Use RB_SOCKADDR_HAS_SA_LEN instead of SOCKADDR_IN_HAS_LEN
+ which is only defined inside libratbox.
+ This fixes creating own sockaddr structs in other programs
+ using SET_SS_LEN, then passing them to libratbox, on
+ 4.4BSD based systems.
+
+
+ Modified:
+ libratbox/trunk/include/ratbox_lib.h (File Modified)
+
+
+androsyn 2008/04/04 18:43:29 UTC (25203)
+ Log:
+ don't spin on accept when you don't get any data
+
+ Modified:
+ libratbox/trunk/src/openssl.c (File Modified)
+
+
+androsyn 2008/04/01 22:05:38 UTC (25197)
+ Log:
+ return useful errno values here
+
+ Modified:
+ libratbox/trunk/src/nossl.c (File Modified)
+
+
+jilles 2008/04/01 20:38:54 UTC (25195)
+ Log:
+ Make this link without OpenSSL.
+ Patch from nenolod.
+
+
+ Modified:
+ libratbox/trunk/src/nossl.c (File Modified)
+
+
androsyn 2008/03/30 16:34:18 UTC (25177)
Log:
Remove DISABLE_SSL_COMP stuff completely. Force our outbound connections to use TLSv1
# PARTICULAR PURPOSE.
@SET_MAKE@
+
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
host_triplet = @host@
subdir = .
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
- $(srcdir)/Makefile.in $(top_srcdir)/configure \
+ $(srcdir)/Makefile.in $(srcdir)/libratbox.pc.in \
+ $(top_srcdir)/configure \
$(top_srcdir)/include/libratbox_config.h.in COPYING ChangeLog \
INSTALL TODO config.guess config.sub depcomp install-sh \
ltmain.sh missing
configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/include/libratbox_config.h
-CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_FILES = libratbox.pc
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
+pkgconfigDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(pkgconfig_DATA)
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
ETAGS = etags
SEDOBJ = @SEDOBJ@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-SSL_INCLUDES = @SSL_INCLUDES@
+SSL_CFLAGS = @SSL_CFLAGS@
SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
TOUCH = @TOUCH@
top_srcdir = @top_srcdir@
AUTOMAKE_OPTIONS = foreign
SUBDIRS = src
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libratbox.pc
all: all-recursive
.SUFFIXES:
distclean-hdr:
-rm -f include/libratbox_config.h include/stamp-h1
+libratbox.pc: $(top_builddir)/config.status $(srcdir)/libratbox.pc.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
mostlyclean-libtool:
-rm -f *.lo
distclean-libtool:
-rm -f libtool
+install-pkgconfigDATA: $(pkgconfig_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
+ @list='$(pkgconfig_DATA)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
+ $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \
+ done
+
+uninstall-pkgconfigDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkgconfig_DATA)'; for p in $$list; do \
+ f=$(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \
+ done
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
exit 1; } >&2
check-am: all-am
check: check-recursive
-all-am: Makefile
+all-am: Makefile $(DATA)
installdirs: installdirs-recursive
installdirs-am:
+ for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
info-am:
-install-data-am:
+install-data-am: install-pkgconfigDATA
install-dvi: install-dvi-recursive
ps-am:
-uninstall-am:
+uninstall-am: uninstall-pkgconfigDATA
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
install-strip
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-html install-html-am \
install-info install-info-am install-man install-pdf \
- install-pdf-am install-ps install-ps-am install-strip \
- installcheck installcheck-am installdirs installdirs-am \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags tags-recursive uninstall uninstall-am
+ install-pdf-am install-pkgconfigDATA install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-recursive uninstall uninstall-am \
+ uninstall-pkgconfigDATA
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-# serial 52 Debian 1.5.26-4 AC_PROG_LIBTOOL
+# serial 52 Debian 1.5.26-1ubuntu1 AC_PROG_LIBTOOL
# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
AC_MSG_RESULT([$SED])
])
-# longlong.m4 serial 13
-dnl Copyright (C) 1999-2007 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paul Eggert.
-
-# Define HAVE_LONG_LONG_INT if 'long long int' works.
-# This fixes a bug in Autoconf 2.61, but can be removed once we
-# assume 2.62 everywhere.
-
-# Note: If the type 'long long int' exists but is only 32 bits large
-# (as on some very old compilers), HAVE_LONG_LONG_INT will not be
-# defined. In this case you can treat 'long long int' like 'long int'.
-
-AC_DEFUN([AC_TYPE_LONG_LONG_INT],
-[
- AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
- [AC_LINK_IFELSE(
- [_AC_TYPE_LONG_LONG_SNIPPET],
- [dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
- dnl If cross compiling, assume the bug isn't important, since
- dnl nobody cross compiles for this platform as far as we know.
- AC_RUN_IFELSE(
- [AC_LANG_PROGRAM(
- [[@%:@include <limits.h>
- @%:@ifndef LLONG_MAX
- @%:@ define HALF \
- (1LL << (sizeof (long long int) * CHAR_BIT - 2))
- @%:@ define LLONG_MAX (HALF - 1 + HALF)
- @%:@endif]],
- [[long long int n = 1;
- int i;
- for (i = 0; ; i++)
- {
- long long int m = n << i;
- if (m >> i != n)
- return 1;
- if (LLONG_MAX / 2 < m)
- break;
- }
- return 0;]])],
- [ac_cv_type_long_long_int=yes],
- [ac_cv_type_long_long_int=no],
- [ac_cv_type_long_long_int=yes])],
- [ac_cv_type_long_long_int=no])])
- if test $ac_cv_type_long_long_int = yes; then
- AC_DEFINE([HAVE_LONG_LONG_INT], 1,
- [Define to 1 if the system has the type `long long int'.])
- fi
-])
-
-# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
-# This fixes a bug in Autoconf 2.61, but can be removed once we
-# assume 2.62 everywhere.
-
-# Note: If the type 'unsigned long long int' exists but is only 32 bits
-# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
-# will not be defined. In this case you can treat 'unsigned long long int'
-# like 'unsigned long int'.
-
-AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
-[
- AC_CACHE_CHECK([for unsigned long long int],
- [ac_cv_type_unsigned_long_long_int],
- [AC_LINK_IFELSE(
- [_AC_TYPE_LONG_LONG_SNIPPET],
- [ac_cv_type_unsigned_long_long_int=yes],
- [ac_cv_type_unsigned_long_long_int=no])])
- if test $ac_cv_type_unsigned_long_long_int = yes; then
- AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], 1,
- [Define to 1 if the system has the type `unsigned long long int'.])
- fi
-])
-
-# Expands to a C program that can be used to test for simultaneous support
-# of 'long long' and 'unsigned long long'. We don't want to say that
-# 'long long' is available if 'unsigned long long' is not, or vice versa,
-# because too many programs rely on the symmetry between signed and unsigned
-# integer types (excluding 'bool').
-AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
-[
- AC_LANG_PROGRAM(
- [[/* Test preprocessor. */
- #if ! (-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
- error in preprocessor;
- #endif
- #if ! (18446744073709551615ULL <= -1ull)
- error in preprocessor;
- #endif
- /* Test literals. */
- long long int ll = 9223372036854775807ll;
- long long int nll = -9223372036854775807LL;
- unsigned long long int ull = 18446744073709551615ULL;
- /* Test constant expressions. */
- typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
- ? 1 : -1)];
- typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
- ? 1 : -1)];
- int i = 63;]],
- [[/* Test availability of runtime routines for shift and division. */
- long long int llmax = 9223372036854775807ll;
- unsigned long long int ullmax = 18446744073709551615ull;
- return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
- | (llmax / ll) | (llmax % ll)
- | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
- | (ullmax / ull) | (ullmax % ull));]])
-])
-
# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
#
# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.61 for libratbox devel.
#
-# $Id: configure.ac 23020 2006-09-01 18:20:19Z androsyn $
+# $Id: configure.ac 25574 2008-06-20 21:49:06Z androsyn $
#
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
GNUTLS_LIBS
PICFLAGS
SEDOBJ
-SSL_INCLUDES
+SSL_CFLAGS
SSL_LIBS
RB_PREFIX
LIBOBJS
optimize for fast installation [default=yes]
--disable-libtool-lock avoid locking (might break parallel builds)
--disable-ipv6 Disable IPv6 support
- --enable-gnutls Enable GnuTLS support.
- --disable-gnutls Disable GnuTLS support.
--enable-openssl=DIR Enable OpenSSL support (DIR optional).
--disable-openssl Disable OpenSSL support.
+ --enable-gnutls Enable GnuTLS support.
+ --disable-gnutls Disable GnuTLS support.
--enable-assert Enable assert(). Choose between soft(warnings) and
hard(aborts the daemon)
--enable-profile Enable profiling
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
-$Id: configure.ac 23020 2006-09-01 18:20:19Z androsyn $
+$Id: configure.ac 25574 2008-06-20 21:49:06Z androsyn $
_ACEOF
exit
fi
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
+/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Test preprocessor. */
- #if ! (-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
- error in preprocessor;
- #endif
- #if ! (18446744073709551615ULL <= -1ull)
- error in preprocessor;
- #endif
- /* Test literals. */
- long long int ll = 9223372036854775807ll;
- long long int nll = -9223372036854775807LL;
- unsigned long long int ull = 18446744073709551615ULL;
- /* Test constant expressions. */
- typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
- ? 1 : -1)];
- typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
- ? 1 : -1)];
- int i = 63;
+long long int ll = 9223372036854775807ll;
+ long long int nll = -9223372036854775807LL;
+ typedef int a[((-9223372036854775807LL < 0
+ && 0 < 9223372036854775807ll)
+ ? 1 : -1)];
+ int i = 63;
int
main ()
{
-/* Test availability of runtime routines for shift and division. */
- long long int llmax = 9223372036854775807ll;
- unsigned long long int ullmax = 18446744073709551615ull;
- return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
- | (llmax / ll) | (llmax % ll)
- | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
- | (ullmax / ull) | (ullmax % ull));
+long long int llmax = 9223372036854775807ll;
+ return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+ | (llmax / ll) | (llmax % ll));
;
return 0;
}
-
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (ac_try="$ac_link"
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-
- /* confdefs.h. */
+/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Test preprocessor. */
- #if ! (-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
- error in preprocessor;
- #endif
- #if ! (18446744073709551615ULL <= -1ull)
- error in preprocessor;
- #endif
- /* Test literals. */
- long long int ll = 9223372036854775807ll;
- long long int nll = -9223372036854775807LL;
- unsigned long long int ull = 18446744073709551615ULL;
- /* Test constant expressions. */
- typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
- ? 1 : -1)];
- typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
- ? 1 : -1)];
- int i = 63;
+unsigned long long int ull = 18446744073709551615ULL;
+ typedef int a[(18446744073709551615ULL <= (unsigned long long int) -1
+ ? 1 : -1)];
+ int i = 63;
int
main ()
{
-/* Test availability of runtime routines for shift and division. */
- long long int llmax = 9223372036854775807ll;
- unsigned long long int ullmax = 18446744073709551615ull;
- return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
- | (llmax / ll) | (llmax % ll)
- | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
- | (ullmax / ull) | (ullmax % ull));
+unsigned long long int ullmax = 18446744073709551615ull;
+ return (ull << 63 | ull >> 63 | ull << i | ull >> i
+ | ullmax / ull | ullmax % ull);
;
return 0;
}
-
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (ac_try="$ac_link"
fi
-{ echo "$as_me:$LINENO: checking for GnuTLS" >&5
-echo $ECHO_N "checking for GnuTLS... $ECHO_C" >&6; }
-# Check whether --enable-gnutls was given.
-if test "${enable_gnutls+set}" = set; then
- enableval=$enable_gnutls; cf_enable_gnutls=$enableval
-else
- cf_enable_gnutls="auto"
-fi
-
-
-if test "$cf_enable_gnutls" != no; then
-
-
-if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
-set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $PKG_CONFIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-if test -n "$PKG_CONFIG"; then
- { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-echo "${ECHO_T}$PKG_CONFIG" >&6; }
-else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_path_PKG_CONFIG"; then
- ac_pt_PKG_CONFIG=$PKG_CONFIG
- # Extract the first word of "pkg-config", so it can be a program name with args.
-set dummy pkg-config; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $ac_pt_PKG_CONFIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
-if test -n "$ac_pt_PKG_CONFIG"; then
- { echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5
-echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6; }
-else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
- if test "x$ac_pt_PKG_CONFIG" = x; then
- PKG_CONFIG=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- PKG_CONFIG=$ac_pt_PKG_CONFIG
- fi
-else
- PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
-fi
-
-fi
-if test -n "$PKG_CONFIG"; then
- _pkg_min_version=0.9.0
- { echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5
-echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6; }
- if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
- else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
- PKG_CONFIG=""
- fi
-
-fi
-
-pkg_failed=no
-{ echo "$as_me:$LINENO: checking for GNUTLS" >&5
-echo $ECHO_N "checking for GNUTLS... $ECHO_C" >&6; }
-
-if test -n "$PKG_CONFIG"; then
- if test -n "$GNUTLS_CFLAGS"; then
- pkg_cv_GNUTLS_CFLAGS="$GNUTLS_CFLAGS"
- else
- if test -n "$PKG_CONFIG" && \
- { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gnutls\"") >&5
- ($PKG_CONFIG --exists --print-errors "gnutls") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- pkg_cv_GNUTLS_CFLAGS=`$PKG_CONFIG --cflags "gnutls" 2>/dev/null`
-else
- pkg_failed=yes
-fi
- fi
-else
- pkg_failed=untried
-fi
-if test -n "$PKG_CONFIG"; then
- if test -n "$GNUTLS_LIBS"; then
- pkg_cv_GNUTLS_LIBS="$GNUTLS_LIBS"
- else
- if test -n "$PKG_CONFIG" && \
- { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gnutls\"") >&5
- ($PKG_CONFIG --exists --print-errors "gnutls") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- pkg_cv_GNUTLS_LIBS=`$PKG_CONFIG --libs "gnutls" 2>/dev/null`
-else
- pkg_failed=yes
-fi
- fi
-else
- pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
-else
- _pkg_short_errors_supported=no
-fi
- if test $_pkg_short_errors_supported = yes; then
- GNUTLS_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gnutls"`
- else
- GNUTLS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gnutls"`
- fi
- # Put the nasty error message in config.log where it belongs
- echo "$GNUTLS_PKG_ERRORS" >&5
-
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
- cf_enable_gnutls="no"
-elif test $pkg_failed = untried; then
- cf_enable_gnutls="no"
-else
- GNUTLS_CFLAGS=$pkg_cv_GNUTLS_CFLAGS
- GNUTLS_LIBS=$pkg_cv_GNUTLS_LIBS
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
-
- CPPFLAGS="$CPPFLAGS $GNUTLS_CFLAGS"
- LIBS="$LIBS $GNUTLS_LIBS"
- cf_enable_gnutls="yes"
-
-fi
-fi
-
-if test "$cf_enable_gnutls" != no; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_GNUTLS 1
-_ACEOF
-
-fi
{ echo "$as_me:$LINENO: checking for OpenSSL" >&5
echo $ECHO_N "checking for OpenSSL... $ECHO_C" >&6; }
fi
-if test "$cf_enable_gnutls" = "yes" -a "$cf_enable_openssl" = "auto"; then
- cf_enable_openssl="no"
-fi
-
if test "$cf_enable_openssl" != "no" ; then
cf_openssl_basedir=""
if test "$cf_enable_openssl" != "auto" &&
fi
if test ! -z "$cf_openssl_basedir"; then
if test -f "${cf_openssl_basedir}/include/openssl/opensslv.h" ; then
- SSL_INCLUDES="-I${cf_openssl_basedir}/include"
+ SSL_CFLAGS="-I${cf_openssl_basedir}/include"
SSL_LIBS="-L${cf_openssl_basedir}/lib"
else
cf_openssl_basedir=""
fi
save_CPPFLAGS="$CPPFLAGS"
-CPPFLAGS="$CPPFLAGS $SSL_INCLUDES"
+CPPFLAGS="$CPPFLAGS $SSL_CFLAGS"
save_LIBS="$LIBS"
LIBS="$LIBS $SSL_LIBS"
if test "$cf_enable_openssl" != no; then
fi
-if test "$cf_enable_openssl" != no; then
+
+
+{ echo "$as_me:$LINENO: checking for GnuTLS" >&5
+echo $ECHO_N "checking for GnuTLS... $ECHO_C" >&6; }
+# Check whether --enable-gnutls was given.
+if test "${enable_gnutls+set}" = set; then
+ enableval=$enable_gnutls; cf_enable_gnutls=$enableval
+else
+ cf_enable_gnutls="auto"
+fi
+
+
+if test "$cf_enable_gnutls" != no; then
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+ { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+ ac_pt_PKG_CONFIG=$PKG_CONFIG
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $ac_pt_PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+ { echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5
+echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+ if test "x$ac_pt_PKG_CONFIG" = x; then
+ PKG_CONFIG=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ PKG_CONFIG=$ac_pt_PKG_CONFIG
+ fi
+else
+ PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=0.9.0
+ { echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5
+echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6; }
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+ else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+ PKG_CONFIG=""
+ fi
+
+fi
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for GNUTLS" >&5
+echo $ECHO_N "checking for GNUTLS... $ECHO_C" >&6; }
+
+if test -n "$PKG_CONFIG"; then
+ if test -n "$GNUTLS_CFLAGS"; then
+ pkg_cv_GNUTLS_CFLAGS="$GNUTLS_CFLAGS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gnutls\"") >&5
+ ($PKG_CONFIG --exists --print-errors "gnutls") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ pkg_cv_GNUTLS_CFLAGS=`$PKG_CONFIG --cflags "gnutls" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+ if test -n "$GNUTLS_LIBS"; then
+ pkg_cv_GNUTLS_LIBS="$GNUTLS_LIBS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gnutls\"") >&5
+ ($PKG_CONFIG --exists --print-errors "gnutls") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ pkg_cv_GNUTLS_LIBS=`$PKG_CONFIG --libs "gnutls" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GNUTLS_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gnutls"`
+ else
+ GNUTLS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gnutls"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GNUTLS_PKG_ERRORS" >&5
+
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+ cf_enable_gnutls="no"
+elif test $pkg_failed = untried; then
+ cf_enable_gnutls="no"
+else
+ GNUTLS_CFLAGS=$pkg_cv_GNUTLS_CFLAGS
+ GNUTLS_LIBS=$pkg_cv_GNUTLS_LIBS
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+ cf_enable_gnutls="yes"
+
+fi
+fi
+
+if test "$cf_enable_gnutls" = "auto" -a "$cf_enable_openssl" = "yes"; then
+ cf_enable_gnutls="no"
+fi
+
+if test x"$cf_enable_openssl" != xno; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_OPENSSL 1
_ACEOF
+ GNUTLS_CFLAGS=""
+ GNUTLS_LIBS=""
+ SSL_TYPE="openssl"
+elif test x"$cf_enable_gnutls" != xno; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_GNUTLS 1
+_ACEOF
+
+ SSL_LIBS=""
+ SSL_CFLAGS=""
+ SSL_TYPE="gnutls"
fi
+
+
CPPFLAGS="$save_CPPFLAGS"
LIBS="$save_LIBS"
+
if test "$prefix" = "NONE"; then
cat >>confdefs.h <<_ACEOF
ac_config_commands="$ac_config_commands include/librb-config.h"
+
ac_config_files="$ac_config_files src/Makefile Makefile libratbox.pc"
GNUTLS_LIBS!$GNUTLS_LIBS$ac_delim
PICFLAGS!$PICFLAGS$ac_delim
SEDOBJ!$SEDOBJ$ac_delim
-SSL_INCLUDES!$SSL_INCLUDES$ac_delim
+SSL_CFLAGS!$SSL_CFLAGS$ac_delim
SSL_LIBS!$SSL_LIBS$ac_delim
RB_PREFIX!$RB_PREFIX$ac_delim
LIBOBJS!$LIBOBJS$ac_delim
echo "IPv6 support ................... $have_v6"
echo "Assert debugging ............... $assert"
echo "Block allocator ................ $balloc"
-echo "OpenSSL ........................ $cf_enable_openssl"
-echo "GnuTLS ......................... $cf_enable_gnutls"
+echo "SSL Type........................ $SSL_TYPE"
echo
-dnl $Id: configure.ac 23020 2006-09-01 18:20:19Z androsyn $
+dnl $Id: configure.ac 25574 2008-06-20 21:49:06Z androsyn $
dnl Process this file with autoconf to produce a configure script.
dnl TODO: clean up all the OpenSSL and shared module checking stuff;
AC_PREREQ(2.60)
AUTOMAKE_OPTIONS = 1.10
dnl Sneaky way to get an Id tag into the configure script
-AC_COPYRIGHT([$Id: configure.ac 23020 2006-09-01 18:20:19Z androsyn $])
+AC_COPYRIGHT([$Id: configure.ac 25574 2008-06-20 21:49:06Z androsyn $])
AC_INIT([libratbox],[devel])
AM_INIT_AUTOMAKE(AC_PACKAGE_TARNAME, AC_PACKAGE_VERSION, -)
AC_DEFINE(HAVE_WIN32, [1], [Define to 1 if you are on windows])
fi
-dnl GnuTLS support
-AC_MSG_CHECKING(for GnuTLS)
-AC_ARG_ENABLE(gnutls,
-[AC_HELP_STRING([--enable-gnutls],[Enable GnuTLS support.])
-AC_HELP_STRING([--disable-gnutls],[Disable GnuTLS support.])],
-[cf_enable_gnutls=$enableval],
-[cf_enable_gnutls="auto"])
-
-if test "$cf_enable_gnutls" != no; then
- PKG_CHECK_MODULES(GNUTLS, [gnutls], [
- CPPFLAGS="$CPPFLAGS $GNUTLS_CFLAGS"
- LIBS="$LIBS $GNUTLS_LIBS"
- cf_enable_gnutls="yes"
- ], [cf_enable_gnutls="no"])
-fi
-
-if test "$cf_enable_gnutls" != no; then
- AC_DEFINE(HAVE_GNUTLS, 1, [Has GNUTLS])
-fi
dnl OpenSSL support
AC_MSG_CHECKING(for OpenSSL)
[cf_enable_openssl=$enableval],
[cf_enable_openssl="auto"])
-dnl Prefer GnuTLS over OpenSSL due to licensing issues, this could use improvement
-if test "$cf_enable_gnutls" = "yes" -a "$cf_enable_openssl" = "auto"; then
- cf_enable_openssl="no"
-fi
-
if test "$cf_enable_openssl" != "no" ; then
cf_openssl_basedir=""
if test "$cf_enable_openssl" != "auto" &&
dnl Now check cf_openssl_found to see if we found anything.
if test ! -z "$cf_openssl_basedir"; then
if test -f "${cf_openssl_basedir}/include/openssl/opensslv.h" ; then
- SSL_INCLUDES="-I${cf_openssl_basedir}/include"
+ SSL_CFLAGS="-I${cf_openssl_basedir}/include"
SSL_LIBS="-L${cf_openssl_basedir}/lib"
else
dnl OpenSSL wasn't found in the directory specified. Naughty
fi
save_CPPFLAGS="$CPPFLAGS"
-CPPFLAGS="$CPPFLAGS $SSL_INCLUDES"
+CPPFLAGS="$CPPFLAGS $SSL_CFLAGS"
save_LIBS="$LIBS"
LIBS="$LIBS $SSL_LIBS"
if test "$cf_enable_openssl" != no; then
[cf_enable_openssl=no], [-lcrypto])
fi
-if test "$cf_enable_openssl" != no; then
+
+
+dnl GnuTLS support
+AC_MSG_CHECKING(for GnuTLS)
+AC_ARG_ENABLE(gnutls,
+[AC_HELP_STRING([--enable-gnutls],[Enable GnuTLS support.])
+AC_HELP_STRING([--disable-gnutls],[Disable GnuTLS support.])],
+[cf_enable_gnutls=$enableval],
+[cf_enable_gnutls="auto"])
+
+if test "$cf_enable_gnutls" != no; then
+ PKG_CHECK_MODULES(GNUTLS, [gnutls], [
+ cf_enable_gnutls="yes"
+ ], [cf_enable_gnutls="no"])
+fi
+
+if test "$cf_enable_gnutls" = "auto" -a "$cf_enable_openssl" = "yes"; then
+ cf_enable_gnutls="no"
+fi
+
+if test x"$cf_enable_openssl" != xno; then
AC_DEFINE(HAVE_OPENSSL,1,[Has OpenSSL])
+ GNUTLS_CFLAGS=""
+ GNUTLS_LIBS=""
+ SSL_TYPE="openssl"
+elif test x"$cf_enable_gnutls" != xno; then
+ AC_DEFINE(HAVE_GNUTLS, 1, [Has GnuTLS])
+ SSL_LIBS=""
+ SSL_CFLAGS=""
+ SSL_TYPE="gnutls"
fi
+
+
CPPFLAGS="$save_CPPFLAGS"
LIBS="$save_LIBS"
AC_SUBST(PICFLAGS)
AC_SUBST(CFLAGS)
AC_SUBST(SEDOBJ)
-AC_SUBST(SSL_INCLUDES)
+AC_SUBST(SSL_CFLAGS)
AC_SUBST(SSL_LIBS)
-
+AC_SUBST(GNUTLS_CFLAGS)
+AC_SUBST(GNUTLS_LIBS)
if test "$prefix" = "NONE"; then
AC_DEFINE_UNQUOTED(RB_PREFIX, "$ac_default_prefix", [Prefix where libratbox is installed.])
)
-AC_CONFIG_FILES([
- src/Makefile
- Makefile
- libratbox.pc
-])
+
+AC_CONFIG_FILES( \
+ src/Makefile \
+ Makefile \
+ libratbox.pc \
+)
AC_OUTPUT
echo "IPv6 support ................... $have_v6"
echo "Assert debugging ............... $assert"
echo "Block allocator ................ $balloc"
-echo "OpenSSL ........................ $cf_enable_openssl"
-echo "GnuTLS ......................... $cf_enable_gnutls"
+echo "SSL Type........................ $SSL_TYPE"
echo
struct conndata *connect;
struct acceptdata *accept;
void *ssl;
+ unsigned int handshake_count;
unsigned long ssl_errno;
};
rb_dlink_list *hlist;
rb_dlink_node *ptr;
- if(unlikely(fd < 0))
+ if(rb_unlikely(fd < 0))
return NULL;
hlist = &rb_fd_table[rb_hash_fd(fd)];
/* Define to 1 if you have the `gmtime_r' function. */
#undef HAVE_GMTIME_R
-/* Has GNUTLS */
+/* Has GnuTLS */
#undef HAVE_GNUTLS
/* Define to 1 if the system has the type `intmax_t'. */
/*
- * $Id: ratbox_lib.h 24866 2008-01-10 16:33:54Z androsyn $
+ * $Id: ratbox_lib.h 25375 2008-05-16 15:19:51Z androsyn $
*/
#ifndef RB_LIB_H
#ifdef __GNUC__
-#ifdef likely
-#undef likely
+#ifdef rb_likely
+#undef rb_likely
#endif
-#ifdef unlikely
-#undef unlikely
+#ifdef rb_unlikely
+#undef rb_unlikely
#endif
#if __GNUC__ == 2 && __GNUC_MINOR__ < 96
# define __builtin_expect(x, expected_value) (x)
#endif
-#define likely(x) __builtin_expect(!!(x), 1)
-#define unlikely(x) __builtin_expect(!!(x), 0)
+#define rb_likely(x) __builtin_expect(!!(x), 1)
+#define rb_unlikely(x) __builtin_expect(!!(x), 0)
#else /* !__GNUC__ */
#define UNUSED(x) x
-#ifdef likely
-#undef likely
+#ifdef rb_likely
+#undef rb_likely
#endif
-#ifdef unlikely
-#undef unlikely
+#ifdef rb_unlikely
+#undef rb_unlikely
#endif
-#define likely(x) (x)
-#define unlikely(x) (x)
+#define rb_likely(x) (x)
+#define rb_unlikely(x) (x)
#endif
#ifdef SOFT_ASSERT
#ifdef __GNUC__
#define lrb_assert(expr) do \
- if(unlikely(!(expr))) { \
- lib_ilog(L_MAIN, \
+ if(rb_unlikely(!(expr))) { \
+ rb_lib_log( \
"file: %s line: %d (%s): Assertion failed: (%s)", \
__FILE__, __LINE__, __PRETTY_FUNCTION__, #expr); \
- sendto_realops_flags(UMODE_ALL, L_ALL, \
- "file: %s line: %d (%s): Assertion failed: (%s)", \
- __FILE__, __LINE__, __PRETTY_FUNCTION__, #expr); \
} \
while(0)
#else
#define lrb_assert(expr) do \
- if(unlikely(!(expr))) { \
- lib_ilog(L_MAIN, \
+ if(rb_unlikely(!(expr))) { \
+ rb_lib_log(L_MAIN, \
"file: %s line: %d: Assertion failed: (%s)", \
__FILE__, __LINE__, #expr); \
- sendto_realops_flags(UMODE_ALL, L_ALL, \
- "file: %s line: %d: Assertion failed: (%s)" \
- __FILE__, __LINE__, #expr); \
} \
while(0)
#endif
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
* USA
*
- * $Id: rb_commio.h 25038 2008-01-23 16:03:08Z androsyn $
+ * $Id: rb_commio.h 25327 2008-05-08 19:32:13Z androsyn $
*/
#ifndef RB_LIB_H
void rb_ssl_start_connected(rb_fde_t *F, CNCB *callback, void *data, int timeout);
int rb_supports_ssl(void);
-
+unsigned int rb_ssl_handshake_count(rb_fde_t *F);
+void rb_ssl_clear_handshake_count(rb_fde_t *F);
+
#endif /* INCLUDED_commio_h */
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
* USA
*
- * $Id: rb_linebuf.h 24324 2007-08-31 22:05:45Z androsyn $
+ * $Id: rb_linebuf.h 25227 2008-04-12 22:20:43Z jilles $
*/
#ifndef RB_LIB_H
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
* USA
*
- * $Id: rb_memory.h 25022 2008-01-23 03:54:00Z androsyn $
+ * $Id: rb_memory.h 25375 2008-05-16 15:19:51Z androsyn $
*/
#ifndef RB_LIB_H
rb_malloc(size_t size)
{
void *ret = calloc(1, size);
- if(unlikely(ret == NULL))
+ if(rb_unlikely(ret == NULL))
rb_outofmemory();
return (ret);
}
{
void *ret = realloc(x, y);
- if(unlikely(ret == NULL))
+ if(rb_unlikely(ret == NULL))
rb_outofmemory();
return (ret);
}
rb_strndup(const char *x, size_t y)
{
char *ret = malloc(y);
- if(unlikely(ret == NULL))
+ if(rb_unlikely(ret == NULL))
rb_outofmemory();
rb_strlcpy(ret, x, y);
return(ret);
rb_strdup(const char *x)
{
char *ret = malloc(strlen(x) + 1);
- if(unlikely(ret == NULL))
+ if(rb_unlikely(ret == NULL))
rb_outofmemory();
strcpy(ret, x);
return(ret);
static inline void
rb_free(void *ptr)
{
- if(likely(ptr != NULL))
+ if(rb_likely(ptr != NULL))
free(ptr);
}
#endif /* _I_MEMORY_H */
+
-# $Id: Makefile.am 24820 2008-01-02 19:47:32Z androsyn $
+# $Id: Makefile.am 25532 2008-06-11 14:40:44Z androsyn $
AUTOMAKE_OPTIONS = foreign
-INCLUDES = -I. -I../include @SSL_INCLUDES@
+INCLUDES = -I. -I../include @SSL_CFLAGS@ @GNUTLS_CFLAGS@
libratbox_la_SOURCES = \
unix.c \
libratbox_la_LDFLAGS = -version-info 3:0:0 -no-undefined -export-symbols export-syms.txt
-libratbox_la_LIBADD = @CRYPT_LIB@ @SSL_LIBS@
+libratbox_la_LIBADD = @CRYPT_LIB@ @SSL_LIBS@ @GNUTLS_LIBS@
lib_LTLIBRARIES = libratbox.la
@SET_MAKE@
-# $Id: Makefile.am 24820 2008-01-02 19:47:32Z androsyn $
+# $Id: Makefile.am 25532 2008-06-11 14:40:44Z androsyn $
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
SEDOBJ = @SEDOBJ@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
-SSL_INCLUDES = @SSL_INCLUDES@
+SSL_CFLAGS = @SSL_CFLAGS@
SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
TOUCH = @TOUCH@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AUTOMAKE_OPTIONS = foreign
-INCLUDES = -I. -I../include @SSL_INCLUDES@
+INCLUDES = -I. -I../include @SSL_CFLAGS@ @GNUTLS_CFLAGS@
libratbox_la_SOURCES = \
unix.c \
win32.c \
rawbuf.c \
patricia.c
-libratbox_la_LDFLAGS = -avoid-version -no-undefined -export-symbols export-syms.txt
-libratbox_la_LIBADD = @CRYPT_LIB@ @SSL_LIBS@
+libratbox_la_LDFLAGS = -version-info 3:0:0 -no-undefined -export-symbols export-syms.txt
+libratbox_la_LIBADD = @CRYPT_LIB@ @SSL_LIBS@ @GNUTLS_LIBS@
lib_LTLIBRARIES = libratbox.la
all: all-am
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
* USA
*
- * $Id: balloc.c 25048 2008-01-23 18:34:02Z androsyn $
+ * $Id: balloc.c 25375 2008-05-16 15:19:51Z androsyn $
*/
/*
b->alloc_size = bh->elemsPerBlock * (bh->elemSize + sizeof(rb_heap_block *));
b->elems = get_block(b->alloc_size);
- if(unlikely(b->elems == NULL))
+ if(rb_unlikely(b->elems == NULL))
{
return (1);
}
lrb_assert(elemsize > 0 && elemsperblock > 0);
lrb_assert(elemsize >= sizeof(rb_dlink_node));
/* Catch idiotic requests up front */
- if((elemsize <= 0) || (elemsperblock <= 0))
+ if((elemsize == 0) || (elemsperblock <= 0))
{
rb_bh_fail("Attempting to rb_bh_create idiotic sizes");
}
rb_heap_memblock *memblock;
#endif
lrb_assert(bh != NULL);
- if(unlikely(bh == NULL))
+ if(rb_unlikely(bh == NULL))
{
rb_bh_fail("Cannot allocate if bh == NULL");
}
/* Allocate new block and assign */
/* newblock returns 1 if unsuccessful, 0 if not */
- if(unlikely(newblock(bh)))
+ if(rb_unlikely(newblock(bh)))
{
rb_lib_log("newblock() failed");
rb_outofmemory(); /* Well that didn't work either...bail */
lrb_assert(bh != NULL);
lrb_assert(ptr != NULL);
- if(unlikely(bh == NULL))
+ if(rb_unlikely(bh == NULL))
{
- rb_lib_log("balloc.c:rb_bh_free() bh == NULL");
+ rb_lib_log("balloc.c:rb_bhFree() bh == NULL");
return (1);
}
- if(unlikely(ptr == NULL))
+ if(rb_unlikely(ptr == NULL))
{
- rb_lib_log("balloc.rb_bh_free() ptr == NULL");
+ rb_lib_log("balloc.rb_bhFree() ptr == NULL");
return (1);
}
#else
memblock = (rb_heap_memblock *) ((uintptr_t)ptr - sizeof(rb_heap_block *));
/* XXX */
- if(unlikely(!((uintptr_t)ptr >= (uintptr_t)memblock->block->elems && (uintptr_t)ptr < (uintptr_t)memblock->block->elems + (uintptr_t)memblock->block->alloc_size)))
+ if(rb_unlikely(!((uintptr_t)ptr >= (uintptr_t)memblock->block->elems && (uintptr_t)ptr < (uintptr_t)memblock->block->elems + (uintptr_t)memblock->block->alloc_size)))
{
rb_bh_fail("rb_bh_free() bogus pointer");
}
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
* USA
*
- * $Id: commio.c 25358 2008-05-13 14:48:46Z androsyn $
+ * $Id: commio.c 25375 2008-05-16 15:19:51Z androsyn $
*/
#include <libratbox_config.h>
#include <ratbox_lib.h>
new_F = rb_open(new_fd, RB_FD_SOCKET, "Incoming Connection");
- if(unlikely(!rb_set_nb(new_F)))
+ if(rb_unlikely(!rb_set_nb(new_F)))
{
rb_get_errno();
rb_lib_log("rb_accept: Couldn't set FD %d non blocking!", new_F->fd);
}
/* Set the socket non-blocking, and other wonderful bits */
- if(unlikely(!rb_set_nb(*F1)))
+ if(rb_unlikely(!rb_set_nb(*F1)))
{
rb_lib_log("rb_open: Couldn't set FD %d non blocking: %s", nfd[0], strerror(errno));
rb_close(*F1);
return -1;
}
- if(unlikely(!rb_set_nb(*F2)))
+ if(rb_unlikely(!rb_set_nb(*F2)))
{
rb_lib_log("rb_open: Couldn't set FD %d non blocking: %s", nfd[1], strerror(errno));
rb_close(*F1);
*F1 = rb_open(fd[0], RB_FD_PIPE, desc);
*F2 = rb_open(fd[1], RB_FD_PIPE, desc);
- if(unlikely(!rb_set_nb(*F1)))
+ if(rb_unlikely(!rb_set_nb(*F1)))
{
rb_lib_log("rb_open: Couldn't set FD %d non blocking: %s", fd[0], strerror(errno));
rb_close(*F1);
return -1;
}
- if(unlikely(!rb_set_nb(*F2)))
+ if(rb_unlikely(!rb_set_nb(*F2)))
{
rb_lib_log("rb_open: Couldn't set FD %d non blocking: %s", fd[1], strerror(errno));
rb_close(*F1);
rb_fde_t *F;
int fd;
/* First, make sure we aren't going to run out of file descriptors */
- if(unlikely(number_fd >= rb_maxconnections))
+ if(rb_unlikely(number_fd >= rb_maxconnections))
{
errno = ENFILE;
return NULL;
*/
fd = socket(family, sock_type, proto);
rb_fd_hack(&fd);
- if(unlikely(fd < 0))
+ if(rb_unlikely(fd < 0))
return NULL; /* errno will be passed through, yay.. */
#if defined(RB_IPV6) && defined(IPV6_V6ONLY)
return NULL;
/* Set the socket non-blocking, and other wonderful bits */
- if(unlikely(!rb_set_nb(F)))
+ if(rb_unlikely(!rb_set_nb(F)))
{
rb_lib_log("rb_open: Couldn't set FD %d non blocking: %s", fd, strerror(errno));
rb_close(F);
rb_fde_t *F = add_fd(fd);
lrb_assert(fd >= 0);
- if(unlikely(IsFDOpen(F)))
+ if(rb_unlikely(IsFDOpen(F)))
{
return NULL;
}
lrb_assert(IsFDOpen(F));
lrb_assert(!(type & RB_FD_FILE));
- if(unlikely(type & RB_FD_FILE))
+ if(rb_unlikely(type & RB_FD_FILE))
{
lrb_assert(F->read_handler == NULL);
lrb_assert(F->write_handler == NULL);
rb_sleep
rb_spawn_process
rb_supports_ssl
+rb_ssl_handshake_count
+rb_ssl_clear_handshake_count
*
* Copyright (C) 2007-2008 ircd-ratbox development team
* Copyright (C) 2007-2008 Aaron Sethman <androsyn@ratbox.org>
- * Copyright (C) 2008 William Pitcock <nenolod@nenolod.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
* USA
*
- * $Id: commio.c 24808 2008-01-02 08:17:05Z androsyn $
+ * $Id: gnutls.c 25568 2008-06-20 18:46:08Z androsyn $
*/
#include <libratbox_config.h>
#include <ratbox_lib.h>
-
-#ifdef HAVE_GNUTLS
-
#include <commio-int.h>
#include <commio-ssl.h>
+#ifdef HAVE_GNUTLS
+
#include <gnutls/gnutls.h>
+#include <gcrypt.h>
+
+static gnutls_certificate_credentials x509;
+static gnutls_dh_params dh_params;
-static gnutls_certificate_credentials_t x509_cred;
-static gnutls_dh_params_t dh_params;
+
+
+#define SSL_P(x) *((gnutls_session_t *)F->ssl)
void
rb_ssl_shutdown(rb_fde_t * F)
{
+ int i;
if(F == NULL || F->ssl == NULL)
return;
+ for (i = 0; i < 4; i++)
+ {
+ if(gnutls_bye(SSL_P(F), GNUTLS_SHUT_RDWR) == GNUTLS_E_SUCCESS)
+ break;
+ }
+ gnutls_deinit(SSL_P(F));
+ rb_free(F->ssl);
+}
- gnutls_bye((gnutls_session_t) F->ssl, GNUTLS_SHUT_RDWR);
- gnutls_deinit((gnutls_session_t) F->ssl);
+unsigned int
+rb_ssl_handshake_count(rb_fde_t *F)
+{
+ return F->handshake_count;
+}
+
+void
+rb_ssl_clear_handshake_count(rb_fde_t *F)
+{
+ F->handshake_count = 0;
}
static void
F->accept->callback(F, RB_ERR_TIMEOUT, NULL, 0, F->accept->data);
}
+
+static int do_ssl_handshake(rb_fde_t *F, PF *callback)
+{
+ int ret;
+ int flags;
+
+ ret = gnutls_handshake(SSL_P(F));
+ if(ret < 0)
+ {
+ if((ret == GNUTLS_E_INTERRUPTED && rb_ignore_errno(errno)) || ret == GNUTLS_E_AGAIN)
+ {
+ if(gnutls_record_get_direction(SSL_P(F)) == 0)
+ flags = RB_SELECT_READ;
+ else
+ flags = RB_SELECT_WRITE;
+ rb_setselect(F, flags, callback, NULL);
+ return 0;
+ }
+ F->ssl_errno = ret;
+ return -1;
+ }
+ return 1; /* handshake is finished..go about life */
+}
+
static void
rb_ssl_tryaccept(rb_fde_t * F, void *data)
{
- int ssl_err;
- lrb_assert(F->accept != NULL);
- int flags;
+ int ret;
struct acceptdata *ad;
- if((ssl_err = gnutls_handshake((gnutls_session_t) F->ssl)) != 0)
- {
- switch (ssl_err)
- {
- case GNUTLS_E_INTERRUPTED:
- if(rb_ignore_errno(errno))
- case GNUTLS_E_AGAIN:
- {
- if(gnutls_record_get_direction((gnutls_session_t) F->ssl))
- flags = RB_SELECT_WRITE;
- else
- flags = RB_SELECT_READ;
+ lrb_assert(F->accept != NULL);
- F->ssl_errno = ssl_err;
- rb_setselect(F, flags, rb_ssl_tryaccept, NULL);
- return;
- }
- break;
- default:
- F->ssl_errno = ssl_err;
+ ret = do_ssl_handshake(F, rb_ssl_tryaccept);
+
+ switch(ret)
+ {
+ case -1:
F->accept->callback(F, RB_ERROR_SSL, NULL, 0, F->accept->data);
break;
- }
- return;
+ case 0:
+ /* do_ssl_handshake does the rb_setselect stuff */
+ return;
+ default:
+ break;
+
+
}
rb_settimeout(F, 0, NULL, NULL);
rb_setselect(F, RB_SELECT_READ | RB_SELECT_WRITE, NULL, NULL);
ad->callback(F, RB_OK, (struct sockaddr *) &ad->S, ad->addrlen,
ad->data);
rb_free(ad);
+
}
void
rb_ssl_start_accepted(rb_fde_t * new_F, ACCB * cb, void *data, int timeout)
{
- gnutls_session_t sess;
- int ssl_err;
-
+ gnutls_session_t *ssl;
new_F->type |= RB_FD_SSL;
-
- gnutls_init(&sess, GNUTLS_SERVER);
- gnutls_set_default_priority(sess);
- gnutls_credentials_set(sess, GNUTLS_CRD_CERTIFICATE, x509_cred);
- gnutls_dh_set_prime_bits(sess, 1024);
- gnutls_certificate_server_set_request(sess, GNUTLS_CERT_REQUEST);
-
- new_F->ssl = sess;
-
+ ssl = new_F->ssl = rb_malloc(sizeof(gnutls_session_t));
new_F->accept = rb_malloc(sizeof(struct acceptdata));
-
+
new_F->accept->callback = cb;
new_F->accept->data = data;
rb_settimeout(new_F, timeout, rb_ssl_timeout, NULL);
new_F->accept->addrlen = 0;
- gnutls_transport_set_ptr((gnutls_session_t) new_F->ssl, (gnutls_transport_ptr_t) rb_get_fd(new_F));
-
- if((ssl_err = gnutls_handshake((gnutls_session_t) new_F->ssl)) != 0)
- {
- switch(ssl_err)
- {
- case GNUTLS_E_INTERRUPTED:
- if(rb_ignore_errno(errno))
- case GNUTLS_E_AGAIN:
- {
- int flags;
-
- if(gnutls_record_get_direction((gnutls_session_t) new_F->ssl))
- flags = RB_SELECT_WRITE;
- else
- flags = RB_SELECT_READ;
-
- new_F->ssl_errno = ssl_err;
- rb_setselect(new_F, flags, rb_ssl_tryaccept, NULL);
- return;
- }
- break;
- default:
- new_F->ssl_errno = ssl_err;
- new_F->accept->callback(new_F, RB_ERROR_SSL, NULL, 0, new_F->accept->data);
- return;
- }
- }
- else
+ gnutls_init(ssl, GNUTLS_SERVER);
+ gnutls_set_default_priority(*ssl);
+ gnutls_credentials_set(*ssl, GNUTLS_CRD_CERTIFICATE, x509);
+ gnutls_dh_set_prime_bits(*ssl, 1024);
+ gnutls_transport_set_ptr(*ssl, (gnutls_transport_ptr_t) (long int)new_F->fd);
+ if(do_ssl_handshake(new_F, rb_ssl_tryaccept))
{
- struct acceptdata *ad;
-
- rb_settimeout(new_F, 0, NULL, NULL);
- rb_setselect(new_F, RB_SELECT_READ | RB_SELECT_WRITE, NULL, NULL);
-
- ad = new_F->accept;
+ struct acceptdata *ad = new_F->accept;
new_F->accept = NULL;
- ad->callback(new_F, RB_OK, (struct sockaddr *) &ad->S, ad->addrlen,
- ad->data);
- rb_free(ad);
+ ad->callback(new_F, RB_OK, (struct sockaddr *) &ad->S, ad->addrlen, ad->data);
+ rb_free(ad);
}
+
}
+
+
+
void
rb_ssl_accept_setup(rb_fde_t * F, int new_fd, struct sockaddr *st, int addrlen)
{
- gnutls_session_t sess;
rb_fde_t *new_F;
- int ssl_err;
new_F = rb_find_fd(new_fd);
-
- gnutls_init(&sess, GNUTLS_SERVER);
- gnutls_set_default_priority(sess);
- gnutls_credentials_set(sess, GNUTLS_CRD_CERTIFICATE, x509_cred);
- gnutls_dh_set_prime_bits(sess, 1024);
- gnutls_certificate_server_set_request(sess, GNUTLS_CERT_REQUEST);
-
new_F->type |= RB_FD_SSL;
+ new_F->ssl = rb_malloc(sizeof(gnutls_session_t));
new_F->accept = rb_malloc(sizeof(struct acceptdata));
new_F->accept->callback = F->accept->callback;
memcpy(&new_F->accept->S, st, addrlen);
new_F->accept->addrlen = addrlen;
- gnutls_transport_set_ptr((gnutls_session_t) new_F->ssl, (gnutls_transport_ptr_t) rb_get_fd(new_F));
- if((ssl_err = gnutls_handshake((gnutls_session_t) new_F->ssl)) != 0)
+ gnutls_init((gnutls_session_t *)new_F->ssl, GNUTLS_SERVER);
+ gnutls_set_default_priority(SSL_P(new_F));
+ gnutls_credentials_set(SSL_P(new_F), GNUTLS_CRD_CERTIFICATE, x509);
+ gnutls_dh_set_prime_bits(SSL_P(new_F), 1024);
+ gnutls_transport_set_ptr(SSL_P(new_F), (gnutls_transport_ptr_t) (long int)new_fd);
+ if(do_ssl_handshake(F, rb_ssl_tryaccept))
{
- switch(ssl_err)
- {
- case GNUTLS_E_INTERRUPTED:
- if(rb_ignore_errno(errno))
- case GNUTLS_E_AGAIN:
- {
- int flags;
+ struct acceptdata *ad = F->accept;
+ F->accept = NULL;
+ ad->callback(F, RB_OK, (struct sockaddr *) &ad->S, ad->addrlen, ad->data);
+ rb_free(ad);
+ }
+}
- if(gnutls_record_get_direction((gnutls_session_t) new_F->ssl))
- flags = RB_SELECT_WRITE;
- else
- flags = RB_SELECT_READ;
- new_F->ssl_errno = ssl_err;
- rb_setselect(new_F, flags, rb_ssl_tryaccept, NULL);
- return;
- }
- break;
- default:
- new_F->ssl_errno = ssl_err;
- new_F->accept->callback(new_F, RB_ERROR_SSL, NULL, 0, new_F->accept->data);
- return;
- }
- }
- else
- {
- struct acceptdata *ad;
- rb_settimeout(new_F, 0, NULL, NULL);
- rb_setselect(new_F, RB_SELECT_READ | RB_SELECT_WRITE, NULL, NULL);
-
- ad = new_F->accept;
- new_F->accept = NULL;
- ad->callback(new_F, RB_OK, (struct sockaddr *) &ad->S, ad->addrlen,
- ad->data);
- rb_free(ad);
- }
-}
static ssize_t
rb_ssl_read_or_write(int r_or_w, rb_fde_t * F, void *rbuf, const void *wbuf, size_t count)
{
ssize_t ret;
- unsigned long err;
- gnutls_session_t ssl = F->ssl;
+ gnutls_session_t *ssl = F->ssl;
if(r_or_w == 0)
- ret = gnutls_record_recv(ssl, rbuf, count);
+ ret = gnutls_record_recv(*ssl, rbuf, count);
else
- ret = gnutls_record_send(ssl, wbuf, count);
+ ret = gnutls_record_send(*ssl, wbuf, count);
if(ret < 0)
{
- switch (ret)
+ switch(ret)
{
case GNUTLS_E_AGAIN:
- errno = EAGAIN;
- if (gnutls_record_get_direction(ssl))
- return RB_RW_SSL_NEED_WRITE;
- else
- return RB_RW_SSL_NEED_READ;
case GNUTLS_E_INTERRUPTED:
- err = ret;
- if(err == 0)
+ if(rb_ignore_errno(errno))
{
- F->ssl_errno = 0;
- return RB_RW_IO_ERROR;
+ if(gnutls_record_get_direction(*ssl) == 0)
+ return RB_RW_SSL_NEED_READ;
+ else
+ return RB_RW_SSL_NEED_WRITE;
+ break;
}
- break;
default:
- err = ret;
- break;
+ F->ssl_errno = ret;
+ errno = EIO;
+ return RB_RW_IO_ERROR;
}
- F->ssl_errno = err;
- if(err > 0)
- {
- errno = EIO; /* not great but... */
- return RB_RW_SSL_ERROR;
- }
- return RB_RW_IO_ERROR;
}
return ret;
}
return rb_ssl_read_or_write(1, F, NULL, buf, count);
}
+static void
+rb_gcry_random_seed(void *unused)
+{
+ gcry_fast_random_poll();
+}
+
int
rb_init_ssl(void)
{
- int ret = 1, g_ret;
-
gnutls_global_init();
-
- gnutls_certificate_allocate_credentials(&x509_cred);
- gnutls_dh_params_init(&dh_params);
-
- if((g_ret = gnutls_dh_params_generate2(dh_params, 1024)) < 0)
+
+ if(gnutls_certificate_allocate_credentials(&x509) != GNUTLS_E_SUCCESS)
{
- rb_lib_log("rb_init_gnutls: Failed to generate GNUTLS DH params: %s", gnutls_strerror(g_ret));
- ret = 0;
+ rb_lib_log("rb_init_ssl: Unable to allocate SSL/TLS certificate credentials");
+ return 0;
}
+ rb_event_addish("rb_gcry_random_seed", rb_gcry_random_seed, NULL, 300);
+ return 1;
+}
- gnutls_certificate_set_dh_params(x509_cred, dh_params);
+static void
+rb_free_datum_t(gnutls_datum_t *d)
+{
+ rb_free(d->data);
+ rb_free(d);
+}
- return ret;
+static gnutls_datum_t *
+rb_load_file_into_datum_t(const char *file)
+{
+ FILE *f;
+ gnutls_datum_t *datum;
+ struct stat fileinfo;
+ if((f = fopen(file, "r")) == NULL)
+ return NULL;
+ if(fstat(fileno(f), &fileinfo))
+ return NULL;
+
+ datum = rb_malloc(sizeof(gnutls_datum_t));
+
+ if(fileinfo.st_size > 131072) /* deal with retards */
+ datum->size = 131072;
+ else
+ datum->size = fileinfo.st_size;
+
+ datum->data = rb_malloc(datum->size + 1);
+ fread(datum->data, datum->size, 1, f);
+ fclose(f);
+ return datum;
}
int
rb_setup_ssl_server(const char *cert, const char *keyfile, const char *dhfile)
{
- int ret = 0;
+ int ret;
+ gnutls_datum_t *d_cert, *d_key;
+ if(cert == NULL)
+ {
+ rb_lib_log("rb_setup_ssl_server: No certificate file");
+ return 0;
+ }
- if((ret = gnutls_certificate_set_x509_key_file(x509_cred, cert, keyfile, GNUTLS_X509_FMT_PEM)) < 0)
+ if((d_cert = rb_load_file_into_datum_t(cert)) == NULL)
{
- rb_lib_log("rb_setup_ssl_server: Setting x509 keys up failed: %s", gnutls_strerror(ret));
+ rb_lib_log("rb_setup_ssl_server: Error loading certificate: %s", strerror(errno));
return 0;
}
+ if((d_key = rb_load_file_into_datum_t(keyfile)) == NULL)
+ {
+ rb_lib_log("rb_setup_ssl_server: Error loading key: %s", strerror(errno));
+ return 0;
+ }
+
+
+ if((ret = gnutls_certificate_set_x509_key_mem(x509, d_cert, d_key, GNUTLS_X509_FMT_PEM)) != GNUTLS_E_SUCCESS)
+ {
+ rb_lib_log("rb_setup_ssl_server: Error loading certificate or key file: %s", gnutls_strerror(ret));
+ return 0;
+ }
+ rb_free_datum_t(d_cert);
+ rb_free_datum_t(d_key);
+
+ if(dhfile != NULL)
+ {
+ if(gnutls_dh_params_init(&dh_params) == GNUTLS_E_SUCCESS)
+ {
+ gnutls_datum_t *data;
+ int xret;
+ data = rb_load_file_into_datum_t(dhfile);
+ if(data != NULL)
+ {
+ xret = gnutls_dh_params_import_pkcs3(dh_params, data, GNUTLS_X509_FMT_PEM);
+ if(xret < 0)
+ rb_lib_log("rb_setup_ssl_server: Error parsing DH file: %s\n", gnutls_strerror(xret));
+ rb_free_datum_t(data);
+ }
+ gnutls_certificate_set_dh_params(x509, dh_params);
+ } else
+ rb_lib_log("rb_setup_ssl_server: Unable to setup DH parameters");
+ }
return 1;
}
rb_ssl_tryconn_cb(rb_fde_t * F, void *data)
{
struct ssl_connect *sconn = data;
- int ssl_err;
-
- if((ssl_err = gnutls_handshake((gnutls_session_t) F->ssl)) != 0)
- {
- switch (ssl_err)
- {
- case GNUTLS_E_INTERRUPTED:
- if(rb_ignore_errno(errno))
- case GNUTLS_E_AGAIN:
- {
- F->ssl_errno = ssl_err;
- rb_setselect(F, RB_SELECT_READ | RB_SELECT_WRITE,
- rb_ssl_tryconn_cb, sconn);
- return;
- }
- default:
- F->ssl_errno = ssl_err;
- rb_ssl_connect_realcb(F, RB_ERROR_SSL, sconn);
- return;
- }
- }
- else
- {
- rb_ssl_connect_realcb(F, RB_OK, sconn);
- }
+ int ret;
+
+ ret = do_ssl_handshake(F, rb_ssl_tryconn_cb);
+
+ switch(ret)
+ {
+ case -1:
+ rb_ssl_connect_realcb(F, RB_ERROR_SSL, sconn);
+ break;
+ case 0:
+ /* do_ssl_handshake does the rb_setselect stuff */
+ return;
+ default:
+ break;
+
+
+ }
+ rb_ssl_connect_realcb(F, RB_OK, sconn);
}
static void
rb_ssl_tryconn(rb_fde_t * F, int status, void *data)
{
- gnutls_session_t sess;
struct ssl_connect *sconn = data;
- int ssl_err;
-
if(status != RB_OK)
{
rb_ssl_connect_realcb(F, status, sconn);
F->type |= RB_FD_SSL;
- gnutls_init(&sess, GNUTLS_CLIENT);
- gnutls_set_default_priority(sess);
- gnutls_credentials_set(sess, GNUTLS_CRD_CERTIFICATE, x509_cred);
- gnutls_dh_set_prime_bits(sess, 1024);
- gnutls_transport_set_ptr(sess, (gnutls_transport_ptr_t) F->fd);
-
- F->ssl = sess;
-
+
rb_settimeout(F, sconn->timeout, rb_ssl_tryconn_timeout_cb, sconn);
- if((ssl_err = gnutls_handshake((gnutls_session_t) F->ssl)) != 0)
- {
- switch (ssl_err)
- {
- case GNUTLS_E_INTERRUPTED:
- if(rb_ignore_errno(errno))
- case GNUTLS_E_AGAIN:
- {
- F->ssl_errno = ssl_err;
- rb_setselect(F, RB_SELECT_READ | RB_SELECT_WRITE,
- rb_ssl_tryconn_cb, sconn);
- return;
- }
- default:
- F->ssl_errno = ssl_err;
- rb_ssl_connect_realcb(F, RB_ERROR_SSL, sconn);
- return;
- }
- }
- else
+ F->ssl = rb_malloc(sizeof(gnutls_session_t));
+ gnutls_init(F->ssl, GNUTLS_CLIENT);
+ gnutls_set_default_priority(SSL_P(F));
+ gnutls_dh_set_prime_bits(SSL_P(F), 1024);
+ gnutls_transport_set_ptr(SSL_P(F), (gnutls_transport_ptr_t) (long int)F->fd);
+
+ if(do_ssl_handshake(F, rb_ssl_tryconn_cb))
{
rb_ssl_connect_realcb(F, RB_OK, sconn);
}
sconn->callback = callback;
sconn->timeout = timeout;
rb_connect_tcp(F, dest, clocal, socklen, rb_ssl_tryconn, sconn, timeout);
+
}
void
rb_ssl_start_connected(rb_fde_t * F, CNCB * callback, void *data, int timeout)
{
- gnutls_session_t sess;
struct ssl_connect *sconn;
- int ssl_err;
if(F == NULL)
return;
F->connect->callback = callback;
F->connect->data = data;
F->type |= RB_FD_SSL;
-
- gnutls_init(&sess, GNUTLS_CLIENT);
- gnutls_set_default_priority(sess);
- gnutls_credentials_set(sess, GNUTLS_CRD_CERTIFICATE, x509_cred);
- gnutls_dh_set_prime_bits(sess, 1024);
- gnutls_transport_set_ptr(sess, (gnutls_transport_ptr_t) F->fd);
-
- F->ssl = sess;
+ F->ssl = rb_malloc(sizeof(gnutls_session_t));
+ gnutls_init(F->ssl, GNUTLS_CLIENT);
+ gnutls_set_default_priority(SSL_P(F));
+ gnutls_dh_set_prime_bits(SSL_P(F), 1024);
+ gnutls_transport_set_ptr(SSL_P(F), (gnutls_transport_ptr_t) (long int)F->fd);
+
rb_settimeout(F, sconn->timeout, rb_ssl_tryconn_timeout_cb, sconn);
- if((ssl_err = gnutls_handshake((gnutls_session_t) F->ssl)) != 0)
- {
- switch (ssl_err)
- {
- case GNUTLS_E_INTERRUPTED:
- if(rb_ignore_errno(errno))
- case GNUTLS_E_AGAIN:
- {
- F->ssl_errno = ssl_err;
- rb_setselect(F, RB_SELECT_READ | RB_SELECT_WRITE,
- rb_ssl_tryconn_cb, sconn);
- return;
- }
- default:
- F->ssl_errno = ssl_err;
- rb_ssl_connect_realcb(F, RB_ERROR_SSL, sconn);
- return;
- }
- }
- else
+
+ if(do_ssl_handshake(F, rb_ssl_tryconn_cb))
{
rb_ssl_connect_realcb(F, RB_OK, sconn);
}
}
-/* XXX: implement me */
int
rb_init_prng(const char *path, prng_seed_t seed_type)
{
- return -1;
+ gcry_fast_random_poll();
+ return 1;
}
int
rb_get_random(void *buf, size_t length)
{
- return -1;
+ gcry_randomize(buf, length, GCRY_STRONG_RANDOM);
+ return 1;
}
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
* USA
*
- * $Id: helper.c 25038 2008-01-23 16:03:08Z androsyn $
+ * $Id: helper.c 25245 2008-04-21 18:38:23Z androsyn $
*/
#include <libratbox_config.h>
#include <ratbox_lib.h>
{
if(helper == NULL)
return;
-
+ kill(helper->pid, SIGKILL);
rb_close(helper->ifd);
rb_close(helper->ofd);
rb_free(helper);
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
* USA
*
- * $Id: kqueue.c 25038 2008-01-23 16:03:08Z androsyn $
+ * $Id: kqueue.c 25364 2008-05-14 17:55:22Z jilles $
*/
#include <libratbox_config.h>
}
return RB_OK;
}
+
+#if defined(KQUEUE_SCHED_EVENT)
static int can_do_event = 0;
int
rb_kqueue_supports_event(void)
{
return;
}
+#endif /* KQUEUE_SCHED_EVENT */
#else /* kqueue not supported */
int
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
* USA
*
- * $Id: linebuf.c 25038 2008-01-23 16:03:08Z androsyn $
+ * $Id: linebuf.c 25375 2008-05-16 15:19:51Z androsyn $
*/
#include <libratbox_config.h>
bufline->terminated = 1;
/* Truncate the data if required */
- if(unlikely(len > 510))
+ if(rb_unlikely(len > 510))
{
len = 510;
bufline->buf[len++] = '\r';
bufline->buf[len++] = '\n';
}
- else if(unlikely(len == 0))
+ else if(rb_unlikely(len == 0))
{
bufline->buf[len++] = '\r';
bufline->buf[len++] = '\n';
/* Create a new line */
bufline = rb_linebuf_new_line(bufhead);
- if(unlikely(buffer != NULL))
+ if(rb_unlikely(buffer != NULL))
len = rb_strlcpy(bufline->buf, buffer, BUF_DATA_SIZE);
bufline->terminated = 1;
/* Truncate the data if required */
- if(unlikely(len > 510))
+ if(rb_unlikely(len > 510))
{
len = 510;
bufline->buf[len++] = '\r';
bufline->buf[len++] = '\n';
}
- else if(unlikely(len == 0))
+ else if(rb_unlikely(len == 0))
{
bufline->buf[len++] = '\r';
bufline->buf[len++] = '\n';
/* Create a new line */
bufline = rb_linebuf_new_line(bufhead);
- if(unlikely(format != NULL))
+ if(rb_unlikely(format != NULL))
{
va_start(args, format);
len = rb_vsnprintf(bufline->buf, BUF_DATA_SIZE, format, args);
bufline->terminated = 1;
/* Truncate the data if required */
- if(unlikely(len > 510))
+ if(rb_unlikely(len > 510))
{
len = 510;
bufline->buf[len++] = '\r';
bufline->buf[len++] = '\n';
}
- else if(unlikely(len == 0))
+ else if(rb_unlikely(len == 0))
{
bufline->buf[len++] = '\r';
bufline->buf[len++] = '\n';
ssize_t
rb_ssl_read(rb_fde_t * F, void *buf, size_t count)
{
- return 0;
+ errno = ENOSYS;
+ return -1;
}
ssize_t
rb_ssl_write(rb_fde_t * F, const void *buf, size_t count)
{
- return 0;
+ errno = ENOSYS;
+ return -1;
}
+unsigned int
+rb_ssl_handshake_count(rb_fde_t *F)
+{
+ return 0;
+}
+
+void
+rb_ssl_clear_handshake_count(rb_fde_t *F)
+{
+ return;
+}
+
#endif /* !HAVE_OPENSSL */
static SSL_CTX *ssl_server_ctx;
static SSL_CTX *ssl_client_ctx;
+static int libratbox_index = -1;
static unsigned long get_last_err(void)
{
SSL_free((SSL *) F->ssl);
}
+unsigned int
+rb_ssl_handshake_count(rb_fde_t *F)
+{
+ return F->handshake_count;
+}
+
+void
+rb_ssl_clear_handshake_count(rb_fde_t *F)
+{
+ F->handshake_count = 0;
+}
+
static void
rb_ssl_timeout(rb_fde_t * F, void *notused)
{
}
+static void rb_ssl_info_callback(SSL *ssl, int where, int ret)
+{
+ if(where & SSL_CB_HANDSHAKE_START)
+ {
+ rb_fde_t *F = SSL_get_ex_data(ssl, libratbox_index);
+ if(F == NULL)
+ return;
+ F->handshake_count++;
+ }
+}
+
+static void
+rb_setup_ssl_cb(rb_fde_t *F)
+{
+ SSL_set_ex_data(F->ssl, libratbox_index, (char *)F);
+ SSL_set_info_callback((SSL *)F->ssl, (void *)rb_ssl_info_callback);
+}
+
static void
rb_ssl_tryaccept(rb_fde_t * F, void *data)
{
}
-void
-rb_ssl_start_accepted(rb_fde_t * new_F, ACCB * cb, void *data, int timeout)
+
+static void
+rb_ssl_accept_common(rb_fde_t *new_F)
{
int ssl_err;
-
- new_F->type |= RB_FD_SSL;
- new_F->ssl = SSL_new(ssl_server_ctx);
- new_F->accept = rb_malloc(sizeof(struct acceptdata));
-
- new_F->accept->callback = cb;
- new_F->accept->data = data;
- rb_settimeout(new_F, timeout, rb_ssl_timeout, NULL);
-
- new_F->accept->addrlen = 0;
- SSL_set_fd((SSL *) new_F->ssl, rb_get_fd(new_F));
if((ssl_err = SSL_accept((SSL *) new_F->ssl)) <= 0)
{
switch (ssl_err = SSL_get_error((SSL *) new_F->ssl, ssl_err))
}
}
+void
+rb_ssl_start_accepted(rb_fde_t * new_F, ACCB * cb, void *data, int timeout)
+{
+ new_F->type |= RB_FD_SSL;
+ new_F->ssl = SSL_new(ssl_server_ctx);
+ new_F->accept = rb_malloc(sizeof(struct acceptdata));
+
+ new_F->accept->callback = cb;
+ new_F->accept->data = data;
+ rb_settimeout(new_F, timeout, rb_ssl_timeout, NULL);
+
+ new_F->accept->addrlen = 0;
+ SSL_set_fd((SSL *) new_F->ssl, rb_get_fd(new_F));
+ rb_setup_ssl_cb(new_F);
+ rb_ssl_accept_common(new_F);
+}
+
rb_ssl_accept_setup(rb_fde_t * F, int new_fd, struct sockaddr *st, int addrlen)
{
rb_fde_t *new_F;
- int ssl_err;
new_F = rb_find_fd(new_fd);
+ if(new_F == NULL)
+ return;
new_F->type |= RB_FD_SSL;
new_F->ssl = SSL_new(ssl_server_ctx);
new_F->accept = rb_malloc(sizeof(struct acceptdata));
new_F->accept->addrlen = addrlen;
SSL_set_fd((SSL *) new_F->ssl, new_fd);
- if((ssl_err = SSL_accept((SSL *) new_F->ssl)) <= 0)
- {
- switch (ssl_err = SSL_get_error((SSL *) new_F->ssl, ssl_err))
- {
- case SSL_ERROR_SYSCALL:
- if(rb_ignore_errno(errno))
- case SSL_ERROR_WANT_READ:
- case SSL_ERROR_WANT_WRITE:
- {
- F->ssl_errno = get_last_err();
- rb_setselect(new_F, RB_SELECT_READ | RB_SELECT_WRITE,
- rb_ssl_tryaccept, NULL);
- return;
- }
- default:
- F->ssl_errno = get_last_err();
- F->accept->callback(F, RB_ERROR_SSL, NULL, 0, F->accept->data);
- return;
- }
- }
- else
- {
- rb_ssl_tryaccept(new_F, NULL);
- }
+ rb_setup_ssl_cb(new_F);
+ rb_ssl_accept_common(new_F);
}
static ssize_t
rb_init_ssl(void)
{
int ret = 1;
+ char libratbox_data[] = "libratbox data";
SSL_load_error_strings();
SSL_library_init();
+ libratbox_index = SSL_get_ex_new_index(0, libratbox_data, NULL, NULL, NULL);
ssl_server_ctx = SSL_CTX_new(SSLv23_server_method());
if(ssl_server_ctx == NULL)
{
F->type |= RB_FD_SSL;
F->ssl = SSL_new(ssl_client_ctx);
SSL_set_fd((SSL *) F->ssl, F->fd);
-
+ rb_setup_ssl_cb(F);
rb_settimeout(F, sconn->timeout, rb_ssl_tryconn_timeout_cb, sconn);
if((ssl_err = SSL_connect((SSL *) F->ssl)) <= 0)
{
F->ssl = SSL_new(ssl_client_ctx);
SSL_set_fd((SSL *) F->ssl, F->fd);
+ rb_setup_ssl_cb(F);
rb_settimeout(F, sconn->timeout, rb_ssl_tryconn_timeout_cb, sconn);
if((ssl_err = SSL_connect((SSL *) F->ssl)) <= 0)
{
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
* USA
*
- * $Id: poll.c 25038 2008-01-23 16:03:08Z androsyn $
+ * $Id: poll.c 25375 2008-05-16 15:19:51Z androsyn $
*/
#include <libratbox_config.h>
#include <ratbox_lib.h>
static void
resize_pollarray(int fd)
{
- if(unlikely(fd >= pollfd_list.allocated))
+ if(rb_unlikely(fd >= pollfd_list.allocated))
{
int x, old_value = pollfd_list.allocated;
pollfd_list.allocated += 1024;
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
* USA
*
- * $Id: ratbox_lib.c 25038 2008-01-23 16:03:08Z androsyn $
+ * $Id: ratbox_lib.c 25375 2008-05-16 15:19:51Z androsyn $
*/
#include <libratbox_config.h>
#else
tp = gmtime(&t);
#endif
- if(unlikely(tp == NULL))
+ if(rb_unlikely(tp == NULL))
{
strcpy(buf, "");
return(buf);
gm = gmtime(&t);
#endif
- if(unlikely(gm == NULL))
+ if(rb_unlikely(gm == NULL))
{
rb_strlcpy(buf, "", len);
return(buf);
{
struct timeval newtime;
- if(unlikely(rb_gettimeofday(&newtime, NULL) == -1))
+ if(rb_unlikely(rb_gettimeofday(&newtime, NULL) == -1))
{
rb_lib_log("Clock Failure (%s)", strerror(errno));
rb_lib_restart("Clock Failure");
const char *
rb_lib_version(void)
{
- static const char *id = "$Rev: 25038 $";
+ static const char *id = "$Rev: 25375 $";
return id;
}
len -= clen;
if(len == 0)
return;
- data += clen;
+ data = (char *)data + clen;
}
memcpy(buf->data, data, clen);
buf->len += clen;
len -= clen;
- data += clen;
+ data = (char *)data + clen;
rb->len += clen;
}
}
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
* USA
*
- * $Id: sigio.c 25038 2008-01-23 16:03:08Z androsyn $
+ * $Id: sigio.c 25375 2008-05-16 15:19:51Z androsyn $
*/
#ifndef _GNU_SOURCE
static inline void
resize_pollarray(int fd)
{
- if(unlikely(fd >= pollfd_list.allocated))
+ if(rb_unlikely(fd >= pollfd_list.allocated))
{
int x, old_value = pollfd_list.allocated;
pollfd_list.allocated += 1024;
* The original headers are below..
* Note that this implementation does not process floating point numbers so
* you will likely need to fall back to using sprintf yourself to do those...
- * $Id: snprintf.c 25038 2008-01-23 16:03:08Z androsyn $
+ * $Id: snprintf.c 25375 2008-05-16 15:19:51Z androsyn $
*/
/*
/* Reject out-of-range values early. Large positive sizes are
used for unknown buffer sizes. */
- if (unlikely((int) size < 0)) {
+ if (rb_unlikely((int) size < 0)) {
return 0;
}