Author: Kev <klmitch@mit.edu>
[ircu2.10.12-pk.git] / ircd / s_numeric.c
index 2fb84f419fc7b51e17dfe9c8ec8193196af7adb4..8d9602be122bbdd4216e6f7a8900f53ba7ab8978 100644 (file)
@@ -27,6 +27,7 @@
 #include "client.h"
 #include "hash.h"
 #include "ircd.h"
+#include "ircd_policy.h"
 #include "ircd_snprintf.h"
 #include "numnicks.h"
 #include "send.h"
@@ -78,11 +79,28 @@ int do_numeric(int numeric, int nnn, struct Client *cptr, struct Client *sptr,
 
   ircd_snprintf(0, num, sizeof(num), "%03d", numeric);
 
-  if (acptr)
-    sendcmdto_one(sptr, num, num, acptr, "%C %s", acptr, parv[2]);
-  else
-    sendcmdto_channel_butone(sptr, num, num, achptr, cptr,
-                            SKIP_DEAF | SKIP_BURST, "%H %s", achptr, parv[2]);
+#ifdef HEAD_IN_SAND_REWRITE
+  /* Since 2.10.10.pl14 we rewrite numerics from remote servers to appear to
+   * come from the local server
+   */
+  if (IsOper(acptr)) {
+#endif
+    if (acptr)
+      sendcmdto_one(sptr, num, num, acptr, "%C %s", acptr, parv[2]);
+    else
+      sendcmdto_channel_butone(sptr, num, num, achptr, cptr,
+                              SKIP_DEAF | SKIP_BURST, "%H %s", achptr,
+                              parv[2]);
+#ifdef HEAD_IN_SAND_REWRITE
+  } else {
+    if (acptr)
+      sendcmdto_one(&me, num, num, acptr, "%C %s", acptr, parv[2]);
+    else
+      sendcmdto_channel_butone(&me, num, num, achptr, cptr,
+                              SKIP_DEAF | SKIP_BURST, "%H %s", achptr,
+                              parv[2]);
+  }
+#endif
 
   return 0;
 }