Hybrid rc2 updates (but not bad /oper bug)

Started setting standard modes. removed un-used ifdefs
This commit is contained in:
fishwaldo 2002-08-16 12:05:37 +00:00
parent 16d73a2568
commit 1a67df4d75
43 changed files with 1504 additions and 2143 deletions

View file

@ -23,4 +23,7 @@ Symbols are:
(F) - Moved AnonOps Mode char to +A
(F) - Only allow channel admins to set +A (anonops)
(F) - Channel Mode +O (opers only)
(HP) - Added Patch to fix hardcoded timeouts in s_serv.c
(HP) - Added Patch to fix hardcoded timeouts in s_serv.c
(HP) - Big arse rc2 patch for Hybrid. Sigh. Found a cute bug in hybrid that would allow it to accept any password for /oper though!
(F) - Removed all ifdef HALFOP ANONOP VCHAN defines, as these will be standard in NeoIRCd
(F) - Removed all OANDVcode as its not going to be used at all

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: channel.h,v 1.3 2002/08/14 16:52:02 fishwaldo Exp $
* $Id: channel.h,v 1.4 2002/08/16 12:05:36 fishwaldo Exp $
*/
#ifndef INCLUDED_channel_h
@ -68,24 +68,14 @@ struct Channel
#endif
dlink_list chanadmins; /* list of Channel Admins */
dlink_list chanops; /* lists of chanops etc. */
#ifdef REQUIRE_OANDV
dlink_list chanops_voiced; /* UGH I'm sorry */
#endif
#ifdef HALFOPS
dlink_list halfops;
#endif
dlink_list voiced;
dlink_list peons; /* non ops, just members */
dlink_list deopped; /* users deopped on sjoin */
dlink_list locchanadmins; /* local versions of the above */
dlink_list locchanops; /* local versions of the above */
#ifdef REQUIRE_OANDV
dlink_list locchanops_voiced; /* UGH I'm sorry */
#endif
#ifdef HALFOPS
dlink_list lochalfops;
#endif
dlink_list locvoiced;
dlink_list locpeons; /* ... */
@ -117,9 +107,7 @@ extern int can_join(struct Client *source_p, struct Channel *chptr,
extern int is_chan_op (struct Channel *chptr,struct Client *who);
extern int is_chan_admin (struct Channel *chptr, struct Client *who);
extern int is_any_op (struct Channel *chptr,struct Client *who);
#ifdef HALFOPS
extern int is_half_op (struct Channel *chptr,struct Client *who);
#endif
extern int is_voiced (struct Channel *chptr,struct Client *who);
extern dlink_node *find_user_link (dlink_list *, struct Client *);

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: channel_mode.h,v 1.3 2002/08/14 16:52:02 fishwaldo Exp $
* $Id: channel_mode.h,v 1.4 2002/08/16 12:05:36 fishwaldo Exp $
*/
@ -49,9 +49,7 @@
extern void set_channel_mode(struct Client *, struct Client *,
struct Channel *, int, char **, char *);
#ifdef ANONOPS
extern void sync_channel_oplists(struct Channel *, int);
#endif
extern void set_channel_mode_flags( char flags_ptr[4][2],
struct Channel *chptr,
@ -124,20 +122,22 @@ extern void unset_chcap_usage_counts(struct Client *serv_p);
struct ChModeChange
{
char letter;
char *arg, *id;
int caps, nocaps, mems;
struct Client *client;
char letter;
char *arg;
char *id;
int dir;
int caps;
int nocaps;
int mems;
struct Client *client;
};
#ifdef HALFOPS
struct ChModeBounce
{
char letter;
char *arg, *id;
int dir;
};
#endif
struct ChCapCombo
{

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: numeric.h,v 1.2 2002/08/13 14:45:10 fishwaldo Exp $
* $Id: numeric.h,v 1.3 2002/08/16 12:05:36 fishwaldo Exp $
*/
#ifndef INCLUDED_numeric_h
@ -43,12 +43,23 @@ extern const char* form_str(int);
#define RPL_CREATED 003
#define RPL_MYINFO 004
#define RPL_ISUPPORT 005
/* RPL_BOUNCE IRCnet extension */
/* RPL_MAP 6 unreal */
/* RPL_MAPEND 7 unreal */
/* RPL_SNOMASK 8 Undernet extension */
/* RPL_STATMEMTOT 9 Undernet extension */
/* RPL_STATMEM 10 Undernet extension */
#define RPL_REDIR 10
#define RPL_MAP 15 /* Undernet extension */
#define RPL_MAPMORE 16 /* Undernet extension */
#define RPL_MAPEND 17 /* Undernet extension */
#define RPL_YOURID 20
/* RPL_YOURID 42 IRCnet extension */
/* RPL_ATTEMPTINGJUNC 50 aircd extension */
/* RPL_ATTEMPTINGREROUTE 51 aircd extension */
/*
* Numeric replies from server commands.
* These are currently in the range 200-399.
@ -63,10 +74,15 @@ extern const char* form_str(int);
#define RPL_TRACENEWTYPE 208
#define RPL_TRACECLASS 209
/* RPL_STATS 210 aircd extension, used instead of having
multiple stats numerics */
/* RPL_TRACERECONNECT 210 IRCnet extension */
#define RPL_STATSLINKINFO 211
#define RPL_STATSCOMMANDS 212
#define RPL_STATSCLINE 213
#define RPL_STATSNLINE 214
/* RPL_STATSOLDNLINE 214 unreal */
#define RPL_STATSILINE 215
#define RPL_STATSKLINE 216
#define RPL_STATSQLINE 217
@ -77,16 +93,36 @@ extern const char* form_str(int);
* I'm going to steal 220 for now *sigh*
* -Dianora
*/
#define RPL_STATSPLINE 220
#define RPL_UMODEIS 221
/* RPL_SQLINE_NICK 222 Numerics List: Dalnet */
/* RPL_STATSELINE 223 dalnet */
/* RPL_STATSGLINE 223 unreal */
/* RPL_STATSFLINE 224 Hybrid extension,Dalnet */
/* RPL_STATSTLINE 224 unreal */
/* RPL_STATSDLINE 225 Hybrid extension */
/* RPL_STATSZLINE 225 Dalnet
RPL_STATSELINE 225 unreal
RPL_STATSCOUNT 226 Dalnet
RPL_STATSNLINE 226 unreal
RPL_STATSGLINE 227 Dalnet
RPL_STATSVLINE 227 unreal */
#define RPL_STATSFLINE 224
#define RPL_STATSDLINE 225
#define RPL_STATSALINE 226
/* RPL_RULES 232 unreal */
#define RPL_SERVLIST 234
#define RPL_SERVLISTEND 235
/* RPL_STATSIAUTH 239 IRCnet extension */
/* RPL_STATSVLINE 240 IRCnet extension */
/* RPL_STATSXLINE 240 austnet */
#define RPL_STATSLLINE 241
#define RPL_STATSUPTIME 242
#define RPL_STATSOLINE 243
@ -97,6 +133,7 @@ extern const char* form_str(int);
#define RPL_STATSULINE 248
#define RPL_STATSDEBUG 249
#define RPL_STATSCONN 250
/* RPL_STATSDLINE 250 Numerics List: IRCnet */
#define RPL_LUSERCLIENT 251
#define RPL_LUSEROP 252
#define RPL_LUSERUNKNOWN 253
@ -111,6 +148,14 @@ extern const char* form_str(int);
#define RPL_ENDOFTRACE 262
#define RPL_LOAD2HI 263
/* RPL_TRYAGAIN 263 Numerics List: IRCnet */
/* RPL_LOAD2HI 263 Dalnet */
/* RPL_CURRENT_LOCAL 265 aircd/efnet/hybrid/dalnet*/
/* RPL_CURRENT_GLOBAL 266 aircd/efnet/hybrid/dalnet */
/* RPL_START_NETSTAT 267 aircd */
/* RPL_NETSTAT 268 aircd */
/* RPL_END_NETSTAT 269 aircd */
#define RPL_LOCALUSERS 265
#define RPL_GLOBALUSERS 266
@ -121,6 +166,32 @@ extern const char* form_str(int);
#define RPL_ACCEPTLIST 281
#define RPL_ENDOFACCEPT 282
/* RPL_GLIST 280 Undernet extension */
/* RPL_ENDOFGLIST 281 Undernet extension */
/* RPL_JUPELIST 282 Undernet extension - jupe -Kev */
/* RPL_ENDOFJUPELIST 283 Undernet extension - jupe -Kev */
/* RPL_FEATURE 284 Undernet extension - features */
/* RPL_CHANINFO_HANDLE 285 aircd */
/* RPL_CHANINFO_USERS 286 aircd */
/* RPL_CHANINFO_CHOPS 287 aircd */
/* RPL_CHANINFO_VOICES 288 aircd */
/* RPL_CHANINFO_AWAY 289 aircd */
/* RPL_CHANINFO_OPERS 290 aircd */
/* RPL_HELPHDR 290 Numeric List: Dalnet */
/* RPL_CHANINFO_BANNED 291 aircd */
/* RPL_HELPOP 291 Numeric List: Dalnet */
/* RPL_CHANINFO_BANS 292 aircd */
/* RPL_HELPTLR 292 Numeric List: Dalnet */
/* RPL_CHANINFO_INVITE 293 aircd */
/* RPL_HELPHLP 293 Numeric List: Dalnet */
/* RPL_CHANINFO_INVITES 294 aircd */
/* RPL_HELPFWD 294 Numeric List: Dalnet */
/* RPL_CHANINFO_KICK 295 aircd */
/* RPL_HELPIGN 295 Numeric List: Dalnet */
/* RPL_CHANINFO_KICKS 296 aircd */
/* RPL_END_CHANINFO 299 aircd */
/* numeric_replies */
#define RPL_NONE 300
@ -130,6 +201,19 @@ extern const char* form_str(int);
#define RPL_TEXT 304
#define RPL_UNAWAY 305
#define RPL_NOWAWAY 306
#define RPL_USERIP 307 /* Undernet extension */
/* RPL_WHOISREGNICK 307 Numeric List: Dalnet */
/* RPL_SUSERHOST 307 austnet */
/* RPL_NOTIFYACTION 308 aircd */
/* RPL_WHOISADMIN 308 Numeric List: Dalnet */
/* RPL_RULESSTART 308 unreal */
/* RPL_NICKTRACE 309 aircd */
/* RPL_WHOISSADMIN 309 Numeric List: Dalnet */
/* RPL_ENDOFRULES 309 unreal */
/* RPL_WHOISHELPER 309 austnet */
/* RPL_WHOISSVCMSG 310 Dalnet */
/* RPL_WHOISHELPOP 310 unreal */
/* RPL_WHOISSERVICE 310 austnet */
#define RPL_WHOISADMIN 308
@ -146,23 +230,33 @@ extern const char* form_str(int);
#define RPL_ENDOFWHOIS 318
#define RPL_WHOISCHANNELS 319
/* RPL_WHOIS_HIDDEN 320 Anothernet +h, ick! */
/* RPL_WHOISSPECIAL 320 unreal */
#define RPL_LISTSTART 321
#define RPL_LIST 322
#define RPL_LISTEND 323
#define RPL_CHANNELMODEIS 324
/* RPL_CHANNELPASSIS 325 IRCnet extension */
/* RPL_UNIQOPIS 325 IRCnet extension */
/* RPL_NOCHANPASS 326 IRCnet extension */
/* RPL_CHPASSUNKNOWN 327 IRCnet extension */
/* RPL_CHANNEL_URL 328 dalnet, anothernet */
#define RPL_CREATIONTIME 329
/* RPL_WHOWAS_TIME 330 ? */
#define RPL_NOTOPIC 331
#define RPL_TOPIC 332
#define RPL_TOPICWHOTIME 333
/* RPL_COMMANDSYNTAX 334 Dalnet */
/* RPL_LISTSYNTAX 334 unreal */
/* RPL_CHANPASSOK 338 IRCnet extension (?)*/
/* RPL_WHOISACTUALLY 338 Undernet extension, dalnet */
/* RPL_BADCHANPASS 339 IRCnet extension (?)*/
/* RPL_USERIP 340 (old) Undernet extension */
#define RPL_INVITING 341
#define RPL_SUMMONING 342
/* RPL_SUMMONING 342 removed from RFC1459 */
#define RPL_INVITELIST 346
#define RPL_ENDOFINVITELIST 347
#define RPL_ENDOFINVITELIST 347 /* IRCnet, Undernet extension */
#define RPL_EXCEPTLIST 348
#define RPL_ENDOFEXCEPTLIST 349
@ -190,12 +284,24 @@ extern const char* form_str(int);
#define RPL_MOTDSTART 375
#define RPL_ENDOFMOTD 376
/* RPL_KICKEXPIRED 377 aircd */
/* RPL_SPAM 377 austnet */
/* RPL_BANEXPIRED 378 aircd */
/* RPL_KICKLINKED 379 aircd */
/* RPL_BANLINKED 380 aircd */
#define RPL_YOUREOPER 381
#define RPL_REHASHING 382
/* RPL_YOURSERVICE 383 Numeric List: various */
#define RPL_MYPORTIS 384
#define RPL_NOTOPERANYMORE 385
#define RPL_RSACHALLENGE 386
/* RPL_QLIST 386 unreal */
/* RPL_ENDOFQLIST 387 unreal */
/* RPL_ALIST 388 unreal */
/* RPL_ENDOFALIST 389 unreal */
#define RPL_TIME 391
#define RPL_USERSSTART 392
#define RPL_USERS 393
@ -219,19 +325,29 @@ extern const char* form_str(int);
#define ERR_NOTEXTTOSEND 412
#define ERR_NOTOPLEVEL 413
#define ERR_WILDTOPLEVEL 414
/* ERR_BADMASK 415 IRCnet extension */
#define ERR_UNKNOWNCOMMAND 421
#define ERR_NOMOTD 422
#define ERR_NOADMININFO 423
#define ERR_FILEERROR 424
/* ERR_TOOMANYAWAY 429 Dalnet */
#define ERR_NONICKNAMEGIVEN 431
#define ERR_ERRONEUSNICKNAME 432
#define ERR_NICKNAMEINUSE 433
/* ERR_SERVICENAMEINUSE 434 ? */
/* ERR_NORULES 434 unreal */
/* ERR_SERVICECONFUSED 435 ? */
/* ERR_BANONCHAN 435 dalnet */
#define ERR_NICKCOLLISION 436
#define ERR_UNAVAILRESOURCE 437
#define ERR_NICKTOOFAST 438 /* We did it first Undernet! ;) db */
/* ERR_SERVICESDOWN 440 Dalnet,unreal */
#define ERR_USERNOTINCHANNEL 441
#define ERR_NOTONCHANNEL 442
#define ERR_USERONCHANNEL 443
@ -241,6 +357,14 @@ extern const char* form_str(int);
#define ERR_NOTREGISTERED 451
/* ERR_IDCOLLISION 452 IRCnet extension ? */
/* ERR_NICKLOST 453 IRCnet extension ? */
/* ERR_HOSTILENAME 455 unreal */
/* ERR_NOHIDING 459 unreal */
/* ERR_NOTFORHALFOPS 460 unreal */
#define ERR_ACCEPTFULL 456
#define ERR_ACCEPTEXIST 457
#define ERR_ACCEPTNOT 458
@ -252,7 +376,10 @@ extern const char* form_str(int);
#define ERR_YOUREBANNEDCREEP 465
#define ERR_YOUWILLBEBANNED 466
#define ERR_KEYSET 467
/* ERR_ONLYSERVERSCANCHANGE 468 Dalnet,unreal */
/* ERR_LINKSET 469 unreal */
/* ERR_LINKCHANNEL 470 unreal */
/* ERR_KICKEDFROMCHAN 470 aircd */
#define ERR_CHANNELISFULL 471
#define ERR_UNKNOWNMODE 472
#define ERR_INVITEONLYCHAN 473
@ -262,19 +389,32 @@ extern const char* form_str(int);
#define ERR_MODELESS 477 /* ircu numeric -db */
#define ERR_BANLISTFULL 478 /* I stole the numeric from ircu -db */
#define ERR_BADCHANNAME 479
/* ERR_LINKFAIL 479 unreal */
/* ERR_CANNOTKNOCK 480 unreal */
/* ERR_NOULINE 480 austnet */
#define ERR_NOPRIVILEGES 481
#define ERR_CHANOPRIVSNEEDED 482
#define ERR_CANTKILLSERVER 483
#define ERR_RESTRICTED 484
#define ERR_BANNEDNICK 485
/* ERR_DESYNC 484 Dalnet,PTlink */
/* ERR_ATTACKDENY 484 unreal */
/* ERR_RESTRICTED 484 IRCnet extension */
/* ERR_UNIQOPRIVSNEEDED 485 IRCnet extension */
/* ERR_KILLDENY 485 unreal */
/* ERR_CANTKICKADMIN 485 PTlink */
/* ERR_HTMDISABLED 486 unreal */
/* ERR_CHANTOORECENT 487 IRCnet extension (?) */
/* ERR_TSLESSCHAN 488 IRCnet extension (?) */
/* ERR_VOICENEEDED 489 Undernet extension */
#define ERR_NOOPERHOST 491
/* ERR_NOSERVICEHOST 492 IRCnet extension */
#define ERR_UMODEUNKNOWNFLAG 501
#define ERR_USERSDONTMATCH 502
#define ERR_GHOSTEDCLIENT 503
/* ERR_VWORLDWARN 503 austnet */
#define ERR_USERNOTONSERV 504
@ -285,15 +425,52 @@ extern const char* form_str(int);
#define ERR_VCHANDISABLED 506
#define ERR_ALREADYONVCHAN 507
/* ERR_NOTIFYFULL 512 aircd */
/* ERR_TOOMANYWATCH 512 Numeric List: Dalnet */
/* ERR_NEEDPONG 512 Numeric List: Dalnet */
#define ERR_WRONGPONG 513
/* ERR_TOOMANYDCC 514 dalnet */
/* ERR_NOINVITE 518 unreal */
#define ERR_LONGMASK 518 /* Undernet extension -Kev */
/* ERR_ADMONLY 519 unreal */
/* ERR_TOOMANYUSERS 519 Undernet extension -Kev */
/* ERR_OPERONLY 520 unreal */
/* ERR_MASKTOOWIDE 520 Undernet extension -Kev */
/* ERR_WHOTRUNC 520 austnet */
/* ERR_LASTERROR 521 Undernet extension -Kev */
/* ERR_LISTSYNTAX 521 dalnet */
/* ERR_WHOSYNTAX 522 dalnet */
/* ERR_WHOLIMEXCEED 523 dalnet */
#define ERR_HELPNOTFOUND 524
/* RPL_LOGON 600 dalnet,unreal
RPL_LOGOFF 601 dalnet,unreal
RPL_WATCHOFF 602 dalnet,unreal
RPL_WATCHSTAT 603 dalnet,unreal
RPL_NOWON 604 dalnet,unreal
RPL_NOWOFF 605 dalnet,unreal
RPL_WATCHLIST 606 dalnet,unreal
RPL_ENDOFWATCHLIST 607 dalnet,unreal
#define RPL_WHOISSERVICES 613
#define RPL_WHOISMODES 615
RPL_MAPMORE 610 unreal
*/
#define RPL_WHOISSERVICES 613
#define RPL_WHOISMODES 615
/*
RPL_MAPMORE 615 PTlink
RPL_DCCSTATUS 617 dalnet
RPL_DCCLIST 618 dalnet
RPL_ENDOFDCCLIST 619 dalnet
RPL_DCCINFO 620 dalnet
RPL_DUMPING 640 unreal
RPL_DUMPRPL 641 unreal
RPL_EODUMP 642 unreal
*/
#define RPL_WHOISREALHOST 670
#define RPL_MODLIST 702
#define RPL_ENDOFMODLIST 703

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: packet.h,v 1.2 2002/08/13 14:45:10 fishwaldo Exp $
* $Id: packet.h,v 1.3 2002/08/16 12:05:36 fishwaldo Exp $
*/
#ifndef INCLUDED_packet_h
@ -44,7 +44,7 @@
* without being so heavily penalised they excess flood.
*/
#define MAX_FLOOD 5
#define MAX_FLOOD_BURST MAX_FLOOD * 6
#define MAX_FLOOD_BURST MAX_FLOOD * 8
extern PF read_ctrl_packet;
extern PF read_packet;

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: s_conf.h,v 1.2 2002/08/13 14:45:10 fishwaldo Exp $
* $Id: s_conf.h,v 1.3 2002/08/16 12:05:36 fishwaldo Exp $
*/
#ifndef INCLUDED_s_conf_h
@ -240,12 +240,6 @@ struct config_file_entry
struct config_channel_entry
{
int use_anonops;
int use_except;
int use_halfops;
int use_invex;
int use_knock;
int use_vchans;
int knock_delay;
int knock_delay_channel;
int vchans_oper_only;

View file

@ -1 +1 @@
#define SERIALNUM "20020716_1"
#define SERIALNUM "20020816_0"

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: supported.h,v 1.2 2002/08/13 14:45:11 fishwaldo Exp $
* $Id: supported.h,v 1.3 2002/08/16 12:05:36 fishwaldo Exp $
*/
#ifndef INCLUDED_supported_h
@ -29,8 +29,13 @@
#include "channel.h"
#include "ircd_defs.h"
#ifndef USE_ASCII_CASEMAP
#define CASEMAP "rfc1459"
#else
#define CASEMAP "ascii"
#endif
#define FEATURES "WALLCHOPS"\
"%s%s%s%s" \
" MODES=%i" \
" MAXCHANNELS=%i" \
" MAXBANS=%i" \
@ -39,11 +44,7 @@
" TOPICLEN=%i" \
" KICKLEN=%i"
#define FEATURESVALUES ConfigChannel.use_knock ? " KNOCK" : "", \
ConfigChannel.use_vchans ? " VCHANS" : "", \
ConfigChannel.use_except ? " EXCEPTS" : "", \
ConfigChannel.use_invex ? " INVEX" : "", \
MAXMODEPARAMS,ConfigChannel.max_chans_per_user, \
#define FEATURESVALUES MAXMODEPARAMS,ConfigChannel.max_chans_per_user, \
ConfigChannel.max_bans, \
ConfigFileEntry.max_targets,NICKLEN-1,TOPICLEN,TOPICLEN
@ -51,13 +52,12 @@
" PREFIX=%s" \
" CHANMODES=%s" \
" NETWORK=%s" \
" CHARSET=rfc1459" \
" CASEMAPPING=rfc1459" \
" CASEMAPPING=%s" \
" CALLERID"
#define FEATURES2VALUES ConfigServerHide.disable_local_channels ? "#" : "#&", \
"(ohv)@%+", "beI,k,l,imnpsta", \
ServerInfo.network_name
"(aohv)*@%+", "beI,k,l,imnpsta", \
ServerInfo.network_name, CASEMAP
/*
* - from mirc's versions.txt

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: m_kick.c,v 1.2 2002/08/14 06:01:55 fishwaldo Exp $
* $Id: m_kick.c,v 1.3 2002/08/16 12:05:36 fishwaldo Exp $
*/
#include "stdinc.h"
@ -37,6 +37,7 @@
#include "modules.h"
#include "parse.h"
#include "hash.h"
#include "packet.h"
static void m_kick(struct Client*, struct Client*, int, char**);
@ -59,7 +60,7 @@ _moddeinit(void)
mod_del_cmd(&kick_msgtab);
}
const char *_version = "$Revision: 1.2 $";
const char *_version = "$Revision: 1.3 $";
#endif
/*
** m_kick
@ -92,15 +93,21 @@ static void m_kick(struct Client *client_p,
return;
}
if(MyClient(source_p) && !IsFloodDone(source_p))
flood_endgrace(source_p);
comment = (BadPtr(parv[3])) ? parv[2] : parv[3];
if (strlen(comment) > (size_t) TOPICLEN)
comment[TOPICLEN] = '\0';
*buf = '\0';
if( (p = strchr(parv[1],',')) )
*p = '\0';
name = parv[1];
while (*name == ',')
name++;
if((p = strchr(name,',')) != NULL)
*p = '\0';
if (!*name)
return;
chptr = hash_find_channel(name);
if (!chptr)
@ -165,10 +172,13 @@ static void m_kick(struct Client *client_p,
*/
}
if( (p = strchr(parv[2],',')) )
user = parv[2];
while (*user == ',')
user++;
if((p = strchr(user,',')) != NULL)
*p = '\0';
user = parv[2]; /* strtoken(&p2, parv[2], ","); */
if (!*user)
return;
if (!(who = find_chasing(source_p, user, &chasing)))
{
@ -177,15 +187,17 @@ static void m_kick(struct Client *client_p,
if (IsMember(who, chptr))
{
/* half ops cannot kick full chanops */
#ifdef HALFOPS
if (is_half_op(chptr,source_p) && is_any_op(chptr,who))
/* half ops cannot kick other halfops on private channels */
if (is_half_op(chptr,source_p))
{
if (((chptr->mode.mode & MODE_PRIVATE) && is_any_op(chptr, who)) ||
is_chan_op(chptr, who))
{
sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED),
me.name, parv[0], name);
return;
}
#endif
}
/* jdc
* - In the case of a server kicking a user (i.e. CLEARCHAN),
* the kick should show up as coming from the server which did
@ -198,7 +210,6 @@ static void m_kick(struct Client *client_p,
sendto_channel_local(ALL_MEMBERS, chptr, ":%s KICK %s %s :%s",
source_p->name, name, who->name, comment);
}
#ifdef ANONOPS
else if(chptr->mode.mode & MODE_HIDEOPS)
{
/* jdc -- Non-chanops get kicked from me.name, not
@ -218,7 +229,6 @@ static void m_kick(struct Client *client_p,
who->name, comment);
}
else
#endif
{
sendto_channel_local(ALL_MEMBERS, chptr,
":%s!%s@%s KICK %s %s :%s",

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: m_kill.c,v 1.2 2002/08/14 06:01:55 fishwaldo Exp $
* $Id: m_kill.c,v 1.3 2002/08/16 12:05:36 fishwaldo Exp $
*/
#include "stdinc.h"
@ -64,7 +64,7 @@ _moddeinit(void)
mod_del_cmd(&kill_msgtab);
}
const char *_version = "$Revision: 1.2 $";
const char *_version = "$Revision: 1.3 $";
#endif
/*
** mo_kill
@ -83,9 +83,9 @@ static void mo_kill(struct Client *client_p, struct Client *source_p,
user = parv[1];
reason = parv[2]; /* Either defined or NULL (parc >= 2!!) */
if (!IsOperGlobalKill(source_p))
if (!IsOperK(source_p))
{
sendto_one(source_p,":%s NOTICE %s :You need global_kill = yes;",me.name,parv[0]);
sendto_one(source_p,":%s NOTICE %s :You need kline = yes;",me.name,parv[0]);
return;
}
@ -258,11 +258,15 @@ static void ms_kill(struct Client *client_p, struct Client *source_p,
/* Be warned, this message must be From %s, or it confuses clients
* so dont change it to From: or the case or anything! -- fl -- db */
/* path must contain at least 2 !'s, or bitchx falsely declares it
* local --fl
*/
if (IsOper(source_p)) /* send it normally */
{
sendto_realops_flags(FLAGS_ALL, L_ALL,
"Received KILL message for %s. From %s Path: %s %s",
target_p->name, parv[0], source_p->user->server, reason);
"Received KILL message for %s. From %s Path: %s!%s!%s!%s %s",
target_p->name, parv[0], source_p->user->server,
source_p->host, source_p->username, source_p->name, reason);
}
else
{

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: m_mode.c,v 1.1 2002/08/14 05:47:41 fishwaldo Exp $
* $Id: m_mode.c,v 1.2 2002/08/16 12:05:36 fishwaldo Exp $
*/
#include "stdinc.h"
@ -63,7 +63,7 @@ _moddeinit(void)
}
const char *_version = "$Revision: 1.1 $";
const char *_version = "$Revision: 1.2 $";
#endif
/*
* m_mode - MODE command handler
@ -211,7 +211,12 @@ static void m_mode(struct Client *client_p, struct Client *source_p,
{
/* Finish the flood grace period... */
if(MyClient(source_p) && !IsFloodDone(source_p))
flood_endgrace(source_p);
{
if((parc == n) && (parv[n-1][0] == 'b') && (parv[n-1][1] == '\0'))
;
else
flood_endgrace(source_p);
}
set_channel_mode(client_p, source_p, chptr, parc - n, parv + n,
root->chname);

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: m_nick.c,v 1.4 2002/08/14 06:32:53 fishwaldo Exp $
* $Id: m_nick.c,v 1.5 2002/08/16 12:05:36 fishwaldo Exp $
*/
#include "stdinc.h"
@ -97,7 +97,7 @@ _moddeinit(void)
mod_del_cmd(&client_msgtab);
}
const char *_version = "$Revision: 1.4 $";
const char *_version = "$Revision: 1.5 $";
#endif
/*
@ -326,8 +326,26 @@ static void ms_nick(struct Client *client_p, struct Client *source_p,
}
/* parc == 3 on nickchange, parc == 9 on new nick */
if((parc != 3) && (parc != 9))
if((IsClient(source_p) && (parc != 3)) || (IsServer(source_p) && (parc != 9)))
{
char tbuf[BUFSIZE] = { 0 };
int j;
for(j = 0; j < parc; j++)
{
strcat(tbuf, parv[j]);
strcat(tbuf, " ");
}
sendto_realops_flags(FLAGS_ALL, L_ALL,
"Dropping server %s due to (invalid) command 'NICK' "
"with only %d arguments. (Buf: '%s')",
client_p->name, parc, tbuf);
ilog(L_CRIT, "Insufficient parameters (%d) for command 'NICK' from %s. Buf: %s",
parc, client_p->name, tbuf);
exit_client(client_p, client_p, client_p, "Not enough arguments to server command.");
return;
}
/* fix the length of the nick */
strlcpy(nick, parv[1], NICKLEN);

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: m_server.c,v 1.2 2002/08/14 06:29:46 fishwaldo Exp $
* $Id: m_server.c,v 1.3 2002/08/16 12:05:36 fishwaldo Exp $
*/
#include "stdinc.h"
@ -51,7 +51,7 @@ static void ms_server(struct Client*, struct Client*, int, char **);
static int set_server_gecos(struct Client *, char *);
struct Message server_msgtab = {
"SERVER", 0, 0, 3, 0, MFLG_SLOW | MFLG_UNREG, 0,
"SERVER", 0, 0, 4, 0, MFLG_SLOW | MFLG_UNREG, 0,
{mr_server, m_registered, ms_server, m_registered}
};
@ -67,7 +67,7 @@ _moddeinit(void)
{
mod_del_cmd(&server_msgtab);
}
const char *_version = "$Revision: 1.2 $";
const char *_version = "$Revision: 1.3 $";
#endif
int bogus_host(char *host);

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: m_sjoin.c,v 1.2 2002/08/14 06:01:55 fishwaldo Exp $
* $Id: m_sjoin.c,v 1.3 2002/08/16 12:05:36 fishwaldo Exp $
*/
#include "stdinc.h"
@ -63,7 +63,7 @@ _moddeinit(void)
mod_del_cmd(&sjoin_msgtab);
}
const char *_version = "$Revision: 1.2 $";
const char *_version = "$Revision: 1.3 $";
#endif
/*
* ms_sjoin
@ -122,18 +122,14 @@ static void ms_sjoin(struct Client *client_p,
int hide_or_not;
int i;
dlink_node *m;
#ifdef HALFOPS
static char sjbuf_hops[BUFSIZE]; /* buffer with halfops as % */
register char *hops;
#endif
#ifdef VCHANS
int vc_ts = 0;
#endif
*buf = '\0';
#ifdef HALFOPS
*sjbuf_hops = '\0';
#endif
*sjbuf_nhops = '\0';
if (IsClient(source_p) || parc < 5)
@ -178,12 +174,9 @@ static void ms_sjoin(struct Client *client_p,
case 't':
mode.mode |= MODE_TOPICLIMIT;
break;
#ifdef ANONOPS
case 'a':
if(ConfigChannel.use_anonops)
mode.mode |= MODE_HIDEOPS;
mode.mode |= MODE_HIDEOPS;
break;
#endif
case 'k':
strlcpy(mode.key, parv[4 + args], KEYLEN);
args++;
@ -207,7 +200,7 @@ static void ms_sjoin(struct Client *client_p,
/* vchans are encoded as "##mainchanname_timestamp" */
#ifdef VCHANS
if ( (parv[2][1] == '#') && (ConfigChannel.use_vchans) )
if (parv[2][1] == '#')
{
char *subp;
@ -336,14 +329,11 @@ static void ms_sjoin(struct Client *client_p,
strcpy(mode.key, oldmode->key);
}
#ifdef ANONOPS
if (mode.mode & MODE_HIDEOPS)
hide_or_not = ONLY_CHANOPS_HALFOPS;
else
#endif
hide_or_not = ALL_MEMBERS;
#ifdef ANONOPS
if ((MODE_HIDEOPS & mode.mode) && !(MODE_HIDEOPS & oldmode->mode))
sync_channel_oplists(chptr, MODE_DEL);
@ -351,7 +341,6 @@ static void ms_sjoin(struct Client *client_p,
if (keep_our_modes)
if (!(MODE_HIDEOPS & mode.mode) && (MODE_HIDEOPS & oldmode->mode))
sync_channel_oplists(chptr, MODE_ADD);
#endif
set_final_mode(&mode,oldmode);
chptr->mode = mode;
@ -414,9 +403,7 @@ static void ms_sjoin(struct Client *client_p,
*mbuf++ = '+';
#ifdef HALFOPS
hops = sjbuf_hops;
#endif
nhops = sjbuf_nhops;
s = parv[args+4];
@ -448,9 +435,7 @@ static void ms_sjoin(struct Client *client_p,
fl |= MODE_CHANOP;
if (keep_new_modes)
{
#ifdef HALFOPS
*hops++ = *s;
#endif
*nhops++ = *s;
num_prefix++;
}
@ -462,9 +447,7 @@ static void ms_sjoin(struct Client *client_p,
fl |= MODE_VOICE;
if (keep_new_modes)
{
#ifdef HALFOPS
*hops++ = *s;
#endif
*nhops++ = *s;
num_prefix++;
}
@ -473,16 +456,10 @@ static void ms_sjoin(struct Client *client_p,
}
else if (*s == '%')
{
#ifdef HALFOPS
fl |= MODE_HALFOP;
#else
fl |= MODE_CHANOP;
#endif
if (keep_new_modes)
{
#ifdef HALFOPS
*hops++ = *s;
#endif
*nhops++ = '@';
num_prefix++;
}
@ -501,10 +478,8 @@ static void ms_sjoin(struct Client *client_p,
sendto_one(source_p, form_str(ERR_NOSUCHNICK), me.name,
source_p->name, s);
#ifdef HALFOPS
hops -= num_prefix;
*hops = '\0';
#endif
nhops -= num_prefix;
*nhops = '\0';
@ -513,10 +488,8 @@ static void ms_sjoin(struct Client *client_p,
}
/* copy the nick to the two buffers */
#ifdef HALFOPS
hops += ircsprintf(hops, "%s ", s);
assert((hops - sjbuf_hops) < sizeof(sjbuf_hops));
#endif
nhops += ircsprintf(nhops, "%s ", s);
assert((nhops-sjbuf_nhops) < sizeof(sjbuf_nhops));
@ -629,13 +602,11 @@ static void ms_sjoin(struct Client *client_p,
*mbuf++ = 'v';
para[pargs++] = s;
}
#ifdef HALFOPS
else if (fl & MODE_HALFOP)
{
*mbuf++ = 'h';
para[pargs++] = s;
}
#endif
if (pargs >= MAXMODEPARAMS)
{
@ -707,11 +678,9 @@ nextnick:
if (!parv[4+args][0])
return;
#ifdef HALFOPS
if (IsCapable(target_p, CAP_HOPS))
sendto_one(target_p, "%s%s", buf, sjbuf_hops);
else
#endif
sendto_one(target_p, "%s%s", buf, sjbuf_nhops);
}
}
@ -737,9 +706,7 @@ struct mode_letter flags[] = {
{ MODE_MODERATED, 'm' },
{ MODE_INVITEONLY, 'i' },
{ MODE_PRIVATE, 'p' },
#ifdef ANONOPS
{ MODE_HIDEOPS, 'a' },
#endif
{ 0, 0 }
};
@ -847,20 +814,9 @@ static void remove_our_modes( int hide_or_not,
dlinkMoveList(&chptr->locchanops, &chptr->locpeons);
dlinkMoveList(&chptr->locvoiced, &chptr->locpeons);
#ifdef REQUIRE_OANDV
remove_a_mode(hide_or_not, chptr, top_chptr, source_p,
&chptr->chanops_voiced, 'o');
remove_a_mode(hide_or_not, chptr, top_chptr, source_p,
&chptr->chanops_voiced, 'v');
dlinkMoveList(&chptr->chanops_voiced, &chptr->peons);
dlinkMoveList(&chptr->locchanops_voiced, &chptr->locpeons);
#endif
#ifdef HALFOPS
remove_a_mode(hide_or_not, chptr, top_chptr, source_p, &chptr->halfops, 'h');
dlinkMoveList(&chptr->halfops, &chptr->peons);
dlinkMoveList(&chptr->lochalfops, &chptr->locpeons);
#endif
}

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: m_cjoin.c,v 1.2 2002/08/13 14:45:11 fishwaldo Exp $
* $Id: m_cjoin.c,v 1.3 2002/08/16 12:05:36 fishwaldo Exp $
*/
#include "stdinc.h"
@ -69,7 +69,7 @@ _moddeinit(void)
#endif
}
const char *_version = "$Revision: 1.2 $";
const char *_version = "$Revision: 1.3 $";
#endif /* STATIC_MODULES */
#ifdef VCHANS
@ -97,13 +97,6 @@ static void m_cjoin(struct Client *client_p,
return;
}
if(ConfigChannel.use_vchans == 0)
{
sendto_one(source_p, form_str(ERR_VCHANDISABLED),
me.name, parv[0]);
return;
}
if (ConfigChannel.vchans_oper_only && !IsOper(source_p))
{
sendto_one(source_p, form_str(ERR_NOPRIVILEGES),

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: m_info.c,v 1.2 2002/08/13 14:45:11 fishwaldo Exp $
* $Id: m_info.c,v 1.3 2002/08/16 12:05:36 fishwaldo Exp $
*/
#include "stdinc.h"
@ -69,7 +69,7 @@ _moddeinit(void)
hook_del_event("doing_info");
mod_del_cmd(&info_msgtab);
}
const char *_version = "$Revision: 1.2 $";
const char *_version = "$Revision: 1.3 $";
#endif
/*
@ -396,42 +396,6 @@ static struct InfoStruct info_table[] =
&ConfigChannel.quiet_on_ban,
"Banned users may not send text to a channel"
},
{
"use_anonops",
OUTPUT_BOOLEAN_YN,
&ConfigChannel.use_anonops,
"Enable chanmode +a (anonymous ops)",
},
{
"use_except",
OUTPUT_BOOLEAN_YN,
&ConfigChannel.use_except,
"Enable chanmode +e (ban exceptions)",
},
{
"use_halfops",
OUTPUT_BOOLEAN_YN,
&ConfigChannel.use_halfops,
"Enable chanmode +h (halfops)",
},
{
"use_invex",
OUTPUT_BOOLEAN_YN,
&ConfigChannel.use_invex,
"Enable chanmode +I (invite exceptions)",
},
{
"use_knock",
OUTPUT_BOOLEAN_YN,
&ConfigChannel.use_knock,
"Enable /KNOCK",
},
{
"use_vchans",
OUTPUT_BOOLEAN_YN,
&ConfigChannel.use_vchans,
"Enabled vchans",
},
{
"vchans_oper_only",
OUTPUT_BOOLEAN_YN,

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: m_join.c,v 1.3 2002/08/14 16:52:02 fishwaldo Exp $
* $Id: m_join.c,v 1.4 2002/08/16 12:05:36 fishwaldo Exp $
*/
#include "stdinc.h"
@ -65,7 +65,7 @@ _moddeinit(void)
{
mod_del_cmd(&join_msgtab);
}
const char *_version = "$Revision: 1.3 $";
const char *_version = "$Revision: 1.4 $";
#endif
static void do_join_0(struct Client *client_p, struct Client *source_p);
@ -188,7 +188,10 @@ m_join(struct Client *client_p,
/* look for the channel */
if((chptr = hash_find_channel(name)) != NULL)
{
if(splitmode && (*name != '&') && ConfigChannel.no_join_on_split)
if(IsMember(source_p, chptr))
return;
if(splitmode && !IsOper(source_p) && (*name != '&') &&
ConfigChannel.no_join_on_split)
{
sendto_one(source_p, form_str(ERR_UNAVAILRESOURCE),
me.name, source_p->name, name);
@ -222,7 +225,7 @@ m_join(struct Client *client_p,
}
else
{
if(splitmode && (*name != '&') &&
if(splitmode && !IsOper(source_p) && (*name != '&') &&
(ConfigChannel.no_create_on_split || ConfigChannel.no_join_on_split))
{
sendto_one(source_p, form_str(ERR_UNAVAILRESOURCE),
@ -259,18 +262,13 @@ m_join(struct Client *client_p,
if(flags == 0) /* if channel doesn't exist, don't penalize */
successful_join_count++;
if(!chptr) /* If I already have a chptr, no point doing this */
if(chptr == NULL) /* If I already have a chptr, no point doing this */
{
chptr = get_or_create_channel(source_p, name, NULL);
root_chptr = chptr;
}
if(chptr)
{
if (IsMember(source_p, chptr)) /* already a member, ignore this */
continue;
}
else
if(chptr == NULL)
{
sendto_one(source_p, form_str(ERR_UNAVAILRESOURCE),
me.name, parv[0], name);

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: m_knock.c,v 1.2 2002/08/13 14:45:11 fishwaldo Exp $
* $Id: m_knock.c,v 1.3 2002/08/16 12:05:36 fishwaldo Exp $
*/
#include "stdinc.h"
@ -81,7 +81,7 @@ _moddeinit(void)
mod_del_cmd(&knockll_msgtab);
}
const char *_version = "$Revision: 1.2 $";
const char *_version = "$Revision: 1.3 $";
#endif
/* m_knock
@ -109,13 +109,6 @@ static void m_knock(struct Client *client_p,
{
char *sockhost = NULL;
if((ConfigChannel.use_knock == 0) && MyClient(source_p))
{
sendto_one(source_p, form_str(ERR_KNOCKDISABLED),
me.name, source_p->name);
return;
}
/* a remote KNOCKLL request, check we're capable of handling it.. */
if(!MyConnect(source_p))
{
@ -411,7 +404,6 @@ static void send_knock(struct Client *client_p, struct Client *source_p,
if(source_p->user != NULL)
{
if(ConfigChannel.use_knock)
sendto_channel_local(ONLY_CHANOPS_HALFOPS,
chptr,
form_str(RPL_KNOCK),
@ -481,7 +473,7 @@ static int check_banned_knock(struct Channel *chptr, struct Client *who,
actualBan = NULL;
}
if ((actualBan != NULL) && ConfigChannel.use_except)
if (actualBan != NULL)
{
for (except = chptr->exceptlist.head; except; except = except->next)
{

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: m_version.c,v 1.2 2002/08/13 14:45:12 fishwaldo Exp $
* $Id: m_version.c,v 1.3 2002/08/16 12:05:36 fishwaldo Exp $
*/
#include <stdinc.h>
@ -59,7 +59,7 @@ _moddeinit(void)
mod_del_cmd(&version_msgtab);
}
const char *_version = "$Revision: 1.2 $";
const char *_version = "$Revision: 1.3 $";
#endif
/*
* m_version - VERSION command handler
@ -154,9 +154,6 @@ static char* confopts(struct Client *source_p)
*p++ = 'D';
#endif
if(ConfigChannel.use_except)
*p++ = 'e';
if (ConfigFileEntry.glines)
*p++ = 'g';
*p++ = 'G';
@ -168,11 +165,6 @@ static char* confopts(struct Client *source_p)
*p++ = 'H';
}
if(ConfigChannel.use_invex)
*p++ = 'I';
if(ConfigChannel.use_knock)
*p++ = 'K';
*p++ = 'M';

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: m_who.c,v 1.3 2002/08/14 16:52:02 fishwaldo Exp $
* $Id: m_who.c,v 1.4 2002/08/16 12:05:36 fishwaldo Exp $
*/
#include "stdinc.h"
#include "tools.h"
@ -61,7 +61,7 @@ _moddeinit(void)
{
mod_del_cmd(&who_msgtab);
}
const char *_version = "$Revision: 1.3 $";
const char *_version = "$Revision: 1.4 $";
#endif
static void do_who_on_channel(struct Client *source_p,
struct Channel *chptr, char *real_name,
@ -69,12 +69,7 @@ static void do_who_on_channel(struct Client *source_p,
static void do_who_list(struct Client *source_p, struct Channel *chptr,
dlink_list *peons_list, dlink_list *chanops_list,
#ifdef REQUIRE_OANDV
dlink_list *chanops_voiced_list,
#endif
#ifdef HALFOPS
dlink_list *halfops_list,
#endif
dlink_list *chanadmins_list,
dlink_list *voiced_list,
char *chanop_flag,
@ -251,10 +246,8 @@ static void m_who(struct Client *client_p,
if (is_chan_op(chptr,target_p))
do_who(source_p, target_p, chname, flags[0]);
#ifdef HALFOPS
else if(is_half_op(chptr,target_p))
do_who(source_p, target_p, chname, flags[1]);
#endif
else if(is_voiced(chptr,target_p))
do_who(source_p, target_p, chname, flags[2]);
else if(is_chan_admin(chptr, target_p))
@ -354,12 +347,7 @@ static void who_global(struct Client *source_p,char *mask, int server_oper)
{
chptr = lp->data;
who_common_channel(source_p,chptr->chanops,mask,server_oper,&maxmatches);
#ifdef REQUIRE_OANDV
who_common_channel(source_p,chptr->chanops_voiced,mask,server_oper,&maxmatches);
#endif
#ifdef HALFOPS
who_common_channel(source_p,chptr->halfops,mask,server_oper,&maxmatches);
#endif
who_common_channel(source_p,chptr->voiced,mask,server_oper,&maxmatches);
who_common_channel(source_p,chptr->peons,mask,server_oper,&maxmatches);
}
@ -423,12 +411,7 @@ static void do_who_on_channel(struct Client *source_p,
do_who_list(source_p, chptr,
&chptr->peons,
&chptr->chanops,
#ifdef REQUIRE_OANDV
&chptr->chanops_voiced,
#endif
#ifdef HALFOPS
&chptr->halfops,
#endif
&chptr->chanadmins,
&chptr->voiced,
flags[0],
@ -442,12 +425,7 @@ static void do_who_on_channel(struct Client *source_p,
static void do_who_list(struct Client *source_p, struct Channel *chptr,
dlink_list *peons_list,
dlink_list *chanops_list,
#ifdef REQUIRE_OANDV
dlink_list *chanops_voiced_list,
#endif
#ifdef HALFOPS
dlink_list *halfops_list,
#endif
dlink_list *chanadmins_list,
dlink_list *voiced_list,
char *chanop_flag,
@ -458,28 +436,17 @@ static void do_who_list(struct Client *source_p, struct Channel *chptr,
{
struct Client *target_p;
#ifdef ANONOPS
dlink_node *chanops_ptr;
dlink_node *peons_ptr;
dlink_node *voiced_ptr;
#ifdef REQUIRE_OANDV
dlink_node *chanops_voiced_ptr;
#endif
#ifdef HALFOPS
dlink_node *halfops_ptr;
#endif
dlink_node *chanadmins_ptr;
int done=0;
peons_ptr = peons_list->head;
chanops_ptr = chanops_list->head;
voiced_ptr = voiced_list->head;
#ifdef HALFOPS
halfops_ptr = halfops_list->head;
#endif
#ifdef REQUIRE_OANDV
chanops_voiced_ptr = chanops_voiced_list->head;
#endif
chanadmins_ptr = chanadmins_list->head;
while (done != NUMLISTS)
@ -518,7 +485,6 @@ ilog(1, "chanadmin1 %s", admins_flag);
else
done++;
#ifdef HALFOPS
if(halfops_ptr != NULL)
{
target_p = halfops_ptr->data;
@ -529,9 +495,6 @@ ilog(1, "chanadmin1 %s", admins_flag);
}
else
done++;
#else
done++;
#endif
if(voiced_ptr != NULL)
{
@ -550,65 +513,8 @@ ilog(1, "chanadmin1 %s", admins_flag);
else
done++;
#ifdef REQUIRE_OANDV
if(chanops_voiced_ptr != NULL)
{
target_p = chanops_voiced_ptr->data;
if(member || !IsInvisible(target_p))
do_who(source_p, target_p, chname, chanop_flag);
chanops_voiced_ptr = chanops_voiced_ptr->next;
}
else
done++;
#endif
}
#else /* ANONOPS */
dlink_node *ptr;
for(ptr = peons_list->head; ptr; ptr = ptr->next)
{
target_p = ptr->data;
if(member || !IsInvisible(target_p))
do_who(source_p, target_p, chname, "");
}
for(ptr = voiced_list->head; ptr; ptr = ptr->next)
{
target_p = ptr->data;
if(member || !IsInvisible(target_p))
do_who(source_p, target_p, chname, voiced_flag);
}
#ifdef REQUIRE_OANDV
for(ptr = chanops_voiced_list->head; ptr; ptr = ptr->next)
{
target_p = ptr->data;
if(member || !IsInvisible(target_p))
do_who(source_p, target_p, chname, chanop_flag);
}
#endif
for(ptr = chanadmins_list->head; ptr; ptr = ptr->next)
{
target_p = ptr->data;
ilog(1, "doadmin %s", admins_flag);
if(member || !IsInvisible(target_p))
do_who(source_p, target_p, chname, admins_flag);
}
for(ptr = chanops_list->head; ptr; ptr = ptr->next)
{
target_p = ptr->data;
if(member || !IsInvisible(target_p))
do_who(source_p, target_p, chname, chanop_flag);
}
#endif
}
/*
* do_who
*
@ -630,7 +536,6 @@ static void do_who(struct Client *source_p,
target_p->user->away ? 'G' : 'H',
IsOper(target_p) ? "*" : "", op_flags );
#ifdef ANONOPS
if(ConfigServerHide.hide_servers)
{
sendto_one(source_p, form_str(RPL_WHOREPLY), me.name, source_p->name,
@ -641,7 +546,6 @@ static void do_who(struct Client *source_p,
status, 0, target_p->info);
}
else
#endif
{
sendto_one(source_p, form_str(RPL_WHOREPLY), me.name, source_p->name,
(chname) ? (chname) : "*",

View file

@ -25,7 +25,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: balloc.c,v 1.2 2002/08/13 14:45:12 fishwaldo Exp $
* $Id: balloc.c,v 1.3 2002/08/16 12:05:37 fishwaldo Exp $
*/
/*
@ -370,7 +370,7 @@ BlockHeapAlloc(BlockHeap * bh)
assert(bh != NULL);
if (bh == NULL)
{
return(NULL);
outofmemory();
}
if (bh->freeElems == 0)
@ -405,7 +405,7 @@ BlockHeapAlloc(BlockHeap * bh)
}
}
assert(0 == 1);
return(NULL); /* If you get here, something bad happened ! */
outofmemory();
}

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: channel.c,v 1.3 2002/08/14 16:52:02 fishwaldo Exp $
* $Id: channel.c,v 1.4 2002/08/16 12:05:37 fishwaldo Exp $
*/
#include "stdinc.h"
@ -125,13 +125,11 @@ add_user_to_channel(struct Channel *chptr, struct Client *who, int flags)
dlinkAdd(who, lptr, &chptr->locchanops);
break;
#ifdef HALFOPS
case MODE_HALFOP:
dlinkAdd(who, ptr, &chptr->halfops);
if (MyClient(who))
dlinkAdd(who, lptr, &chptr->lochalfops);
break;
#endif
case MODE_VOICE:
dlinkAdd(who, ptr, &chptr->voiced);
@ -139,19 +137,11 @@ add_user_to_channel(struct Channel *chptr, struct Client *who, int flags)
dlinkAdd(who, lptr, &chptr->locvoiced);
break;
#ifdef REQUIRE_OANDV
case MODE_CHANOP|MODE_VOICE:
dlinkAdd(who, ptr, &chptr->chanops_voiced);
if (MyClient(who))
dlinkAdd(who, lptr, &chptr->locchanops_voiced);
break;
#else
case MODE_CHANOP|MODE_VOICE:
dlinkAdd(who, ptr, &chptr->chanops);
if (MyClient(who))
dlinkAdd(who, lptr, &chptr->locchanops);
break;
#endif
case MODE_ADMIN:
dlinkAdd(who, ptr, &chptr->chanadmins);
if (MyClient(who))
@ -204,16 +194,10 @@ remove_user_from_channel(struct Channel *chptr, struct Client *who)
dlinkDelete(ptr, &chptr->peons);
else if ((ptr = find_user_link(&chptr->chanops, who)))
dlinkDelete(ptr, &chptr->chanops);
#ifdef REQUIRE_OANDV
else if ((ptr = find_user_link(&chptr->chanops_voiced, who)))
dlinkDelete(ptr, &chptr->chanops_voiced);
#endif
else if ((ptr = find_user_link(&chptr->voiced, who)))
dlinkDelete(ptr, &chptr->voiced);
#ifdef HALFOPS
else if ((ptr = find_user_link(&chptr->halfops, who)))
dlinkDelete(ptr, &chptr->halfops);
#endif
else if ((ptr = find_user_link(&chptr->chanadmins, who)))
dlinkDelete(ptr, &chptr->chanadmins);
else {
@ -236,14 +220,8 @@ remove_user_from_channel(struct Channel *chptr, struct Client *who)
dlinkDelete(ptr, &chptr->locchanops);
else if ((ptr = find_user_link(&chptr->locvoiced, who)))
dlinkDelete(ptr, &chptr->locvoiced);
#ifdef HALFOPS
else if ((ptr = find_user_link(&chptr->lochalfops, who)))
dlinkDelete(ptr, &chptr->lochalfops);
#endif
#ifdef REQUIRE_OANDV
else if ((ptr = find_user_link(&chptr->locchanops_voiced, who)))
dlinkDelete(ptr, &chptr->locchanops_voiced);
#endif
else if ((ptr = find_user_link(&chptr->locchanadmins, who)))
dlinkDelete(ptr, &chptr->locchanadmins);
else
@ -365,21 +343,8 @@ send_channel_modes(struct Client *client_p, struct Channel *chptr)
send_members(client_p, modebuf, parabuf, chptr, &chptr->chanops, "@");
#ifdef REQUIRE_OANDV
send_members(client_p, modebuf, parabuf, chptr, &chptr->chanops_voiced, "@+");
#endif
#ifdef HALFOPS
if (IsCapable(client_p, CAP_HOPS))
{
send_members(client_p, modebuf, parabuf, chptr, &chptr->halfops, "%");
}
else
{
/* Ok, halfops can still generate a kick, they'll just looked opped */
send_members(client_p, modebuf, parabuf, chptr, &chptr->halfops, "@");
}
#endif
send_members(client_p, modebuf, parabuf, chptr, &chptr->halfops, "%");
send_members(client_p, modebuf, parabuf, chptr, &chptr->chanadmins, "*");
send_members(client_p, modebuf, parabuf, chptr, &chptr->voiced, "+");
send_members(client_p, modebuf, parabuf, chptr, &chptr->peons, "");
@ -653,25 +618,15 @@ destroy_channel(struct Channel *chptr)
*/
delete_members(chptr, &chptr->chanadmins);
delete_members(chptr, &chptr->chanops);
#ifdef REQUIRE_OANDV
delete_members(chptr, &chptr->chanops_voiced);
#endif
delete_members(chptr, &chptr->voiced);
delete_members(chptr, &chptr->peons);
#ifdef HALFOPS
delete_members(chptr, &chptr->halfops);
#endif
delete_members(chptr, &chptr->locchanadmins);
delete_members(chptr, &chptr->locchanops);
#ifdef REQUIRE_OANDV
delete_members(chptr, &chptr->locchanops_voiced);
#endif
delete_members(chptr, &chptr->locvoiced);
delete_members(chptr, &chptr->locpeons);
#ifdef HALFOPS
delete_members(chptr, &chptr->lochalfops);
#endif
while ((ptr = chptr->invites.head))
del_invite(chptr, ptr->data);
@ -775,7 +730,6 @@ void
channel_member_names(struct Client *source_p,
struct Channel *chptr,
char *name_of_channel, int show_eon)
#ifdef ANONOPS
{
int mlen;
int sublists_done = 0;
@ -802,18 +756,10 @@ channel_member_names(struct Client *source_p,
t = lbuf + cur_len;
set_channel_mode_flags(show_flags, chptr, source_p);
members_ptr[0] = chptr->chanops.head;
#ifdef HALFOPS
members_ptr[1] = chptr->halfops.head;
#else
members_ptr[1] = NULL;
#endif
members_ptr[2] = chptr->voiced.head;
members_ptr[3] = chptr->peons.head;
#ifdef REQUIRE_OANDV
members_ptr[4] = chptr->chanops_voiced.head;
#else
members_ptr[4] = NULL;
#endif
members_ptr[5] = chptr->chanadmins.head;
is_member = IsMember(source_p, chptr);
@ -841,9 +787,6 @@ channel_member_names(struct Client *source_p,
reply_to_send = YES;
if (who == source_p && is_voiced(chptr, who)
#ifdef REQUIRE_OANDV
&& !is_chan_op(chptr, who)
#endif
&& chptr->mode.mode & MODE_HIDEOPS)
ircsprintf(t, "+%s ", who->name);
else
@ -876,88 +819,6 @@ channel_member_names(struct Client *source_p,
sendto_one(source_p, form_str(RPL_ENDOFNAMES), me.name,
source_p->name, name_of_channel);
}
#else
{
struct Client *target_p;
dlink_node *ptr_list[NUMLISTS];
dlink_node *ptr;
char ptr_flags[NUMLISTS][2];
char lbuf[BUFSIZE];
char *t;
int mlen;
int tlen;
int cur_len;
int reply_to_send = NO;
int is_member;
int i;
if(ShowChannel(source_p, chptr))
{
ptr_list[0] = chptr->chanops.head;
#ifdef HALFOPS
ptr_list[1] = chptr->halfops.head;
#else
ptr_list[1] = NULL;
#endif
ptr_list[2] = chptr->voiced.head;
ptr_list[3] = chptr->peons.head;
#ifdef REQUIRE_OANDV
ptr_list[4] = chptr->chanops_voiced.head;
#else
ptr_list[4] = NULL;
#endif
ptr_list[5] = chptr->chanadmins.head;
set_channel_mode_flags(ptr_flags, chptr, source_p);
is_member = IsMember(source_p, chptr);
ircsprintf(lbuf, form_str(RPL_NAMREPLY),
me.name, source_p->name, channel_pub_or_secret(chptr));
mlen = strlen(lbuf);
ircsprintf(lbuf + mlen, " %s :", name_of_channel);
cur_len = mlen = strlen(lbuf);
t = lbuf + cur_len;
for(i = 0; i < NUMLISTS; i++)
{
for(ptr = ptr_list[i]; ptr; ptr = ptr->next)
{
target_p = ptr->data;
if(IsInvisible(target_p) && !is_member)
continue;
reply_to_send = YES;
ircsprintf(t, "%s%s ", ptr_flags[i], target_p->name);
tlen = strlen(t);
cur_len += tlen;
t += tlen;
if ((cur_len + NICKLEN) > (BUFSIZE - 3))
{
sendto_one(source_p, "%s", lbuf);
reply_to_send = NO;
cur_len = mlen;
t = lbuf + mlen;
}
}
}
if(reply_to_send)
sendto_one(source_p, "%s", lbuf);
}
if(show_eon)
sendto_one(source_p, form_str(RPL_ENDOFNAMES), me.name,
source_p->name, name_of_channel);
}
#endif /* ANONOPS */
/*
@ -1063,16 +924,10 @@ channel_chanop_or_voice(struct Channel *chptr, struct Client *target_p)
{
if (find_user_link(&chptr->chanops, target_p))
return ("@");
#ifdef HALFOPS
else if (find_user_link(&chptr->halfops, target_p))
return ("%");
#endif
else if (find_user_link(&chptr->voiced, target_p))
return ("+");
#ifdef REQUIRE_OANDV
else if (find_user_link(&chptr->chanops_voiced, target_p))
return ("@+");
#endif
else if (find_user_link(&chptr->chanadmins, target_p))
return ("*");
return ("");
@ -1141,7 +996,7 @@ check_banned(struct Channel *chptr, struct Client *who, char *s, char *s2, char
actualBan = NULL;
}
if ((actualBan != NULL) && ConfigChannel.use_except)
if (actualBan != NULL)
{
for (except = chptr->exceptlist.head; except; except = except->next)
{
@ -1195,8 +1050,6 @@ can_join(struct Client *source_p, struct Channel *chptr, char *key)
break;
if (!lp)
{
if (!ConfigChannel.use_invex)
return (ERR_INVITEONLYCHAN);
for (ptr = chptr->invexlist.head; ptr; ptr = ptr->next)
{
invex = ptr->data;
@ -1221,8 +1074,6 @@ can_join(struct Client *source_p, struct Channel *chptr, char *key)
}
if (!lp)
{
if (!ConfigChannel.use_invex)
return (ERR_NOPRIVILEGES);
for (ptr = chptr->invexlist.head; ptr; ptr = ptr->next)
{
invex = ptr->data;
@ -1256,10 +1107,6 @@ is_chan_op(struct Channel *chptr, struct Client *who)
{
if (find_user_link(&chptr->chanops, who) != NULL)
return 1;
#ifdef REQUIRE_OANDV
if (find_user_link(&chptr->chanops_voiced, who) != NULL)
return 1;
#endif
}
return 0;
}
@ -1299,16 +1146,10 @@ is_any_op(struct Channel *chptr, struct Client *who)
{
if (find_user_link(&chptr->chanops, who) != NULL)
return 1;
#ifdef HALFOPS
if (find_user_link(&chptr->halfops, who) != NULL)
return 1;
#endif
if (find_user_link(&chptr->chanadmins, who) != NULL)
return 1;
#ifdef REQUIRE_OANDV
if (find_user_link(&chptr->chanops_voiced, who) != NULL)
return 1;
#endif
}
return 0;
}
@ -1321,7 +1162,6 @@ is_any_op(struct Channel *chptr, struct Client *who)
* output - yes if anyop no if not
* side effects -
*/
#ifdef HALFOPS
int
is_half_op(struct Channel *chptr, struct Client *who)
{
@ -1333,7 +1173,6 @@ is_half_op(struct Channel *chptr, struct Client *who)
return 0;
}
#endif
/*
* is_voiced
@ -1350,10 +1189,6 @@ is_voiced(struct Channel *chptr, struct Client *who)
{
if (find_user_link(&chptr->voiced, who) != NULL)
return 1;
#ifdef REQUIRE_OANDV
if (find_user_link(&chptr->chanops_voiced, who) != NULL)
return 1;
#endif
}
return 0;
}

File diff suppressed because it is too large Load diff

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: client.c,v 1.4 2002/08/14 16:52:02 fishwaldo Exp $
* $Id: client.c,v 1.5 2002/08/16 12:05:37 fishwaldo Exp $
*/
#include "stdinc.h"
#include "config.h"
@ -124,6 +124,8 @@ struct Client* make_client(struct Client* from)
dlink_node *m;
client_p = BlockHeapAlloc(client_heap);
if(client_p == NULL)
return NULL;
memset(client_p, 0, sizeof(struct Client));
if (from == NULL)
{
@ -780,7 +782,7 @@ find_chasing(struct Client *source_p, char *user, int *chasing)
{
sendto_one(source_p, form_str(ERR_NOSUCHNICK),
me.name, source_p->name, user);
return ((struct Client *)NULL);
return (NULL);
}
if (chasing)
*chasing = 1;
@ -1126,10 +1128,10 @@ static void remove_dependents(struct Client* client_p,
* comstud, since m_squit already does the notification.
*/
if ((aconf = to->serv->sconf))
strlcpy(myname, my_name_for_link(me.name, aconf), HOSTLEN);
if ((aconf = to->serv->sconf) != NULL)
strlcpy(myname, my_name_for_link(me.name, aconf), HOSTLEN + 1);
else
strlcpy(myname, me.name, HOSTLEN);
strlcpy(myname, me.name, HOSTLEN + 1);
recurse_send_quits(client_p, source_p, to, comment1, myname);
}
@ -1157,16 +1159,7 @@ void dead_link(struct Client *client_p)
else
notice = "Write error: connection closed";
/* Mark it dead before sending out any notices, just in case this ever goes
* global */
Debug((DEBUG_ERROR, "Closing link to %s: %s", get_client_name(client_p, HIDE_IP),
notice));
assert(dlinkFind(&abort_list, client_p) == NULL);
m = make_dlink_node();
dlinkAdd(client_p, m, &abort_list);
SetDead(client_p); /* You are dead my friend */
if (!IsPerson(client_p) && !IsUnknown(client_p) && !IsClosing(client_p))
{
sendto_realops_flags(FLAGS_ALL, L_ADMIN,
@ -1176,6 +1169,11 @@ void dead_link(struct Client *client_p)
"Closing link to %s: %s",
get_client_name(client_p, MASK_IP), notice);
}
Debug((DEBUG_ERROR, "Closing link to %s: %s", get_client_name(client_p, HIDE_IP), notice));
assert(dlinkFind(&abort_list, client_p) == NULL);
m = make_dlink_node();
dlinkAdd(client_p, m, &abort_list);
SetDead(client_p); /* You are dead my friend */
}
void exit_aborted_clients(void)
@ -1326,7 +1324,12 @@ int exit_client(
sendto_realops_flags(FLAGS_CCONN, L_ALL,
"Client exiting: %s (%s@%s) [%s] [%s]",
source_p->name, source_p->username, source_p->host,
comment, source_p->localClient->sockhost);
comment,
#ifdef HIDE_SPOOF_IPS
"255.255.255.255");
#else
source_p->localClient->sockhost);
#endif
log_user_exit(source_p);

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: hash.c,v 1.2 2002/08/13 14:45:12 fishwaldo Exp $
* $Id: hash.c,v 1.3 2002/08/16 12:05:37 fishwaldo Exp $
*/
#include "stdinc.h"
@ -577,7 +577,7 @@ hash_find_masked_server(const char* name)
/*
* copy the damn thing and be done with it
*/
strlcpy(buf, name, HOSTLEN);
strlcpy(buf, name, HOSTLEN + 1);
while ((s = strchr(p, '.')) != 0)
{

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: hostmask.c,v 1.2 2002/08/13 14:45:12 fishwaldo Exp $
* $Id: hostmask.c,v 1.3 2002/08/16 12:05:37 fishwaldo Exp $
*/
#include "stdinc.h"
@ -38,12 +38,14 @@ static unsigned long hash_ipv6(struct irc_inaddr *, int);
static int try_parse_v4_netmask(const char *, struct irc_inaddr *, int *);
static unsigned long hash_ipv4(struct irc_inaddr *, int);
#define DigitParse(ch) if (ch >= '0' && ch <= '9') \
#define DigitParse(ch) do { \
if (ch >= '0' && ch <= '9') \
ch = ch - '0'; \
else if (ch >= 'A' && ch <= 'F') \
ch = ch - 'A' + '0'; \
ch = ch - 'A' + 10; \
else if (ch >= 'a' && ch <= 'f') \
ch = ch - 'a' + '0';
ch = ch - 'a' + 10; \
} while(0);
/* The mask parser/type determination code... */
@ -54,6 +56,10 @@ static unsigned long hash_ipv4(struct irc_inaddr *, int);
* Side effects: None
* Comments: Called from parse_netmask
*/
/* Fixed so ::/0 (any IPv6 address) is valid
Also a bug in DigitParse above.
-Gozem 2002-07-19 gozem@linux.nu
*/
#ifdef IPV6
static int
try_parse_v6_netmask(const char *text, struct irc_inaddr *addr, int *b)
@ -103,10 +109,8 @@ try_parse_v6_netmask(const char *text, struct irc_inaddr *addr, int *b)
d[dp] = d[dp] >> 4 * nyble;
dp++;
if (p > text && *(p - 1) == ':')
return HM_HOST;
bits = strtoul(p + 1, &after, 10);
if (bits == 0 || *after)
if (bits < 0 || *after)
return HM_HOST;
if (bits > dp * 4 && !(finsert >= 0 && bits <= 128))
return HM_HOST;
@ -120,8 +124,6 @@ try_parse_v6_netmask(const char *text, struct irc_inaddr *addr, int *b)
dp++;
if (finsert < 0 && bits == 0)
bits = dp * 16;
else if (bits == 0)
bits = 128;
/* How many words are missing? -A1kmm */
deficit = bits / 16 + ((bits % 16) ? 1 : 0) - dp;
/* Now fill in the gaps(from ::) in the copied table... -A1kmm */
@ -676,11 +678,11 @@ show_iline_prefix(struct Client *sptr, struct ConfItem *aconf, char *name)
*prefix_ptr++ = '%';
if (IsConfDoSpoofIp(aconf))
*prefix_ptr++ = '=';
if (IsOper(sptr) && IsConfExemptKline(aconf))
if (MyOper(sptr) && IsConfExemptKline(aconf))
*prefix_ptr++ = '^';
if (IsOper(sptr) && IsConfExemptLimits(aconf))
if (MyOper(sptr) && IsConfExemptLimits(aconf))
*prefix_ptr++ = '>';
if (IsOper(sptr) && IsConfIdlelined(aconf))
if (MyOper(sptr) && IsConfIdlelined(aconf))
*prefix_ptr++ = '<';
*prefix_ptr = '\0';
strncpy(prefix_ptr, name, USERLEN);
@ -707,11 +709,7 @@ report_auth(struct Client *client_p)
{
aconf = arec->aconf;
#ifndef HIDE_SPOOF_IPS
if (!IsOperAdmin(client_p) && IsConfDoSpoofIp(aconf))
#else
if(IsConfDoSpoofIp(aconf))
#endif
if (!MyOper(client_p) && IsConfDoSpoofIp(aconf))
continue;
get_printable_conf(aconf, &name, &host, &pass, &user, &port,
@ -723,6 +721,9 @@ report_auth(struct Client *client_p)
sendto_one(client_p, form_str(RPL_STATSILINE), me.name,
client_p->name, (IsConfRestricted(aconf)) ? 'i' : 'I', name,
show_iline_prefix(client_p, aconf, user),
#ifdef HIDE_SPOOF_IPS
IsConfDoSpoofIp(aconf) ? "255.255.255.255" :
#endif
host, port, classname);
}
}

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: ircd.c,v 1.2 2002/08/13 14:45:12 fishwaldo Exp $
* $Id: ircd.c,v 1.3 2002/08/16 12:05:37 fishwaldo Exp $
*/
#include "stdinc.h"
@ -364,8 +364,8 @@ static void initialize_global_set_options(void)
else
GlobalSetOptions.floodcount = 10;
split_users = ConfigChannel.default_split_server_count;
split_servers = ConfigChannel.default_split_user_count;
split_servers = ConfigChannel.default_split_server_count;
split_users = ConfigChannel.default_split_user_count;
if(split_users && split_servers && (ConfigChannel.no_create_on_split ||
ConfigChannel.no_join_on_split))
@ -408,16 +408,8 @@ static void initialize_message_files(void)
*/
static void initialize_server_capabs(void)
{
/* If halfops support is disabled, remove the capab from the list. */
if (ConfigChannel.use_halfops == 0)
{
default_server_capabs &= ~CAP_HOPS;
}
if(ConfigChannel.use_anonops == 0)
default_server_capabs &= ~CAP_AOPS;
default_server_capabs &= ~CAP_ZIP;
/* right now, we don't do anything - fish */
return;
}

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: ircd_lexer.l,v 1.2 2002/08/13 14:45:12 fishwaldo Exp $
* $Id: ircd_lexer.l,v 1.3 2002/08/16 12:05:37 fishwaldo Exp $
*/
%option case-insensitive
@ -56,11 +56,14 @@
int lineno=1;
char linebuf[IRCD_BUFSIZE];
char conffilebuf[IRCD_BUFSIZE];
int include_stack_ptr=0;
YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
int lineno_stack[MAX_INCLUDE_DEPTH];
FBFILE* inc_fbfile_in[MAX_INCLUDE_DEPTH];
char conffile_stack[MAX_INCLUDE_DEPTH][IRCD_BUFSIZE];
void ccomment(void);
void hashcomment(void);
void cinclude(void);
int ieof(void);
%}
@ -78,16 +81,53 @@ include \.include{ws}(\<.*\>|\".*\")
\n.* { strcpy(linebuf, yytext+1); lineno++; yyless(1); }
{ws} ;
{comment} ;
{comment} { hashcomment(); }
{digit}+ { yylval.number = atoi(yytext); return NUMBER; }
{qstring} { yylval.string = yytext+1;
if(yylval.string[yyleng-2] != '"')
ilog(L_ERROR, "Unterminated character string");
{qstring} { if(yytext[yyleng-2] == '\\')
{
yyless(yyleng-1); /* return last quote */
yymore(); /* append next string */
}
else
yylval.string[yyleng-2] = '\0'; /* remove close quote */
return QSTRING;
{
yylval.string = yytext+1;
if(yylval.string[yyleng-2] != '"')
ilog(L_ERROR, "Unterminated character string");
else
{
int i,j;
yylval.string[yyleng-2] = '\0'; /* remove close
* quote
*/
for (j=i=0 ;yylval.string[i] != '\0'; i++,j++)
{
if (yylval.string[i] != '\\')
{
yylval.string[j] = yylval.string[i];
}
else
{
i++;
if (yylval.string[i] == '\0') /* XXX
* should not
* happen
*/
{
ilog(L_ERROR,
"Unterminated character string");
break;
}
yylval.string[j] = yylval.string[i];
}
}
yylval.string[j] = '\0';
return QSTRING;
}
}
}
accept_password { return ACCEPT_PASSWORD; }
@ -361,6 +401,17 @@ void ccomment(void)
}
}
/* #-comment style, look for #include */
#define INCLUDE "#include"
void hashcomment(void)
{
if (strlen(yytext) < strlen(INCLUDE))
return;
if ( !strncasecmp(yytext, INCLUDE, strlen(INCLUDE)) )
yyerror("You probably meant '.include', skipping");
}
/* C-style .includes. This function will properly swap input conf buffers,
* and lineno -kre */
void cinclude(void)
@ -396,8 +447,10 @@ void cinclude(void)
lineno_stack[include_stack_ptr] = lineno;
lineno = 1;
inc_fbfile_in[include_stack_ptr] = conf_fbfile_in;
strlcpy(conffile_stack[include_stack_ptr], conffilebuf, IRCD_BUFSIZE);
include_stack[include_stack_ptr++] = YY_CURRENT_BUFFER;
conf_fbfile_in = tmp_fbfile_in;
sprintf(conffilebuf, "%s", c);
yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
}
}
@ -424,6 +477,7 @@ int ieof(void)
yy_delete_buffer(YY_CURRENT_BUFFER);
lineno = lineno_stack[include_stack_ptr];
conf_fbfile_in = inc_fbfile_in[include_stack_ptr];
strlcpy(conffilebuf, conffile_stack[include_stack_ptr], IRCD_BUFSIZE);
yy_switch_to_buffer(include_stack[include_stack_ptr]);
return 0;
}

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: ircd_parser.y,v 1.2 2002/08/13 14:45:12 fishwaldo Exp $
* $Id: ircd_parser.y,v 1.3 2002/08/16 12:05:37 fishwaldo Exp $
*/
%{
@ -285,8 +285,8 @@ int class_redirport_var;
%type <string> QSTRING
%type <number> NUMBER
%type <number> timespec
%type <number> sizespec
%type <number> timespec, timespec_
%type <number> sizespec, sizespec_
%%
conf:
@ -316,53 +316,38 @@ conf_item: admin_entry
;
timespec: NUMBER
= {
$$ = $1;
}
| NUMBER SECONDS
= {
$$ = $1;
}
| NUMBER MINUTES
= {
$$ = $1 * 60;
}
| NUMBER HOURS
= {
$$ = $1 * 60 * 60;
}
| NUMBER DAYS
= {
$$ = $1 * 60 * 60 * 24;
}
| NUMBER WEEKS
= {
$$ = $1 * 60 * 60 * 24 * 7;
}
| timespec timespec
= {
/* 2 years 3 days */
timespec_: { $$ = 0; } | timespec;
timespec: NUMBER timespec_
{
$$ = $1 + $2;
}
| NUMBER SECONDS timespec_
{
$$ = $1 + $3;
}
| NUMBER MINUTES timespec_
{
$$ = $1 * 60 + $3;
}
| NUMBER HOURS timespec_
{
$$ = $1 * 60 * 60 + $3;
}
| NUMBER DAYS timespec_
{
$$ = $1 * 60 * 60 * 24 + $3;
}
| NUMBER WEEKS timespec_
{
$$ = $1 * 60 * 60 * 24 * 7 + $3;
}
;
sizespec: NUMBER
= {
$$ = $1;
}
| NUMBER BYTES
= {
$$ = $1;
}
| NUMBER KBYTES
= {
$$ = $1 * 1024;
}
| NUMBER MBYTES
= {
$$ = $1 * 1024 * 1024;
}
sizespec_: { $$ = 0; } | sizespec;
sizespec: NUMBER sizespec_ { $$ = $1 + $2; }
| NUMBER BYTES sizespec_ { $$ = $1 + $3; }
| NUMBER KBYTES sizespec_ { $$ = $1 * 1024 + $3; }
| NUMBER MBYTES sizespec_ { $$ = $1 * 1024 * 1024 + $3; }
;
@ -2540,13 +2525,7 @@ channel_entry: CHANNEL
channel_items: channel_items channel_item |
channel_item;
channel_item: channel_use_except |
channel_use_halfops |
channel_use_invex |
channel_use_knock |
channel_use_vchans |
channel_use_anonops |
channel_vchans_oper_only |
channel_item: channel_vchans_oper_only |
channel_max_bans |
channel_knock_delay |
channel_knock_delay_channel |
@ -2559,105 +2538,6 @@ channel_item: channel_use_except |
channel_no_join_on_split |
error;
channel_use_except: USE_EXCEPT '=' TYES ';'
{
ConfigChannel.use_except = 1;
}
|
USE_EXCEPT '=' TNO ';'
{
ConfigChannel.use_except = 0;
} ;
channel_use_halfops: USE_HALFOPS '=' TYES ';'
{
#ifdef HALFOPS
/* Set to -1 on boot */
if (ConfigChannel.use_halfops == 0)
{
ilog(L_ERROR, "Ignoring config file entry 'use_halfops = yes' "
"-- can only be changed on boot");
break;
}
else
ConfigChannel.use_halfops = 1;
#endif
}
|
USE_HALFOPS '=' TNO ';'
{
/* Set to -1 on boot */
if (ConfigChannel.use_halfops == 1)
{
ilog(L_ERROR, "Ignoring config file entry 'use_halfops = no' "
"-- can only be changed on boot");
break;
}
else
ConfigChannel.use_halfops = 0;
};
channel_use_anonops: USE_ANONOPS '=' TYES ';'
{
#ifdef ANONOPS
if(ConfigChannel.use_anonops == 0)
{
ilog(L_ERROR, "Ignoring config file entry 'use_anonops = yes' "
"-- can only be changed on boot");
break;
}
else
ConfigChannel.use_anonops = 1;
#endif
}
|
USE_ANONOPS '=' TNO ';'
{
if(ConfigChannel.use_anonops == 1)
{
ilog(L_ERROR, "Ignoring config file entry 'use_anonops = no' "
"-- can only be changed on boot");
break;
}
else
ConfigChannel.use_anonops = 0;
} ;
channel_use_invex: USE_INVEX '=' TYES ';'
{
ConfigChannel.use_invex = 1;
}
|
USE_INVEX '=' TNO ';'
{
ConfigChannel.use_invex = 0;
} ;
channel_use_knock: USE_KNOCK '=' TYES ';'
{
ConfigChannel.use_knock = 1;
}
|
USE_KNOCK '=' TNO ';'
{
ConfigChannel.use_knock = 0;
} ;
channel_use_vchans: USE_VCHANS '=' TYES ';'
{
#ifdef VCHANS
ConfigChannel.use_vchans = 1;
#endif
}
|
USE_VCHANS '=' TNO ';'
{ ConfigChannel.use_vchans = 0; };
channel_vchans_oper_only: VCHANS_OPER_ONLY '=' TYES ';'
{ ConfigChannel.vchans_oper_only = 1; }

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: ircdauth.c,v 1.2 2002/08/13 14:45:12 fishwaldo Exp $
* $Id: ircdauth.c,v 1.3 2002/08/16 12:05:37 fishwaldo Exp $
*/
#include "stdinc.h"
@ -538,12 +538,12 @@ GoodAuth(int parc, char **parv)
* if ident failed, but the client's I: line specified
* no tilde character
*/
strlcpy(auth->client->username, parv[2], USERLEN);
strlcpy(auth->client->username, parv[2], USERLEN + 1);
/*
* Also use IAuth's hostname in case of SPOOF_FREEFORM
*/
strlcpy(auth->client->host, parv[3], HOSTLEN);
strlcpy(auth->client->host, parv[3], HOSTLEN + 1);
/*
* Register them

View file

@ -20,7 +20,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: linebuf.c,v 1.2 2002/08/13 14:45:12 fishwaldo Exp $
* $Id: linebuf.c,v 1.3 2002/08/16 12:05:37 fishwaldo Exp $
*/
#include "stdinc.h"
@ -102,8 +102,11 @@ linebuf_new_line(buf_head_t *bufhead)
dlink_node *node;
bufline = linebuf_allocate();
if(bufline == NULL)
return NULL;
++bufline_count;
node = make_dlink_node();
bufline->len = 0;
@ -170,6 +173,8 @@ linebuf_skip_crlf(char *ch, int len)
break;
else if(*ch == '\n')
break;
else if (*ch == 0)
return -1;
}
/* Then, skip until the last CRLF */
@ -268,6 +273,8 @@ linebuf_copy_line(buf_head_t *bufhead, buf_line_t *bufline,
return 0;
clen = cpylen = linebuf_skip_crlf(ch, len);
if (clen == -1)
return -1;
/* This is the ~overflow case..This doesn't happen often.. */
if(cpylen > (BUF_DATA_SIZE - bufline->len - 1))
@ -321,65 +328,61 @@ linebuf_copy_line(buf_head_t *bufhead, buf_line_t *bufline,
* Copy as much data as possible directly into a linebuf,
* splitting at \r\n, but without altering any data.
*
* -David-T
*/
static int
linebuf_copy_raw(buf_head_t *bufhead, buf_line_t *bufline,
char *data, int len)
char *data, int len)
{
int cpylen = 0; /* how many bytes we've copied */
char *ch = data; /* Pointer to where we are in the read data */
char *bufch = bufline->buf + bufline->len;
int clen = 0; /* how many bytes we've processed,
and don't ever want to see again.. */
int remaining;
/* If its full or terminated, ignore it */
if ((bufline->len == BUF_DATA_SIZE) || (bufline->terminated == 1))
bufline->raw = 1;
assert(bufline->len < BUF_DATA_SIZE);
if (bufline->terminated == 1)
return 0;
if (len < (BUF_DATA_SIZE - bufline->len - 1))
remaining = len;
else
remaining = BUF_DATA_SIZE - bufline->len - 1;
clen = cpylen = linebuf_skip_crlf(ch, len);
if (clen == -1)
return -1;
while (remaining && *ch != '\r' && *ch != '\n')
{
*bufch++ = *ch++;
clen++;
remaining--;
}
/*
* If we've reached '\r' or '\n', or filled up the linebuf,
* terminate it
*/
if (*ch == '\r' || *ch == '\n' ||
(clen >= (BUF_DATA_SIZE - bufline->len - 1)))
{
bufline->terminated = 1;
/*
* Whilst we have remaining data (and space in the linebuf)
* eat any '\r's or '\n's, but leave them in the linebuf,
* incase it's important ziplinks data
*/
while (remaining && (*ch == '\r' || *ch == '\n'))
/* This is the overflow case..This doesn't happen often.. */
if(cpylen > (BUF_DATA_SIZE - bufline->len - 1))
{
*bufch++ = *ch++;
clen++;
remaining--;
memcpy(bufch, ch, (BUF_DATA_SIZE - bufline->len - 1));
bufline->buf[BUF_DATA_SIZE-1] = '\0';
bufch = bufline->buf + BUF_DATA_SIZE - 2;
bufline->terminated = 1;
bufline->len = BUF_DATA_SIZE - 1;
bufhead->len += BUF_DATA_SIZE - 1;
return clen;
}
}
memcpy(bufch, ch, cpylen);
bufch += cpylen;
*bufch = '\0';
bufch--;
/* Tell linebuf_get that it might need to clean up the buffer */
bufline->raw = 1;
bufline->len += clen;
bufhead->len += clen;
if(*bufch != '\r' && *bufch != '\n')
{
/* No linefeed, bail for the next time */
bufhead->len += cpylen;
bufline->len += cpylen;
bufline->terminated = 0;
return clen;
}
bufline->terminated = 1;
bufhead->len += cpylen;
bufline->len += cpylen;
return clen;
}
/*
* linebuf_parse
*
@ -406,43 +409,49 @@ linebuf_parse(buf_head_t *bufhead, char *data, int len, int raw)
/* First, if we have a partial buffer, try to squeze data into it */
if (bufhead->list.tail != NULL)
{
/* Check we're doing the partial buffer thing */
bufline = bufhead->list.tail->data;
assert(!bufline->flushing);
/* just try, the worst it could do is *reject* us .. */
if (raw) /* if we could be dealing with 8-bit data */
cpylen = linebuf_copy_raw(bufhead, bufline, data, len);
else
cpylen = linebuf_copy_line(bufhead, bufline, data, len);
linecnt++;
/* If we've copied the same as what we've got, quit now */
if (cpylen == len)
return linecnt; /* all the data done so soon? */
{
/* Check we're doing the partial buffer thing */
bufline = bufhead->list.tail->data;
assert(!bufline->flushing);
/* just try, the worst it could do is *reject* us .. */
if (raw) /* if we could be dealing with 8-bit data */
cpylen = linebuf_copy_raw(bufhead, bufline, data, len);
else
cpylen = linebuf_copy_line(bufhead, bufline, data, len);
if (cpylen == -1)
return -1;
linecnt++;
/* If we've copied the same as what we've got, quit now */
if (cpylen == len)
return linecnt; /* all the data done so soon? */
/* Skip the data and update len .. */
len -= cpylen;
assert(len >= 0);
data += cpylen;
}
/* Next, the loop */
while (len > 0)
{
/* We obviously need a new buffer, so .. */
bufline = linebuf_new_line(bufhead);
/* And parse */
if (raw) /* if we could be dealing with 8-bit data */
cpylen = linebuf_copy_raw(bufhead, bufline, data, len);
else
cpylen = linebuf_copy_line(bufhead, bufline, data, len);
if (cpylen == -1)
return -1;
/* Skip the data and update len .. */
len -= cpylen;
assert(len >= 0);
data += cpylen;
}
/* Next, the loop */
while (len > 0)
{
/* We obviously need a new buffer, so .. */
bufline = linebuf_new_line(bufhead);
/* And parse */
if (raw) /* if we could be dealing with 8-bit data */
cpylen = linebuf_copy_raw(bufhead, bufline, data, len);
else
cpylen = linebuf_copy_line(bufhead, bufline, data, len);
len -= cpylen;
assert(len >= 0);
data += cpylen;
linecnt++;
}
return linecnt;
len -= cpylen;
assert(len >= 0);
data += cpylen;
linecnt++;
}
return linecnt;
}

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: modules.c,v 1.2 2002/08/13 14:45:13 fishwaldo Exp $
* $Id: modules.c,v 1.3 2002/08/16 12:05:37 fishwaldo Exp $
*/
#include "stdinc.h"
@ -490,14 +490,14 @@ mo_modlist (struct Client *client_p, struct Client *source_p, int parc, char **p
{
sendto_one(source_p, form_str(RPL_MODLIST), me.name, parv[0],
modlist[i]->name, modlist[i]->address,
modlist[i]->version);
modlist[i]->version, modlist[i]->core?"(core)":"");
}
}
else
{
sendto_one(source_p, form_str(RPL_MODLIST), me.name, parv[0],
modlist[i]->name, modlist[i]->address,
modlist[i]->version);
modlist[i]->version, modlist[i]->core?"(core)":"");
}
}

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: packet.c,v 1.2 2002/08/13 14:45:13 fishwaldo Exp $
* $Id: packet.c,v 1.3 2002/08/16 12:05:37 fishwaldo Exp $
*/
#include "stdinc.h"
#include "tools.h"
@ -36,6 +36,7 @@
#include "irc_string.h"
#include "memory.h"
#include "hook.h"
#include "send.h"
static char readBuf[READBUF_SIZE];
static void client_dopacket(struct Client *client_p, char *buffer, size_t length);
@ -51,7 +52,44 @@ parse_client_queued(struct Client *client_p)
int checkflood = 1;
struct LocalUser *lclient_p = client_p->localClient;
if (IsServer(client_p) || !IsRegistered(client_p))
if(IsUnknown(client_p))
{
int i = 0;
for(;;)
{
/* rate unknown clients at MAX_FLOOD per loop */
if(i >= MAX_FLOOD)
break;
dolen = linebuf_get(&client_p->localClient->buf_recvq, readBuf,
READBUF_SIZE, LINEBUF_COMPLETE, LINEBUF_PARSED);
if(dolen <= 0)
break;
if(!IsDead(client_p))
{
client_dopacket(client_p, readBuf, dolen);
i++;
/* if theyve dropped out of the unknown state, break and move
* to the parsing for their appropriate status. --fl
*/
if(!IsUnknown(client_p))
break;
}
else if(MyConnect(client_p))
{
linebuf_donebuf(&client_p->localClient->buf_recvq);
linebuf_donebuf(&client_p->localClient->buf_sendq);
return;
}
}
}
if (IsServer(client_p) || IsConnecting(client_p) || IsHandshake(client_p))
{
while ((dolen = linebuf_get(&client_p->localClient->buf_recvq,
readBuf, READBUF_SIZE, LINEBUF_COMPLETE,
@ -59,19 +97,15 @@ parse_client_queued(struct Client *client_p)
{
if (!IsDead(client_p))
client_dopacket(client_p, readBuf, dolen);
else
else if(MyConnect(client_p))
{
if (MyClient(client_p))
{
linebuf_donebuf(&client_p->localClient->buf_recvq);
linebuf_donebuf(&client_p->localClient->buf_sendq);
}
linebuf_donebuf(&client_p->localClient->buf_recvq);
linebuf_donebuf(&client_p->localClient->buf_sendq);
return;
}
}
}
else
else if(IsClient(client_p))
{
if (ConfigFileEntry.no_oper_flood && IsOper(client_p))
@ -124,7 +158,8 @@ parse_client_queued(struct Client *client_p)
*
* marks the end of the clients grace period
*/
void flood_endgrace(struct Client *client_p)
void
flood_endgrace(struct Client *client_p)
{
SetFloodDone(client_p);
@ -153,13 +188,13 @@ flood_recalc(int fd, void *data)
if (!lclient_p)
return;
/* Reset the sent-per-second count, decrease opers quicker
* than normal users
/* allow a bursting client their allocation per second, allow
* a client whos flooding an extra 2 per second
*/
if(ConfigFileEntry.no_oper_flood && IsOper(client_p))
if(IsFloodDone(client_p))
lclient_p->sent_parsed -= 2;
else
lclient_p->sent_parsed--;
lclient_p->sent_parsed = 0;
if(lclient_p->sent_parsed < 0)
lclient_p->sent_parsed = 0;
@ -376,30 +411,36 @@ read_packet(int fd, void *data)
binary = 1;
lbuf_len = linebuf_parse(&client_p->localClient->buf_recvq,
readBuf, length, binary);
readBuf, length, binary);
if (lbuf_len < 0)
{
error_exit_client(client_p, 0);
if (IsClient(client_p))
sendto_one(client_p, ":%s NOTICE %s :*** - You sent a NULL character in "
"your message. Ignored.",
me.name, client_p->name);
else
exit_client(client_p, client_p, client_p, "NULL character found in message");
return;
}
lclient_p->actually_read += lbuf_len;
/* Attempt to parse what we have */
parse_client_queued(client_p);
/* Check to make sure we're not flooding */
if (IsPerson(client_p) &&
(linebuf_alloclen(&client_p->localClient->buf_recvq) >
ConfigFileEntry.client_flood)) {
ConfigFileEntry.client_flood))
{
if (!(ConfigFileEntry.no_oper_flood && IsOper(client_p)))
{
exit_client(client_p, client_p, client_p, "Excess Flood");
return;
}
}
}
/* Attempt to parse what we have */
parse_client_queued(client_p);
/* server fd may have changed */
fd_r = client_p->localClient->fd;
#ifndef HAVE_SOCKETPAIR
@ -442,7 +483,8 @@ read_packet(int fd, void *data)
* with client_p of "local" variation, which contains all the
* necessary fields (buffer etc..)
*/
void client_dopacket(struct Client *client_p, char *buffer, size_t length)
void
client_dopacket(struct Client *client_p, char *buffer, size_t length)
{
assert(client_p != NULL);
assert(buffer != NULL);
@ -460,7 +502,8 @@ void client_dopacket(struct Client *client_p, char *buffer, size_t length)
*/
client_p->localClient->receiveB += length;
if (client_p->localClient->receiveB > 1023) {
if (client_p->localClient->receiveB > 1023)
{
client_p->localClient->receiveK += (client_p->localClient->receiveB >> 10);
client_p->localClient->receiveB &= 0x03ff; /* 2^10 = 1024, 3ff = 1023 */
}

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: parse.c,v 1.2 2002/08/13 14:45:13 fishwaldo Exp $
* $Id: parse.c,v 1.3 2002/08/16 12:05:37 fishwaldo Exp $
*/
#include "stdinc.h"
@ -55,8 +55,8 @@ static void remove_unknown (struct Client *, char *, char *);
static void do_numeric (char [], struct Client *,
struct Client *, int, char **);
static void handle_command(struct Message *, struct Client *,
struct Client *, int, char **);
static int handle_command(struct Message *, struct Client *,
struct Client *, int, char **);
static int hash(char *p);
static struct Message *hash_parse(char *);
@ -120,7 +120,8 @@ string_to_array(char *string, char *parv[MAXPARA])
*
* NOTE: parse() should not be called recusively by any other functions!
*/
void parse(struct Client *client_p, char *pbuffer, char *bufend)
void
parse(struct Client *client_p, char *pbuffer, char *bufend)
{
struct Client* from = client_p;
char* ch;
@ -150,9 +151,9 @@ void parse(struct Client *client_p, char *pbuffer, char *bufend)
ch++;
/*
** Copy the prefix to 'sender' assuming it terminates
** with SPACE (or NULL, which is an error, though).
*/
* Copy the prefix to 'sender' assuming it terminates
* with SPACE (or NULL, which is an error, though).
*/
sender = ch;
@ -217,14 +218,12 @@ void parse(struct Client *client_p, char *pbuffer, char *bufend)
}
/*
** Extract the command code from the packet. Point s to the end
** of the command code and calculate the length using pointer
** arithmetic. Note: only need length for numerics and *all*
** numerics must have parameters and thus a space after the command
** code. -avalon
*
* ummm????
*/
* Extract the command code from the packet. Point s to the end
* of the command code and calculate the length using pointer
* arithmetic. Note: only need length for numerics and *all*
* numerics must have parameters and thus a space after the command
* code. -avalon
*/
/* EOB is 3 chars long but is not a numeric */
@ -250,16 +249,16 @@ void parse(struct Client *client_p, char *pbuffer, char *bufend)
if (!mptr || !mptr->cmd)
{
/*
** Note: Give error message *only* to recognized
** persons. It's a nightmare situation to have
** two programs sending "Unknown command"'s or
** equivalent to each other at full blast....
** If it has got to person state, it at least
** seems to be well behaving. Perhaps this message
** should never be generated, though... --msa
** Hm, when is the buffer empty -- if a command
** code has been found ?? -Armin
*/
* Note: Give error message *only* to recognized
* persons. It's a nightmare situation to have
* two programs sending "Unknown command"'s or
* equivalent to each other at full blast....
* If it has got to person state, it at least
* seems to be well behaving. Perhaps this message
* should never be generated, though... --msa
* Hm, when is the buffer empty -- if a command
* code has been found ?? -Armin
*/
if (pbuffer[0] != '\0')
{
if (IsPerson(from))
@ -289,21 +288,56 @@ void parse(struct Client *client_p, char *pbuffer, char *bufend)
i = 0;
if (s)
if (s != NULL)
i = string_to_array(s, para);
if (mptr == (struct Message *)NULL)
{
do_numeric(numeric, client_p, from, i, para);
return;
}
handle_command(mptr, client_p, from, i, para);
if (handle_command(mptr, client_p, from, i, para) < -1)
{
char *p;
for (p = pbuffer; p <= end; p +=8)
{
/* HACK HACK */
/* Its expected this nasty code can be removed
* or rewritten later if still needed.
*/
if ((unsigned long)(p+8) > (unsigned long) end)
{
for(;p <= end; p++)
{
ilog(L_CRIT, "%02x |%c", p[0], p[0]);
}
}
else
ilog(L_CRIT,
"%02x %02x %02x %02x %02x %02x %02x %02x |%c%c%c%c%c%c%c%c",
p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7],
p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]);
}
}
#ifdef INTENSIVE_DEBUG
do_channel_integrity_check();
#endif
}
static void
/*
* handle_command
*
* inputs - pointer to message block
* - pointer to client
* - pointer to client message is from
* - count of number of args
* - pointer to argv[] array
* output - -1 if error from server
* side effects -
*/
static int
handle_command(struct Message *mptr, struct Client *client_p,
struct Client *from, int i, char *hpara[MAXPARA])
{
@ -326,7 +360,7 @@ handle_command(struct Message *mptr, struct Client *client_p,
if((IsHandshake(client_p) || IsConnecting(client_p)
|| IsServer(client_p))
&& !(mptr->flags & MFLG_UNREG))
return;
return(1);
}
handler = mptr->handlers[client_p->handler];
@ -334,22 +368,35 @@ handle_command(struct Message *mptr, struct Client *client_p,
/* check right amount of params is passed... --is */
if (i < mptr->parameters)
{
if(IsServer(client_p))
sendto_realops_flags(FLAGS_ALL, L_ALL,
"Not enough parameters for command %s from servers %s! (%d < %d)",
mptr->cmd, client_p->name, i, mptr->parameters);
sendto_one(client_p, form_str(ERR_NEEDMOREPARAMS),
me.name, BadPtr(hpara[0]) ? "*" : hpara[0], mptr->cmd);
return;
if (!IsServer(client_p))
{
sendto_one(client_p, form_str(ERR_NEEDMOREPARAMS),
me.name, BadPtr(hpara[0]) ? "*" : hpara[0], mptr->cmd);
if (MyClient(client_p))
return(1);
else
return(-1);
}
sendto_realops_flags(FLAGS_ALL, L_ALL,
"Dropping server %s due to (invalid) command '%s'"
"with only %d arguments (expecting %d).",
client_p->name, mptr->cmd, i, mptr->parameters);
ilog(L_CRIT, "Insufficient parameters (%d) for command '%s' from %s.",
i, mptr->cmd, client_p->name);
exit_client(client_p, client_p, client_p,
"Not enough arguments to server command.");
return(-1);
}
(*handler)(client_p, from, i, hpara);
return;
return(1);
}
/*
* init_hash_parse()
* clear_hash_parse()
*
* inputs -
* output - NONE
@ -357,7 +404,8 @@ handle_command(struct Message *mptr, struct Client *client_p,
* any other keyword hash routine is used.
*
*/
void clear_hash_parse()
void
clear_hash_parse()
{
memset(msg_hash_table,0,sizeof(msg_hash_table));
}
@ -414,7 +462,8 @@ mod_add_cmd(struct Message *msg)
* output - none
* side effects - unload this one command name
*/
void mod_del_cmd(struct Message *msg)
void
mod_del_cmd(struct Message *msg)
{
struct MessageHash *ptr;
struct MessageHash *last_ptr = NULL;
@ -448,7 +497,8 @@ void mod_del_cmd(struct Message *msg)
* output - pointer to struct Message
* side effects -
*/
static struct Message *hash_parse(char *cmd)
static struct Message *
hash_parse(char *cmd)
{
struct MessageHash *ptr;
int msgindex;
@ -495,7 +545,8 @@ hash(char *p)
* output - NONE
* side effects - NONE
*/
void report_messages(struct Client *source_p)
void
report_messages(struct Client *source_p)
{
int i;
struct MessageHash *ptr;
@ -556,15 +607,15 @@ cancel_clients(struct Client *client_p, struct Client *source_p, char *cmd)
*/
/*
** with TS, fake prefixes are a common thing, during the
** connect burst when there's a nick collision, and they
** must be ignored rather than killed because one of the
** two is surviving.. so we don't bother sending them to
** all ops everytime, as this could send 'private' stuff
** from lagged clients. we do send the ones that cause
** servers to be dropped though, as well as the ones from
** non-TS servers -orabidoo
*/
* with TS, fake prefixes are a common thing, during the
* connect burst when there's a nick collision, and they
* must be ignored rather than killed because one of the
* two is surviving.. so we don't bother sending them to
* all ops everytime, as this could send 'private' stuff
* from lagged clients. we do send the ones that cause
* servers to be dropped though, as well as the ones from
* non-TS servers -orabidoo
*/
/*
* Incorrect prefix for a server from some connection. If it is a
* client trying to be annoying, just QUIT them, if it is a server
@ -609,11 +660,11 @@ cancel_clients(struct Client *client_p, struct Client *source_p, char *cmd)
if (IsServer(client_p))
{
/*
** If the fake prefix is coming from a TS server, discard it
** silently -orabidoo
**
** all servers must be TS these days --is
*/
* If the fake prefix is coming from a TS server, discard it
* silently -orabidoo
*
* all servers must be TS these days --is
*/
if (source_p->user)
{
sendto_realops_flags(FLAGS_DEBUG, L_ADMIN,
@ -639,9 +690,8 @@ cancel_clients(struct Client *client_p, struct Client *source_p, char *cmd)
* output -
* side effects -
*/
static void remove_unknown(struct Client *client_p,
char *lsender,
char *lbuffer)
static void
remove_unknown(struct Client *client_p, char *lsender, char *lbuffer)
{
if (!IsRegistered(client_p))
return;
@ -690,20 +740,21 @@ static void remove_unknown(struct Client *client_p,
/*
**
** parc number of arguments ('sender' counted as one!)
** parv[0] pointer to 'sender' (may point to empty string) (not used)
** parv[1]..parv[parc-1]
** pointers to additional parameters, this is a NULL
** terminated list (parv[parc] == NULL).
**
** *WARNING*
** Numerics are mostly error reports. If there is something
** wrong with the message, just *DROP* it! Don't even think of
** sending back a neat error message -- big danger of creating
** a ping pong error message...
*/
static void do_numeric(char numeric[],
*
* parc number of arguments ('sender' counted as one!)
* parv[0] pointer to 'sender' (may point to empty string) (not used)
* parv[1]..parv[parc-1]
* pointers to additional parameters, this is a NULL
* terminated list (parv[parc] == NULL).
*
* *WARNING*
* Numerics are mostly error reports. If there is something
* wrong with the message, just *DROP* it! Don't even think of
* sending back a neat error message -- big danger of creating
* a ping pong error message...
*/
static void
do_numeric(char numeric[],
struct Client *client_p,
struct Client *source_p,
int parc,
@ -720,12 +771,12 @@ static void do_numeric(char numeric[],
numeric[0] = '1';
/*
** Prepare the parameter portion of the message into 'buffer'.
** (Because the buffer is twice as large as the message buffer
** for the socket, no overflow can occur here... ...on current
** assumptions--bets are off, if these are changed --msa)
** Note: if buffer is non-empty, it will begin with SPACE.
*/
* Prepare the parameter portion of the message into 'buffer'.
* (Because the buffer is twice as large as the message buffer
* for the socket, no overflow can occur here... ...on current
* assumptions--bets are off, if these are changed --msa)
* Note: if buffer is non-empty, it will begin with SPACE.
*/
if (parc > 1)
{
char *t = buffer; /* Current position within the buffer */
@ -757,6 +808,10 @@ static void do_numeric(char numeric[],
* "right thing" on a nick collision, we have to keep both kills.
* ergo we need to ignore ERR_NOSUCHNICK. --fl_
*/
/* quick comment. This _was_ tried. i.e. assume the other servers
* will do the "right thing" and kill a nick that is colliding.
* unfortunately, it did not work. --Dianora
*/
if(atoi(numeric) != ERR_NOSUCHNICK)
sendto_realops_flags(FLAGS_ALL, L_ADMIN,
"*** %s(via %s) sent a %s numeric to me: %s",
@ -797,14 +852,16 @@ static void do_numeric(char numeric[],
* output -
* side effects - just returns a nastyogram to given user
*/
void m_not_oper(struct Client* client_p, struct Client* source_p,
void
m_not_oper(struct Client* client_p, struct Client* source_p,
int parc, char* parv[])
{
sendto_one(source_p, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
}
void m_unregistered(struct Client* client_p, struct Client* source_p,
int parc, char* parv[])
void
m_unregistered(struct Client* client_p, struct Client* source_p,
int parc, char* parv[])
{
/* bit of a hack.
* I don't =really= want to waste a bit in a flag
@ -820,14 +877,16 @@ void m_unregistered(struct Client* client_p, struct Client* source_p,
}
}
void m_registered(struct Client* client_p, struct Client* source_p,
void
m_registered(struct Client* client_p, struct Client* source_p,
int parc, char* parv[])
{
sendto_one(client_p, form_str(ERR_ALREADYREGISTRED),
me.name, parv[0]);
}
void m_ignore(struct Client* client_p, struct Client* source_p,
void
m_ignore(struct Client* client_p, struct Client* source_p,
int parc, char* parv[])
{
return;

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: s_auth.c,v 1.2 2002/08/13 14:45:13 fishwaldo Exp $
* $Id: s_auth.c,v 1.3 2002/08/16 12:05:37 fishwaldo Exp $
*/
/*
@ -195,9 +195,9 @@ static void auth_dns_callback(void* vptr, adns_answer* reply)
*auth->client->host = '\0';
if(reply && (reply->status == adns_s_ok))
{
if(strlen(*reply->rrs.str) < HOSTLEN)
if(strlen(*reply->rrs.str) <= HOSTLEN)
{
strcpy(str, *reply->rrs.str);
strlcpy(str, *reply->rrs.str, HOSTLEN+1);
sendheader(auth->client, REPORT_FIN_DNS);
}
else
@ -205,15 +205,15 @@ static void auth_dns_callback(void* vptr, adns_answer* reply)
#ifdef IPV6
if(*auth->client->localClient->sockhost == ':')
{
strcat(str, "0");
strlcat(str, "0",HOSTLEN+1);
}
if(auth->client->localClient->aftype == AF_INET6 && ConfigFileEntry.dot_in_ip6_addr == 1)
{
strcat(str, auth->client->localClient->sockhost);
strcat(str, ".");
strlcat(str, auth->client->localClient->sockhost,HOSTLEN+1);
strlcat(str, ".",HOSTLEN+1);
} else
#endif
strcat(str, auth->client->localClient->sockhost);
strlcat(str, auth->client->localClient->sockhost,HOSTLEN+1);
sendheader(auth->client, REPORT_HOST_TOOLONG);
}
}
@ -222,16 +222,16 @@ static void auth_dns_callback(void* vptr, adns_answer* reply)
#ifdef IPV6
if(*auth->client->localClient->sockhost == ':')
{
strcat(str, "0");
strlcat(str, "0",HOSTLEN);
}
if(auth->client->localClient->aftype == AF_INET6 && ConfigFileEntry.dot_in_ip6_addr == 1)
{
strcat(str, auth->client->localClient->sockhost);
strcat(str, ".");
strlcat(str, auth->client->localClient->sockhost,HOSTLEN+1);
strlcat(str, ".",HOSTLEN+1);
sendheader(auth->client, REPORT_FAIL_DNS);
} else
#endif
strcat(str, auth->client->localClient->sockhost);
strlcat(str, auth->client->localClient->sockhost,HOSTLEN+1);
sendheader(auth->client, REPORT_FAIL_DNS);
}

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: s_bsd.c,v 1.2 2002/08/13 14:45:13 fishwaldo Exp $
* $Id: s_bsd.c,v 1.3 2002/08/16 12:05:37 fishwaldo Exp $
*/
#include "stdinc.h"
@ -472,8 +472,8 @@ void error_exit_client(struct Client* client_p, int error)
}
else
{
ircsprintf(errmsg, "Read error: %d (%s)",
current_error, strerror(current_error));
ircsprintf(errmsg, "Read error: %s",
strerror(current_error));
}
fd_close(client_p->localClient->fd);
client_p->localClient->fd = -1;

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: s_conf.c,v 1.2 2002/08/13 14:45:13 fishwaldo Exp $
* $Id: s_conf.c,v 1.3 2002/08/16 12:05:37 fishwaldo Exp $
*/
#include "stdinc.h"
@ -56,6 +56,7 @@ struct config_server_hide ConfigServerHide;
extern int yyparse(); /* defined in y.tab.c */
extern int lineno;
extern char linebuf[];
extern char conffilebuf[IRCD_BUFSIZE];
int scount = 0; /* used by yyparse(), etc */
#ifndef INADDR_NONE
@ -183,7 +184,7 @@ make_conf()
aconf = (struct ConfItem*) MyMalloc(sizeof(struct ConfItem));
aconf->status = CONF_ILLEGAL;
aconf->aftype = AF_INET;
return (aconf);
return(aconf);
}
/*
@ -274,6 +275,7 @@ report_configured_links(struct Client* source_p, int mask)
char* name;
char* classname;
int port;
for (tmp = ConfigItemList; tmp; tmp = tmp->next) {
if (tmp->status & mask)
{
@ -285,7 +287,8 @@ report_configured_links(struct Client* source_p, int mask)
return;
get_printable_conf(tmp, &name, &host, &pass, &user, &port,&classname);
if (mask & CONF_SERVER)
if(mask & CONF_SERVER)
{
char c;
char buf[20];
@ -293,6 +296,7 @@ report_configured_links(struct Client* source_p, int mask)
buf[0] = '\0';
c = p->conf_char;
if (tmp->flags & CONF_FLAGS_ALLOW_AUTO_CONN)
*s++ = 'A';
if (tmp->flags & CONF_FLAGS_CRYPTLINK)
@ -310,7 +314,10 @@ report_configured_links(struct Client* source_p, int mask)
*s++ = '*';
*s++ = '\0';
/* Allow admins to see actual ips */
/* except if HIDE_SERVERS_IPS is defined */
#ifndef HIDE_SERVERS_IPS
if(IsOperAdmin(source_p))
sendto_one(source_p, form_str(p->rpl_stats), me.name,
source_p->name, c,
@ -321,6 +328,7 @@ report_configured_links(struct Client* source_p, int mask)
classname,
oper_flags_as_string((int)tmp->hold));
else
#endif
sendto_one(source_p, form_str(p->rpl_stats), me.name,
source_p->name, c,
"*@127.0.0.1",
@ -520,7 +528,7 @@ verify_access(struct Client* client_p, const char* username)
else
{
non_ident[0] = '~';
strlcpy(&non_ident[1],username, USERLEN);
strlcpy(&non_ident[1],username, USERLEN + 1);
aconf = find_address_conf(client_p->host,non_ident,
&client_p->localClient->ip,
client_p->localClient->aftype);
@ -538,7 +546,7 @@ verify_access(struct Client* client_p, const char* username)
}
if (ConfigFileEntry.glines)
{
if (!IsConfExemptKline(aconf))
if (!IsConfExemptKline(aconf) && !IsConfExemptGline(aconf))
{
if (IsGotId(client_p))
gkill_conf = find_gkill(client_p, client_p->username);
@ -571,7 +579,7 @@ verify_access(struct Client* client_p, const char* username)
client_p->host, aconf->name);
}
#endif
strlcpy(client_p->host, aconf->name, HOSTLEN);
strlcpy(client_p->host, aconf->name, HOSTLEN + 1);
SetIPSpoof(client_p);
}
return(attach_iline(client_p, aconf));
@ -611,7 +619,7 @@ int attach_iline(struct Client *client_p, struct ConfItem *aconf)
ConfConFreq(aconf) && ip_found->count > ConfConFreq(aconf))
{
if(!IsConfExemptLimits(aconf))
return TOO_MANY; /* Already at maximum allowed ip#'s */
return(TOO_MANY); /* Already at maximum allowed ip#'s */
else
{
sendto_one(client_p,
@ -620,7 +628,7 @@ int attach_iline(struct Client *client_p, struct ConfItem *aconf)
}
}
return (attach_conf(client_p, aconf) );
return(attach_conf(client_p, aconf));
}
/* link list of free IP_ENTRY's */
@ -693,7 +701,7 @@ find_or_add_ip(struct irc_inaddr *ip_in)
return(ptr);
}
}
if ( (ptr = ip_hash_table[hash_index]) != (IP_ENTRY *)NULL )
if ((ptr = ip_hash_table[hash_index]) != (IP_ENTRY *)NULL)
{
if( free_ip_entries == (IP_ENTRY *)NULL)
outofmemory();
@ -708,7 +716,7 @@ find_or_add_ip(struct irc_inaddr *ip_in)
return(newptr);
}
if( free_ip_entries == (IP_ENTRY *)NULL)
if (free_ip_entries == (IP_ENTRY *)NULL)
outofmemory();
ptr = ip_hash_table[hash_index] = free_ip_entries;
@ -716,7 +724,7 @@ find_or_add_ip(struct irc_inaddr *ip_in)
memcpy(&ptr->ip, ip_in, sizeof(struct irc_inaddr));
ptr->count = 0;
ptr->next = (IP_ENTRY *)NULL;
return (ptr);
return(ptr);
}
/*
@ -812,7 +820,7 @@ count_ip_hash(int *number_ips_stored,u_long *mem_ips_stored)
*number_ips_stored = 0;
*mem_ips_stored = 0;
for(i = 0; i < IP_HASH_SIZE ;i++)
for (i = 0; i < IP_HASH_SIZE ;i++)
{
ip_hash_ptr = ip_hash_table[i];
while(ip_hash_ptr)
@ -829,9 +837,9 @@ count_ip_hash(int *number_ips_stored,u_long *mem_ips_stored)
/*
* iphash_stats()
*
* inputs -
* output -
* side effects -
* input -
* output -
* side effects -
*/
void
iphash_stats(struct Client *client_p, struct Client *source_p,
@ -893,9 +901,9 @@ detach_conf(struct Client* client_p,struct ConfItem* aconf)
dlink_node *ptr;
if(aconf == NULL)
return -1;
return(-1);
for( ptr = client_p->localClient->confs.head; ptr; ptr = ptr->next )
for(ptr = client_p->localClient->confs.head; ptr; ptr = ptr->next)
{
if (ptr->data == aconf)
{
@ -918,10 +926,10 @@ detach_conf(struct Client* client_p,struct ConfItem* aconf)
}
dlinkDelete(ptr, &client_p->localClient->confs);
free_dlink_node(ptr);
return 0;
return(0);
}
}
return -1;
return(-1);
}
/*
@ -941,7 +949,7 @@ is_attached(struct Client *client_p, struct ConfItem *aconf)
if (ptr->data == aconf)
break;
return (ptr) ? 1 : 0;
return((ptr != NULL) ? 1 : 0);
}
/*
@ -962,14 +970,14 @@ attach_conf(struct Client *client_p,struct ConfItem *aconf)
if (is_attached(client_p, aconf))
{
return 1;
return(1);
}
if (IsIllegal(aconf))
{
return(NOT_AUTHORIZED);
}
if ( (aconf->status & CONF_OPERATOR) == 0 )
if ((aconf->status & CONF_OPERATOR) == 0)
{
if ((aconf->status & CONF_CLIENT) &&
ConfLinks(aconf) >= ConfMaxLinks(aconf) && ConfMaxLinks(aconf) > 0)
@ -999,7 +1007,7 @@ attach_conf(struct Client *client_p,struct ConfItem *aconf)
aconf->clients++;
if (aconf->status & CONF_CLIENT_MASK)
ConfLinks(aconf)++;
return 0;
return(0);
}
/*
@ -1033,7 +1041,7 @@ attach_confs(struct Client* client_p, const char* name, int statmask)
++conf_counter;
}
}
return conf_counter;
return(conf_counter);
}
/*
@ -1055,7 +1063,7 @@ attach_connect_block(struct Client *client_p,
assert(client_p != NULL);
assert(host != NULL);
if(client_p == NULL || host == NULL)
return 0;
return(0);
for (ptr = ConfigItemList; ptr; ptr = ptr->next)
{
@ -1066,9 +1074,9 @@ attach_connect_block(struct Client *client_p,
if ((match(name, ptr->name) == 0) || (match(ptr->host, host) == 0))
continue;
attach_conf(client_p, ptr);
return -1;
return(-1);
}
return 0;
return(0);
}
/*
@ -1104,14 +1112,14 @@ find_conf_exact(const char* name, const char* user,
if (tmp->status & CONF_OPERATOR)
{
if (tmp->clients < ConfMaxLinks(tmp))
return tmp;
return(tmp);
else
continue;
}
else
return tmp;
return(tmp);
}
return NULL;
return(NULL);
}
/*
@ -1135,9 +1143,9 @@ find_conf_name(dlink_list *list, const char* name, int statmask)
aconf = ptr->data;
if ((aconf->status & statmask) && aconf->name &&
(!irccmp(aconf->name, name) || match(aconf->name, name)))
return aconf;
return(aconf);
}
return NULL;
return(NULL);
}
@ -1183,14 +1191,14 @@ find_conf_by_host(const char* host, int status)
struct ConfItem* conf;
assert(host != NULL);
if(host == NULL)
return NULL;
return(NULL);
for (conf = ConfigItemList; conf; conf = conf->next)
{
if (conf->status == status && conf->host &&
match(host, conf->host))
return conf;
return(conf);
}
return NULL;
return(NULL);
}
/*
@ -1236,16 +1244,16 @@ find_u_conf(char *server,char *user,char *host)
if (BadPtr(aconf->name))
continue;
if(match(aconf->name,server))
if (match(aconf->name,server))
{
if (BadPtr(aconf->user) || BadPtr(aconf->host))
return YES;
return(YES);
if(match(aconf->user,user) && match(aconf->host,host))
return YES;
return(YES);
}
}
return NO;
return(NO);
}
@ -1278,9 +1286,10 @@ clear_special_conf(struct ConfItem **this_conf)
* as a result of an operator issuing this command, else assume it has been
* called as a result of the server receiving a HUP signal.
*/
int rehash(int sig)
int
rehash(int sig)
{
if (sig)
if (sig != 0)
{
sendto_realops_flags(FLAGS_ALL, L_ALL,
"Got signal SIGHUP, reloading ircd conf. file");
@ -1298,7 +1307,7 @@ int rehash(int sig)
flush_deleted_I_P();
check_klines();
reopen_log(logFileName);
return 0;
return(0);
}
/*
@ -1407,10 +1416,6 @@ set_default_conf(void)
ConfigChannel.vchans_oper_only = NO;
ConfigChannel.use_except = YES;
ConfigChannel.use_invex = YES;
ConfigChannel.use_knock = YES;
ConfigChannel.use_vchans = NO;
ConfigChannel.knock_delay = 300;
ConfigChannel.knock_delay_channel = 60;
ConfigChannel.max_chans_per_user = 15;
@ -1486,18 +1491,6 @@ validate_conf(void)
(ConfigFileEntry.client_flood > CLIENT_FLOOD_MAX))
ConfigFileEntry.client_flood = CLIENT_FLOOD_MAX;
/* Hasn't been set yet, so set it now */
if(ConfigChannel.use_halfops == -1)
#ifdef HALFOPS
ConfigChannel.use_halfops = 1;
#else
ConfigChannel.use_halfops = 0;
#endif
/* hasnt been set, disable it by default */
if(ConfigChannel.use_anonops == -1)
ConfigChannel.use_anonops = 0;
GlobalSetOptions.idletime = (ConfigFileEntry.idletime * 60);
}
@ -1586,7 +1579,12 @@ lookup_confhost(struct ConfItem* aconf)
}
/*
* conf_connect_allowed (untested)
* conf_connect_allowed
*
* inputs - pointer to inaddr
* - int type ipv4 or ipv6
* output - BANNED or accepted
* side effects - none
*/
int
conf_connect_allowed(struct irc_inaddr *addr, int aftype)
@ -1596,10 +1594,10 @@ conf_connect_allowed(struct irc_inaddr *addr, int aftype)
/* DLINE exempt also gets you out of static limits/pacing... */
if (aconf && (aconf->status & CONF_EXEMPTDLINE))
return 0;
return(0);
if (aconf)
return BANNED_CLIENT;
if (aconf != NULL)
return(BANNED_CLIENT);
ip_found = find_or_add_ip(addr);
if ((CurrentTime - ip_found->last_attempt) <
@ -1607,10 +1605,10 @@ conf_connect_allowed(struct irc_inaddr *addr, int aftype)
{
ip_found->last_attempt = CurrentTime;
ip_found->count--;
return TOO_FAST;
return(TOO_FAST);
}
ip_found->last_attempt = CurrentTime;
return 0;
return(0);
}
/*
@ -1635,7 +1633,7 @@ find_kill(struct Client* client_p)
return aconf;
if(aconf->status & CONF_KILL)
return aconf;
return NULL;
return(NULL);
}
/* add_temp_kline
@ -1721,7 +1719,7 @@ oper_privs_as_string(struct Client *client_p,int port)
privs_ptr = privs_out;
*privs_ptr = '\0';
if(port & CONF_OPER_GLINE)
if (port & CONF_OPER_GLINE)
{
if(client_p)
SetOperGline(client_p);
@ -1883,7 +1881,7 @@ get_oper_name(struct Client *client_p)
ircsprintf(buffer, "%s!%s@%s{%s}", client_p->name,
client_p->username, client_p->host,
((struct ConfItem*)cnode->data)->name);
return buffer;
return(buffer);
}
/* Probably should assert here for now. If there is an oper out there
* with no oper{} conf attached, it would be good for us to know...
@ -1892,7 +1890,7 @@ get_oper_name(struct Client *client_p)
}
ircsprintf(buffer, "%s!%s@%s{%s}", client_p->name,
client_p->username, client_p->host, client_p->servptr->name);
return buffer;
return(buffer);
}
/*
@ -1944,6 +1942,14 @@ read_conf_files(int cold)
filename = get_conf_name(CONF_TYPE);
/* We need to know the initial filename for the yyerror() to report
FIXME: The full path is in conffilenamebuf first time since we
dont know anything else
- Gozem 2002-07-21
*/
strlcpy(conffilebuf, filename, IRCD_BUFSIZE);
if ((conf_fbfile_in = fbopen(filename,"r")) == NULL)
{
if(cold)
@ -1963,8 +1969,6 @@ read_conf_files(int cold)
if (cold)
{
/* set to 'undefined' */
ConfigChannel.use_halfops = -1;
ConfigChannel.use_anonops = -1;
}
else
{
@ -2332,7 +2336,7 @@ conf_add_server(struct ConfItem *aconf, int lcount)
{
sendto_realops_flags(FLAGS_ALL, L_ALL,"Bad connect block");
ilog(L_WARN, "Bad connect block");
return -1;
return(-1);
}
if (BadPtr(aconf->passwd) && !(aconf->flags & CONF_FLAGS_CRYPTLINK))
@ -2340,18 +2344,18 @@ conf_add_server(struct ConfItem *aconf, int lcount)
sendto_realops_flags(FLAGS_ALL, L_ALL,"Bad connect block, name %s",
aconf->name);
ilog(L_WARN, "Bad connect block, host %s",aconf->name);
return -1;
return(-1);
}
if( SplitUserHost(aconf) < 0 )
if (SplitUserHost(aconf) < 0)
{
sendto_realops_flags(FLAGS_ALL, L_ALL,"Bad connect block, name %s",
aconf->name);
ilog(L_WARN, "Bad connect block, name %s",aconf->name);
return -1;
return(-1);
}
lookup_confhost(aconf);
return 0;
return(0);
}
/*
@ -2436,15 +2440,15 @@ conf_add_fields(struct ConfItem *aconf,
char *port_field,
char *class_field)
{
if(host_field)
if (host_field != NULL)
DupString(aconf->host, host_field);
if(pass_field)
if (pass_field != NULL)
DupString(aconf->passwd, pass_field);
if(user_field)
if (user_field != NULL)
DupString(aconf->user, user_field);
if(port_field)
if (port_field != NULL)
aconf->port = atoi(port_field);
if(class_field)
if (class_field != NULL)
DupString(aconf->className, class_field);
}
@ -2462,11 +2466,11 @@ yyerror(char *msg)
strip_tabs(newlinebuf, (const unsigned char *)linebuf, strlen(linebuf));
sendto_realops_flags(FLAGS_ALL, L_ALL,"%d: %s on line: %s",
lineno + 1, msg, newlinebuf);
sendto_realops_flags(FLAGS_ALL, L_ALL,"\"%s\", line %d: %s: %s",
conffilebuf, lineno + 1, msg, newlinebuf);
ilog(L_WARN, "%d: %s on line: %s",
lineno + 1, msg, newlinebuf);
ilog(L_WARN, "\"%s\", line %d: %s: %s",
conffilebuf, lineno + 1, msg, newlinebuf);
}
int
@ -2474,10 +2478,8 @@ conf_fbgets(char *lbuf,int max_size, FBFILE *fb)
{
char* buff;
buff = fbgets(lbuf,max_size,fb);
if(!buff)
return 0;
if ((buff = fbgets(lbuf,max_size,fb)) == NULL)
return(0);
return(strlen(lbuf));
}
@ -2485,7 +2487,7 @@ conf_fbgets(char *lbuf,int max_size, FBFILE *fb)
int
conf_yy_fatal_error(char *msg)
{
return 0;
return(0);
}

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: s_debug.c,v 1.2 2002/08/13 14:45:13 fishwaldo Exp $
* $Id: s_debug.c,v 1.3 2002/08/16 12:05:37 fishwaldo Exp $
*/
#include "stdinc.h"
@ -244,16 +244,10 @@ void count_memory(struct Client *source_p)
channel_users++;
for (dlink = chptr->chanops.head; dlink; dlink = dlink->next)
channel_users++;
#ifdef REQUIRE_OANDV
for (dlink = chptr->chanops_voiced.head; dlink; dlink = dlink->next)
channel_users++;
#endif
for (dlink = chptr->voiced.head; dlink; dlink = dlink->next)
channel_users++;
#ifdef HALFOPS
for (dlink = chptr->halfops.head; dlink; dlink = dlink->next)
channel_users++;
#endif
for (dlink = chptr->invites.head; dlink; dlink = dlink->next)
channel_invites++;

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: s_serv.c,v 1.3 2002/08/15 06:05:02 fishwaldo Exp $
* $Id: s_serv.c,v 1.4 2002/08/16 12:05:37 fishwaldo Exp $
*/
#include "stdinc.h"
@ -1060,12 +1060,13 @@ int server_estab(struct Client *client_p)
** ...a bit tricky, but you have been warned, besides
** code is more neat this way... --msa
*/
SetServer(client_p);
client_p->servptr = &me;
if (IsDead(client_p))
return CLIENT_EXITED;
SetServer(client_p);
/* Update the capability combination usage counts. -A1kmm */
set_chcap_usage_counts(client_p);
@ -1597,14 +1598,10 @@ burst_all(struct Client *client_p)
if(chptr->users != 0)
{
burst_members(client_p,&chptr->chanops);
#ifdef REQUIRE_OANDV
burst_members(client_p,&chptr->chanops_voiced);
#endif
burst_members(client_p,&chptr->voiced);
#ifdef HALFOPS
burst_members(client_p,&chptr->halfops);
#endif
burst_members(client_p,&chptr->peons);
burst_members(client_p,&chptr->chanadmins);
send_channel_modes(client_p, chptr);
hinfo.chptr = chptr;
hinfo.client = client_p;
@ -1621,14 +1618,11 @@ burst_all(struct Client *client_p)
if(vchan->users != 0)
{
burst_members(client_p,&vchan->chanops);
#ifdef REQUIRE_OANDV
burst_members(client_p,&vchan->chanops_voiced);
#endif
burst_members(client_p,&vchan->voiced);
#ifdef HALFOPS
burst_members(client_p,&vchan->halfops);
#endif
burst_members(client_p,&vchan->peons);
burst_members(client_p,&vchan->chanadmins);
send_channel_modes(client_p, vchan);
hinfo.chptr = chptr;
hinfo.client = client_p;
@ -1700,14 +1694,10 @@ burst_channel(struct Client *client_p, struct Channel *chptr)
#endif
burst_ll_members(client_p,&chptr->chanops);
#ifdef REQUIRE_OANDV
burst_ll_members(client_p, &chptr->chanops_voiced);
#endif
burst_ll_members(client_p,&chptr->voiced);
#ifdef HALFOPS
burst_ll_members(client_p,&chptr->halfops);
#endif
burst_ll_members(client_p,&chptr->peons);
burst_ll_members(client_p,&chptr->chanadmins);
send_channel_modes(client_p, chptr);
add_lazylinkchannel(client_p,chptr);
@ -1728,14 +1718,10 @@ burst_channel(struct Client *client_p, struct Channel *chptr)
{
vchan = ptr->data;
burst_ll_members(client_p,&vchan->chanops);
#ifdef REQUIRE_OANDV
burst_ll_members(client_p,&vchan->chanops_voiced);
#endif
burst_ll_members(client_p,&vchan->voiced);
#ifdef HALFOPS
burst_ll_members(client_p,&vchan->halfops);
#endif
burst_ll_members(client_p,&vchan->peons);
burst_ll_members(client_p,&vchan->chanadmins);
send_channel_modes(client_p, vchan);
add_lazylinkchannel(client_p,vchan);
@ -2047,8 +2033,8 @@ serv_connect(struct ConfItem *aconf, struct Client *by)
client_p = make_client(NULL);
/* Copy in the server, hostname, fd */
strlcpy(client_p->name, aconf->name, HOSTLEN);
strlcpy(client_p->host, aconf->host, HOSTLEN);
strlcpy(client_p->name, aconf->name, HOSTLEN + 1);
strlcpy(client_p->host, aconf->host, HOSTLEN + 1);
inetntop(DEF_FAM, &IN_ADDR(aconf->ipnum), client_p->localClient->sockhost, HOSTIPLEN);
client_p->localClient->fd = fd;

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: s_user.c,v 1.3 2002/08/14 06:29:46 fishwaldo Exp $
* $Id: s_user.c,v 1.4 2002/08/16 12:05:37 fishwaldo Exp $
*/
#include "stdinc.h"
@ -178,7 +178,8 @@ int user_modes_from_c_to_bitmask[] =
* output -
* side effects - display to client user counts etc.
*/
int show_lusers(struct Client *source_p)
int
show_lusers(struct Client *source_p)
{
if(!ConfigServerHide.hide_servers || IsOper(source_p))
sendto_one(source_p, form_str(RPL_LUSERCLIENT), me.name, source_p->name,
@ -236,7 +237,8 @@ int show_lusers(struct Client *source_p)
* output -
* side effects - display to client what we support (for them)
*/
void show_isupport(struct Client *source_p)
void
show_isupport(struct Client *source_p)
{
char isupportbuffer[512];
@ -276,7 +278,8 @@ void show_isupport(struct Client *source_p)
** nick from local user or kill him/her...
*/
int register_local_user(struct Client *client_p, struct Client *source_p,
int
register_local_user(struct Client *client_p, struct Client *source_p,
char *nick, char *username)
{
struct ConfItem* aconf;
@ -296,6 +299,7 @@ int register_local_user(struct Client *client_p, struct Client *source_p,
if(!MyConnect(source_p))
return -1;
if(ConfigFileEntry.ping_cookie)
{
if(!(source_p->flags & FLAGS_PINGSENT) && source_p->localClient->random_ping == 0)
@ -303,7 +307,7 @@ int register_local_user(struct Client *client_p, struct Client *source_p,
source_p->localClient->random_ping = (unsigned long)rand();
sendto_one(source_p, "PING :%lu", (unsigned long)source_p->localClient->random_ping);
source_p->flags |= FLAGS_PINGSENT;
strlcpy(source_p->username, username, USERLEN);
strlcpy(source_p->username, username, USERLEN + 1);
return -1;
}
if(!(source_p->flags2 & FLAGS2_PING_COOKIE))
@ -325,7 +329,7 @@ int register_local_user(struct Client *client_p, struct Client *source_p,
{
sendto_one(source_p,":%s NOTICE %s :*** Notice -- You have an illegal character in your hostname",
me.name, source_p->name );
strncpy(source_p->host,source_p->localClient->sockhost,HOSTIPLEN+1);
strncpy(source_p->host,source_p->localClient->sockhost,HOSTIPLEN+1);
}
ptr = source_p->localClient->confs.head;
@ -443,7 +447,11 @@ int register_local_user(struct Client *client_p, struct Client *source_p,
sendto_realops_flags(FLAGS_CCONN, L_ALL,
"Client connecting: %s (%s@%s) [%s] {%s} [%s]",
nick, source_p->username, source_p->host,
#ifdef HIDE_SPOOF_IPS
IsIPSpoof(client_p) ? "255.255.255.255" : ipaddr,
#else
ipaddr,
#endif
get_client_class(source_p), source_p->info);
/* If they have died in send_* don't do anything. */
@ -509,10 +517,11 @@ int register_local_user(struct Client *client_p, struct Client *source_p,
* side effects - This function is called when a remote client
* is introduced by a server.
*/
int register_remote_user(struct Client *client_p, struct Client *source_p,
int
register_remote_user(struct Client *client_p, struct Client *source_p,
char *nick, char *username)
{
struct User* user = source_p->user;
struct User *user = source_p->user;
struct Client *target_p;
assert(NULL != source_p);
@ -523,7 +532,7 @@ int register_remote_user(struct Client *client_p, struct Client *source_p,
user->last = CurrentTime;
strlcpy(source_p->username, username, USERLEN);
strlcpy(source_p->username, username, USERLEN + 1);
SetClient(source_p);
@ -611,6 +620,7 @@ introduce_client(struct Client *client_p, struct Client *source_p,
ubuf[0] = '+';
ubuf[1] = '\0';
}
/* arghhh one could try not introducing new nicks to ll leafs
* but then you have to introduce them "on the fly" in SJOIN
* not fun.
@ -693,7 +703,8 @@ introduce_client(struct Client *client_p, struct Client *source_p,
* NOTE: this doesn't allow a hostname to begin with a dot and
* will not allow more dots than chars.
*/
static int valid_hostname(const char* hostname)
static int
valid_hostname(const char* hostname)
{
const char* p = hostname;
@ -726,7 +737,8 @@ static int valid_hostname(const char* hostname)
* Allow '.' in username to allow for "first.last"
* style of username
*/
static int valid_username(const char* username)
static int
valid_username(const char* username)
{
int dots = 0;
const char *p = username;
@ -790,6 +802,16 @@ report_and_set_user_flags(struct Client *source_p,struct ConfItem *aconf)
":%s NOTICE %s :*** You are exempt from K/D/G lines. congrats.",
me.name,source_p->name);
}
/* The else here is to make sure that G line exempt users
* do not get noticed twice.
*/
else if (IsConfExemptGline(aconf))
{
SetExemptGline(source_p);
sendto_one(source_p,
":%s NOTICE %s :*** You are exempt from G lines.",
me.name,source_p->name);
}
/* If this user is exempt from user limits set it F lined" */
if(IsConfExemptLimits(aconf))
@ -818,7 +840,8 @@ report_and_set_user_flags(struct Client *source_p,struct ConfItem *aconf)
* output -
* side effects -
*/
int do_local_user(char* nick, struct Client* client_p, struct Client* source_p,
int
do_local_user(char* nick, struct Client* client_p, struct Client* source_p,
char* username, char *host, char *server, char *realname)
{
struct User* user;
@ -856,7 +879,7 @@ int do_local_user(char* nick, struct Client* client_p, struct Client* source_p,
/*
* save the username in the client
*/
strlcpy(source_p->username, username, USERLEN);
strlcpy(source_p->username, username, USERLEN + 1);
}
}
return 0;
@ -869,7 +892,8 @@ int do_local_user(char* nick, struct Client* client_p, struct Client* source_p,
* output -
* side effects -
*/
int do_remote_user(char* nick, struct Client* client_p, struct Client* source_p,
int
do_remote_user(char* nick, struct Client* client_p, struct Client* source_p,
char* username, char *host, char *server, char *realname,
char *id)
{
@ -892,8 +916,8 @@ int do_remote_user(char* nick, struct Client* client_p, struct Client* source_p,
strlcpy(source_p->host, host, HOSTLEN);
strlcpy(source_p->vhost, host, HOSTLEN);
strlcpy(source_p->info, realname, REALLEN);
if (id)
strcpy(source_p->user->id, id);
if (id != NULL)
strcpy(source_p->user->id, id);
return register_remote_user(client_p, source_p, source_p->name, username);
}
@ -906,7 +930,8 @@ int do_remote_user(char* nick, struct Client* client_p, struct Client* source_p,
* parv[1] - username to change mode for
* parv[2] - modes to change
*/
int user_mode(struct Client *client_p, struct Client *source_p, int parc, char *parv[])
int
user_mode(struct Client *client_p, struct Client *source_p, int parc, char *parv[])
{
int flag;
int i;
@ -915,10 +940,9 @@ int user_mode(struct Client *client_p, struct Client *source_p, int parc, char *
int what, setflags;
int badflag = NO; /* Only send one bad flag notice */
char buf[BUFSIZE];
dlink_node *ptr;
struct ConfItem *aconf;
what = MODE_ADD;
if (parc < 2)
{
sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS),
@ -971,7 +995,7 @@ int user_mode(struct Client *client_p, struct Client *source_p, int parc, char *
/*
* parse mode change string(s)
*/
for (p = &parv[2]; p && *p; p++ )
for (p = &parv[2]; p && *p; p++)
for (m = *p; *m; m++)
switch(*m)
{
@ -1009,32 +1033,13 @@ int user_mode(struct Client *client_p, struct Client *source_p, int parc, char *
{
dlink_node *dm;
ptr = source_p->localClient->confs.head;
aconf = ptr->data;
detach_conf(source_p,aconf);
source_p->flags2 &= ~(FLAGS2_OPER_GLOBAL_KILL|
FLAGS2_OPER_REMOTE|
FLAGS2_OPER_UNKLINE|
FLAGS2_OPER_GLINE|
FLAGS2_OPER_N|
FLAGS2_OPER_K|
FLAGS2_OPER_ADMIN);
source_p->flags2 &= ~FLAGS2_OPER_FLAGS;
dm = dlinkFind(&oper_list,source_p);
if(dm != NULL)
{
dlinkDelete(dm,&oper_list);
free_dlink_node(dm);
}
/*
20001216:
reattach to "old" iline
- einride
*/
remove_one_ip(&source_p->localClient->ip);
check_client(source_p->servptr, source_p, source_p->username);
}
}
break;
@ -1106,7 +1111,7 @@ int user_mode(struct Client *client_p, struct Client *source_p, int parc, char *
me.name,parv[0]);
source_p->umodes &= ~FLAGS_NCHANGE; /* only tcm's really need this */
}
if (MyConnect(source_p) && (source_p->umodes & FLAGS_ADMIN) && !IsOperAdmin(source_p))
{
sendto_one(source_p,":%s NOTICE %s :*** You need oper and A flag for +a",
@ -1144,8 +1149,9 @@ int user_mode(struct Client *client_p, struct Client *source_p, int parc, char *
/*
* send the MODE string for user (user) to connection client_p
* -avalon
*/
void send_umode(struct Client *client_p, struct Client *source_p, int old,
*/
void
send_umode(struct Client *client_p, struct Client *source_p, int old,
int sendmask, char *umode_buf)
{
int i;
@ -1163,8 +1169,8 @@ void send_umode(struct Client *client_p, struct Client *source_p, int old,
for (i = 0; user_modes[i].letter; i++ )
{
flag = user_modes[i].mode;
if (MyClient(source_p) && !(flag & sendmask))
continue;
if ((flag & old) && !(source_p->umodes & flag))
{
@ -1179,10 +1185,9 @@ void send_umode(struct Client *client_p, struct Client *source_p, int old,
}
else if (!(flag & old) && (source_p->umodes & flag))
{
if (what == MODE_ADD) {
if (what == MODE_ADD)
*m++ = user_modes[i].letter;
} else
else
{
what = MODE_ADD;
*m++ = '+';
@ -1203,7 +1208,8 @@ void send_umode(struct Client *client_p, struct Client *source_p, int old,
* output - NONE
* side effects - Only send ubuf out to servers that know about this client
*/
void send_umode_out(struct Client *client_p,
void
send_umode_out(struct Client *client_p,
struct Client *source_p,
int old)
{
@ -1229,7 +1235,6 @@ void send_umode_out(struct Client *client_p,
if (client_p && MyClient(client_p))
send_umode(client_p, source_p, old, ALL_UMODES, buf);
}
/*
@ -1239,7 +1244,8 @@ void send_umode_out(struct Client *client_p,
* output - NONE
* side effects -
*/
void user_welcome(struct Client *source_p)
void
user_welcome(struct Client *source_p)
{
sendto_one(source_p, form_str(RPL_WELCOME), me.name, source_p->name,
ServerInfo.network_name, source_p->name );
@ -1301,7 +1307,8 @@ void user_welcome(struct Client *source_p)
* outupt - -1 if exiting 0 if ok
* side effects -
*/
static int check_X_line(struct Client *client_p, struct Client *source_p)
static int
check_X_line(struct Client *client_p, struct Client *source_p)
{
struct ConfItem *aconf;
char *reason;
@ -1338,7 +1345,7 @@ static int check_X_line(struct Client *client_p, struct Client *source_p)
get_client_name(client_p, HIDE_IP));
}
return 0;
return (0);
}
/*
@ -1353,8 +1360,8 @@ static int check_X_line(struct Client *client_p, struct Client *source_p)
* This could also be used by rsa oper routines.
*/
int oper_up( struct Client *source_p,
struct ConfItem *aconf )
int
oper_up( struct Client *source_p, struct ConfItem *aconf )
{
int old = (source_p->umodes & ALL_UMODES);
char *operprivs=NULL;
@ -1366,7 +1373,7 @@ int oper_up( struct Client *source_p,
if((int)aconf->hold)
{
source_p->umodes |= ((int)aconf->hold & ALL_UMODES);
if( !IsOperN(source_p) )
if (!IsOperN(source_p))
source_p->umodes &= ~FLAGS_NCHANGE;
sendto_one(source_p, ":%s NOTICE %s :*** Oper flags set from conf",
@ -1416,5 +1423,5 @@ int oper_up( struct Client *source_p,
source_p->name, operprivs);
SendMessageFile(source_p, &ConfigFileEntry.opermotd);
return 1;
return(1);
}

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: scache.c,v 1.2 2002/08/13 14:45:13 fishwaldo Exp $
* $Id: scache.c,v 1.3 2002/08/16 12:05:37 fishwaldo Exp $
*/
#include "stdinc.h"
@ -96,7 +96,7 @@ const char* find_or_add(const char* name)
ptr = (SCACHE*) MyMalloc(sizeof(SCACHE));
assert(0 != ptr);
strlcpy(ptr->name, name, HOSTLEN);
strlcpy(ptr->name, name, HOSTLEN + 1);
ptr->next = scache_hash[hash_index];
scache_hash[hash_index] = ptr;

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: send.c,v 1.3 2002/08/14 16:52:02 fishwaldo Exp $
* $Id: send.c,v 1.4 2002/08/16 12:05:37 fishwaldo Exp $
*/
#include "stdinc.h"
@ -532,18 +532,11 @@ sendto_channel_butone(struct Client *one, struct Client *from,
sendto_list_anywhere(one, from, &chptr->chanops,
&local_linebuf, &remote_linebuf, &uid_linebuf);
#ifdef REQUIRE_OANDV
sendto_list_anywhere(one, from, &chptr->chanops_voiced,
&local_linebuf, &remote_linebuf, &uid_linebuf);
#endif
sendto_list_anywhere(one, from, &chptr->voiced,
&local_linebuf, &remote_linebuf, &uid_linebuf);
#ifdef HALFOPS
sendto_list_anywhere(one, from, &chptr->halfops,
&local_linebuf, &remote_linebuf, &uid_linebuf);
#endif
sendto_list_anywhere(one, from, &chptr->peons,
&local_linebuf, &remote_linebuf, &uid_linebuf);
@ -742,12 +735,7 @@ sendto_common_channels_local(struct Client *user, const char *pattern, ...)
chptr = ptr->data;
sendto_list_local(&chptr->locchanops, &linebuf);
#ifdef REQUIRE_OANDV
sendto_list_local(&chptr->locchanops_voiced, &linebuf);
#endif
#ifdef HALFOPS
sendto_list_local(&chptr->lochalfops, &linebuf);
#endif
sendto_list_local(&chptr->locvoiced, &linebuf);
sendto_list_local(&chptr->locpeons, &linebuf);
sendto_list_local(&chptr->locchanadmins, &linebuf);
@ -799,15 +787,10 @@ sendto_channel_local(int type,
sendto_list_local(&chptr->locpeons, &linebuf);
case ONLY_CHANOPS_HALFOPS_VOICED:
sendto_list_local(&chptr->locvoiced, &linebuf);
#ifdef HALFOPS
case ONLY_CHANOPS_HALFOPS:
sendto_list_local(&chptr->lochalfops, &linebuf);
#endif
case ONLY_CHANOPS:
sendto_list_local(&chptr->locchanops, &linebuf);
#ifdef REQUIRE_OANDV
sendto_list_local(&chptr->locchanops_voiced, &linebuf);
#endif
case ONLY_CHANADMIN:
sendto_list_local(&chptr->locchanadmins, &linebuf);
}
@ -857,16 +840,10 @@ sendto_channel_remote(struct Client *one,
sendto_list_remote(one, from, &chptr->peons, caps, nocaps, &linebuf);
case ONLY_CHANOPS_HALFOPS_VOICED:
sendto_list_remote(one, from, &chptr->voiced, caps, nocaps, &linebuf);
#ifdef HALFOPS
case ONLY_CHANOPS_HALFOPS:
sendto_list_remote(one, from, &chptr->halfops, caps, nocaps, &linebuf);
#endif
case ONLY_CHANOPS:
sendto_list_remote(one, from, &chptr->chanops, caps, nocaps, &linebuf);
#ifdef REQUIRE_OANDV
sendto_list_remote(one, from, &chptr->chanops_voiced, caps, nocaps,
&linebuf);
#endif
case ONLY_CHANADMIN:
sendto_list_remote(one, from, &chptr->chanadmins, caps, nocaps, &linebuf);
}

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: vchannel.c,v 1.2 2002/08/13 14:45:13 fishwaldo Exp $
* $Id: vchannel.c,v 1.3 2002/08/16 12:05:37 fishwaldo Exp $
*/
#include "stdinc.h"
@ -479,23 +479,13 @@ pick_vchan_id(struct Channel *chptr)
return target_p->name;
}
#ifdef REQUIRE_OANDV
for (lp = chptr->chanops_voiced.head; lp; lp = lp->next)
if (!lp->next)
{
target_p = lp->data;
return target_p->name;
}
#endif
#ifdef HALFOPS
for (lp = chptr->halfops.head; lp; lp = lp->next)
if (!lp->next)
{
target_p = lp->data;
return target_p->name;
}
#endif
for (lp = chptr->voiced.head; lp; lp = lp->next)
if (!lp->next)
@ -510,7 +500,12 @@ pick_vchan_id(struct Channel *chptr)
target_p = lp->data;
return target_p->name;
}
for (lp = chptr->chanadmins.head; lp; lp = lp->next)
if (!lp->next)
{
target_p = lp->data;
return target_p->name;
}
return chptr->vchan_id;
}