Author: Bleep <tomh@inxpress.net>
authorBleep <twhelvey1@home.com>
Fri, 24 Mar 2000 10:14:21 +0000 (10:14 +0000)
committerBleep <twhelvey1@home.com>
Fri, 24 Mar 2000 10:14:21 +0000 (10:14 +0000)
Log message:
Merge in changes from production.

git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/trunk@55 c9e4aea6-c8fd-4c43-8297-357d70d61c8c

12 files changed:
ChangeLog
ChangeLog.10
include/patchlevel.h
ircd/chkconf.c
ircd/ircd.c
ircd/m_rping.c
ircd/m_rpong.c
ircd/numnicks.c
ircd/os_solaris.c
ircd/res.c
ircd/s_bsd.c
ircd/uping.c

index 5415d26896cbd2927df768ba1da506a6fdb24619..40c66d2e9353f4b42f37b8ebc22fb4d75b6bcbed 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,11 +1,13 @@
 #
 # ChangeLog for ircu2.10.11
 #
-# $Id: ChangeLog,v 1.20 2000-03-22 04:43:59 bleep Exp $
+# $Id: ChangeLog,v 1.21 2000-03-24 10:14:20 bleep Exp $
 #
 # Insert new changes at beginning of the change list.
 #
 #-----------------------------------------------------------------------------
+2000-03-23 Thomas Helvey <tomh@inxpress.net>
+  * Merge in changes from production
 2000-03-22 Thomas Helvey <tomh@inxpress.net>
   * numicks.c: Tweak to numnick generator to reduce possibility of duplicates.
   * rfc1459.unet: Add Maniac's documentation for /names 0
index 875ac0845c846383e3d04a5c73374ac2fcd6c34d..f5674edf1dea1ab0f1ec62de4a7bad512e7a2381 100644 (file)
@@ -1,10 +1,12 @@
 #
 # ChangeLog for ircu2.10.10
 #
-# $Id: ChangeLog.10,v 1.3 2000-03-21 00:33:29 bleep Exp $
+# $Id: ChangeLog.10,v 1.4 2000-03-24 10:14:20 bleep Exp $
 #
 # Insert new changes at beginning of the change list.
 #
+* Fixed bogus errno return on Solaris --Bleep
+* Fixed core on RPING bug, tokenized RPING --Bleep
 * Remove add_local_domain entirely, unused --Bleep
 * Merge u2_10_10_beta06 create branch u2_10_10_beta07 --Bleep
 * Remove size_t from socket calls, audit usage of size_t
index 33d45998b7cec1c7df311b157064e9bbfe2561b3..14a56fd53074c736451d5a4a31656d2043749ce3 100644 (file)
@@ -22,9 +22,6 @@
 
 #define RELEASE ".11.alpha."
 
-/*
- * Deliberate empty lines
- */
 
 /* Do NOT edit those: */
 
index edb489644db4077ad3a9b786dc763e958c5b50a8..0799206ef96215dfd79d51c1ad92cbec0548246a 100644 (file)
@@ -122,7 +122,8 @@ int main(int argc, char *argv[])
 
   if (chdir(dpath))
   {
-    fprintf(stderr, "chdir(\"%s\") : %s\n", dpath, strerror(errno));
+    fprintf(stderr, "chdir(\"%s\") : %s\n", dpath, 
+            (strerror(errno)) ? strerror(errno) : "Unknown error");
     exit(-1);
   }
   else if (debugflag > 1)
index 88e13644d2e1313a5115ebb7276369cba2dd5c49..019e856aee6dd96e269c4a2464f4edd7f8fb7c17 100644 (file)
@@ -113,7 +113,7 @@ static void server_reboot(const char* message)
   ircd_log(L_CRIT, "execv(%s,%s) failed: %m\n", SPATH, myargv[0]);
 
   Debug((DEBUG_FATAL, "Couldn't restart server \"%s\": %s",
-         SPATH, strerror(errno)));
+         SPATH, (strerror(errno)) ? strerror(errno) : ""));
   exit(-1);
 }
 
@@ -156,7 +156,7 @@ static void write_pidfile(void)
     return;
   }
   Debug((DEBUG_NOTICE, "Error opening pid file \"%s\": %s",
-        PPATH, strerror(errno)));
+        PPATH, (strerror(errno)) ? strerror(errno) : ""));
 #endif
 }
 
@@ -399,12 +399,12 @@ int main(int argc, char *argv[])
 #ifdef CHROOTDIR
   if (chdir(DPATH))
   {
-    fprintf(stderr, "Fail: Cannot chdir(%s): %s\n", DPATH, strerror(errno));
+    fprintf(stderr, "Fail: Cannot chdir(%s): %s\n", DPATH, (strerror(errno)) ? strerror(errno) : "");
     exit(2);
   }
   if (chroot(DPATH))
   {
-    fprintf(stderr, "Fail: Cannot chroot(%s): %s\n", DPATH, strerror(errno));
+    fprintf(stderr, "Fail: Cannot chroot(%s): %s\n", DPATH, (strerror(errno)) ? strerror(errno) : "");
     exit(5);
   }
   dpath = "/";
@@ -427,12 +427,12 @@ int main(int argc, char *argv[])
 #if defined(HAVE_SETRLIMIT) && defined(RLIMIT_CORE)
   if (getrlimit(RLIMIT_CORE, &corelim))
   {
-    fprintf(stderr, "Read of rlimit core size failed: %s\n", strerror(errno));
+    fprintf(stderr, "Read of rlimit core size failed: %s\n", (strerror(errno) ? strerror(errno) : "");
     corelim.rlim_max = RLIM_INFINITY;   /* Try to recover */
   }
   corelim.rlim_cur = corelim.rlim_max;
   if (setrlimit(RLIMIT_CORE, &corelim))
-    fprintf(stderr, "Setting rlimit core size failed: %s\n", strerror(errno));
+    fprintf(stderr, "Setting rlimit core size failed: %s\n", (strerror(errno) ? strerror(errno) : "");
 #endif
 
   /*
@@ -532,7 +532,7 @@ int main(int argc, char *argv[])
 
   if (chdir(dpath))
   {
-    fprintf(stderr, "Fail: Cannot chdir(%s): %s\n", dpath, strerror(errno));
+    fprintf(stderr, "Fail: Cannot chdir(%s): %s\n", dpath, (strerror(errno)) ? strerror(errno) : "");
     exit(2);
   }
 
@@ -605,7 +605,7 @@ int main(int argc, char *argv[])
     if (c)
     {
       fprintf(stderr, "Check on %cPATH (%s) failed: %s\n", 
-              c, path, strerror(errno));
+              c, path, (strerror(errno)) ? strerror(errno) : "");
       fprintf(stderr,
           "Please create file and/or rerun `make config' and recompile to correct this.\n");
 #ifdef CHROOTDIR
index 5cdaae9091a7b50215eeccd0b326fd5aa7c1a8d0..dee0c70e72266d92b2eead459b7e2bf4203a8ef8 100644 (file)
 
 #include <assert.h>
 
+
+/*
+ * Old P10:
+ * Sending [:defiant.atomicrevs.net RPING Z Gte- 953863987 524184 :<No client start time>] to 
+ * alphatest.atomicrevs.net
+ * Full P10:
+ * Parsing: j RI Z jAA 953865133 0 :<No client start time>
+ */
+
 /*
  * ms_rping - server message handler
  * -- by Run
  */
 int ms_rping(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
 {
-  struct Client *acptr;
+  struct Client* destination = FindNServer(parv[1]);
+  assert(0 != cptr);
+  assert(0 != sptr);
+  assert(IsServer(cptr));
 
+  /*
+   * shouldn't happen
+   */
   if (!IsPrivileged(sptr))
     return 0;
 
-  if (parc < (IsAnOper(sptr) ? (MyConnect(sptr) ? 2 : 3) : 6))
-  {
-    return need_more_params(sptr, "RPING");
-    return 0;
-  }
-  if (MyUser(sptr))
-  {
-    if (parc == 2)
-      parv[parc++] = me.name;
-    else if (!(acptr = find_match_server(parv[2])))
-    {
-      parv[3] = parv[2];
-      parv[2] = me.name;
-      parc++;
+  if (IsServer(sptr)) {
+    if (parc < 6) {
+      /*
+       * PROTOCOL ERROR
+       */
+      return need_more_params(sptr, "RPING");
     }
-    else
-      parv[2] = acptr->name;
-    if (parc == 3)
-      parv[parc++] = "<No client start time>";
-  }
-
-  if (IsAnOper(sptr))
-  {
-    if (hunt_server(1, cptr, sptr, "%s%s " TOK_RPING " %s %s :%s", 2, parc, parv) !=
-        HUNTED_ISME)
-      return 0;
-    if (!(acptr = find_match_server(parv[1])) || !IsServer(acptr))
-    {
-      sendto_one(sptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], parv[1]);
-      return 0;
+    if ((destination = FindNServer(parv[1]))) {
+      /*
+       * if it's not for me, pass it on
+       */
+      if (IsMe(destination))
+        sendto_one(cptr, "%s " TOK_RPONG " %s %s %s %s :%s", NumServ(&me),
+                   parv[0], parv[2], parv[3], parv[4], parv[5]);
+      else
+        sendto_one(destination, "%s " TOK_RPING " %s %s %s %s :%s",
+                   parv[0], parv[1], parv[2], parv[3], parv[4], parv[5]); 
     }
-    sendto_one(acptr, ":%s RPING %s %s %s :%s",
-         me.name, NumServ(acptr), sptr->name, militime(0, 0), parv[3]);
   }
-  else
-  {
-    if (hunt_server(1, cptr, sptr, "%s%s " TOK_RPING " %s %s %s %s :%s", 1, parc, parv)
-        != HUNTED_ISME)
+  else {
+    if (parc < 3) {
+      /*
+       * PROTOCOL ERROR
+       */
+      return need_more_params(sptr, "RPING");
+    }
+    /*
+     * Haven't made it to the start server yet, if I'm not the start server
+     * pass it on.
+     */
+    if (hunt_server(1, cptr, sptr, "%s%s " TOK_RPING " %s %s :%s", 2, parc, parv) != HUNTED_ISME)
       return 0;
-    sendto_one(cptr, ":%s RPONG %s %s %s %s :%s", me.name, parv[0],
-        parv[2], parv[3], parv[4], parv[5]);
+    /*
+     * otherwise ping the destination from here
+     */
+    if ((destination = find_match_server(parv[1]))) {
+      assert(IsServer(destination));
+      sendto_one(destination, "%s " TOK_RPING " %s %s%s %s :%s",
+                 NumServ(&me), NumServ(destination), NumNick(sptr), militime(0, 0), parv[3]);
+    }
+    else
+      sendto_one(sptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], parv[1]);
   }
   return 0;
 }
@@ -173,67 +189,57 @@ int ms_rping(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
  * mo_rping - oper message handler
  * -- by Run
  *
+ *
+ * Receive:
+ *          RPING blah.*
+ *          RPING blah.* :<start time>
+ *          RPING blah.* server.* :<start time>
+ *
  *    parv[0] = sender (sptr->name thus)
- * if sender is a person: (traveling towards start server)
- *    parv[1] = pinged server[mask]
- *    parv[2] = start server (current target)
- *    parv[3] = optional remark
- * if sender is a server: (traveling towards pinged server)
- *    parv[1] = pinged server (current target)
- *    parv[2] = original sender (person)
- *    parv[3] = start time in s
- *    parv[4] = start time in us
- *    parv[5] = the optional remark
+ *    parv[1] = pinged server name or mask (required)
+ *    parv[2] = start server name or mask (optional, defaults to me)
+ *    parv[3] = client start time (optional) 
+ * 
+ * Send: NumNick(sptr) RPING blah.* server.net :<start time> (hunt_server)
+ *       NumServ(&me) RPING NumServ(blah.bar.net) NumNick(sptr) :<start time> (here)
  */
 int mo_rping(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
 {
-  struct Client *acptr;
+  struct Client* acptr = 0;
+  const char*    start_time = "<No client start time>";
 
-  if (!IsPrivileged(sptr))
-    return 0;
+  assert(0 != cptr);
+  assert(0 != sptr);
+  assert(cptr == sptr);
+  assert(IsAnOper(sptr));
 
-  if (parc < (IsAnOper(sptr) ? (MyConnect(sptr) ? 2 : 3) : 6))
-  {
+  if (parc < 2)
     return need_more_params(sptr, "RPING");
-    return 0;
-  }
-  if (MyUser(sptr))
-  {
-    if (parc == 2)
-      parv[parc++] = me.name;
-    else if (!(acptr = find_match_server(parv[2])))
-    {
-      parv[3] = parv[2];
-      parv[2] = me.name;
-      parc++;
+
+  if (parc > 2) {
+    if ((acptr = find_match_server(parv[2])) && !IsMe(acptr)) {
+      parv[2] = acptr->name;
+      if (3 == parc) {
+        /*
+         * const_cast<char*>(start_time);
+         */
+        parv[parc++] = (char*) start_time;
+      }
+      hunt_server(1, cptr, sptr, "%s%s " TOK_RPING " %s %s :%s", 2, parc, parv);
+      return 0;
     }
     else
-      parv[2] = acptr->name;
-    if (parc == 3)
-      parv[parc++] = "<No client start time>";
+      start_time = parv[2];
   }
 
-  if (IsAnOper(sptr))
-  {
-    if (hunt_server(1, cptr, sptr, "%s%s " TOK_RPING " %s %s :%s", 2, parc, parv) !=
-        HUNTED_ISME)
-      return 0;
-    if (!(acptr = find_match_server(parv[1])) || !IsServer(acptr))
-    {
-      sendto_one(sptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], parv[1]);
-      return 0;
-    }
-    sendto_one(acptr, ":%s RPING %s %s %s :%s",
-         me.name, NumServ(acptr), sptr->name, militime(0, 0), parv[3]);
+  if ((acptr = find_match_server(parv[1]))) {
+    assert(IsServer(acptr));
+    sendto_one(acptr, "%s " TOK_RPING " %s %s%s %s :%s",
+               NumServ(&me), NumServ(acptr), NumNick(sptr), militime(0, 0), start_time);
   }
   else
-  {
-    if (hunt_server(1, cptr, sptr, "%s%s " TOK_RPING " %s %s %s %s :%s", 1, parc, parv)
-        != HUNTED_ISME)
-      return 0;
-    sendto_one(cptr, ":%s RPONG %s %s %s %s :%s", me.name, parv[0],
-        parv[2], parv[3], parv[4], parv[5]);
-  }
+    sendto_one(sptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], parv[1]);
+
   return 0;
 }
 
index ce0278aa34409e0864d219593df96c7c78c1576b..ce67329432540db7b4674d38467857ca42bc5742 100644 (file)
@@ -92,6 +92,7 @@
 #include "ircd.h"
 #include "ircd_reply.h"
 #include "ircd_string.h"
+#include "msg.h"
 #include "numeric.h"
 #include "numnicks.h"
 #include "opercmds.h"
@@ -116,34 +117,48 @@ int ms_rpong(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   if (!IsServer(sptr))
     return 0;
 
-  if (parc < 5)
-    return need_more_params(sptr, "RPING");
-
-  if (!(acptr = FindClient(parv[1])))
-    return 0;
-
-  if (!IsMe(acptr))
-  {
-    if (IsServer(acptr) && parc > 5)
-    {
-      sendto_one(acptr, ":%s RPONG %s %s %s %s :%s",
-          parv[0], parv[1], parv[2], parv[3], parv[4], parv[5]);
+  if (parc < 5) {
+    /*
+     * PROTOCOL ERROR
+     */
+    return need_more_params(sptr, "RPONG");
+  }
+  if (parc == 6) {
+    /*
+     * from pinged server to source server
+     */
+    if (!(acptr = FindNServer(parv[1])))
       return 0;
+   
+    if (IsMe(acptr)) {
+      if (!(acptr = findNUser(parv[2])))
+        return 0;
+      if (MyConnect(acptr))
+        sendto_one(acptr, ":%s " MSG_RPONG " %s %s %s :%s",
+                   me.name, acptr->name, sptr->name,
+                   militime(parv[3], parv[4]), parv[5]);
+      else 
+        sendto_one(acptr, "%s " TOK_RPONG " %s%s %s %s :%s",
+                   NumServ(&me), NumNick(acptr), sptr->name,
+                   militime(parv[3], parv[4]), parv[5]);
     }
+    else
+      sendto_one(acptr, "%s " TOK_RPONG " %s %s %s %s :%s",
+                 parv[0], parv[1], parv[2], parv[3], parv[4], parv[5]);
   }
-  else
-  {
-    parv[1] = parv[2];
-    parv[2] = sptr->name;
-    parv[0] = me.name;
-    parv[3] = militime(parv[3], parv[4]);
-    parv[4] = parv[5];
-    if (!(acptr = FindUser(parv[1])))
-      return 0;                 /* No bouncing between servers ! */
+  else {
+    /*
+     * returned from source server to client
+     */
+    if (!(acptr = findNUser(parv[1])))
+      return 0;
+    if (MyConnect(acptr))
+      sendto_one(acptr, ":%s " MSG_RPONG " %s %s %s :%s",
+                 sptr->name, acptr->name, parv[2], parv[3], parv[4]);
+    else
+      sendto_one(acptr, "%s " TOK_RPONG " %s %s %s :%s",
+                 parv[0], parv[1], parv[2], parv[3], parv[4]);
   }
-
-  sendto_one(acptr, ":%s RPONG %s %s %s :%s",
-      parv[0], parv[1], parv[2], parv[3], parv[4]);
   return 0;
 }
 
index 551de811483856236f5c9e29ec2654da511b93c9..cb3ae19cd98ed2c7ff2e01f3912586e0d0ff7b8a 100644 (file)
@@ -397,7 +397,7 @@ struct Client* find_match_server(char *mask)
         return acptr;
     }
   }
-  return NULL;
+  return 0;
 }
 
 
index b7549880d0d966e16af474aa666fc9f52a7a438c..7c67cd1395cffbf0269382776a404307142f21fb 100644 (file)
@@ -91,6 +91,7 @@ int os_get_sockerr(int fd)
   int err = 0;
   int len = sizeof(err);
   getsockopt(fd, SOL_SOCKET, SO_ERROR, (void*) &err, &len);
+  return err;
 }
 
 /*
index 755e897f8980fd0c4c69312dec7c1c9fc2ec656f..b3f81077209e3779ed18666c036d5a09c0476288 100644 (file)
@@ -356,7 +356,8 @@ int init_resolver(void)
   errno = h_errno = 0;
   start_resolver();
   Debug((DEBUG_DNS, "Resolver: fd %d errno: %d h_errno: %d: %s",
-         ResolverFileDescriptor, errno, h_errno, strerror(errno)));
+         ResolverFileDescriptor, errno, h_errno, 
+         (strerror(errno)) ? strerror(errno) : "Unknown"));
   return ResolverFileDescriptor;
 }
 
@@ -561,7 +562,8 @@ static int send_res_msg(const u_char* msg, int len, int rcount)
       ++sent;
     }
     else
-      ircd_log(L_ERROR, "Resolver: send failed %s", strerror(errno));
+      ircd_log(L_ERROR, "Resolver: send failed %s", 
+               (strerror(errno)) ? strerror(errno) : "Unknown");
   }
   return sent;
 }
@@ -965,7 +967,8 @@ int resolver_read(void)
     return 0;
   }
   if (rc < sizeof(HEADER)) {
-    Debug((DEBUG_DNS, "Resolver: short reply %d: %s", rc, strerror(errno)));
+    Debug((DEBUG_DNS, "Resolver: short reply %d: %s", rc, 
+           (strerror(errno)) ? strerror(errno) : "Unknown"));
     return 0;
   }
   /*
index 8a78e705c0557e4b97cfb662e9cba7bc72b3ab9e..ff963e206fe1375aa6667bb54848ce7db685e3a8 100644 (file)
@@ -156,7 +156,9 @@ void report_error(const char* text, const char* who, int err)
   static time_t last_notice = 0;
   int           errtmp = errno;   /* debug may change 'errno' */
   const char*   errmsg = (err) ? strerror(err) : "";
-  
+  if (!errmsg)
+    errmsg = "Unknown error"; 
+
   if (!who)
     who = "unknown";
 
@@ -418,8 +420,10 @@ static int completed_connection(struct Client* cptr)
    * connection actually succeeded
    */
   if ((cptr->error = os_get_sockerr(cptr->fd))) {
-    sendto_ops("Connection failed to %s: %s", cptr->name,
-               strerror(cptr->error));
+    const char* msg = strerror(cptr->error);
+    if (!msg)
+      msg = "Unknown error";
+    sendto_ops("Connection failed to %s: %s", cptr->name, msg);
     return 0;
   }
   if (!(aconf = find_conf_byname(cptr->confs, cptr->name, CONF_SERVER))) {
@@ -988,8 +992,10 @@ int read_message(time_t delay)
     }
     if (write_ready) {
       if (!on_write_unblocked(cptr) || IsDead(cptr)) {
-        exit_client(cptr, cptr, &me,
-                    cptr->error ? strerror(cptr->error) : LastDeadComment(cptr));
+        const char* msg = (cptr->error) ? strerror(cptr->error) : LastDeadComment(cptr);
+        if (!msg)
+          msg = "Unknown error";
+        exit_client(cptr, cptr, &me, (char*) msg);
         continue;
       }
     }
@@ -1005,8 +1011,10 @@ int read_message(time_t delay)
       flush_connections(poll_cptr[i]);
 #endif
     if (IsDead(cptr)) {
-      exit_client(cptr, cptr, &me,
-         cptr->error ? strerror(cptr->error) : LastDeadComment(cptr));
+      const char* msg = (cptr->error) ? strerror(cptr->error) : LastDeadComment(cptr);
+      if (!msg)
+        msg = "Unknown error";
+      exit_client(cptr, cptr, &me, (char*) msg);
       continue;
     }
     if (length > 0)
@@ -1026,10 +1034,13 @@ int read_message(time_t delay)
     if ((IsServer(cptr) || IsHandshake(cptr)) && cptr->error == 0 && length == 0)
       exit_client_msg(cptr, cptr, &me, "Server %s closed the connection (%s)",
                       cptr->name, cptr->serv->last_error_msg);
-    else
+    else {
+      const char* msg = (cptr->error) ? strerror(cptr->error) : "EOF from client";
+      if (!msg)
+        msg = "Unknown error";
       exit_client_msg(cptr, cptr, &me, "Read error to %s: %s",
-                      get_client_name(cptr, HIDE_IP), 
-                      (cptr->error) ?  strerror(cptr->error) : "EOF from client");
+                      get_client_name(cptr, HIDE_IP), msg);
+    }
   }
   return 0;
 }
@@ -1159,10 +1170,12 @@ int read_message(time_t delay)
       if (FD_ISSET(i, &write_set)) {
         --nfds;
         if (!on_write_unblocked(cptr) || IsDead(cptr)) {
+          const char* msg = (cptr->error) ? strerror(cptr->error) : LastDeadComment(cptr);
+          if (!msg)
+            msg = "Unknown error";
           if (FD_ISSET(i, &read_set))
             --nfds;
-          exit_client(cptr, cptr, &me,
-                      cptr->error ? strerror(cptr->error) : LastDeadComment(cptr));
+          exit_client(cptr, cptr, &me, msg);
           continue;
         }
       }
@@ -1181,8 +1194,10 @@ int read_message(time_t delay)
       flush_connections(LocalClientArray[i]);
 #endif
     if (IsDead(cptr)) {
-      exit_client(cptr, cptr, &me,
-              cptr->error ? strerror(cptr->error) : LastDeadComment(cptr));
+      const char* msg = (cptr->error) ? strerror(cptr->error) : LastDeadComment(cptr);
+      if (!msg)
+        msg = "Unknown error";
+      exit_client(cptr, cptr, &me, msg);
       continue;
     }
     if (length > 0)
@@ -1202,10 +1217,13 @@ int read_message(time_t delay)
     if ((IsServer(cptr) || IsHandshake(cptr)) && cptr->error == 0 && length == 0)
       exit_client_msg(cptr, cptr, &me, "Server %s closed the connection (%s)",
                       cptr->name, cptr->serv->last_error_msg);
-    else
+    else {
+      const char* msg = (cptr->error) ? strerror(cptr->error) : "EOF from client";
+      if (!msg)
+        msg = "Unknown error";
       exit_client_msg(cptr, cptr, &me, "Read error to %s: %s",
-                      get_client_name(cptr, HIDE_IP),
-                      cptr->error ? strerror(cptr->error) : "EOF from client");
+                      get_client_name(cptr, HIDE_IP), msg);
+    }
   }
   return 0;
 }
index b12fdcb2b1466dcc0dcbefe265ada908f6756ddc..68a8121a9f504fdc122808bc3bf39863782d5ba3 100644 (file)
@@ -129,23 +129,27 @@ int uping_init(void)
   from.sin_family = AF_INET;
 
   if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
-    Debug((DEBUG_ERROR, "UPING: UDP listener socket call failed: %s", strerror(errno)));
+    Debug((DEBUG_ERROR, "UPING: UDP listener socket call failed: %s", 
+           (strerror(errno)) ? strerror(errno) : "Unknown error"));
     return -1;
   }
   if (!os_set_reuseaddr(fd)) {
     ircd_log(L_ERROR, "UPING: setsockopt UDP listener: fd %d", fd);
-    Debug((DEBUG_ERROR, "UPING: set reuseaddr on UDP listener failed: %s", strerror(errno)));
+    Debug((DEBUG_ERROR, "UPING: set reuseaddr on UDP listener failed: %s",
+           (strerror(errno)) ? strerror(errno) : "Unknown error"));
     close(fd);
     return -1;
   }
   if (bind(fd, (struct sockaddr*) &from, sizeof(from)) == -1) {
     ircd_log(L_ERROR, "UPING: bind UDP listener %d fd %d", htons(from.sin_port), fd);
-    Debug((DEBUG_ERROR, "UPING: bind on UDP listener failed : %s", strerror(errno)));
+    Debug((DEBUG_ERROR, "UPING: bind on UDP listener failed : %s",
+           (strerror(errno)) ? strerror(errno) : "Unknown error"));
     close(fd);
     return -1;
   }
   if (!os_set_nonblocking(fd)) {
-    Debug((DEBUG_ERROR, "UPING: set non-blocking: %s", strerror(errno)));
+    Debug((DEBUG_ERROR, "UPING: set non-blocking: %s",
+           (strerror(errno)) ? strerror(errno) : "Unknown error"));
     close(fd);
     return -1;
   }
@@ -274,12 +278,15 @@ void send_ping(struct UPing* pptr)
 #endif
          )
        sendto_one(pptr->client, ":%s NOTICE %s :UPING: sendto() failed: %s",
-                  me.name, pptr->client->name, strerror(errno));
+                  me.name, pptr->client->name,
+                   (strerror(err)) ? strerror(err) : "Unknown error");
       else
        sendto_one(pptr->client, "%s NOTICE %s%s :UPING: sendto() failed: %s",
-                  NumServ(&me), NumNick(pptr->client), strerror(errno));
+                  NumServ(&me), NumNick(pptr->client),
+                   (strerror(err)) ? strerror(err) : "Unknown error");
     }
-    Debug((DEBUG_DEBUG, "UPING: send_ping: sendto failed on %d: %s", pptr->fd, strerror(err)));
+    Debug((DEBUG_DEBUG, "UPING: send_ping: sendto failed on %d: %s", pptr->fd,
+           (strerror(err)) ? strerror(err) : "Unknown error"));
     end_ping(pptr);
     return;
   }
@@ -314,10 +321,12 @@ void read_ping(struct UPing* pptr)
 #endif
         )
       sendto_one(pptr->client, ":%s NOTICE %s :UPING: recvfrom: %s",
-                 me.name, pptr->client->name, strerror(err));
+                 me.name, pptr->client->name, 
+                 (strerror(err)) ? strerror(err) : "Unknown error");
     else
       sendto_one(pptr->client, "%s NOTICE %s%s :UPING: recvfrom: %s",
-                 NumServ(&me), NumNick(pptr->client), strerror(err));
+                 NumServ(&me), NumNick(pptr->client),
+                 (strerror(err)) ? strerror(err) : "Unknown error");
     Debug((DEBUG_SEND, "UPING: read_ping: recvfrom: %d", err));
     end_ping(pptr);
     return;
@@ -473,7 +482,7 @@ int m_uping(struct Client* cptr, struct Client *sptr, int parc, char *parv[])
   if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
     int err = errno;
     sendto_ops("m_uping: socket: %s", (err != EMFILE) 
-                ? strerror(err) : "No more sockets");
+                ? ((strerror(err)) ? strerror(err) : "Unknown error") : "No more sockets");
     if (MyUser(sptr) || Protocol(cptr) < 10)
       sendto_one(sptr, 
                  ":%s NOTICE %s :UPING: Unable to create udp ping socket",