X-Git-Url: https://jfr.im/git/irc/quakenet/snircd-patchqueue.git/blobdiff_plain/edf9cf79bb5c08e4ae1154248231c0228c755afe..540990d59da7b6ed6a206e3650a2e970bb082de5:/welcome.patch diff --git a/welcome.patch b/welcome.patch index af396e0..a07b69a 100644 --- a/welcome.patch +++ b/welcome.patch @@ -77,7 +77,7 @@ ircd/ircd_lexer.l ircd/ircd_parser.y add PRIV_LOCAL_WELCOME PRIV_WELCOME -diff -r 8c7c9ff0f0ca include/client.h +diff -r 93eb31739cc6 include/client.h --- a/include/client.h +++ b/include/client.h @@ -142,6 +142,8 @@ @@ -89,7 +89,7 @@ diff -r 8c7c9ff0f0ca include/client.h PRIV_LAST_PRIV /**< number of privileges */ }; -diff -r 8c7c9ff0f0ca include/handlers.h +diff -r 93eb31739cc6 include/handlers.h --- a/include/handlers.h +++ b/include/handlers.h @@ -138,6 +138,7 @@ @@ -116,7 +116,7 @@ diff -r 8c7c9ff0f0ca include/handlers.h extern int ms_whois(struct Client*, struct Client*, int, char*[]); extern int ms_xquery(struct Client*, struct Client*, int, char*[]); extern int ms_xreply(struct Client*, struct Client*, int, char*[]); -diff -r 8c7c9ff0f0ca include/ircd_features.h +diff -r 93eb31739cc6 include/ircd_features.h --- a/include/ircd_features.h +++ b/include/ircd_features.h @@ -101,6 +101,7 @@ @@ -135,7 +135,7 @@ diff -r 8c7c9ff0f0ca include/ircd_features.h FEAT_HIS_STATS_w, FEAT_HIS_STATS_x, FEAT_HIS_STATS_y, -diff -r 8c7c9ff0f0ca include/msg.h +diff -r 93eb31739cc6 include/msg.h --- a/include/msg.h +++ b/include/msg.h @@ -196,6 +196,10 @@ @@ -149,7 +149,7 @@ diff -r 8c7c9ff0f0ca include/msg.h #define MSG_WALLCHOPS "WALLCHOPS" /* WC */ #define TOK_WALLCHOPS "WC" #define CMD_WALLCHOPS MSG_WALLCHOPS, TOK_WALLCHOPS -diff -r 8c7c9ff0f0ca include/numeric.h +diff -r 93eb31739cc6 include/numeric.h --- a/include/numeric.h +++ b/include/numeric.h @@ -116,6 +116,7 @@ @@ -169,7 +169,7 @@ diff -r 8c7c9ff0f0ca include/numeric.h #define ERR_SILELISTFULL 511 /* Undernet extension */ /* ERR_NOTIFYFULL 512 aircd */ /* ERR_TOOMANYWATCH 512 Numeric List: Dalnet */ -diff -r 8c7c9ff0f0ca include/welcome.h +diff -r 93eb31739cc6 include/welcome.h --- /dev/null +++ b/include/welcome.h @@ -0,0 +1,75 @@ @@ -248,7 +248,7 @@ diff -r 8c7c9ff0f0ca include/welcome.h +extern void welcome_stats(struct Client *sptr, const struct StatDesc *sd, char *param); + +#endif /* INCLUDED_welcome_h */ -diff -r 8c7c9ff0f0ca ircd/Makefile.in +diff -r 93eb31739cc6 ircd/Makefile.in --- a/ircd/Makefile.in +++ b/ircd/Makefile.in @@ -186,6 +186,7 @@ @@ -293,7 +293,7 @@ diff -r 8c7c9ff0f0ca ircd/Makefile.in whocmds.o: whocmds.c ../config.h ../include/whocmds.h \ ../include/channel.h ../include/ircd_defs.h ../include/res.h \ ../config.h ../include/client.h ../include/dbuf.h ../include/msgq.h \ -diff -r 8c7c9ff0f0ca ircd/client.c +diff -r 93eb31739cc6 ircd/client.c --- a/ircd/client.c +++ b/ircd/client.c @@ -177,6 +177,7 @@ @@ -321,7 +321,7 @@ diff -r 8c7c9ff0f0ca ircd/client.c #undef P { 0, 0 } }; -diff -r 8c7c9ff0f0ca ircd/ircd_features.c +diff -r 93eb31739cc6 ircd/ircd_features.c --- a/ircd/ircd_features.c +++ b/ircd/ircd_features.c @@ -366,6 +366,7 @@ @@ -340,7 +340,7 @@ diff -r 8c7c9ff0f0ca ircd/ircd_features.c F_B(HIS_STATS_w, 0, 1, 0), F_B(HIS_STATS_x, 0, 1, 0), F_B(HIS_STATS_y, 0, 1, 0), -diff -r 8c7c9ff0f0ca ircd/ircd_lexer.l +diff -r 93eb31739cc6 ircd/ircd_lexer.l --- a/ircd/ircd_lexer.l +++ b/ircd/ircd_lexer.l @@ -166,6 +166,8 @@ @@ -352,7 +352,7 @@ diff -r 8c7c9ff0f0ca ircd/ircd_lexer.l { NULL, 0 } }; static int ntokens; -diff -r 8c7c9ff0f0ca ircd/ircd_parser.y +diff -r 93eb31739cc6 ircd/ircd_parser.y --- a/ircd/ircd_parser.y +++ b/ircd/ircd_parser.y @@ -189,6 +189,7 @@ @@ -372,7 +372,7 @@ diff -r 8c7c9ff0f0ca ircd/ircd_parser.y TPRIV_PARANOID { $$ = PRIV_PARANOID; } ; yesorno: YES { $$ = 1; } | NO { $$ = 0; }; -diff -r 8c7c9ff0f0ca ircd/m_welcome.c +diff -r 93eb31739cc6 ircd/m_welcome.c --- /dev/null +++ b/ircd/m_welcome.c @@ -0,0 +1,292 @@ @@ -668,7 +668,7 @@ diff -r 8c7c9ff0f0ca ircd/m_welcome.c + /* and do it */ + return welcome_do(cptr, sptr, name, timestamp, who, text, flags); +} -diff -r 8c7c9ff0f0ca ircd/parse.c +diff -r 93eb31739cc6 ircd/parse.c --- a/ircd/parse.c +++ b/ircd/parse.c @@ -661,6 +661,15 @@ @@ -687,7 +687,7 @@ diff -r 8c7c9ff0f0ca ircd/parse.c /* This command is an alias for QUIT during the unregistered part of * of the server. This is because someone jumping via a broken web -diff -r 8c7c9ff0f0ca ircd/s_err.c +diff -r 93eb31739cc6 ircd/s_err.c --- a/ircd/s_err.c +++ b/ircd/s_err.c @@ -486,7 +486,7 @@ @@ -708,7 +708,7 @@ diff -r 8c7c9ff0f0ca ircd/s_err.c /* 510 */ { 0 }, /* 511 */ -diff -r 8c7c9ff0f0ca ircd/s_serv.c +diff -r 93eb31739cc6 ircd/s_serv.c --- a/ircd/s_serv.c +++ b/ircd/s_serv.c @@ -57,6 +57,7 @@ @@ -727,7 +727,7 @@ diff -r 8c7c9ff0f0ca ircd/s_serv.c /* * Pass on my client information to the new server -diff -r 8c7c9ff0f0ca ircd/s_stats.c +diff -r 93eb31739cc6 ircd/s_stats.c --- a/ircd/s_stats.c +++ b/ircd/s_stats.c @@ -54,6 +54,7 @@ @@ -752,7 +752,7 @@ diff -r 8c7c9ff0f0ca ircd/s_stats.c { 'x', "memusage", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_x, stats_meminfo, 0, "List usage information." }, -diff -r 8c7c9ff0f0ca ircd/s_user.c +diff -r 93eb31739cc6 ircd/s_user.c --- a/ircd/s_user.c +++ b/ircd/s_user.c @@ -63,6 +63,7 @@ @@ -773,10 +773,10 @@ diff -r 8c7c9ff0f0ca ircd/s_user.c } else { struct Client *acptr = user->server; -diff -r 8c7c9ff0f0ca ircd/welcome.c +diff -r 93eb31739cc6 ircd/welcome.c --- /dev/null +++ b/ircd/welcome.c -@@ -0,0 +1,611 @@ +@@ -0,0 +1,628 @@ +/* + * IRC - Internet Relay Chat, ircd/welcome.c + * Copyright (C) 1990 Jarkko Oikarinen and @@ -840,8 +840,9 @@ diff -r 8c7c9ff0f0ca ircd/welcome.c +static int +welcome_make(int name, char *text, char *who, time_t timestamp) +{ -+ /* valid range */ + assert(WelcomeIsValid(name)); ++ assert(NULL != text); ++ assert(NULL != who); + + /* store it */ + ircd_strncpy(WelcomeArray[name].text, text, WELCOMELEN); @@ -866,10 +867,10 @@ diff -r 8c7c9ff0f0ca ircd/welcome.c +welcome_propagate(struct Client *cptr, struct Client *sptr, int nameint, + time_t timestamp, char *who, char *text, unsigned int flags) +{ -+ /* must be global */ -+ assert(!(flags & WELCOME_LOCAL)); + assert(NULL != sptr); + assert(NULL != cptr); ++ assert(nameint > 0 && nameint <= WELCOME_MAX_ENTRIES); ++ assert(!(flags & WELCOME_LOCAL)); + + sendcmdto_serv_butone(sptr, CMD_WELCOME, cptr, "* %s%s%d %Tu %s :%s", + (flags & WELCOME_ANNOUNCE) ? "$" : "", (flags & WELCOME_INSERT) ? "+" : "", @@ -888,10 +889,10 @@ diff -r 8c7c9ff0f0ca ircd/welcome.c +int +welcome_resend(struct Client *cptr, int nameint, int namearray) +{ -+ /* must be valid */ -+ assert(WelcomeIsValid(namearray)); + assert(NULL != cptr); + assert(IsServer(cptr)); ++ assert(nameint > 0 && nameint <= WELCOME_MAX_ENTRIES); ++ assert(WelcomeIsValid(namearray)); + + sendcmdto_one(&me, CMD_WELCOME, cptr, "* %d %Tu %s :%s", + nameint, WelcomeTS(namearray), WelcomeWho(namearray), WelcomeText(namearray)); @@ -952,6 +953,11 @@ diff -r 8c7c9ff0f0ca ircd/welcome.c + char msg[BUFSIZE]; /* msg for logging */ + int new = 0; + ++ assert(NULL != cptr); ++ assert(NULL != sptr); ++ assert(nameint > 0 && nameint <= WELCOME_MAX_ENTRIES); ++ assert(WelcomeIsValid(namearray)); ++ + /* debug */ + Debug((DEBUG_DEBUG, "welcome_set(\"%s\", \"%s\", %d, %d, %Tu, \"%s\", \"%s\", 0x%04x)", + cli_name(cptr), cli_name(sptr), nameint, namearray, timestamp, who, text, flags)); @@ -1004,6 +1010,11 @@ diff -r 8c7c9ff0f0ca ircd/welcome.c + int empty = namearray; /* first empty spot in array after namearray */ + int end = WELCOME_MAX_ENTRIES -1; /* last element to check in array */ + ++ assert(NULL != cptr); ++ assert(NULL != sptr); ++ assert(nameint > 0 && nameint <= WELCOME_MAX_ENTRIES); ++ assert(WelcomeIsValid(namearray)); ++ + /* debug */ + Debug((DEBUG_DEBUG, "welcome_unset(\"%s\", \"%s\", %d, %d, %Tu, \"%s\", 0x%04x)", + cli_name(cptr), cli_name(sptr), nameint, namearray, timestamp, who, flags)); @@ -1059,6 +1070,11 @@ diff -r 8c7c9ff0f0ca ircd/welcome.c + int end = WELCOME_MAX_ENTRIES -1; /* last element to check in array */ + int last = end; /* last welcome message to feed to welcome_unset */ + ++ assert(NULL != cptr); ++ assert(NULL != sptr); ++ assert(nameint > 0 && nameint <= WELCOME_MAX_ENTRIES); ++ assert(WelcomeIsValid(namearray)); ++ + /* debug */ + Debug((DEBUG_DEBUG, "welcome_insert(\"%s\", \"%s\", %d, %d, %Tu, \"%s\", \"%s\", 0x%04x)", + cli_name(cptr), cli_name(sptr), nameint, namearray, timestamp, who, text, flags)); @@ -1123,7 +1139,6 @@ diff -r 8c7c9ff0f0ca ircd/welcome.c +{ + int nameint = atoi(name); /* transform to int */ + int namearray = nameint - 1; /* used to test the array element */ -+ int max = WELCOME_MAX_ENTRIES; /* max number of entries */ + + assert(NULL != cptr); + assert(NULL != sptr); @@ -1153,11 +1168,11 @@ diff -r 8c7c9ff0f0ca ircd/welcome.c + if (IsUser(sptr)) + sendcmdto_one(&me, CMD_NOTICE, sptr, + "%C :WELCOME: Invalid message number %s - should between 1 and %d", -+ sptr, name, max); ++ sptr, name, WELCOME_MAX_ENTRIES); + else + protocol_violation(cptr, + "WELCOME: Invalid message number %s from %C - should be between 1 and %d", -+ name, sptr, max); ++ name, sptr, WELCOME_MAX_ENTRIES); + return 0; + } + @@ -1178,6 +1193,7 @@ diff -r 8c7c9ff0f0ca ircd/welcome.c + + /* must be true by now */ + assert(WelcomeIsValid(namearray)); ++ assert(nameint > 0 && nameint <= WELCOME_MAX_ENTRIES); + + /* cannot unset welcome that is not set */ + if (!WelcomeIsSet(namearray) && EmptyString(text)) { @@ -1213,9 +1229,9 @@ diff -r 8c7c9ff0f0ca ircd/welcome.c + * we got a newer one + * or when timestamps are the same and our text is 'smaller' + */ -+ else if ((timestamp < WelcomeTS(namearray)) || /* we got a newer one */ -+ ((timestamp == WelcomeTS(namearray)) && /* same timestamp */ -+ (ircd_strcmp(WelcomeText(namearray), text) < 0))) { /* our text is 'smaller' */ ++ else if ((timestamp < WelcomeTS(namearray)) || /* we got a newer one */ ++ ((timestamp == WelcomeTS(namearray)) && /* same timestamp */ ++ (strcmp(WelcomeText(namearray), text) < 0))) { /* our text is 'smaller' */ + /* burst or burst ack, cptr gets our version from the burst */ + if (IsBurstOrBurstAck(cptr)) + return 0; @@ -1231,7 +1247,7 @@ diff -r 8c7c9ff0f0ca ircd/welcome.c + * compare new message with old message + */ + if (IsUser(sptr) && (MyUser(sptr) || (flags & WELCOME_LOCAL))) { -+ if (ircd_strcmp(text, WelcomeText(namearray)) == 0) { ++ if (strcmp(text, WelcomeText(namearray)) == 0) { /* use strcmp because the user may wish to change case */ + sendcmdto_one(&me, CMD_NOTICE, sptr, + "%C :WELCOME: Cannot change %s message for %s - nothing to change", + sptr, (flags & WELCOME_LOCAL) ? "local" : "global", name); @@ -1241,7 +1257,8 @@ diff -r 8c7c9ff0f0ca ircd/welcome.c + } + + /* do not insert for last global/local entry and when not set yet */ -+ if ((flags & WELCOME_INSERT) && ((!WelcomeIsSet(namearray)) || (nameint == max))) ++ if ((flags & WELCOME_INSERT) && ++ ((!WelcomeIsSet(namearray)) || (nameint == WELCOME_MAX_ENTRIES))) + flags &= ~WELCOME_INSERT; + + /* unset */