--- fgms-0.9.14.orig/src/server/fg_server.hxx	2010-03-17 18:24:56.000000000 +0100
+++ fgms-0.9.14.work/src/server/fg_server.hxx	2010-07-02 11:50:04.000000000 +0200
@@ -30,6 +30,7 @@
 #include <iostream>
 #include <fstream>
 #include <list>
+#include <map>
 #include <string>
 #include <string.h>
 #include <errno.h>
@@ -216,6 +217,7 @@
   int             m_ipcid;
   int             m_childpid;
   FG_TRACKER*     m_Tracker;
+  map<uint32_t, bool> m_BlackList;
 }; // FG_SERVER
 
 #endif
--- fgms-0.9.14.orig/src/server/fg_server.cxx	2010-03-17 18:24:47.000000000 +0100
+++ fgms-0.9.14.work/src/server/fg_server.cxx	2010-07-02 11:53:16.000000000 +0200
@@ -19,7 +19,7 @@
 //      Server for FlightGear
 //      (c) 2005-2010 Oliver Schroeder
 //      (c) 2006 Julien Pierru ( UpdateTracker() )
-//      (c) 2007 Anders Gidenstam ( LazyRelay )
+//      (c) 2007-2010 Anders Gidenstam ( LazyRelay, BlackList )
 //
 //////////////////////////////////////////////////////////////////////
 
@@ -80,6 +80,9 @@
   m_ProtoMajorVersion   = ver[LOW];
   m_LogFileName         = "fg_server.log";
   //wp                  = fopen("wp.txt", "w");
+  m_BlackList           = map<uint32_t, bool>::map();
+  //m_BlackList[netAddress("65.254.183.189", 0).getIP()] = true;
+  //m_BlackList[netAddress("90.230.171.79", 0).getIP()]  = true;
 } // FG_SERVER::FG_SERVER()
 //////////////////////////////////////////////////////////////////////
 
@@ -333,7 +336,7 @@
   {
     sgCartToGeod (CurrentPlayer->LastPos, PlayerPosGeod);
     Message = "";
-    if (CurrentPlayer->Callsign.compare (0, 3, "obs", 3) == 0)
+    if (CurrentPlayer->Callsign.compare(0, 3, "obs", 3) == 0)
     {
       Message = "# ";
     }
@@ -741,6 +744,18 @@
   PacketFromLocalClient = true;  // assume client to be local
   //////////////////////////////////////////////////
   //
+  //      check if the user is black listed.
+  //
+  //////////////////////////////////////////////////
+  if (m_BlackList.find(SenderAddress.getIP()) != m_BlackList.end()) {
+    ErrorMsg  = SenderAddress.getHost();
+    ErrorMsg += " banned!";
+    //AddBadClient (SenderAddress, ErrorMsg, true);
+    cout << ErrorMsg << endl;
+    return;
+  }
+  //////////////////////////////////////////////////
+  //
   //      check if the received packet is valid
   //
   //////////////////////////////////////////////////
@@ -797,7 +812,7 @@
   //////////////////////////////////////////////////
   //
   //      check for senders position
-  //      we have to walk through to list until
+  //      we have to walk through the list until
   //      we find the sender, so we walk through
   //      the list twice.
   //      FIXME: can be done better?
