From: Russ Combs Date: Sun, 24 Aug 2014 12:00:10 +0000 (-0400) Subject: fixed sflsq cursor X-Git-Tag: 3.0.0-233~1419^2~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c53ce5b2108d4859bed7de5e31518643cc67635;p=thirdparty%2Fsnort3.git fixed sflsq cursor --- diff --git a/ChangeLog b/ChangeLog index 7e383ed76..f5df3dc98 100644 --- 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 diff --git a/src/detection/fpcreate.cc b/src/detection/fpcreate.cc index d6f5394ec..1e1fc932c 100644 --- a/src/detection/fpcreate.cc +++ b/src/detection/fpcreate.cc @@ -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; diff --git a/src/detection/fpdetect.cc b/src/detection/fpdetect.cc index e7ee165c9..d50e4e6c0 100644 --- a/src/detection/fpdetect.cc +++ b/src/detection/fpdetect.cc @@ -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)) { diff --git a/src/detection/fpdetect.h b/src/detection/fpdetect.h index 530a22b45..04c6d8619 100644 --- a/src/detection/fpdetect.h +++ b/src/detection/fpdetect.h @@ -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) diff --git a/src/filters/rate_filter.cc b/src/filters/rate_filter.cc index cdf3128a4..34e9d5f3b 100644 --- a/src/filters/rate_filter.cc +++ b/src/filters/rate_filter.cc @@ -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++; diff --git a/src/filters/sfrf.cc b/src/filters/sfrf.cc index 24480a97d..527d00914 100644 --- a/src/filters/sfrf.cc +++ b/src/filters/sfrf.cc @@ -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); diff --git a/src/filters/sfrf.h b/src/filters/sfrf.h index b1f6a3e7e..623fc0318 100644 --- a/src/filters/sfrf.h +++ b/src/filters/sfrf.h @@ -33,7 +33,6 @@ */ #include "ipv6_port.h" -#include "sflsq.h" #include "sfghash.h" #include "sfxhash.h" #include "main/policy.h" diff --git a/src/filters/sfthd.cc b/src/filters/sfthd.cc index 5c22d0185..766c332f3 100644 --- a/src/filters/sfthd.cc +++ b/src/filters/sfthd.cc @@ -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 ); diff --git a/src/filters/sfthreshold.cc b/src/filters/sfthreshold.cc index 18d9d6676..93378ddfa 100644 --- a/src/filters/sfthreshold.cc +++ b/src/filters/sfthreshold.cc @@ -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++; diff --git a/src/main/snort.cc b/src/main/snort.cc index e45f6c042..74399c63e 100644 --- a/src/main/snort.cc +++ b/src/main/snort.cc @@ -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" diff --git a/src/network_inspectors/port_scan/ipobj.cc b/src/network_inspectors/port_scan/ipobj.cc index e485423ab..de74ba89c 100644 --- a/src/network_inspectors/port_scan/ipobj.cc +++ b/src/network_inspectors/port_scan/ipobj.cc @@ -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 ) diff --git a/src/network_inspectors/port_scan/port_scan.cc b/src/network_inspectors/port_scan/port_scan.cc index 99db9ab8d..f1de85624 100644 --- a/src/network_inspectors/port_scan/port_scan.cc +++ b/src/network_inspectors/port_scan/port_scan.cc @@ -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); } diff --git a/src/packet_io/trough.cc b/src/packet_io/trough.cc index c6bfa9685..03e48083f 100644 --- a/src/packet_io/trough.cc +++ b/src/packet_io/trough.cc @@ -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; diff --git a/src/utils/sflsq.cc b/src/utils/sflsq.cc index cf7deb289..9a0187dc2 100644 --- a/src/utils/sflsq.cc +++ b/src/utils/sflsq.cc @@ -30,10 +30,7 @@ * * 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 */ diff --git a/src/utils/sflsq.h b/src/utils/sflsq.h index bafd9be38..287f2ba01 100644 --- a/src/utils/sflsq.h +++ b/src/utils/sflsq.h @@ -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 *)); diff --git a/src/utils/sfportobject.cc b/src/utils/sfportobject.cc index 46492ee73..b20933c2e 100644 --- a/src/utils/sfportobject.cc +++ b/src/utils/sfportobject.cc @@ -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; }