diff -uNrd ircd-ratbox-1.5/contrib/Makefile.in ircd-ratbox-1.5.unreject/contrib/Makefile.in
--- ircd-ratbox-1.5/contrib/Makefile.in	Sat Sep  6 15:17:59 2003
+++ ircd-ratbox-1.5.unreject/contrib/Makefile.in	Tue Jun  1 10:20:03 2004
@@ -37,6 +37,7 @@
   m_okick.c			\
   m_opme.c			\
   m_omode.c			\
+  m_unreject.c			\
   spy_admin_notice.c		\
   spy_info_notice.c		\
   spy_links_notice.c		\
diff -uNrd ircd-ratbox-1.5/contrib/m_unreject.c ircd-ratbox-1.5.unreject/contrib/m_unreject.c
--- ircd-ratbox-1.5/contrib/m_unreject.c	Thu Jan  1 01:00:00 1970
+++ ircd-ratbox-1.5.unreject/contrib/m_unreject.c	Tue Jun  1 17:22:34 2004
@@ -0,0 +1,98 @@
+/*
+ *  ircd-ratbox: A slightly useful ircd.
+ *  m_unreject.c - Removes a ip from the rejectcache
+ *
+ *  Copyright (C) 2004 Hybrid Development Team
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 1, or (at your option)
+ *  any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#include "stdinc.h"
+#include "handlers.h"
+#include "client.h"
+#include "common.h"
+#include "ircd.h"
+#include "irc_string.h"
+#include "numeric.h"
+#include "fdlist.h"
+#include "s_bsd.h"
+#include "s_conf.h"
+#include "s_log.h"
+#include "s_serv.h"
+#include "send.h"
+#include "msg.h"
+#include "hash.h"
+#include "parse.h"
+#include "modules.h"
+
+static void mo_unreject(struct Client *client_p, struct Client *source_p,
+                    int parc, char *parv[]);
+
+struct Message unreject_msgtab = {
+	"UNREJECT", 2, 2, 1, 0, MFLG_SLOW, 0,
+	{m_ignore, m_ignore, m_ignore, m_ignore, mo_unreject}
+
+};
+
+#ifndef STATIC_MODULES
+void
+_modinit(void)
+{
+	mod_add_cmd(&unreject_msgtab);
+}
+
+void
+_moddeinit(void)
+{
+	mod_del_cmd(&unreject_msgtab);
+}
+const char *_version = "$Revision: 0.4 $";
+#endif
+
+static void mo_unreject(struct Client *client_p, struct Client *source_p,
+                   int parc, char *parv[])
+{		 
+	struct in_addr dummy;
+
+	if(parc > 2)
+	{
+		sendto_one(source_p, ":%s NOTICE %s :Too many arguments",
+			me.name, source_p->name);
+		return;
+	}
+
+	if ( (!inetpton(AF_INET, parv[1], &dummy)) 
+#ifdef IPV6
+		|| (!inetpton(AF_INET6, parv[1], &dummy)) 
+#endif
+		)
+	{
+		sendto_one(source_p, ":%s NOTICE %s :Not a valid IP-address",
+			me.name, source_p->name);
+		return;
+	}
+
+	if (remove_reject((char *) parv[1]))
+	{
+		sendto_one(source_p, ":%s NOTICE %s :Removed %s from the rejectcache",
+			me.name, source_p->name, parv[1]);
+		return;
+	}
+
+	sendto_one(source_p, ":%s NOTICE %s :Couldnt find %s in the rejectcache",
+		me.name, source_p->name, parv[1]);
+
+}
diff -uNrd ircd-ratbox-1.5/include/reject.h ircd-ratbox-1.5.unreject/include/reject.h
--- ircd-ratbox-1.5/include/reject.h	Mon Mar 15 19:19:45 2004
+++ ircd-ratbox-1.5.unreject/include/reject.h	Tue Jun  1 09:13:55 2004
@@ -33,7 +33,7 @@
 int check_reject(struct Client *);
 void add_reject(struct Client *);
 void flush_reject(void);
-
+int remove_reject(char *);
 extern unsigned long reject_count;
 
 #endif
diff -uNrd ircd-ratbox-1.5/src/reject.c ircd-ratbox-1.5.unreject/src/reject.c
--- ircd-ratbox-1.5/src/reject.c	Thu May 20 01:19:32 2004
+++ ircd-ratbox-1.5.unreject/src/reject.c	Tue Jun  1 09:30:33 2004
@@ -167,3 +167,29 @@
 		patricia_remove(reject_tree, pnode);
 	}
 }
+
+
+int
+remove_reject(char *ip)
+{
+	patricia_node_t *pnode;
+	struct reject_data *rdata;
+	
+	/* Reject is disabled */
+	if(ConfigFileEntry.reject_after_count == 0 || ConfigFileEntry.reject_ban_time == 0 ||
+	   ConfigFileEntry.reject_duration == 0)
+		return 0;
+
+	pnode = match_string(reject_tree, (char *) ip);
+	if(pnode != NULL)
+	{
+		rdata = pnode->data;
+		rdata->time = 0;
+
+		reject_expires(NULL);
+
+		return 1;
+	}
+
+	return 0;
+}		
