From 13033a96057c217964d51ff0a0e36b04cc4e729e Mon Sep 17 00:00:00 2001 From: Bleep Date: Fri, 24 Mar 2000 10:14:21 +0000 Subject: [PATCH] Author: Bleep 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 --- ChangeLog | 4 +- ChangeLog.10 | 4 +- include/patchlevel.h | 3 - ircd/chkconf.c | 3 +- ircd/ircd.c | 16 ++-- ircd/m_rping.c | 178 ++++++++++++++++++++++--------------------- ircd/m_rpong.c | 63 +++++++++------ ircd/numnicks.c | 2 +- ircd/os_solaris.c | 1 + ircd/res.c | 9 ++- ircd/s_bsd.c | 52 ++++++++----- ircd/uping.c | 29 ++++--- 12 files changed, 209 insertions(+), 155 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5415d26..40c66d2 100644 --- 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 + * Merge in changes from production 2000-03-22 Thomas Helvey * numicks.c: Tweak to numnick generator to reduce possibility of duplicates. * rfc1459.unet: Add Maniac's documentation for /names 0 diff --git a/ChangeLog.10 b/ChangeLog.10 index 875ac08..f5674ed 100644 --- a/ChangeLog.10 +++ b/ChangeLog.10 @@ -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 diff --git a/include/patchlevel.h b/include/patchlevel.h index 33d4599..14a56fd 100644 --- a/include/patchlevel.h +++ b/include/patchlevel.h @@ -22,9 +22,6 @@ #define RELEASE ".11.alpha." -/* - * Deliberate empty lines - */ /* Do NOT edit those: */ diff --git a/ircd/chkconf.c b/ircd/chkconf.c index edb4896..0799206 100644 --- a/ircd/chkconf.c +++ b/ircd/chkconf.c @@ -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) diff --git a/ircd/ircd.c b/ircd/ircd.c index 88e1364..019e856 100644 --- a/ircd/ircd.c +++ b/ircd/ircd.c @@ -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 diff --git a/ircd/m_rping.c b/ircd/m_rping.c index 5cdaae9..dee0c70 100644 --- a/ircd/m_rping.c +++ b/ircd/m_rping.c @@ -101,6 +101,15 @@ #include + +/* + * Old P10: + * Sending [:defiant.atomicrevs.net RPING Z Gte- 953863987 524184 :] to + * alphatest.atomicrevs.net + * Full P10: + * Parsing: j RI Z jAA 953865133 0 : + */ + /* * ms_rping - server message handler * -- by Run @@ -119,52 +128,59 @@ */ 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++] = ""; - } - - 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.* : + * RPING blah.* server.* : + * * 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 : (hunt_server) + * NumServ(&me) RPING NumServ(blah.bar.net) NumNick(sptr) : (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 = ""; - 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(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++] = ""; + 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; } diff --git a/ircd/m_rpong.c b/ircd/m_rpong.c index ce0278a..ce67329 100644 --- a/ircd/m_rpong.c +++ b/ircd/m_rpong.c @@ -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; } diff --git a/ircd/numnicks.c b/ircd/numnicks.c index 551de81..cb3ae19 100644 --- a/ircd/numnicks.c +++ b/ircd/numnicks.c @@ -397,7 +397,7 @@ struct Client* find_match_server(char *mask) return acptr; } } - return NULL; + return 0; } diff --git a/ircd/os_solaris.c b/ircd/os_solaris.c index b754988..7c67cd1 100644 --- a/ircd/os_solaris.c +++ b/ircd/os_solaris.c @@ -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; } /* diff --git a/ircd/res.c b/ircd/res.c index 755e897..b3f8107 100644 --- a/ircd/res.c +++ b/ircd/res.c @@ -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; } /* diff --git a/ircd/s_bsd.c b/ircd/s_bsd.c index 8a78e70..ff963e2 100644 --- a/ircd/s_bsd.c +++ b/ircd/s_bsd.c @@ -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; } diff --git a/ircd/uping.c b/ircd/uping.c index b12fdcb..68a8121 100644 --- a/ircd/uping.c +++ b/ircd/uping.c @@ -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", -- 2.20.1