]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
fixed sflsq cursor
authorRuss Combs <rucombs@cisco.com>
Sun, 24 Aug 2014 12:00:10 +0000 (08:00 -0400)
committerRuss Combs <rucombs@cisco.com>
Sun, 24 Aug 2014 12:00:10 +0000 (08:00 -0400)
16 files changed:
ChangeLog
src/detection/fpcreate.cc
src/detection/fpdetect.cc
src/detection/fpdetect.h
src/filters/rate_filter.cc
src/filters/sfrf.cc
src/filters/sfrf.h
src/filters/sfthd.cc
src/filters/sfthreshold.cc
src/main/snort.cc
src/network_inspectors/port_scan/ipobj.cc
src/network_inspectors/port_scan/port_scan.cc
src/packet_io/trough.cc
src/utils/sflsq.cc
src/utils/sflsq.h
src/utils/sfportobject.cc

index 7e383ed767fd3e3389fa9c3db5052960f769304a..f5df3dc98028aed79453897aa8165d596e69eb2f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -10,6 +10,7 @@
 -- deleted alerts.alert_file
 -- changed --help to just cmd line options and added --help!
 -- fixed Xcode warnings
+-- fixed sflsq cursor
 
 115
 -- remove share.h
index d6f5394ec3dfba9f46c50b93553c60a277feaa94..1e1fc932ca686ea39022253690b276355f378a7e 100644 (file)
@@ -1327,9 +1327,11 @@ static int fpCreateInitRuleMap(
         prm->prmNumSrcGroups++;
 
         /* Add this port group to the src table at each port that uses it */
-        for( poi = (PortObjectItem*)sflist_first(po->item_list);
+        SF_LNODE* cursor;
+
+        for( poi = (PortObjectItem*)sflist_first(po->item_list, &cursor);
              poi;
-             poi = (PortObjectItem*)sflist_next(po->item_list) )
+             poi = (PortObjectItem*)sflist_next(&cursor) )
         {
              switch(poi->type)
              {
@@ -1373,9 +1375,11 @@ static int fpCreateInitRuleMap(
         prm->prmNumDstGroups++;
 
         /* Add this port group to the src table at each port that uses it */
-        for( poi = (PortObjectItem*)sflist_first(po->item_list);
+        SF_LNODE* cursor;
+
+        for( poi = (PortObjectItem*)sflist_first(po->item_list, &cursor);
              poi;
-             poi = (PortObjectItem*)sflist_next(po->item_list) )
+             poi = (PortObjectItem*)sflist_next(&cursor) )
         {
              switch(poi->type)
              {
@@ -2141,9 +2145,11 @@ void fpBuildServicePortGroupByServiceOtnList(
      * add each rule to the port group pattern matchers,
      * or to the no-content rule list
      */
-    for (otn = (OptTreeNode*)sflist_first(list);
+    SF_LNODE* cursor;
+
+    for (otn = (OptTreeNode*)sflist_first(list, &cursor);
             otn;
-            otn = (OptTreeNode*)sflist_next(list))
+            otn = (OptTreeNode*)sflist_next(&cursor))
     {
         if (otn->proto == ETHERNET_TYPE_IP)
         {
@@ -2333,10 +2339,11 @@ PORT_GROUP * fpGetServicePortGroupByOrdinal(sopg_table_t *sopg, int proto, int d
 void fpPrintRuleList( SF_LIST * list )
 {
     OptTreeNode * otn;
+    SF_LNODE* cursor;
 
-    for( otn=(OptTreeNode*)sflist_first(list);
+    for( otn=(OptTreeNode*)sflist_first(list, &cursor);
          otn;
-         otn=(OptTreeNode*)sflist_next(list) )
+         otn=(OptTreeNode*)sflist_next(&cursor) )
     {
          LogMessage("|   %u:%u\n",otn->sigInfo.generator,otn->sigInfo.id);
     }
@@ -2601,9 +2608,11 @@ static void fpAddIpProtoOnlyRule(SF_LIST **ip_proto_only_lists, OptTreeNode *otn
             }
 
             /* Search for dups */
-            for (dup = (OptTreeNode *)sflist_first(ip_proto_only_lists[i]);
+            SF_LNODE* cursor;
+
+            for (dup = (OptTreeNode *)sflist_first(ip_proto_only_lists[i], &cursor);
                  dup != NULL;
-                 dup = (OptTreeNode *)sflist_next(ip_proto_only_lists[i]))
+                 dup = (OptTreeNode *)sflist_next(&cursor))
             {
                 if (dup == otn)
                     return;
index e7ee165c9e3e89bc0714f5810048faa885d942c0..d50e4e6c0f37fa7f7fa2634b015778bcc42906b2 100644 (file)
@@ -66,6 +66,7 @@
 #include "stream/stream_api.h"
 #include "target_based/sftarget_protocol_reference.h"
 #include "target_based/sftarget_reader.h"
+#include "utils/sflsq.h"
 #include "ppm.h"
 #include "detection_util.h"
 #include "detection_options.h"
@@ -1569,11 +1570,12 @@ void fpEvalIpProtoOnlyRules(SF_LIST **ip_proto_only_lists, Packet *p, uint8_t pr
     {
         SF_LIST *l = ip_proto_only_lists[proto_id];
         OptTreeNode *otn;
+        SF_LNODE* cursor;
 
         /* If list is NULL, sflist_first returns NULL */
-        for (otn = (OptTreeNode *)sflist_first(l);
+        for (otn = (OptTreeNode *)sflist_first(l, &cursor);
              otn != NULL;
-             otn = (OptTreeNode *)sflist_next(l))
+             otn = (OptTreeNode *)sflist_next(&cursor))
         {
             if (fpEvalRTN(getRuntimeRtnFromOtn(otn), p, 0))
             {
index 530a22b455d7db8b06a2bc07fcf35aa2b7f9383e..04c6d8619fd5af18b091f5a841db45a7ba8d5fa2 100644 (file)
@@ -37,8 +37,8 @@
 #include "fpcreate.h"
 #include "snort_debug.h"
 #include "protocols/packet.h"
-#include "sflsq.h"
 #include "time/profiler.h"
+#include "utils/sflsq.h"
 
 #define REBUILD_FLAGS (PKT_REBUILT_FRAG | PKT_REBUILT_STREAM)
 
index cdf3128a4a58749538b0e01ea31a68e062acc4c1..34e9d5f3b55f95d7ecb61eba78a90a23db3d7734 100644 (file)
@@ -249,12 +249,13 @@ static int _printThresholdContext(RateFilterConfig *config)
 
             /* Check for any Permanent sid objects for this gid */
             sfrf_item = (tSFRFSidNode*)item_hash_node->data;
+            SF_LNODE* cursor;
 
             for ( sfrf_node  =
-                      (tSFRFConfigNode*)sflist_first(sfrf_item->configNodeList);
+                      (tSFRFConfigNode*)sflist_first(sfrf_item->configNodeList, &cursor);
                   sfrf_node != 0;
                   sfrf_node =
-                      (tSFRFConfigNode*)sflist_next(sfrf_item->configNodeList) )
+                      (tSFRFConfigNode*)sflist_next(&cursor) )
             {
                 if ( _logConfigNode( sfrf_node) != 0 )
                     lcnt++;
index 24480a97d7294b53cf4e88273bab3e257dd69a06..527d00914e9bceb7222f6f5f48ec15ac8963a5e6 100644 (file)
@@ -542,9 +542,11 @@ int SFRF_TestThreshold(
     /* For each permanent thresholding object, test/add/update the config object */
     /* We maintain a list of thd objects for each gid+sid */
     /* each object has it's own unique thd_id */
-    for ( cfgNode  = (tSFRFConfigNode*)sflist_first(pSidNode->configNodeList);
+    SF_LNODE* cursor;
+
+    for ( cfgNode  = (tSFRFConfigNode*)sflist_first(pSidNode->configNodeList, &cursor);
           cfgNode != 0;
-          cfgNode  = (tSFRFConfigNode*)sflist_next(pSidNode->configNodeList) )
+          cfgNode  = (tSFRFConfigNode*)sflist_next(&cursor) )
     {
         switch (cfgNode->tracking)
         {
@@ -627,10 +629,11 @@ void SFRF_ShowObjects(RateFilterConfig *config)
             /* For each permanent thresholding object, test/add/update the thd object */
             /* We maintain a list of thd objects for each gid+sid */
             /* each object has it's own unique thd_id */
+            SF_LNODE* cursor;
 
-            for ( cfgNode  = (tSFRFConfigNode*)sflist_first(pSidnode->configNodeList);
+            for ( cfgNode  = (tSFRFConfigNode*)sflist_first(pSidnode->configNodeList, &cursor);
                   cfgNode != 0;
-                  cfgNode = (tSFRFConfigNode*)sflist_next(pSidnode->configNodeList) )
+                  cfgNode = (tSFRFConfigNode*)sflist_next(&cursor) )
             {
                 printf(".........SFRF_ID  =%d\n",cfgNode->tid );
                 printf(".........tracking =%d\n",cfgNode->tracking);
index b1f6a3e7eed64840be214271c586512fb3126281..623fc0318e1dd578d50d0116776900895855a1ef 100644 (file)
@@ -33,7 +33,6 @@
  */
 
 #include "ipv6_port.h"
-#include "sflsq.h"
 #include "sfghash.h"
 #include "sfxhash.h"
 #include "main/policy.h"
index 5c22d01855f052395a6bc4a34f7da3f4343e2f81..766c332f35ff335eedef6ee0709bf520a3e2fb62 100644 (file)
@@ -478,13 +478,14 @@ static int sfthd_create_threshold_local(
     else
     {
         SF_LNODE* lnode;
+        NODE_DATA ndata;
 
         /* Walk the list and insert based on priorities if suppress */
-        for( lnode = sflist_first_node(sfthd_item->sfthd_node_list);
-             lnode;
-             lnode = sflist_next_node(sfthd_item->sfthd_node_list) )
+        for( ndata = sflist_first(sfthd_item->sfthd_node_list, &lnode);
+             ndata;
+             ndata = sflist_next(&lnode) )
         {
-            THD_NODE* sfthd_n = (THD_NODE*)lnode->ndata;
+            THD_NODE* sfthd_n = (THD_NODE*)ndata;
 
             /* check if the new node is higher priority */
             if( sfthd_node->priority > sfthd_n->priority  )
@@ -1171,9 +1172,11 @@ int sfthd_test_threshold(
 #ifdef THD_DEBUG
     cnt=0;
 #endif
-    for (sfthd_node = (THD_NODE *)sflist_first(sfthd_item->sfthd_node_list);
+    SF_LNODE* cursor;
+
+    for (sfthd_node = (THD_NODE *)sflist_first(sfthd_item->sfthd_node_list, &cursor);
          sfthd_node != NULL;
-         sfthd_node = (THD_NODE *)sflist_next(sfthd_item->sfthd_node_list))
+         sfthd_node = (THD_NODE *)sflist_next(&cursor))
     {
 #ifdef THD_DEBUG
         cnt++;
@@ -1292,10 +1295,11 @@ int sfthd_show_objects(ThresholdObjects *thd_objs)
             /* For each permanent thresholding object, test/add/update the thd object */
             /* We maintain a list of thd objects for each gen_id+sig_id */
             /* each object has it's own unique thd_id */
+            SF_LNODE* cursor;
 
-            for( sfthd_node  = (THD_NODE*)sflist_first(sfthd_item->sfthd_node_list);
+            for( sfthd_node  = (THD_NODE*)sflist_first(sfthd_item->sfthd_node_list, &cursor);
                  sfthd_node != 0;
-                 sfthd_node = (THD_NODE*)sflist_next(sfthd_item->sfthd_node_list) )
+                 sfthd_node = (THD_NODE*)sflist_next(&cursor) )
             {
                 printf(".........THD_ID  =%d\n",sfthd_node->thd_id );
 
index 18d9d6676c1ca3f139a832d74145557d22904a34..93378ddfae7fccae92c6269609f1fa7f1ae30be2 100644 (file)
@@ -231,10 +231,11 @@ static int print_thd_local(ThresholdObjects *thd_objs, PrintFormat type, unsigne
                 {
                     continue;
                 }
+                SF_LNODE* cursor;
 
-                for( sfthd_node  = (THD_NODE*)sflist_first(sfthd_item->sfthd_node_list);
+                for( sfthd_node  = (THD_NODE*)sflist_first(sfthd_item->sfthd_node_list, &cursor);
                         sfthd_node != 0;
-                        sfthd_node = (THD_NODE*)sflist_next(sfthd_item->sfthd_node_list) )
+                        sfthd_node = (THD_NODE*)sflist_next(&cursor) )
                 {
                     if (print_thd_node(sfthd_node, type, prnMode) != 0)
                         lcnt++;
index e45f6c042a6b6500436d814edd60e950e0230ab1..74399c63eb95a8658b9301854879b953be0a1c90 100644 (file)
@@ -74,7 +74,7 @@ using namespace std;
 #include "packet_time.h"
 #include "perf_monitor/perf_base.h"
 #include "perf_monitor/perf.h"
-#include "sflsq.h"
+//#include "sflsq.h"
 #include "ips_options/ips_flowbits.h"
 #include "event_queue.h"
 #include "asn1.h"
index e485423ab1a3e1ebbaac4b87df540d28c75a737b..de74ba89cd38e45423911456bff9dcbd69fca360 100644 (file)
@@ -72,10 +72,11 @@ IPSET * ipset_copy( IPSET *ipsp )
 {
     IPSET * newset = ipset_new();
     IP_PORT *ip_port;
+    SF_LNODE* cursor;
 
-    for(ip_port =(IP_PORT*)sflist_first( &ipsp->ip_list );
+    for(ip_port =(IP_PORT*)sflist_first( &ipsp->ip_list, &cursor );
         ip_port !=NULL;
-        ip_port =(IP_PORT*)sflist_next( &ipsp->ip_list ) )
+        ip_port =(IP_PORT*)sflist_next( &cursor ) )
     {
         ipset_add(newset, &ip_port->ip, &ip_port->portset, ip_port->notflag);
     }
@@ -86,12 +87,13 @@ void ipset_free( IPSET * ipc )
 {
     if (ipc)
     {
+        SF_LNODE* cursor;
+        IP_PORT *p = (IP_PORT *) sflist_first(&ipc->ip_list, &cursor);
 
-        IP_PORT *p = (IP_PORT *) sflist_first(&ipc->ip_list);
         while ( p )
         {
             sflist_static_free_all(&p->portset.port_list, free);
-            p = (IP_PORT *) sflist_next(&ipc->ip_list);
+            p = (IP_PORT *) sflist_next(&cursor);
         }
         sflist_static_free_all(&ipc->ip_list, free);
         free( ipc );
@@ -131,16 +133,19 @@ int ipset_contains( IPSET *ipc, const sfip_t *ip, void *port)
     else
         portu = 0;
 
+    SF_LNODE* cur_ip;
 
-    for(p =(IP_PORT*)sflist_first( &ipc->ip_list );
+    for(p =(IP_PORT*)sflist_first( &ipc->ip_list, &cur_ip );
         p!=0;
-        p =(IP_PORT*)sflist_next( &ipc->ip_list ) )
+        p =(IP_PORT*)sflist_next( &cur_ip ) )
     {
         if( sfip_contains(&p->ip, ip) == SFIP_CONTAINS)
         {
-            for( pr=(PORTRANGE*)sflist_first(&p->portset.port_list);
+            SF_LNODE* cur_port;
+
+            for( pr=(PORTRANGE*)sflist_first(&p->portset.port_list, &cur_port);
                  pr != 0;
-                 pr=(PORTRANGE*)sflist_next(&p->portset.port_list) )
+                 pr=(PORTRANGE*)sflist_next(&cur_port) )
             {
                 /*
                  * If the matching IP has a wildcard port (pr->port_hi == 0 )
@@ -168,20 +173,20 @@ int ipset_print( IPSET * ipc )
 
     {
         IP_PORT * p;
-
         printf("IPSET\n");
+        SF_LNODE* cur_ip;
 
-        for( p =(IP_PORT*)sflist_first( &ipc->ip_list );
+        for( p =(IP_PORT*)sflist_first( &ipc->ip_list, &cur_ip );
              p!=0;
-             p =(IP_PORT*)sflist_next( &ipc->ip_list ) )
+             p =(IP_PORT*)sflist_next( &cur_ip ) )
         {
             SnortSnprintf(ip_str, 80, "%s", sfip_to_str(&p->ip));
-
             printf("CIDR BLOCK: %c%s", p->notflag ? '!' : ' ', ip_str);
+            SF_LNODE* cur_port;
 
-            for( pr=(PORTRANGE*)sflist_first(&p->portset.port_list);
+            for( pr=(PORTRANGE*)sflist_first(&p->portset.port_list, &cur_port);
                  pr != 0;
-                 pr=(PORTRANGE*)sflist_next(&p->portset.port_list) )
+                 pr=(PORTRANGE*)sflist_next(&cur_port) )
             {
                 printf("  %d", pr->port_lo);
                 if ( pr->port_hi != pr->port_lo )
index 99db9ab8dba8365eedc00fb3df45a277b67639f9..f1de8562443ce4edfad92121349a503fc566e6bc 100644 (file)
@@ -690,11 +690,14 @@ static void PrintIPPortSet(IP_PORT *p)
         ((p->ip.family == AF_INET ) && (p->ip.bits != 32 )))
         SnortSnprintfAppend(output_str, sizeof(output_str), "/%d", p->ip.bits);
 
-    pr=(PORTRANGE*)sflist_first(&p->portset.port_list);
+    SF_LNODE* cursor;
+    pr=(PORTRANGE*)sflist_first(&p->portset.port_list, &cursor);
+
     if ( pr && pr->port_lo != 0 )
         SnortSnprintfAppend(output_str, sizeof(output_str), " : ");
+
     for( ; pr != 0;
-        pr=(PORTRANGE*)sflist_next(&p->portset.port_list) )
+        pr=(PORTRANGE*)sflist_next(&cursor) )
     {
         if ( pr->port_lo != 0)
         {
@@ -772,9 +775,11 @@ static void PrintPortscanConf(PortscanConfig* config)
         if(config->ignore_scanners)
         {
             LogMessage("    Ignore Scanner IP List:\n");
-            for(p = (IP_PORT*)sflist_first(&config->ignore_scanners->ip_list);
+            SF_LNODE* cursor;
+
+            for(p = (IP_PORT*)sflist_first(&config->ignore_scanners->ip_list, &cursor);
                 p;
-                p = (IP_PORT*)sflist_next(&config->ignore_scanners->ip_list))
+                p = (IP_PORT*)sflist_next(&cursor))
             {
                 PrintIPPortSet(p);
             }
@@ -783,9 +788,11 @@ static void PrintPortscanConf(PortscanConfig* config)
         if(config->ignore_scanned)
         {
             LogMessage("    Ignore Scanned IP List:\n");
-            for(p = (IP_PORT*)sflist_first(&config->ignore_scanned->ip_list);
+            SF_LNODE* cursor;
+
+            for(p = (IP_PORT*)sflist_first(&config->ignore_scanned->ip_list, &cursor);
                 p;
-                p = (IP_PORT*)sflist_next(&config->ignore_scanned->ip_list))
+                p = (IP_PORT*)sflist_next(&cursor))
             {
                 PrintIPPortSet(p);
             }
@@ -794,9 +801,11 @@ static void PrintPortscanConf(PortscanConfig* config)
         if(config->watch_ip)
         {
             LogMessage("    Watch IP List:\n");
-            for(p = (IP_PORT*)sflist_first(&config->watch_ip->ip_list);
+            SF_LNODE* cursor;
+
+            for(p = (IP_PORT*)sflist_first(&config->watch_ip->ip_list, &cursor);
                 p;
-                p = (IP_PORT*)sflist_next(&config->watch_ip->ip_list))
+                p = (IP_PORT*)sflist_next(&cursor))
             {
                 PrintIPPortSet(p);
             }
index c6bfa96852c3f496d98646d28c32ddfe6a0df22f..03e48083fca47a33f0da94edfb716c6f50540066 100644 (file)
@@ -80,14 +80,15 @@ static SF_LIST * SortDirectory(const char *path)
     {
         char *node_entry_name, *dir_entry_name;
         SF_LNODE *node;
+        NODE_DATA ndata;
 
         dir_entry_name = SnortStrdup(direntry->d_name);
 
-        for (node = sflist_first_node(dir_entries);
-             node != NULL;
-             node = sflist_next_node(dir_entries))
+        for (ndata = sflist_first(dir_entries, &node);
+             ndata != NULL;
+             ndata = sflist_next(&node))
         {
-            node_entry_name = (char *)node->ndata;
+            node_entry_name = (char *)ndata;
             if (strcmp(dir_entry_name, node_entry_name) < 0)
                 break;
         }
@@ -137,10 +138,11 @@ int GetFilesUnderDir(const char *path, SF_QUEUE *dir_queue, const char *filter)
         ErrorMessage("Error sorting entries in directory: %s\n", path);
         return -1;
     }
+    SF_LNODE* cursor;
 
-    for (direntry = (char *)sflist_first(dir_entries);
+    for (direntry = (char *)sflist_first(dir_entries, &cursor);
          direntry != NULL;
-         direntry = (char *)sflist_next(dir_entries))
+         direntry = (char *)sflist_next(&cursor))
     {
         char path_buf[PATH_MAX];
         struct stat file_stat;
@@ -230,9 +232,11 @@ static int GetPcaps(SF_LIST *pol, SF_QUEUE *pcap_queue)
     if ((pol == NULL) || (pcap_queue == NULL))
         return -1;
 
-    for (pro = (PcapReadObject *)sflist_first(pol);
+    SF_LNODE* cursor;
+
+    for (pro = (PcapReadObject *)sflist_first(pol, &cursor);
          pro != NULL;
-         pro = (PcapReadObject *)sflist_next(pol))
+         pro = (PcapReadObject *)sflist_next(&cursor))
     {
         arg = pro->arg;
         filter = pro->filter;
index cf7deb289294e35659aa3ae8bb66a98c2da817c2..9a0187dc254ff7ec536a84208d03d01830766d0e 100644 (file)
 *
 *   11/05/2005 - man - Added sflist_firstx() and sflist_nextx() with user
 *   provided SF_NODE inputs for tracking the list position.  This allows
-*   multiple readers to traverse a list. The built in 'cur' field does not
-*   wrok for multiple readers.
-*
-*
+*   multiple readers to traverse a list.
 */
 
 #include "sflsq.h"
@@ -67,7 +64,7 @@ static void s_free (void *p)
 void sflist_init ( SF_LIST * s)
 {
   s->count=0;
-  s->head = s->tail = s->cur = 0;
+  s->head = s->tail = 0;
 }
 
 /*
@@ -199,83 +196,32 @@ int sfstack_add( SF_STACK* s, NODE_DATA ndata )
 /*
 *   List walk - First/Next - return the node data or NULL
 */
-NODE_DATA sflist_first( SF_LIST * s )
-{
-    if(!s)
-        return 0;
-
-    s->cur = s->head;
-    if( s->cur )
-        return s->cur->ndata;
-    return 0;
-}
-NODE_DATA sflist_next( SF_LIST * s )
+NODE_DATA sflist_first(SF_LIST* s, SF_LNODE** v)
 {
-    if(!s)
-        return 0;
-
-    if( s->cur )
+    if ( !s )
     {
-        s->cur = s->cur->next;
-        if( s->cur )
-            return s->cur->ndata;
+        *v = nullptr;
+        return nullptr;
     }
-    return 0;
-}
-NODE_DATA sflist_firstpos( SF_LIST * s, SF_LNODE ** v )
-{
-    if(!s)
-        return 0;
 
     *v = s->head;
 
-    if( *v )
+    if ( *v )
         return (*v)->ndata;
 
-    return 0;
+    return nullptr;
 }
-NODE_DATA sflist_nextpos( SF_LIST * s,  SF_LNODE ** v )
-{
-    if(!s)
-        return 0;
 
-    if(v)
+NODE_DATA sflist_next(SF_LNODE** v)
+{
+    if ( v && *v )
     {
-       if(*v)
-       {
           *v = (*v)->next;
-          if( *v )
+          if ( *v )
               return (*v)->ndata;
-       }
     }
-    return 0;
+    return nullptr;
 }
-/*
-*   List walk - First/Next - return the node data or NULL
-*/
-SF_LNODE * sflist_first_node( SF_LIST * s )
-{
-    if(!s)
-        return 0;
-
-    s->cur = s->head;
-    if( s->cur )
-        return s->cur;
-    return 0;
-}
-SF_LNODE * sflist_next_node( SF_LIST * s )
-{
-    if(!s)
-        return 0;
-    if( s->cur )
-    {
-        s->cur = s->cur->next;
-        if( s->cur )
-            return s->cur;
-    }
-    return 0;
-}
-
 /*
 *  Remove Head Item from list
 */
index bafd9be387f8ebccfd1dcf17131c22506a97aa3f..287f2ba014b22f09a4be98b79711d75ba6c1a519 100644 (file)
@@ -85,7 +85,6 @@ SF_PSTACK;
 typedef struct sf_list
 {
     SF_LNODE *head, *tail;  
-    SF_LNODE *cur;  /* used for First/Next walking */
     unsigned count;
 }
 SF_QUEUE,SF_STACK,SF_LIST;
@@ -105,12 +104,8 @@ NODE_DATA sflist_remove_head ( SF_LIST * s);
 NODE_DATA sflist_remove_tail ( SF_LIST * s); 
 void      sflist_remove_node (SF_LIST * s, SF_LNODE * n, void (*free)(void*) );
 int       sflist_count ( SF_LIST* s); 
-NODE_DATA sflist_first( SF_LIST * s);
-NODE_DATA sflist_next( SF_LIST * s);
-SF_LNODE * sflist_first_node( SF_LIST * s );
-SF_LNODE * sflist_next_node( SF_LIST * s );
-NODE_DATA sflist_firstpos( SF_LIST * s, SF_LNODE ** v );
-NODE_DATA sflist_nextpos ( SF_LIST * s, SF_LNODE ** v );
+NODE_DATA sflist_first(SF_LIST*, SF_LNODE**);
+NODE_DATA sflist_next(SF_LNODE**);
 void      sflist_free ( SF_LIST * s); 
 void      sflist_free_all( SF_LIST * s, void (*free)(void*) ); 
 void sflist_static_free_all(SF_LIST *, void(*nfree)(void *));
index 46492ee736d72f9dcecede21c0a402bcf10c2ffa..b20933c2e7875b8c57ac0a7317584d60387b31cc 100644 (file)
@@ -529,9 +529,9 @@ int PortObjectAddItem( PortObject * po, PortObjectItem * poi, int *errflag)
     if(errflag) *errflag = 0;
 
     /* Make sure this is not a duplicate */
-    for(p=(PortObjectItem*)sflist_firstpos(po->item_list,&pos);
+    for(p=(PortObjectItem*)sflist_first(po->item_list,&pos);
         p != 0;
-        p=(PortObjectItem*)sflist_nextpos(po->item_list,&pos) )
+        p=(PortObjectItem*)sflist_next(&pos) )
     {
         if((p->lport == poi->lport) && (p->hport == poi->hport))
         {
@@ -554,9 +554,9 @@ int PortObjectAddPortObject(PortObject * podst, PortObject * posrc, int *errflag
 
     if(errflag) *errflag = 0;
 
-    for(po=(PortObjectItem*)sflist_firstpos(posrc->item_list, &pos);
+    for(po=(PortObjectItem*)sflist_first(posrc->item_list, &pos);
         po != 0;
-        po=(PortObjectItem*)sflist_nextpos(posrc->item_list, &pos) )
+        po=(PortObjectItem*)sflist_next(&pos) )
     {
         PortObjectItem *poi = PortObjectItemDup(po);
         if((ret = PortObjectAddItem(podst, poi, errflag)) != 0)
@@ -620,9 +620,9 @@ PortObject * PortObjectDup( PortObject * po )
     /* Dup the Item List */
     if( po->item_list )
     {
-      for(poi =(PortObjectItem*)sflist_firstpos(po->item_list,&lpos);
+      for(poi =(PortObjectItem*)sflist_first(po->item_list,&lpos);
           poi != NULL;
-          poi =(PortObjectItem*)sflist_nextpos(po->item_list,&lpos) )
+          poi =(PortObjectItem*)sflist_next(&lpos) )
       {
         poinew = PortObjectItemDup( poi );
         if(!poinew)
@@ -639,9 +639,9 @@ PortObject * PortObjectDup( PortObject * po )
     /* Dup the input rule list */
     if( po->rule_list )
     {
-      for(prid  = (int*)sflist_firstpos(po->rule_list,&lpos);
+      for(prid  = (int*)sflist_first(po->rule_list,&lpos);
           prid != 0;
-          prid  = (int*)sflist_nextpos(po->rule_list,&lpos) )
+          prid  = (int*)sflist_next(&lpos) )
       {
           prule = (int*)calloc(1,sizeof(int));
           if(!prule)
@@ -687,9 +687,9 @@ PortObject * PortObjectDupPorts( PortObject * po )
     /* Dup the Item List */
     if( po->item_list )
     {
-      for(poi =(PortObjectItem*)sflist_firstpos(po->item_list,&lpos);
+      for(poi =(PortObjectItem*)sflist_first(po->item_list,&lpos);
           poi != NULL;
-          poi =(PortObjectItem*)sflist_nextpos(po->item_list,&lpos) )
+          poi =(PortObjectItem*)sflist_next(&lpos) )
       {
         poinew = PortObjectItemDup( poi );
         if(!poinew)
@@ -740,9 +740,9 @@ PortObject2 * PortObject2Dup( PortObject * po )
     /* Dup the Item List */
     if( po->item_list )
     {
-      for(poi =(PortObjectItem*)sflist_firstpos(po->item_list,&lpos);
+      for(poi =(PortObjectItem*)sflist_first(po->item_list,&lpos);
           poi != NULL;
-          poi =(PortObjectItem*)sflist_nextpos(po->item_list,&lpos) )
+          poi =(PortObjectItem*)sflist_next(&lpos) )
       {
         poinew = PortObjectItemDup( poi );
         if(!poinew)
@@ -755,9 +755,9 @@ PortObject2 * PortObject2Dup( PortObject * po )
     /* Dup the input rule list */
     if( po->rule_list )
     {
-        for(prid  = (int*)sflist_firstpos(po->rule_list,&lpos);
+        for(prid  = (int*)sflist_first(po->rule_list,&lpos);
             prid != 0;
-            prid  = (int*)sflist_nextpos(po->rule_list,&lpos) )
+            prid  = (int*)sflist_next(&lpos) )
         {
               prule = (int*)calloc(1,sizeof(int));
               if(!prule)
@@ -854,13 +854,14 @@ int PortObjectAddPortAny( PortObject * po )
 int PortObjectHasAny (PortObject * po )
 {
      PortObjectItem *poi;
+     SF_LNODE* cursor;
 
      if( !po )
          return 0;
 
-     for(poi=(PortObjectItem*)sflist_first(po->item_list);
+     for(poi=(PortObjectItem*)sflist_first(po->item_list, &cursor);
          poi != 0;
-         poi=(PortObjectItem*)sflist_next(po->item_list) )
+         poi=(PortObjectItem*)sflist_next(&cursor) )
      {
          if( poi->type == PORT_OBJECT_ANY )
              return 1;
@@ -870,13 +871,14 @@ int PortObjectHasAny (PortObject * po )
 int PortObjectHasNot (PortObject * po )
 {
      PortObjectItem *poi;
+     SF_LNODE* cursor;
 
      if( !po )
          return 0;
 
-     for(poi=(PortObjectItem*)sflist_first(po->item_list);
+     for(poi=(PortObjectItem*)sflist_first(po->item_list, &cursor);
          poi != 0;
-         poi=(PortObjectItem*)sflist_next(po->item_list) )
+         poi=(PortObjectItem*)sflist_next(&cursor) )
      {
          if ( poi->flags== PORT_OBJECT_NOT_FLAG) return 1;
      }
@@ -885,14 +887,15 @@ int PortObjectHasNot (PortObject * po )
 int PortObjectIsPureNot (PortObject * po )
 {
      PortObjectItem *poi;
+     SF_LNODE* cursor;
      int cnt=0;
 
      if( !po )
          return 0;
 
-     for(poi=(PortObjectItem*)sflist_first(po->item_list);
+     for(poi=(PortObjectItem*)sflist_first(po->item_list, &cursor);
          poi != 0;
-         poi=(PortObjectItem*)sflist_next(po->item_list) )
+         poi=(PortObjectItem*)sflist_next(&cursor) )
      {
          cnt++;
          if ( poi->flags != PORT_OBJECT_NOT_FLAG)
@@ -910,13 +913,14 @@ int PortObjectIsPureNot (PortObject * po )
 int PortObjectHasPort (PortObject * po, int port )
 {
      PortObjectItem *poi;
+     SF_LNODE* cursor;
 
      if( !po )
          return 0;
 
-     for(poi=(PortObjectItem*)sflist_first(po->item_list);
+     for(poi=(PortObjectItem*)sflist_first(po->item_list, &cursor);
          poi != 0;
-         poi=(PortObjectItem*)sflist_next(po->item_list) )
+         poi=(PortObjectItem*)sflist_next(&cursor) )
      {
         switch( poi->type )
         {
@@ -947,13 +951,14 @@ int PortObjectHasPort (PortObject * po, int port )
 int PortObjectIncludesPort (PortObject * po, int port )
 {
      PortObjectItem *poi;
+     SF_LNODE* cursor;
 
      if( !po )
          return 0;
 
-     for(poi=(PortObjectItem*)sflist_first(po->item_list);
+     for(poi=(PortObjectItem*)sflist_first(po->item_list, &cursor);
          poi != 0;
-         poi=(PortObjectItem*)sflist_next(po->item_list) )
+         poi=(PortObjectItem*)sflist_next(&cursor) )
      {
         switch( poi->type )
         {
@@ -988,9 +993,9 @@ PortObject * PortTableFindPortObjectByPort(  PortTable * p , int port )
     PortObject * po;
     SF_LNODE   * pos;
 
-    for(po =(PortObject*)sflist_firstpos(p->pt_polist,&pos);
+    for(po =(PortObject*)sflist_first(p->pt_polist,&pos);
        po != NULL;
-       po =(PortObject*)sflist_nextpos(p->pt_polist,&pos) )
+       po =(PortObject*)sflist_next(&pos) )
     {
         if( PortObjectHasPort ( po, port ) )
         {
@@ -1015,15 +1020,16 @@ PortObject * PortTableFindPortObjectByPort(  PortTable * p , int port )
 int PortObjectPortCount (PortObject * po )
 {
      PortObjectItem *poi;
+     SF_LNODE* cursor;
      int cnt=0;
      int nports;
 
      if( !po )
          return 0;
 
-     for(poi=(PortObjectItem*)sflist_first(po->item_list);
+     for(poi=(PortObjectItem*)sflist_first(po->item_list, &cursor);
          poi != 0;
-         poi=(PortObjectItem*)sflist_next(po->item_list) )
+         poi=(PortObjectItem*)sflist_next(&cursor) )
      {
         switch( poi->type )
         {
@@ -1094,9 +1100,9 @@ char * PortObjectCharPortArray ( char * parray, PortObject * po, int * nports )
              return 0;
      }
 
-     for(poi=(PortObjectItem*)sflist_firstpos(po->item_list,&pos);
+     for(poi=(PortObjectItem*)sflist_first(po->item_list,&pos);
          poi != 0;
-         poi=(PortObjectItem*)sflist_nextpos(po->item_list,&pos) )
+         poi=(PortObjectItem*)sflist_next(&pos) )
      {
          /* Add ports that are not NOT'd */
          if( poi->flags & PORT_OBJECT_NOT_FLAG  )
@@ -1126,9 +1132,9 @@ char * PortObjectCharPortArray ( char * parray, PortObject * po, int * nports )
      }
 
      /* Remove any NOT'd ports that may have been added above */
-     for(poi=(PortObjectItem*)sflist_firstpos(po->item_list,&pos);
+     for(poi=(PortObjectItem*)sflist_first(po->item_list,&pos);
          poi != 0;
-         poi=(PortObjectItem*)sflist_nextpos(po->item_list,&pos) )
+         poi=(PortObjectItem*)sflist_next(&pos) )
      {
          if( !( poi->flags & PORT_OBJECT_NOT_FLAG)  )
              continue;
@@ -1167,9 +1173,9 @@ char * PortObjectCharPortArray ( char * parray, PortObject * po, int * nports )
         }
 
         /* disable the NOT'd ports */
-        for(poi=(PortObjectItem*)sflist_firstpos(po->item_list,&pos);
+        for(poi=(PortObjectItem*)sflist_first(po->item_list,&pos);
             poi != 0;
-            poi=(PortObjectItem*)sflist_nextpos(po->item_list,&pos) )
+            poi=(PortObjectItem*)sflist_next(&pos) )
         {
             if( !( poi->flags & PORT_OBJECT_NOT_FLAG)  )
                 continue; /* should not happen */
@@ -1422,16 +1428,16 @@ int PortObjectEqual( PortObject * a, PortObject *b )
     if( a->item_list->count != b->item_list->count )
         return 0;
 
-    pa = (PortObjectItem*)sflist_firstpos(a->item_list,&posa);
-    pb = (PortObjectItem*)sflist_firstpos(b->item_list,&posb);
+    pa = (PortObjectItem*)sflist_first(a->item_list,&posa);
+    pb = (PortObjectItem*)sflist_first(b->item_list,&posb);
 
     while( pa && pb )
     {
       if( !PortObjectItemsEqual( pa, pb) )
           return 0;
 
-      pa = (PortObjectItem*)sflist_nextpos(a->item_list,&posa);
-      pb = (PortObjectItem*)sflist_nextpos(b->item_list,&posb);
+      pa = (PortObjectItem*)sflist_next(&posa);
+      pb = (PortObjectItem*)sflist_next(&posb);
     }
 
     if( pa || pb ) /* both are not done - cannot match */
@@ -1447,10 +1453,11 @@ PortObject * PortObjectAppend(PortObject * poa, PortObject * pob )
 {
    PortObjectItem * poia;
    PortObjectItem * poib;
+   SF_LNODE* cursor;
 
-   for( poib = (PortObjectItem*) sflist_first(pob->item_list);
+   for( poib = (PortObjectItem*) sflist_first(pob->item_list, &cursor);
         poib!= 0;
-        poib = (PortObjectItem*)sflist_next(pob->item_list) )
+        poib = (PortObjectItem*)sflist_next(&cursor) )
    {
        poia = PortObjectItemNew();
 
@@ -1470,9 +1477,9 @@ PortObject * PortObjectAppendPortObject(PortObject * poa, PortObject * pob )
    int * prid2;
    SF_LNODE * lpos;
 
-   for( prid = (int*) sflist_firstpos(pob->rule_list,&lpos);
+   for( prid = (int*) sflist_first(pob->rule_list,&lpos);
         prid!= 0;
-        prid = (int*)sflist_nextpos(pob->rule_list,&lpos) )
+        prid = (int*)sflist_next(&lpos) )
    {
        prid2 = (int*)calloc( 1, sizeof(int));
        if( !prid2 )
@@ -1489,9 +1496,9 @@ PortObject2 * PortObject2AppendPortObject(PortObject2 * poa, PortObject * pob )
    int * prid2;
    SF_LNODE * lpos;
 
-   for( prid = (int*) sflist_firstpos(pob->rule_list,&lpos);
+   for( prid = (int*) sflist_first(pob->rule_list,&lpos);
         prid!= 0;
-        prid = (int*)sflist_nextpos(pob->rule_list,&lpos) )
+        prid = (int*)sflist_next(&lpos) )
    {
        prid2 = (int*)calloc( 1, sizeof(int));
        if( !prid2 )
@@ -1652,9 +1659,9 @@ PortObject * PortTableFindInputPortObjectName(PortTable * pt, char * po_name)
     if( !po_name ) return NULL;
 
     /* Normalize each of the input port objects */
-    for(po =(PortObject*)sflist_firstpos(pt->pt_polist,&lpos);
+    for(po =(PortObject*)sflist_first(pt->pt_polist,&lpos);
         po!=0;
-        po =(PortObject*)sflist_nextpos(pt->pt_polist,&lpos) )
+        po =(PortObject*)sflist_next(&lpos) )
     {
         if( po->name )
         {
@@ -1678,9 +1685,9 @@ PortObject * PortTableFindInputPortObjectPorts( PortTable * pt, PortObject * pox
     if( !pt ) return NULL;
     if( !pox ) return NULL;
 
-    for(po =(PortObject*)sflist_firstpos(pt->pt_polist,&lpos);
+    for(po =(PortObject*)sflist_first(pt->pt_polist,&lpos);
         po!=0;
-        po =(PortObject*)sflist_nextpos(pt->pt_polist,&lpos) )
+        po =(PortObject*)sflist_next(&lpos) )
     {
         if( PortObjectEqual( po, pox ) )
         {
@@ -1697,9 +1704,9 @@ int PortTableNormalizeInputPortObjects( PortTable *p )
     PortObject * po;
 
     /* Normalize each of the input port objects */
-    for(po =(PortObject*)sflist_firstpos(p->pt_polist,&lpos);
+    for(po =(PortObject*)sflist_first(p->pt_polist,&lpos);
         po!=0;
-        po =(PortObject*)sflist_nextpos(p->pt_polist,&lpos) )
+        po =(PortObject*)sflist_next(&lpos) )
     {
         PortObjectNormalize(po);
     }
@@ -1743,9 +1750,9 @@ int PortTableAddObject( PortTable *p, PortObject * po )
 
 
     /* Search for the Port Object in the input list, by address */
-    for(pox =(PortObject*)sflist_firstpos(p->pt_polist,&lpos);
+    for(pox =(PortObject*)sflist_first(p->pt_polist,&lpos);
         pox!=0;
-        pox =(PortObject*)sflist_nextpos(p->pt_polist,&lpos) )
+        pox =(PortObject*)sflist_next(&lpos) )
     {
         if( pox == po )
         {
@@ -1782,9 +1789,9 @@ static unsigned PortObject_hash( SFHASHFCN * p, unsigned char *d, int )
     po = *(PortObject**) d;
 
     /* hash up each item */
-    for(poi =(PortObjectItem*)sflist_firstpos(po->item_list,&pos);
+    for(poi =(PortObjectItem*)sflist_first(po->item_list,&pos);
         poi != NULL;
-        poi =(PortObjectItem*)sflist_nextpos(po->item_list,&pos) )
+        poi =(PortObjectItem*)sflist_next(&pos) )
     {
        switch(poi->type)
        {
@@ -2204,9 +2211,9 @@ int PortTableCompileMergePortObjects( PortTable * p )
 
         /* Build a list of port objects touching port 'i' */
         pol_cnt = 0;
-        for(po=(PortObject*)sflist_firstpos(p->pt_polist,&lpos);
+        for(po=(PortObject*)sflist_first(p->pt_polist,&lpos);
             po;
-            po=(PortObject*)sflist_nextpos(p->pt_polist,&lpos) )
+            po=(PortObject*)sflist_next(&lpos) )
         {
             if( PortObjectHasPort ( po, i  ) )
             {
@@ -2386,9 +2393,9 @@ static int _po2_include_po_rules( PortObject2 * po2, PortObject * po  )
     SF_LNODE * rpos;
 
     /* get each rule in po */
-    for(pid=(int*)sflist_firstpos(po->rule_list,&rpos);
+    for(pid=(int*)sflist_first(po->rule_list,&rpos);
         pid;
-        pid=(int*)sflist_nextpos(po->rule_list,&rpos) )
+        pid=(int*)sflist_next(&rpos) )
     {
        /* find it in po2 */
        id =(int*) sfghash_find(po2->rule_hash,pid);
@@ -2462,9 +2469,9 @@ int PortTableConsistencyCheck( PortTable *p )
     *    check that each port it reference has all of the rules
     *    referenced to that port in the composit object
     */
-    for(ipo=(PortObject*)sflist_firstpos(p->pt_polist,&pos);
+    for(ipo=(PortObject*)sflist_first(p->pt_polist,&pos);
         ipo;
-        ipo=(PortObject*)sflist_nextpos(p->pt_polist,&pos) )
+        ipo=(PortObject*)sflist_next(&pos) )
     {
         /*
          * for each port in this object get the composite port object
@@ -2472,9 +2479,9 @@ int PortTableConsistencyCheck( PortTable *p )
          * are in the composite object.  This verifies all rules are applied
          * to the originally intended port.
          */
-        for(poi=(PortObjectItem*)sflist_firstpos(ipo->item_list,&ipos);
+        for(poi=(PortObjectItem*)sflist_first(ipo->item_list,&ipos);
             poi;
-            poi=(PortObjectItem*)sflist_nextpos(ipo->item_list,&ipos) )
+            poi=(PortObjectItem*)sflist_next(&ipos) )
         {
             switch(poi->type)
             {
@@ -2566,9 +2573,9 @@ static int * RuleListToSortedArray( SF_LIST * rl )
 
     ra = (int *)SnortAlloc(rl->count * sizeof(int));
 
-    for( prid = (int*)sflist_firstpos(rl,&pos);
+    for( prid = (int*)sflist_first(rl,&pos);
          prid!= 0 && k < (int)rl->count;
-         prid = (int*)sflist_nextpos(rl,&pos) )
+         prid = (int*)sflist_next(&pos) )
     {
         ra[k++] = *prid;
     }
@@ -2598,7 +2605,7 @@ void RuleListSortUniq(
         return ;
     }
 
-    currNode = (int*)sflist_firstpos(rl,&pos);
+    currNode = (int*)sflist_first(rl,&pos);
     if (currNode == NULL)
         return;
 
@@ -2608,7 +2615,7 @@ void RuleListSortUniq(
         {
             *currNode = lastRuleIndex = rlist[i];
             //replace the next element in place
-            currNode = (int*)sflist_nextpos(rl,&pos);
+            currNode = (int*)sflist_next(&pos);
             uniqElements++;
         }
     }
@@ -2633,9 +2640,9 @@ void PortTableSortUniqRules(
     PortObject * po;
     SF_LNODE   *pos = NULL;
 
-    for(po =(PortObject*)sflist_firstpos(p->pt_polist,&pos);
+    for(po =(PortObject*)sflist_first(p->pt_polist,&pos);
         po != NULL;
-        po =(PortObject*)sflist_nextpos(p->pt_polist,&pos) )
+        po =(PortObject*)sflist_next(&pos) )
     {
         RuleListSortUniq(po->rule_list);
     }
@@ -2682,9 +2689,9 @@ void PortTablePrintInput( PortTable * p )
     SF_LNODE   * pos;
 
     LogMessage("*** %d PortObjects in Table\n",p->pt_polist->count);
-    for(po =(PortObject*)sflist_firstpos(p->pt_polist,&pos);
+    for(po =(PortObject*)sflist_first(p->pt_polist,&pos);
         po!=0;
-        po =(PortObject*)sflist_nextpos(p->pt_polist,&pos) )
+        po =(PortObject*)sflist_next(&pos) )
     {
         PortObjectPrint( po );
     }
@@ -2695,9 +2702,9 @@ void PortTablePrintInputEx( PortTable * p,
 {
     PortObject * po;
     SF_LNODE   * pos;
-    for(po =(PortObject*)sflist_firstpos(p->pt_polist,&pos);
+    for(po =(PortObject*)sflist_first(p->pt_polist,&pos);
         po != NULL;
-        po =(PortObject*)sflist_nextpos(p->pt_polist,&pos) )
+        po =(PortObject*)sflist_next(&pos) )
     {
         PortObjectPrintEx( po, print_index_map );
     }
@@ -2778,9 +2785,9 @@ void PortObjectPrintPortsRaw(PortObject * po )
 
     SnortSnprintfAppend(buf, bufsize, " [");
 
-    for(poi=(PortObjectItem*)sflist_firstpos(po->item_list, &pos);
+    for(poi=(PortObjectItem*)sflist_first(po->item_list, &pos);
         poi != 0;
-        poi=(PortObjectItem*)sflist_nextpos(po->item_list, &pos) )
+        poi=(PortObjectItem*)sflist_next(&pos) )
     {
         PortObjectItemPrint(poi, buf, bufsize);
     }
@@ -2818,9 +2825,9 @@ void PortObject2PrintPorts(PortObject2 * po )
     }
     else
     {
-        for(poi=(PortObjectItem*)sflist_firstpos(po->item_list,&pos);
+        for(poi=(PortObjectItem*)sflist_first(po->item_list,&pos);
             poi != 0;
-            poi=(PortObjectItem*)sflist_nextpos(po->item_list,&pos) )
+            poi=(PortObjectItem*)sflist_next(&pos) )
         {
             PortObjectItemPrint(poi, po_print_buf, bufsize);
         }
@@ -2876,9 +2883,9 @@ void PortObjectPrintEx(PortObject * po,
     }
     else
     {
-      for(poi=(PortObjectItem*)sflist_firstpos(po->item_list,&pos);
+      for(poi=(PortObjectItem*)sflist_first(po->item_list,&pos);
           poi != 0;
-          poi=(PortObjectItem*)sflist_nextpos(po->item_list,&pos) )
+          poi=(PortObjectItem*)sflist_next(&pos) )
           {
              PortObjectItemPrint(poi, po_print_buf, bufsize);
           }
@@ -2946,9 +2953,9 @@ void PortObject2PrintEx(PortObject2 * po,
     }
     else
     {
-        for(poi=(PortObjectItem*)sflist_firstpos(po->item_list,&pos);
+        for(poi=(PortObjectItem*)sflist_first(po->item_list,&pos);
             poi != 0;
-            poi=(PortObjectItem*)sflist_nextpos(po->item_list,&pos) )
+            poi=(PortObjectItem*)sflist_next(&pos) )
         {
             PortObjectItemPrint(poi, po_print_buf, bufsize);
         }
@@ -2995,12 +3002,13 @@ void PortObject2Print (PortObject2 * po )
 void PortTablePrintUserRules( PortTable * p )
 {
     PortObject * po;
+    SF_LNODE* cursor;
 
     /* normalized user PortObjects and rule ids */
     LogMessage(">>>PortTable - Rules\n");
-    for(po = (PortObject*)sflist_first(p->pt_polist);
+    for(po = (PortObject*)sflist_first(p->pt_polist, &cursor);
         po!= 0;
-        po = (PortObject*)sflist_next(p->pt_polist) )
+        po = (PortObject*)sflist_next(&cursor) )
     {
         PortObjectPrint( po );
     }
@@ -3052,10 +3060,11 @@ void PortTablePrintPortPortObjects( PortTable * p )
           continue;
 
       SnortSnprintfAppend(po_print_buf, bufsize, "---Port[%d] PortObjects [ ",i);
+      SF_LNODE* cursor;
 
-      for(po=(PortObject*)sflist_first(p->pt_port_lists[i]);
+      for(po=(PortObject*)sflist_first(p->pt_port_lists[i], &cursor);
           po != 0;
-          po=(PortObject*)sflist_next(p->pt_port_lists[i]) )
+          po=(PortObject*)sflist_next(&cursor) )
           {
             SnortSnprintfAppend(po_print_buf, bufsize, "%d ",po->id);
           }
@@ -3361,9 +3370,9 @@ static void _PONegateList(PortObject *po)
     if(!po) return;
 
     /* disable the NOT'd ports */
-    for(poi=(PortObjectItem*)sflist_firstpos(po->item_list,&pos);
+    for(poi=(PortObjectItem*)sflist_first(po->item_list,&pos);
         poi != 0;
-        poi=(PortObjectItem*)sflist_nextpos(po->item_list,&pos) )
+        poi=(PortObjectItem*)sflist_next(&pos) )
     {
         poi->flags ^= PORT_OBJECT_NOT_FLAG;
     }