+
+ c = ServerInstance->FindChan(parameter);
+ if (!c && !IS_OPER(source))
+ {
+ source->WriteNumeric(690, "%s :Target channel %s must exist to be set as a redirect.",source->nick.c_str(),parameter.c_str());
+ parameter.clear();
+ return MODEACTION_DENY;
+ }
+
+ if (c && c->GetStatus(source) < STATUS_OP && !IS_OPER(source))
+ {
+ source->WriteNumeric(690, "%s :You must be opped on %s to set it as a redirect.",source->nick.c_str(),parameter.c_str());
+ parameter.clear();
+ return MODEACTION_DENY;
+ }
+
+ /*
+ * We used to do some checking for circular +L here, but there is no real need for this any more especially as we
+ * now catch +L looping in PreJoin. Remove it, since O(n) logic makes me sad, and we catch it anyway. :) -- w00t
+ */
+ channel->SetMode('L', parameter);
+ return MODEACTION_ALLOW;