]> jfr.im git - solanum.git/blobdiff - libratbox/src/nossl.c
ssl: allow cipher list to be overridden (closes #67)
[solanum.git] / libratbox / src / nossl.c
index aff870e1f0389cbd71a8ccf80ebab693e3d1f98e..6164bbe75ea1bc588bd2d8c0fde4b3340c7819fe 100644 (file)
@@ -1,4 +1,4 @@
-/* 
+/*
  *  libratbox: a library used by ircd-ratbox and other things
  *  nossl.c: ssl stub code
  *
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
- *    
+ *
  *  You should have received a copy of the GNU General Public License
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
  *  USA
- * 
+ *
  *  $Id: commio.c 24808 2008-01-02 08:17:05Z androsyn $
  */
 
 
 #include <libratbox_config.h>
 #include <ratbox_lib.h>
+#if !defined(HAVE_OPENSSL) && !defined(HAVE_GNUTLS) && !defined(HAVE_MBEDTLS)
 
-#ifndef HAVE_OPENSSL
+#include "arc4random.h"
 
 #include <commio-int.h>
 #include <commio-ssl.h>
 
-int 
-rb_setup_ssl_server(const char *cert, const char *keyfile, const char *dhfile)
+int
+rb_setup_ssl_server(const char *cert, const char *keyfile, const char *dhfile, const char *cipher_list)
 {
        errno = ENOSYS;
        return 0;
@@ -48,21 +49,41 @@ rb_init_ssl(void)
 }
 
 int
-rb_ssl_listen(rb_fde_t *F, int backlog)
+rb_ssl_listen(rb_fde_t *F, int backlog, int defer_accept)
 {
        errno = ENOSYS;
        return -1;
 }
 
-int rb_init_prng(const char *path, prng_seed_t seed_type)
+static void
+rb_stir_arc4random(void *unused)
 {
-       return -1;
+       arc4random_stir();
+}
+
+
+int
+rb_init_prng(const char *path, prng_seed_t seed_type)
+{
+       /* xxx this ignores the parameters above */
+       arc4random_stir();
+       rb_event_addish("rb_stir_arc4random", rb_stir_arc4random, NULL, 300);
+       return 1;
 }
 
 int
 rb_get_random(void *buf, size_t length)
 {
-       return -1;
+       uint32_t rnd = 0, i;
+       uint8_t *xbuf = buf;
+       for(i = 0; i < length; i++)
+       {
+               if(i % 4 == 0)
+                       rnd = arc4random();
+               xbuf[i] = rnd;
+               rnd >>= 8;
+       }
+       return 1;
 }
 
 const char *
@@ -72,21 +93,27 @@ rb_get_ssl_strerror(rb_fde_t *F)
        return nosupport;
 }
 
-void 
-rb_ssl_start_accepted(rb_fde_t *new_F, ACCB *cb, void *data, int timeout)
+int
+rb_get_ssl_certfp(rb_fde_t *F, uint8_t certfp[RB_SSL_CERTFP_LEN], int method)
+{
+       return 0;
+}
+
+void
+rb_ssl_start_accepted(rb_fde_t *new_F, ACCB * cb, void *data, int timeout)
 {
        return;
 }
 
-void 
-rb_ssl_start_connected(rb_fde_t *F, CNCB *callback, void *data, int timeout)
+void
+rb_ssl_start_connected(rb_fde_t *F, CNCB * callback, void *data, int timeout)
 {
        return;
 }
 
 void
-rb_connect_tcp_ssl(rb_fde_t *F, struct sockaddr *dest, 
-                     struct sockaddr *clocal, int socklen, CNCB *callback, void *data, int timeout)
+rb_connect_tcp_ssl(rb_fde_t *F, struct sockaddr *dest,
+                  struct sockaddr *clocal, int socklen, CNCB * callback, void *data, int timeout)
 {
        return;
 }
@@ -98,9 +125,61 @@ rb_supports_ssl(void)
 }
 
 void
-rb_ssl_shutdown(rb_fde_t * F)
-{  
+rb_ssl_shutdown(rb_fde_t *F)
+{
        return;
-}        
-#endif /* !HAVE_OPENSSL */
+}
+
+void
+rb_ssl_accept_setup(rb_fde_t *F, rb_fde_t *new_F, struct sockaddr *st, int addrlen)
+{
+       return;
+}
+
+ssize_t
+rb_ssl_read(rb_fde_t *F, void *buf, size_t count)
+{
+       errno = ENOSYS;
+       return -1;
+}
 
+ssize_t
+rb_ssl_write(rb_fde_t *F, const void *buf, size_t count)
+{
+       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;
+}
+
+void
+rb_get_ssl_info(char *buf, size_t len)
+{
+        rb_snprintf(buf, len, "Not compiled with SSL support");
+}
+
+int
+rb_ssl_get_certfp(rb_fde_t *F, uint8_t certfp[RB_SSL_CERTFP_LEN])
+{
+       errno = ENOSYS;
+       return -1;
+}
+
+const char *
+rb_ssl_get_cipher(rb_fde_t *F)
+{
+       errno = ENOSYS;
+       return NULL;
+}
+
+#endif /* !HAVE_OPENSSL */