X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/27ce0548659b866469bb01b639aab0682a4ea667..2af7cf5058dcf0f326292e32c52e04ff52bc1252:/request/sqrequest.c diff --git a/request/sqrequest.c b/request/sqrequest.c index 790e104e..1857b575 100644 --- a/request/sqrequest.c +++ b/request/sqrequest.c @@ -14,7 +14,9 @@ #include "../lib/irc_string.h" #include "../core/schedule.h" #include "../core/config.h" +/* #include "../spamscan2/spamscan2.h" +*/ #include #include @@ -48,7 +50,7 @@ requestrec *nextreql, *lastreql; requestrec *nextreqq, *lastreqq; -requestrec *nextqreq, *lastqreq; +static requestrec *nextqreq, *lastqreq; extern nick *rqnick; int rlstate; @@ -104,12 +106,13 @@ unsigned int rq_countchanusers(channel *cp) { * as part of the process. */ -void qr_result(requestrec *req, int outcome, char failcode, char *message, ...) { +static void qr_result(requestrec *req, int outcome, char failcode, char *message, ...) __attribute__ ((format (printf, 4, 5))); +static void qr_result(requestrec *req, int outcome, char failcode, char *message, ...) { sstring *user, *password; requestrec **rh; char msgbuf[512]; va_list va; - nick *lnp, *qnp, *np, *tnp, *snp; + nick *np, *tnp, *snp; char now[50]; time_t now_ts; unsigned int unique, total; @@ -167,53 +170,30 @@ void qr_result(requestrec *req, int outcome, char failcode, char *message, ...) strftime(now, sizeof(now), "%c", localtime(&now_ts)); fprintf(rq_logfd, "%s: request (%s) for %s (%d unique users, " - "%d total users) from %s: Request was %s (%c).\n", now, + "%d total users) from %s!%s@%s%s%s: Request was %s (%c).\n", now, (req->what == QR_CSERVE) ? RQ_QNICK : RQ_SNICK, - req->cip->name->content, unique, total, tnp->nick, + req->cip->name->content, unique, total, + tnp->nick, tnp->ident, tnp->host->name->content, IsAccount(tnp)?"/":"", IsAccount(tnp)?tnp->authname:"", (outcome == QR_OK) ? "accepted" : "denied", failcode); fflush(rq_logfd); } if (outcome==QR_OK) { - if (req->what == QR_CSERVE) { - /* Delete L, add Q. Check that they both exist first, though. */ - - if (!(lnp=getnickbynick(RQ_LNICK)) || !(qnp=getnickbynick(RQ_QNICK))) { - sendnoticetouser(rqnick, tnp, - "Error: Cannot find %s and %s on the network. " - "Please request again later.", RQ_LNICK, RQ_QNICK); - free(req); - return; - } - - if ( !IsAccount(lnp) ) { - sendnoticetouser(rqnick, tnp, "Internal Error Occured: L is not authed. Contact #help"); - free(req); - return; - } - - /* /msg Q ADDCHAN */ - sendmessagetouser(rqnick, qnp, "ADDCHAN %s +ap #%s upgrade", - req->cip->name->content, - np->authname); - - sendnoticetouser(rqnick, tnp, "Adding %s to channel, please wait...", - RQ_QNICK); - } else if (req->what == QR_SPAMSCAN) { + if (req->what == QR_SPAMSCAN) { /* Add S */ if (!(snp=getnickbynick(RQ_SNICK))) { sendnoticetouser(rqnick, tnp, - "Error: Cannot find %s on the network. " - "Please request again later.", RQ_SNICK); + "Cannot find %s on the network. " + "Please try your request again later.", RQ_SNICK); free(req); return; } - sendnoticetouser(rqnick, tnp, "Requirements met, %s should be added. " - "Contact #help should further assistance be required.", - RQ_SNICK); + sendnoticetouser(rqnick, tnp, "Success! %s has been added to '%s' " + "(contact #help if you require further assistance).", + RQ_SNICK, req->cip->name->content); /* auth */ user = (sstring *)getcopyconfigitem("request", "user", "R", 30); @@ -223,8 +203,9 @@ void qr_result(requestrec *req, int outcome, char failcode, char *message, ...) freesstring(password); /* /msg S addchan default */ - //sendmessagetouser(rqnick, snp, "ADDCHAN %s default +op", req->cip->name->content); + sendmessagetouser(rqnick, snp, "ADDCHAN %s default +o", req->cip->name->content); +/* { spamscan_channelprofile *cp; spamscan_channelsettings *cs; @@ -262,6 +243,7 @@ void qr_result(requestrec *req, int outcome, char failcode, char *message, ...) } } } +*/ /* we do not put the request into another queue, so free it here */ free(req); @@ -299,7 +281,7 @@ void qr_result(requestrec *req, int outcome, char failcode, char *message, ...) * Checks that a channel is beeeeg enough for teh Q */ -int qr_checksize(chanindex *cip, int what, char *failcode) { +static int qr_checksize(chanindex *cip, int what, char *failcode) { chanstats *csp; channel *cp; nick *np, *qbot; @@ -415,7 +397,7 @@ int qr_checksize(chanindex *cip, int what, char *failcode) { * 11:12 -L(TheLBot@lightweight.quakenet.org)- End of chanlev for #twilightzone. */ -void qr_handlenotice(nick *sender, char *message) { +void qr_handle_notice(nick *sender, char *message) { char *ch, *chop; chanindex *cip; requestrec *rrp1, *rrp2; @@ -423,41 +405,17 @@ void qr_handlenotice(nick *sender, char *message) { int delrequest = 0, state, who; requestrec *nextreq; -/* logcp = findchannel("#qnet.request"); - - if (logcp) - sendmessagetochannel(rqnick, logcp, "%s: %s - %d %d %x %x", sender->nick, message, rlstate, rqstate, nextreql, nextreqq); -*/ if (!ircd_strcmp(sender->nick, RQ_QNICK) && nextqreq) { /* Message from Q */ if (!ircd_strcmp(message,"Done.")) { /* Q added the channel: delete from L and tell the user. */ /* If L has conspired to vanish between the request and the outcome, * we have a chan with Q and L... too bad. */ - - if ((np=getnickbynick(RQ_LNICK))) { - sendmessagetouser(rqnick, np, "SENDCHANLEV %s %s", - nextqreq->cip->name->content, RQ_QNICK); - - sendmessagetouser(rqnick, np, "DELCHAN %s", - nextqreq->cip->name->content); - } - - if ((np=getnickbynumeric(nextqreq->reqnumeric))) { - sendnoticetouser(rqnick, np, "Request completed. %s added.", RQ_QNICK); - } delrequest = 1; } else if (!ircd_strcmp(message,"That channel already exists.")) { - if ((np=getnickbynumeric(nextqreq->reqnumeric))) { - sendnoticetouser(rqnick, np, - "Your channel '%s' appears to have %s already " - "(it may be suspended).", nextqreq->cip->name->content, RQ_QNICK); - - qr_suspended++; delrequest = 1; - } } /* For either of the two messages above we want to delete the request @@ -473,8 +431,8 @@ void qr_handlenotice(nick *sender, char *message) { } } - if (!ircd_strcmp(sender->nick, RQ_LNICK) || !ircd_strcmp(sender->nick, RQ_QNICK)) { - who = !ircd_strcmp(sender->nick, RQ_LNICK) ? QR_L : QR_Q; + if (!ircd_strcmp(sender->nick, RQ_QNICK)) { + who = QR_Q; state = (who == QR_Q) ? rqstate : rlstate; nextreq = (who == QR_Q) ? nextreqq : nextreql; @@ -490,7 +448,6 @@ void qr_handlenotice(nick *sender, char *message) { (!ircd_strncmp(message,"Known users on",14) && who == QR_Q) ) { /* Looks like the right message. Let's find a channel name */ - for (ch=message;*ch;ch++) if (*ch=='#') break; @@ -504,12 +461,11 @@ void qr_handlenotice(nick *sender, char *message) { /* chop off any remaining words */ chop = ch; while (*(chop++)) { - if (*chop == ' ') { + if (*chop == ' ' || *chop == ':') { *chop = '\0'; break; } } - if (!(cip=findchanindex(ch))) { Error("qrequest",ERR_WARNING, "Unable to find channel from L/Q message: %s",ch); @@ -523,7 +479,6 @@ void qr_handlenotice(nick *sender, char *message) { rlstate = QRLstate_AWAITINGUSER; else rqstate = QRLstate_AWAITINGUSER; - return; } else { /* Uh-oh, not the channel we wanted. Something is fucked @@ -587,7 +542,6 @@ void qr_handlenotice(nick *sender, char *message) { /* Oh dear, we got to the end of the chanlev in this state. * This means that we didn't find the user. */ - qr_result(nextreq, QR_FAILED, 'X', "Error: You are not known on %s.", nextreq->cip->name->content); @@ -632,13 +586,28 @@ void qr_handlenotice(nick *sender, char *message) { /* This is not the user you are looking for */ return; } - /* Check for owner flag. Both branches of this if will * take the request off the list, one way or the other. */ - if (strchr(ch, 'n')) { + + /* chop off any remaining words */ + chop = ch; + while (*(chop++)) { + if (*chop != ' ' ) { + break; + } + } + /* chop off any remaining words */ + ch = chop; + while (*(chop++)) { + if (*chop == ' ' || *chop == ':') { + *chop = '\0'; + break; + } + } + + if (strchr(ch, 'n')) { char failcode; /* They iz teh +n! */ - /* Note: We're checking for blocks kind of late, so the request system gets a chance to send other error messages first (like 'no chanstats', 'not known on channel', etc.). This is required @@ -646,15 +615,9 @@ void qr_handlenotice(nick *sender, char *message) { if (qr_checksize(nextreq->cip, nextreq->what, &failcode) && !qr_blockcheck(nextreq)) { qr_result(nextreq, QR_OK, '-', "OK"); } else { - if (nextreq->what == QR_CSERVE) { - qr_result(nextreq, QR_FAILED, failcode, - "Error: Sorry, Your channel '%s' does not meet the requirements " - "for %s. Please continue to use %s.", nextreq->cip->name->content, RQ_QNICK, RQ_LNICK); - } else { qr_result(nextreq, QR_FAILED, failcode, "Error: Sorry, Your channel '%s' does not require %s. Please try again in a few days.", nextreq->cip->name->content, RQ_SNICK); - } - + qr_toosmall++; } } else { @@ -706,57 +669,6 @@ void qr_handlenotice(nick *sender, char *message) { */ int qr_requestq(nick *rqnick, nick *sender, channel *cp, nick *lnick, nick *qnick) { - chanindex *cip = cp->index; - - /* Check: - * - we have some form of channel stats for the channel - * - * Note that the actual channel stats will not be checked - * until we're sure the user has +n on the channel. - */ - - if (rq_isspam(sender)) { - sendnoticetouser(rqnick, sender, "Error: Do not flood the request system." - " Try again in %s.", rq_longtoduration(rq_blocktime(sender))); - - return RQ_ERROR; - } - - if (!cip->exts[csext]) { - sendnoticetouser(rqnick, sender, - "Error: No historical record exists for %s.", - cip->name->content); - - qr_nohist++; - - return RQ_ERROR; - } - - /* Request stats from L */ - sendmessagetouser(rqnick, lnick, "CHANLEV %s", cip->name->content); - - /* Sort out a request record */ - if (lastreql) { - lastreql->next = (requestrec *)malloc(sizeof(requestrec)); - lastreql=lastreql->next; - } else { - lastreql=nextreql=(requestrec *)malloc(sizeof(requestrec)); - } - - lastreql->next = NULL; - lastreql->cip = cip; - lastreql->what = QR_CSERVE; - lastreql->who = QR_L; - lastreql->reqnumeric = sender->numeric; - - if (rlstate == QRLstate_IDLE) - rlstate = QRLstate_AWAITINGCHAN; - - sendnoticetouser(rqnick, sender, - "Checking your %s access. " - "This may take a while, please be patient...", RQ_LNICK); - - /* we don't know yet whether the request was successful */ return RQ_UNKNOWN; } @@ -816,32 +728,12 @@ int qr_instantrequestq(nick *sender, channel *cp) { return RQ_OK; } -int qr_requests(nick *rqnick, nick *sender, channel *cp, nick *lnick, nick *qnick) { +int qr_requests(nick *rqnick, nick *sender, channel *cp, nick *qnick) { chanindex *cip = cp->index; - int who = 0; requestrec *nextreq, *lastreq; - if (rq_isspam(sender)) { - sendnoticetouser(rqnick, sender, "Error: Do not flood the request system." - " Try again in %s.", rq_longtoduration(rq_blocktime(sender))); - - return RQ_ERROR; - } - /* check which service is on the channel */ - if (getnumerichandlefromchanhash(cp->users, lnick->numeric) != NULL) { - /* we've found L */ - who = QR_L; - - /* Request stats from L */ - sendmessagetouser(rqnick, lnick, "CHANLEV %s", cip->name->content); - - if (rlstate == QRLstate_IDLE) - rlstate = QRLstate_AWAITINGCHAN; - } else if (getnumerichandlefromchanhash(cp->users, qnick->numeric) != NULL) { - /* we've found Q */ - who = QR_Q; - + if (getnumerichandlefromchanhash(cp->users, qnick->numeric) != NULL) { /* Request stats from Q */ sendmessagetouser(rqnick, qnick, "CHANLEV %s", cip->name->content); @@ -849,8 +741,8 @@ int qr_requests(nick *rqnick, nick *sender, channel *cp, nick *lnick, nick *qnic rqstate = QRLstate_AWAITINGCHAN; } /* 'else' cannot happen as R has already checked whether the user has L or Q */ - lastreq = (who == QR_Q) ? lastreqq : lastreql; - nextreq = (who == QR_Q) ? nextreqq : nextreql; + lastreq = lastreqq; + nextreq = nextreqq; /* Sort out a request record */ if (lastreq) { @@ -865,18 +757,13 @@ int qr_requests(nick *rqnick, nick *sender, channel *cp, nick *lnick, nick *qnic lastreq->what = QR_SPAMSCAN; lastreq->reqnumeric = sender->numeric; - if (who == QR_Q) { - nextreqq = nextreq; - lastreqq = lastreq; - } else { - nextreql = nextreq; - lastreql = lastreq; - } + nextreqq = nextreq; + lastreqq = lastreq; - sendnoticetouser(rqnick, sender, - "Checking your %s access. " + sendnoticetouser(rqnick, sender, + "Checking your %s access in '%s'. " "This may take a while, please be patient...", - who == QR_Q ? RQ_QNICK : RQ_LNICK); + RQ_QNICK, cip->name->content); return RQ_UNKNOWN; } @@ -910,11 +797,11 @@ void qr_finirequest(void) { } void qr_requeststats(nick *rqnick, nick *np) { - sendnoticetouser(rqnick, np, "- Suspended (Q): %d", qr_suspended); - sendnoticetouser(rqnick, np, "- No chanstats (Q/S): %d", qr_nohist); - sendnoticetouser(rqnick, np, "- Too small (Q/S): %d", qr_toosmall); - sendnoticetouser(rqnick, np, "- User was not on chanlev (Q/S): %d", qr_nochanlev); - sendnoticetouser(rqnick, np, "- User was not the owner (Q/S): %d", qr_notowner); + sendnoticetouser(rqnick, np, "- Suspended (S): %d", qr_suspended); + sendnoticetouser(rqnick, np, "- No chanstats (S): %d", qr_nohist); + sendnoticetouser(rqnick, np, "- Too small (S): %d", qr_toosmall); + sendnoticetouser(rqnick, np, "- User was not on chanlev (S): %d", qr_nochanlev); + sendnoticetouser(rqnick, np, "- User was not the owner (S): %d", qr_notowner); sendnoticetouser(rqnick, np, "- A: %d", qr_a); sendnoticetouser(rqnick, np, "- B: %d", qr_b); sendnoticetouser(rqnick, np, "- C: %d", qr_c);