2000-04-24 Kevin L. Mitchell <klmitch@mit.edu>
+ * ircd/parse.c: use send_reply, sendcmdto_one
+
+ * ircd/map.c: use send_reply
+
+ * ircd/listener.c: use send_reply
+
+ * ircd/jupe.c: use sendto_opmask_butone, send_reply
+
+ * ircd/ircd_reply.c: use send_reply
+
+ * ircd/ircd.c: use sendto_opmask_butone
+
+ * ircd/gline.c: use sendto_opmask_butone, send_reply
+
+ * ircd/ircd_snprintf.c (doprintf): make it deal with incompletely
+ registered clients; make FLAG_ALT print nick!user@host; make
+ FLAG_COLON print :blah
+
* ircd/class.c (report_classes): use send_reply instead of
sendto_one
#
# ChangeLog for ircu2.10.11
#
-# $Id: ChangeLog,v 1.99 2000-04-24 16:34:02 kev Exp $
+# $Id: ChangeLog,v 1.100 2000-04-24 18:50:37 kev Exp $
#
# Insert new changes at beginning of the change list.
#
(!acptr->user->username ||
match(gline->gl_user, acptr->user->username) == 0)) {
/* ok, here's one that got G-lined */
+ /* XXX sendto_one used for K-line reason */
sendto_one(acptr, ":%s %d %s :*** %s.", me.name, ERR_YOUREBANNEDCREEP,
acptr->name, gline->gl_reason);
/* let the ops know about it */
- sendto_op_mask(SNO_GLINE, "G-line active for %s",
- get_client_name(acptr, FALSE));
+ sendto_opmask_butone(0, SNO_GLINE, "G-line active for %s",
+ get_client_name(acptr, FALSE));
/* and get rid of him */
if ((tval = exit_client_msg(cptr, acptr, &me, "G-lined (%s)",
*/
if (!(flags & GLINE_FORCE) && (expire <= 0 || expire > GLINE_MAX_EXPIRE)) {
if (!IsServer(sptr) && MyConnect(sptr))
- send_error_to_client(sptr, ERR_BADEXPIRE, expire);
+ send_reply(sptr, ERR_BADEXPIRE, expire);
return 0;
}
#endif /* BADCHAN */
/* Inform ops... */
- sendto_op_mask(SNO_GLINE, "%s adding %s %s for %s, expiring at "
- TIME_T_FMT ": %s",
- IsServer(sptr) ? sptr->name : sptr->user->server->name,
- flags & GLINE_LOCAL ? "local" : "global",
- flags & GLINE_BADCHAN ? "BADCHAN" : "GLINE", userhost,
- expire + TSoffset, reason);
+ sendto_opmask_butone(0, SNO_GLINE, "%s adding %s %s for %s, expiring at "
+ "%Tu: %s",
+ IsServer(sptr) ? sptr->name : sptr->user->server->name,
+ flags & GLINE_LOCAL ? "local" : "global",
+ flags & GLINE_BADCHAN ? "BADCHAN" : "GLINE", userhost,
+ expire + TSoffset, reason);
#ifdef GPATH
/* and log it */
return 0; /* was active to begin with */
/* Inform ops and log it */
- sendto_op_mask(SNO_GLINE, "%s activating global %s for %s%s%s, expiring at "
- TIME_T_FMT ": %s",
- IsServer(sptr) ? sptr->name : sptr->user->server->name,
- GlineIsBadChan(gline) ? "BADCHAN" : "GLINE",
- gline->gl_user, GlineIsBadChan(gline) ? "" : "@",
- GlineIsBadChan(gline) ? "" : gline->gl_host,
- gline->gl_expire + TSoffset, gline->gl_reason);
+ sendto_opmask_butone(0, SNO_GLINE, "%s activating global %s for %s%s%s, "
+ "expiring at %Tu: %s",
+ IsServer(sptr) ? sptr->name : sptr->user->server->name,
+ GlineIsBadChan(gline) ? "BADCHAN" : "GLINE",
+ gline->gl_user, GlineIsBadChan(gline) ? "" : "@",
+ GlineIsBadChan(gline) ? "" : gline->gl_host,
+ gline->gl_expire + TSoffset, gline->gl_reason);
#ifdef GPATH
if (IsServer(sptr))
}
/* Inform ops and log it */
- sendto_op_mask(SNO_GLINE, "%s %s %s for %s%s%s, expiring at "
- TIME_T_FMT ": %s",
- IsServer(sptr) ? sptr->name : sptr->user->server->name,
- GlineIsLocal(gline) ? "removing local" :
- "deactivating global",
- GlineIsBadChan(gline) ? "BADCHAN" : "GLINE",
- gline->gl_user, GlineIsBadChan(gline) ? "" : "@",
- GlineIsBadChan(gline) ? "" : gline->gl_host,
- gline->gl_expire + TSoffset, gline->gl_reason);
+ sendto_opmask_butone(0, SNO_GLINE, "%s %s %s for %s%s%s, expiring at %Tu: "
+ "%s",
+ IsServer(sptr) ? sptr->name : sptr->user->server->name,
+ GlineIsLocal(gline) ? "removing local" :
+ "deactivating global",
+ GlineIsBadChan(gline) ? "BADCHAN" : "GLINE",
+ gline->gl_user, GlineIsBadChan(gline) ? "" : "@",
+ GlineIsBadChan(gline) ? "" : gline->gl_host,
+ gline->gl_expire + TSoffset, gline->gl_reason);
#ifdef GPATH
if (IsServer(sptr))
if (userhost) {
if (!(gline = gline_find(userhost, GLINE_ANY))) /* no such gline */
- return send_error_to_client(sptr, ERR_NOSUCHGLINE, userhost);
+ return send_reply(sptr, ERR_NOSUCHGLINE, userhost);
/* send gline information along */
send_reply(sptr, RPL_GLIST, gline->gl_user,
static void server_reboot(const char* message)
{
- sendto_ops("Restarting server: %s", message);
+ sendto_opmask_butone(0, SNO_OLDSNO, "Restarting server: %s", message);
Debug((DEBUG_NOTICE, "Restarting server..."));
flush_connections(0);
void server_die(const char* message)
{
ircd_log(L_CRIT, "Server terminating: %s", message);
- sendto_ops("Server terminating: %s", message);
+ sendto_opmask_butone(0, SNO_OLDSNO, "Server terminating: %s", message);
flush_connections(0);
close_connections(1);
thisServer.running = 0;
(*pconf = con_conf)->next = 0;
}
if (connect_server(con_conf, 0, 0))
- sendto_ops("Connection to %s activated.", con_conf->name);
+ sendto_opmask_butone(0, SNO_OLDSNO, "Connection to %s activated.",
+ con_conf->name);
}
Debug((DEBUG_NOTICE, "Next connection check : %s", myctime(next)));
return (next);
/* If it was a server, then tell ops about it. */
if (IsServer(cptr) || IsConnecting(cptr) || IsHandshake(cptr))
- sendto_ops("No response from %s, closing link", cptr->name);
+ sendto_opmask_butone(0, SNO_OLDSNO,
+ "No response from %s, closing link", cptr->name);
exit_client_msg(cptr, cptr, &me, "Ping timeout");
continue;
* nospoof PONG.
*/
if (*cptr->name && cptr->user && *cptr->user->username) {
+ /* XXX sendto_one used to send numeric XXX */
sendto_one(cptr,
":%s %d %s :Your client may not be compatible with this server.",
me.name, ERR_BADPING, cptr->name);
*/
cptr->lasttime = CurrentTime - max_ping;
+ /* XXX sendto_one sending PING; must be very careful XXX */
if (IsUser(cptr))
sendto_one(cptr, MSG_PING " :%s", me.name);
else
int need_more_params(struct Client* cptr, const char* cmd)
{
- sendto_one(cptr, err_str(ERR_NEEDMOREPARAMS),
- me.name, (*cptr->name) ? cptr->name : "*", cmd);
+ send_reply(cptr, ERR_NEEDMOREPARAMS, cmd);
return 0;
}
{
assert(0 != sptr);
if (admin) {
- sendto_one(sptr, rpl_str(RPL_ADMINME), me.name, sptr->name, me.name);
- sendto_one(sptr, rpl_str(RPL_ADMINLOC1), me.name, sptr->name, admin->host);
- sendto_one(sptr, rpl_str(RPL_ADMINLOC2), me.name, sptr->name, admin->passwd);
- sendto_one(sptr, rpl_str(RPL_ADMINEMAIL), me.name, sptr->name, admin->name);
+ send_reply(sptr, RPL_ADMINME, me.name);
+ send_reply(sptr, RPL_ADMINLOC1, admin->host);
+ send_reply(sptr, RPL_ADMINLOC2, admin->passwd);
+ send_reply(sptr, RPL_ADMINEMAIL, admin->name);
}
else
- send_error_to_client(sptr, ERR_NOADMININFO, me.name);
+ send_reply(sptr, ERR_NOADMININFO, me.name);
return 0;
}
#define FLAG_SPACE 0x00000004 /* found a ' ' flag */
#define FLAG_ALT 0x00000008 /* found a '#' flag */
#define FLAG_ZERO 0x00000010 /* found a '0' flag */
+#define FLAG_COLON 0x00000020 /* found a ':' flag */
-#define FLAG_RESERVED2 0x00000020 /* reserved for future expansion */
-#define FLAG_RESERVED1 0x00000040
+#define FLAG_RESERVED1 0x00000040 /* reserved for future expansion */
#define FLAG_RESERVED0 0x00000080
/* integer types */
fld_s.flags |= FLAG_ALT;
continue;
+ case ':': /* Deal with the colon flag */
+ if (state == FLAG)
+ fld_s.flags |= FLAG_COLON;
+ continue;
+
case '0': /* Deal with a zero flag */
if (state == FLAG) {
fld_s.flags |= FLAG_ZERO;
case 's': /* convert a string */
fld_s.flags &= ~(FLAG_PLUS | FLAG_SPACE | FLAG_ALT | FLAG_ZERO |
- TYPE_MASK);
+ FLAG_COLON | TYPE_MASK);
fld_s.flags |= ARG_PTR | CONV_STRING;
break;
case 'd': case 'i':
+ fld_s.flags &= ~(FLAG_COLON);
fld_s.flags |= ARG_INT | CONV_INT;
break;
fld_s.base = BASE_HEX;
/*FALLTHROUGH*/
case 'u': /* Unsigned int */
- fld_s.flags &= ~(FLAG_PLUS | FLAG_SPACE);
+ fld_s.flags &= ~(FLAG_PLUS | FLAG_SPACE | FLAG_COLON);
fld_s.flags |= INFO_UNSIGNED | ARG_INT | CONV_INT;
break;
case 'c': /* character */
fld_s.flags &= ~(FLAG_PLUS | FLAG_SPACE | FLAG_ALT | FLAG_ZERO |
- TYPE_MASK);
+ FLAG_COLON | TYPE_MASK);
fld_s.flags |= INFO_UNSIGNED | ARG_INT | TYPE_CHAR | CONV_CHAR;
fld_s.prec = -1;
break;
case 'p': /* display a pointer */
- fld_s.flags &= ~(FLAG_PLUS | FLAG_SPACE | TYPE_MASK);
+ fld_s.flags &= ~(FLAG_PLUS | FLAG_SPACE | FLAG_COLON | TYPE_MASK);
fld_s.flags |= (FLAG_ALT | FLAG_ZERO | TYPE_POINTER | ARG_PTR |
CONV_INT | INFO_UNSIGNED);
fld_s.prec = (SIZEOF_VOID_P * 2); /* number of characters */
case 'm': /* write out a string describing an errno error */
fld_s.flags &= ~(FLAG_PLUS | FLAG_SPACE | FLAG_ALT | FLAG_ZERO |
- TYPE_MASK);
+ FLAG_COLON | TYPE_MASK);
fld_s.flags |= CONV_STRING;
fld_s.value.v_ptr = (void *)strerror(errno);
break;
case 'v': /* here's the infamous %v... */
fld_s.flags &= ~(FLAG_PLUS | FLAG_SPACE | FLAG_ALT | FLAG_ZERO |
- TYPE_MASK);
+ FLAG_COLON | TYPE_MASK);
fld_s.flags |= ARG_PTR | CONV_VARARGS;
break;
case 'C': /* convert a client name... */
- fld_s.flags &= ~(FLAG_PLUS | FLAG_SPACE | FLAG_ALT | FLAG_ZERO |
- TYPE_MASK);
+ fld_s.flags &= ~(FLAG_PLUS | FLAG_SPACE | FLAG_ZERO | TYPE_MASK);
fld_s.flags |= ARG_PTR | CONV_CLIENT;
break;
vdata->vd_overflow = SNP_MAX(buf_s.buf_overflow, buf_s.overflow);
} else if ((fld_s.flags & CONV_MASK) == CONV_CLIENT) {
struct Client *cptr = (struct Client*) fld_s.value.v_ptr;
- char *str1 = 0, *str2 = 0;
- int slen1 = 0, slen2 = 0, plen = 0;
+ char *str1 = 0, *str2 = 0, *str3 = 0;
+ int slen1 = 0, slen2 = 0, slen3 = 0, elen = 0, plen = 0;
/* &me is used if it's not a definite server */
if (dest && (IsServer(dest) || IsMe(dest))) {
str1 = cptr->user->server->yxx;
str2 = cptr->yxx;
}
- } else
- str1 = cptr->name;
+ fld_s.flags &= ~(FLAG_ALT | FLAG_COLON);
+ } else {
+ str1 = *cptr->name ? cptr->name : "*";
+ if (!IsServer(dest) && fld_s.flags & FLAG_ALT) {
+ str2 = cptr->user->username;
+ str3 = cptr->user->host;
+ } else
+ fld_s.flags &= ~FLAG_ALT;
+ }
- slen1 = my_strnlen(str1, fld_s.prec);
- if (str2 && (fld_s.prec < 0 || fld_s.prec - slen1 > 0))
- slen2 = my_strnlen(str2, fld_s.prec < 0 ? -1 : fld_s.prec - slen1);
- plen = (fld_s.width - (slen1 + slen2) <= 0 ? 0 :
- fld_s.width - (slen1 + slen2));
+ if (fld_s.flags & FLAG_COLON)
+ elen++; /* account for : */
+
+ slen1 = my_strnlen(str1, fld_s.prec < 0 ? -1 : fld_s.prec - elen);
+ if (fld_s.flags & FLAG_ALT)
+ elen++; /* account for ! */
+ if (str2 && (fld_s.prec < 0 || fld_s.prec - (slen1 + elen) > 0))
+ slen2 = my_strnlen(str2, fld_s.prec < 0 ? -1 : fld_s.prec -
+ (slen1 + elen));
+ if (fld_s.flags & FLAG_ALT)
+ elen++; /* account for @ */
+ if (str3 && (fld_s.prec < 0 || fld_s.prec - (slen1 + slen2 + elen) > 0))
+ slen3 = my_strnlen(str3, fld_s.prec < 0 ? -1 : fld_s.prec -
+ (slen1 + slen2 + elen));
+ plen = (fld_s.width - (slen1 + slen2 + slen3 + elen) <= 0 ? 0 :
+ fld_s.width - (slen1 + slen2 + slen3 + elen));
if (plen > 0 && !(fld_s.flags & FLAG_MINUS))
do_pad(buf_p, plen, spaces); /* pre-padding */
+ if (fld_s.flags & FLAG_COLON)
+ addc(buf_p, ':');
adds(buf_p, slen1, str1);
+ if (fld_s.flags & FLAG_ALT)
+ addc(buf_p, '!');
if (str2)
adds(buf_p, slen2, str2);
+ if (fld_s.flags & FLAG_ALT)
+ addc(buf_p, '@');
+ if (str3)
+ adds(buf_p, slen3, str3);
if (plen > 0 && (fld_s.flags & FLAG_MINUS))
do_pad(buf_p, plen, spaces); /* post-padding */
*/
if (expire <= 0 || expire > JUPE_MAX_EXPIRE) {
if (!IsServer(cptr) && MyConnect(cptr))
- send_error_to_client(cptr, ERR_BADEXPIRE, expire);
+ send_reply(cptr, ERR_BADEXPIRE, expire);
return 0;
}
expire += CurrentTime; /* convert from lifetime to timestamp */
/* Inform ops and log it */
- sendto_op_mask(SNO_NETWORK, "%s adding %sJUPE for %s, expiring at "
- TIME_T_FMT ": %s",
- IsServer(sptr) ? sptr->name : sptr->user->server->name,
- flags & JUPE_LOCAL ? "local " : "", server,
- expire + TSoffset, reason);
+ sendto_opmask_butone(0, SNO_NETWORK, "%s adding %sJUPE for %s, expiring at "
+ "%Tu: %s", IsServer(sptr) ? sptr->name :
+ sptr->user->server->name,
+ flags & JUPE_LOCAL ? "local " : "", server,
+ expire + TSoffset, reason);
#ifdef JPATH
if (IsServer(sptr))
return 0; /* was active to begin with */
/* Inform ops and log it */
- sendto_op_mask(SNO_NETWORK, "%s activating JUPE for %s, expiring at "
- TIME_T_FMT ": %s",
- IsServer(sptr) ? sptr->name : sptr->user->server->name,
- jupe->ju_server, jupe->ju_expire + TSoffset, jupe->ju_reason);
+ sendto_opmask_butone(0, SNO_NETWORK, "%s activating JUPE for %s, expiring "
+ "at %Tu: %s",
+ IsServer(sptr) ? sptr->name : sptr->user->server->name,
+ jupe->ju_server, jupe->ju_expire + TSoffset,
+ jupe->ju_reason);
#ifdef JPATH
if (IsServer(sptr))
}
/* Inform ops and log it */
- sendto_op_mask(SNO_NETWORK, "%s %s JUPE for %s, expiring at " TIME_T_FMT
- ": %s",
- IsServer(sptr) ? sptr->name : sptr->user->server->name,
- JupeIsLocal(jupe) ? "removing local" : "deactivating",
- jupe->ju_server, jupe->ju_expire + TSoffset, jupe->ju_reason);
+ sendto_opmask_butone(0, SNO_NETWORK, "%s %s JUPE for %s, expiring at %Tu: "
+ "%s",
+ IsServer(sptr) ? sptr->name : sptr->user->server->name,
+ JupeIsLocal(jupe) ? "removing local" : "deactivating",
+ jupe->ju_server, jupe->ju_expire + TSoffset,
+ jupe->ju_reason);
#ifdef JPATH
if (IsServer(sptr))
if (server) {
if (!(jupe = jupe_find(server))) /* no such jupe */
- return send_error_to_client(sptr, ERR_NOSUCHJUPE, server);
+ return send_reply(sptr, ERR_NOSUCHJUPE, server);
/* send jupe information along */
send_reply(sptr, RPL_JUPELIST, jupe->ju_server, jupe->ju_expire + TSoffset,
}
#ifdef DEBUGMODE
+/* XXX uses sendto_one to send a RPL_STATSDEBUG -- no string for rpl */
void send_listinfo(struct Client *cptr, char *name)
{
int inuse = 0, mem = 0, tmp = 0;
#include "ircd.h"
#include "ircd_alloc.h"
#include "ircd_osdep.h"
+#include "ircd_reply.h"
#include "ircd_string.h"
#include "numeric.h"
#include "s_bsd.h"
}
else
flags[1] = '\0';
-
- sendto_one(sptr, rpl_str(RPL_STATSPLINE),
- me.name, sptr->name, listener->port,
- listener->ref_count, flags,
- (listener->active) ? "active" : "disabled");
+
+ send_reply(sptr, RPL_STATSPLINE, listener->port, listener->ref_count,
+ flags, (listener->active) ? "active" : "disabled");
if (--count == 0)
break;
}
#include "map.h"
#include "client.h"
#include "ircd.h"
+#include "ircd_reply.h"
#include "list.h"
#include "match.h"
#include "numeric.h"
*p = '\0';
if (prompt_length > 60)
- sendto_one(cptr, rpl_str(RPL_MAPMORE), me.name, cptr->name,
- prompt, server->name);
+ send_reply(cptr, RPL_MAPMORE, prompt, server->name);
else {
char lag[512];
if (server->serv->lag>10000)
strcpy(lag,"(0s)");
else
sprintf(lag,"(%is)",server->serv->lag);
- sendto_one(cptr, rpl_str(RPL_MAP), me.name, cptr->name,
- prompt,
- ((IsBurstOrBurstAck(server)) ? "*" : ""),
- server->name,
- lag,
- (server == &me) ? UserStats.local_clients : server->serv->clients);
+ send_reply(cptr, RPL_MAP, prompt, ((IsBurstOrBurstAck(server)) ? "*" : ""),
+ server->name, lag, (server == &me) ? UserStats.local_clients :
+ server->serv->clients);
}
if (prompt_length > 0)
{
#include "ircd.h"
#include "ircd_alloc.h"
#include "ircd_chattr.h"
+#include "ircd_reply.h"
#include "ircd_string.h"
#include "map.h"
#include "msg.h"
if (buffer[0] != '\0')
{
if (IsUser(from))
- sendto_one(from, ":%s %d %s %s :Unknown command",
- me.name, ERR_UNKNOWNCOMMAND, from->name, ch);
+ send_reply(from, ERR_UNKNOWNCOMMAND, ch);
Debug((DEBUG_ERROR, "Unknown (%s) from %s",
ch, get_client_name(cptr, HIDE_IP)));
}
/* Kill the unknown numeric prefix upstream if
* it's server still exists: */
if ((server = FindNServer(numeric_prefix)) && server->from == cptr)
- sendto_one(cptr, "%s KILL %s :%s (Unknown numeric nick)",
- NumServ(&me), numeric_prefix, me.name);
+ sendcmdto_one(&me, CMD_KILL, cptr, "%s :%s (Unknown numeric nick)",
+ numeric_prefix, me.name);
}
/*
* Things that must be allowed to travel