]> jfr.im git - solanum.git/blobdiff - src/listener.c
Remove s_assert definition from ircd_defs.h and add it to its own header.
[solanum.git] / src / listener.c
index 489aee7ec648b452ec8a2f8c25325f26cfe9e011..e71921cd2b80d85fa2c8109561d2182c2105d7d6 100644 (file)
@@ -42,6 +42,8 @@
 #include "hostmask.h"
 #include "sslproc.h"
 #include "hash.h"
+#include "s_assert.h"
+#include "logger.h"
 
 #ifndef INADDR_NONE
 #define INADDR_NONE ((unsigned int) 0xffffffff)
@@ -168,7 +170,6 @@ static int
 inetport(struct Listener *listener)
 {
        rb_fde_t *F;
-       int ret;
        int opt = 1;
 
        /*
@@ -232,7 +233,7 @@ inetport(struct Listener *listener)
                return 0;
        }
 
-       if((ret = rb_listen(F, RATBOX_SOMAXCONN)))
+       if(rb_listen(F, RATBOX_SOMAXCONN, listener->defer_accept))
        {
                ilog_error("listen()");
                rb_close(F);
@@ -305,7 +306,7 @@ find_listener(struct rb_sockaddr_storage *addr)
  * the format "255.255.255.255"
  */
 void
-add_listener(int port, const char *vhost_ip, int family, int ssl)
+add_listener(int port, const char *vhost_ip, int family, int ssl, int defer_accept)
 {
        struct Listener *listener;
        struct rb_sockaddr_storage vaddr;
@@ -378,6 +379,7 @@ add_listener(int port, const char *vhost_ip, int family, int ssl)
 
        listener->F = NULL;
        listener->ssl = ssl;
+       listener->defer_accept = defer_accept;
 
        if(inetport(listener))
                listener->active = 1;
@@ -480,6 +482,7 @@ accept_precallback(rb_fde_t *F, struct sockaddr *addr, rb_socklen_t addrlen, voi
        char buf[BUFSIZE];
        struct ConfItem *aconf;
        static time_t last_oper_notice = 0;
+       int len;
 
        if(listener->ssl && (!ssl_ok || !get_ssld_count()))
        {
@@ -503,7 +506,6 @@ accept_precallback(rb_fde_t *F, struct sockaddr *addr, rb_socklen_t addrlen, voi
                        
                rb_write(F, "ERROR :All connections in use\r\n", 32);
                rb_close(F);
-               /* Re-register a new IO request for the next accept .. */
                return 0;
        }
 
@@ -519,7 +521,8 @@ accept_precallback(rb_fde_t *F, struct sockaddr *addr, rb_socklen_t addrlen, voi
                        
                if(ConfigFileEntry.dline_with_reason)
                {
-                       if (rb_snprintf(buf, sizeof(buf), "ERROR :*** Banned: %s\r\n", aconf->passwd) >= (int)(sizeof(buf)-1))
+                       len = rb_snprintf(buf, sizeof(buf), "ERROR :*** Banned: %s\r\n", get_user_ban_reason(aconf));
+                       if (len >= (int)(sizeof(buf)-1))
                        {
                                buf[sizeof(buf) - 3] = '\r';
                                buf[sizeof(buf) - 2] = '\n';