isopped=iscreate=0;
}
- /* Check for "Q ban" */
- if (!IsService(np) && cs_bancheck(np,cp)) {
- /* They got kicked.. */
- return;
- }
+ /* Various things that can ban the user on join. Don't apply these to anyone
+ * with one of +k, +X, +o */
+ if (!IsService(np) && !IsOper(np) && !IsXOper(np)) {
+ /* Check for "Q ban" */
+ if (cs_bancheck(np,cp)) {
+ /* They got kicked.. */
+ return;
+ }
- /* Check for other ban lurking on channel which we are enforcing */
- if (!IsService(np) && CIsEnforce(rcp) && nickbanned_visible(np,cp)) {
- localkickuser(chanservnick,cp,np,"Banned.");
- return;
- }
+ /* Check for other ban lurking on channel which we are enforcing */
+ if (CIsEnforce(rcp) && nickbanned_visible(np,cp)) {
+ localkickuser(chanservnick,cp,np,"Banned.");
+ return;
+ }
- /* Check for +b chanlev flag */
- if (!IsService(np) && rcup && CUIsBanned(rcup)) {
- cs_banuser(NULL, cip, np, NULL);
- cs_timerfunc(cip);
- return;
- }
-
- /* Check for +k chan flag */
- if (!IsService(np) && CIsKnownOnly(rcp) && !(rcup && CUKnown(rcup))) {
- /* Don't ban if they are already "visibly" banned for some reason. */
- if (IsInviteOnly(cp) || (IsRegOnly(cp) && !IsAccount(np))) {
- localkickuser(chanservnick,cp,np,"Authorised users only.");
- } else {
- cs_banuser(NULL, cip, np, "Authorised users only.");
+ /* Check for +b chanlev flag */
+ if (rcup && CUIsBanned(rcup)) {
+ cs_banuser(NULL, cip, np, NULL);
cs_timerfunc(cip);
+ return;
+ }
+
+ /* Check for +k chan flag */
+ if (CIsKnownOnly(rcp) && !(rcup && CUKnown(rcup))) {
+ /* Don't ban if they are already "visibly" banned for some reason. */
+ if (IsInviteOnly(cp) || (IsRegOnly(cp) && !IsAccount(np))) {
+ localkickuser(chanservnick,cp,np,"Authorised users only.");
+ } else {
+ cs_banuser(NULL, cip, np, "Authorised users only.");
+ cs_timerfunc(cip);
+ }
+ return;
}
- return;
}
-
+
if (!rup || !rcup) {
/* They're not a registered user, so deop if it is a create */
if (isopped && !IsService(np)) {
}
int checkpassword(reguser *rup, const char *pass) {
+ if (!(*rup->password))
+ return 0;
+
if (!strncmp(rup->password, pass, PASSLEN))
return 1;
return 0;
int checkresponse(reguser *rup, const unsigned char *entropy, const char *response, CRAlgorithm algorithm) {
char usernamel[NICKLEN+1], *dp, *up;
+ if (!(*rup->password))
+ return 0;
+
for(up=rup->username,dp=usernamel;*up;)
*dp++ = ToLower(*up++);
*dp = '\0';
else
rcup=NULL;
- if (rcup && CUIsBanned(rcup) && !IsService(np)) {
- cs_banuser(changes, cp->index, np, NULL);
- continue;
- }
-
- /* chanflag +k checks; kick them if they "obviously" can't rejoin without a ban */
- if (!IsService(np) && CIsKnownOnly(rcp) && !(rcup && CUKnown(rcup))) {
- if (IsInviteOnly(cp) || (IsRegOnly(cp) && !IsAccount(np))) {
- localkickuser(chanservnick,cp,np,"Authorised users only.");
- } else {
- cs_banuser(NULL, cp->index, np, "Authorised users only.");
+ /* Various things that might ban the user - don't apply these to +o, +k or +X users */
+ if (!IsService(np) && !IsXOper(np) && !IsOper(np)) {
+ if (rcup && CUIsBanned(rcup)) {
+ cs_banuser(changes, cp->index, np, NULL);
+ continue;
+ }
+
+ /* chanflag +k checks; kick them if they "obviously" can't rejoin without a ban */
+ if (!CIsKnownOnly(rcp) && !(rcup && CUKnown(rcup))) {
+ if (IsInviteOnly(cp) || (IsRegOnly(cp) && !IsAccount(np))) {
+ localkickuser(chanservnick,cp,np,"Authorised users only.");
+ } else {
+ cs_banuser(NULL, cp->index, np, "Authorised users only.");
+ }
+ continue;
}
- continue;
}
if ((cp->users->content[i] & CUMODE_OP) && !IsService(np)) {
regchan *rcp;
int i,j;
- if (IsService(np))
+ if (IsService(np) || IsOper(np) || IsXOper(np))
return;
/* Avoid races: memcpy the channel array */
continue;
}
- if (IsService(np))
+ if (IsService(np) || IsOper(np) || IsXOper(np))
continue;
for (rbp=rcp->bans;rbp;rbp=rbp->next) {
for (i=0;(cip->channel) && i<cip->channel->users->hashsize;i++) {
if (cip->channel->users->content[i]!=nouser &&
(np=getnickbynumeric(cip->channel->users->content[i])) &&
- !IsService(np) &&
+ !IsService(np) && !IsOper(np) && !IsXOper(np) &&
nickmatchban_visible(np, rbp->cbp))
localkickuser(chanservnick, cip->channel, np, rbp->reason ? rbp->reason->content : "Banned.");
}