diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/include/client.h ircd-hybrid-6.0/include/client.h
--- ircd-hybrid-6.0.orig/include/client.h	Sun May 27 18:51:22 2001
+++ ircd-hybrid-6.0/include/client.h	Sun May 27 18:50:49 2001
@@ -341,6 +341,7 @@
 #define FLAGS_AUSPEX       0x10000 /* See the invisible. */
 #define FLAGS_IDENTIFIED   0x20000 /* Registered and identified with NickServ -- MGS */
 #define FLAGS_CHCREATE    0x80000 /* Channel Creation Notices */
+#define FLAGS_BLOCK_NOTID   0x100000 /* Block messages from non-identified users */
 
 #define FLAGS_GOD          0x400000 /* greater deity */
 /* Last flag is 0x80000000 for 32-bit unsigned int */
@@ -397,18 +398,20 @@
 
 
 #define SEND_UMODES  (FLAGS_INVISIBLE | FLAGS_OPER | FLAGS_WALLOP | \
-                      FLAGS_IMMUNE | FLAGS_IDENTIFIED | FLAGS_NINVITE)
+                      FLAGS_IMMUNE | FLAGS_IDENTIFIED | FLAGS_NINVITE | \
+                      FLAGS_BLOCK_NOTID)
 /*
  * Only opers can have modes outside USER_UMODES.  If you change this
  * set, then also change the explanatory NOTICE in user_mode(). -dark
  */
-#define USER_UMODES  (FLAGS_INVISIBLE | FLAGS_WALLOP | FLAGS_NINVITE)
+#define USER_UMODES  (FLAGS_INVISIBLE | FLAGS_WALLOP | FLAGS_NINVITE | \
+                      FLAGS_BLOCK_NOTID)
 #define ALL_UMODES   (SEND_UMODES | FLAGS_SERVNOTICE | FLAGS_CCONN | \
                       FLAGS_REJ | FLAGS_SKILL | FLAGS_FULL | FLAGS_SPY | \
                       FLAGS_NCHANGE | FLAGS_OPERWALL | FLAGS_DEBUG | \
                       FLAGS_BOTS | FLAGS_EXTERNAL | FLAGS_LOCOP | \
                       FLAGS_GOD | FLAGS_IMMUNE | FLAGS_AUSPEX | \
-                      FLAGS_IDENTIFIED | FLAGS_CHCREATE)
+                      FLAGS_IDENTIFIED | FLAGS_CHCREATE | FLAGS_BLOCK_NOTID)
 
 #ifndef OPER_UMODES
 #define OPER_UMODES  (FLAGS_OPER | FLAGS_WALLOP | FLAGS_SERVNOTICE | \
@@ -481,6 +484,9 @@
 #define IsIdentifiedNick(x)     ((x)->umodes & FLAGS_IDENTIFIED)
 #define SetIdentifiedNick(x)    ((x)->umodes |= FLAGS_IDENTIFIED)
 #define ClearIdentifiedNick(x)  ((x)->umodes &= ~FLAGS_IDENTIFIED)
+#define IsBlockingUnidented(x)  ((x)->umodes & FLAGS_BLOCK_NOTID)
+#define SetBlockingUnidented(x) ((x)->umodes |= FLAGS_BLOCK_NOTID)
+#define ClearBlockingUnidented(x) ((x)->umodes &= ~FLAGS_BLOCK_NOTID)
 
 #ifdef REJECT_HOLD
 #define IsRejectHeld(x)         ((x)->flags & FLAGS_REJECT_HOLD)
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/include/numeric.h ircd-hybrid-6.0/include/numeric.h
--- ircd-hybrid-6.0.orig/include/numeric.h	Sun May 27 18:51:22 2001
+++ ircd-hybrid-6.0/include/numeric.h	Sun May 27 18:50:24 2001
@@ -361,4 +361,6 @@
 
 #define ERR_SILELISTFULL     511
 
+#define ERR_BLOCKING_NOTID   505
+
 #endif /* INCLUDED_numeric_h */
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/m_message.c ircd-hybrid-6.0/src/m_message.c
--- ircd-hybrid-6.0.orig/src/m_message.c	Sun May 27 18:51:22 2001
+++ ircd-hybrid-6.0/src/m_message.c	Sun May 27 18:50:24 2001
@@ -372,6 +372,12 @@
         }
 #endif
 
+      if (IsBlockingUnidented(acptr) && !IsIdentifiedNick(sptr)) {
+	 sendto_one(sptr, form_str(ERR_BLOCKING_NOTID),
+		    me.name, parv[0], nick);
+	 return 0;
+      }
+
       if (!is_silenced(sptr, acptr)) {
           if (!notice && MyConnect(sptr) &&
               acptr->user && acptr->user->away)
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/messages.tab ircd-hybrid-6.0/src/messages.tab
--- ircd-hybrid-6.0.orig/src/messages.tab	Sun May 27 18:51:22 2001
+++ ircd-hybrid-6.0/src/messages.tab	Sun May 27 18:50:24 2001
@@ -547,8 +547,8 @@
 /* 502 ERR_USERSDONTMATCH, */   ":%s 502 %s :Can't change mode for other users",
 /* 503 ERR_GHOSTEDCLIENT, */    ":%s 503 %s :Message could not be delivered to %s",
 /* 504 LAST ERR_LAST_ERR_MSG, */        ":%s 504 %s :Last Error Message",
-                (char *)NULL,
-/* 505 */       (char *)NULL,
+/* 505 ERR_BLOCKING_NOTID */    ":%s 505 %s :%s is blocking messages from unidentified users.  You must register and identify with NickServ before talking to this user.",
+                (char *)NULL,  
 /* 506 */       (char *)NULL,
 /* 507 */       (char *)NULL,
 /* 508 */       (char *)NULL,
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/messages_cust.tab ircd-hybrid-6.0/src/messages_cust.tab
--- ircd-hybrid-6.0.orig/src/messages_cust.tab	Sun May 27 18:51:22 2001
+++ ircd-hybrid-6.0/src/messages_cust.tab	Sun May 27 18:50:24 2001
@@ -548,8 +548,8 @@
 /* 502 ERR_USERSDONTMATCH, */   ":%s 502 %s :You can't change someone else's modes",
 /* 503 ERR_GHOSTEDCLIENT, */    ":%s 503 %s :Message could not be delivered to %s",
 /* 504 LAST ERR_LAST_ERR_MSG, */        ":%s 504 %s :Last Error Message",
-                (char *)NULL,
-/* 505 */       (char *)NULL,
+/* 505 ERR_BLOCKING_NOTID, */   ":%s 505 %s :%s is blocking messages from unidentified users.  You must register and identify with NickServ before talking to this user.",
+/*                (char *)NULL */
 /* 506 */       (char *)NULL,
 /* 507 */       (char *)NULL,
 /* 508 */       (char *)NULL,
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/s_user.c ircd-hybrid-6.0/src/s_user.c
--- ircd-hybrid-6.0.orig/src/s_user.c	Sun May 27 18:51:22 2001
+++ ircd-hybrid-6.0/src/s_user.c	Sun May 27 18:50:24 2001
@@ -106,6 +106,7 @@
   {FLAGS_SPY, 'y'},
   {FLAGS_OPERWALL, 'z'},
   {FLAGS_IDENTIFIED, 'e'},
+  {FLAGS_BLOCK_NOTID, 'E'},
   {0, 0}
 };
 
@@ -122,7 +123,7 @@
   0,            /* B */
   0,            /* C */
   0,            /* D */
-  0,            /* E */
+  FLAGS_BLOCK_NOTID, /* E */
   0,            /* F */
   0,            /* G */
   0,            /* H */
@@ -1876,7 +1877,7 @@
 */
 int m_user(aClient* cptr, aClient* sptr, int parc, char *parv[])
 {
-#define UFLAGS  (FLAGS_INVISIBLE|FLAGS_WALLOP|FLAGS_SERVNOTICE)
+#define UFLAGS  (FLAGS_INVISIBLE|FLAGS_WALLOP|FLAGS_SERVNOTICE|FLAGS_BLOCK_NOTID)
   char* username;
   char* host;
   char* server;
