All pastes #271955 Raw Edit

Miscellany

public text v1 · immutable
·published 2006-12-08 16:22 UTC
rendered paste body
[17:21] fiction @ sanctuary [~/irc/ircd] % cvs diff -u -r v2_11_1p1 -rHEAD s_bsd.c
Index: s_bsd.c
===================================================================
RCS file: /usr/local/repository/irc/ircd/s_bsd.c,v
retrieving revision 1.176
retrieving revision 1.181
diff -u -r1.176 -r1.181
--- s_bsd.c     2005/02/21 12:52:24     1.176
+++ s_bsd.c     2006/04/30 15:44:39     1.181
@@ -35,7 +35,7 @@
  */

 #ifndef lint
-static const volatile char rcsid[] = "@(#)$Id: s_bsd.c,v 1.176 2005/02/21 12:52:24 chopin Exp $";
+static const volatile char rcsid[] = "@(#)$Id: s_bsd.c,v 1.181 2006/04/30 15:44:39 q Exp $";
 #endif

 #include "os.h"
@@ -212,6 +212,13 @@
        SOCK_LEN_TYPE len = sizeof(server);
        char    ipname[20];

+       /* broken config? why allow such broken line to live?
+       ** XXX: fix initconf()? --B. */
+       if (!ipmask)
+       {
+               sendto_flag(SCH_ERROR, "Invalid P-line");
+               return -1;
+       }
        ad[0] = ad[1] = ad[2] = ad[3] = 0;

        /*
@@ -550,9 +557,18 @@
        static time_t last = 0;
        static char first = 1;
        int sp[2], fd, val;
+       static pid_t iauth_pid = 0;

        if ((bootopt & BOOT_NOIAUTH) != 0)
                return;
+       if (rcvdsig == 2)
+       {
+               sendto_flag(SCH_AUTH, "Killing iauth...");
+               if (iauth_pid)
+                       kill(iauth_pid, SIGTERM);
+               iauth_pid = 0;
+       }
+       else
        if (adfd >= 0)
            {
                if (rcvdsig)
@@ -594,7 +610,7 @@
            sizeof(val)) < 0)
                        sendto_flag(SCH_AUTH,
                            "IAUTH_BUFFER too big for sp1 rcvbuf, using default");
-       switch (vfork())
+       switch ((iauth_pid = vfork()))
            {
                case -1:
                        sendto_flag(SCH_ERROR, "vfork() failed!");
@@ -697,6 +713,23 @@
                        exit(-1);
                    }
            }
+       /* Let's assume that if it has define for fd limit, then
+          it can do core limits, too. --B. */
+       if (!getrlimit(RLIMIT_CORE, &limit))
+       {
+               limit.rlim_cur = limit.rlim_max;
+               if (limit.rlim_cur != RLIM_INFINITY)
+               {
+                       (void)fprintf(stderr, "warning: max core"
+                               " is not unlimited\n");
+               }
+               if (setrlimit(RLIMIT_CORE, &limit) == -1)
+               {
+                       (void)fprintf(stderr, "error setting max core to %d\n",
+                               (int) limit.rlim_cur);
+                       exit(-1);
+               }
+       }
 #endif
 #if !defined(USE_POLL)
 # ifdef sequent
@@ -2047,6 +2080,7 @@
                ** it on the end of the receive queue and do it when its
                ** turn comes around.
                */
+               /* why no poolsize increase here like in send? --B. */
                if (length && dbuf_put(&cptr->recvQ, readbuf, length) < 0)
                        return exit_client(cptr, cptr, &me, "dbuf_put fail");

@@ -2107,6 +2141,7 @@
                pfd = &poll_fdarray[nbr_pfds++];\
                pfd->fd     = thisfd;           \
                pfd->events = 0;                \
+               pfd->revents = 0;               \
        }

        struct pollfd   poll_fdarray[MAXCONNECTIONS];
@@ -2704,7 +2739,7 @@
        server.SIN_FAMILY = AFINET;
        get_sockhost(cptr, aconf->host);

-       if (aconf->source_ip)
+       if (!BadPtr(aconf->source_ip))
        {
                memset(&outip, 0, sizeof(outip));
                outip.SIN_PORT = 0;