+ }
+
+ /* List lookups */
+ if (rule->lists != NULL) {
+ ListRule *list_holder = rule->lists;
+ while (list_holder) {
+ switch (list_holder->field) {
+ case RULE_SRCIP:
+ if (!lf->srcip) {
+ return (NULL);
+ }
+ if (!OS_DBSearch(list_holder, lf->srcip)) {
+ return (NULL);
+ }
+ break;
+ case RULE_SRCPORT:
+ if (!lf->srcport) {
+ return (NULL);
+ }
+ if (!OS_DBSearch(list_holder, lf->srcport)) {
+ return (NULL);
+ }
+ break;
+ case RULE_DSTIP:
+ if (!lf->dstip) {
+ return (NULL);
+ }
+ if (!OS_DBSearch(list_holder, lf->dstip)) {
+ return (NULL);
+ }
+ break;
+ case RULE_DSTPORT:
+ if (!lf->dstport) {
+ return (NULL);
+ }
+ if (!OS_DBSearch(list_holder, lf->dstport)) {
+ return (NULL);
+ }
+ break;
+ case RULE_USER:
+ if (lf->srcuser) {
+ if (!OS_DBSearch(list_holder, lf->srcuser)) {
+ return (NULL);
+ }
+ } else if (lf->dstuser) {
+ if (!OS_DBSearch(list_holder, lf->dstuser)) {
+ return (NULL);
+ }
+ } else {
+ return (NULL);
+ }
+ break;
+ case RULE_URL:
+ if (!lf->url) {
+ return (NULL);
+ }
+ if (!OS_DBSearch(list_holder, lf->url)) {
+ return (NULL);
+ }
+ break;
+ case RULE_ID:
+ if (!lf->id) {
+ return (NULL);
+ }
+ if (!OS_DBSearch(list_holder, lf->id)) {
+ return (NULL);
+ }
+ break;
+ case RULE_HOSTNAME:
+ if (!lf->hostname) {
+ return (NULL);
+ }
+ if (!OS_DBSearch(list_holder, lf->hostname)) {
+ return (NULL);
+ }
+ break;
+ case RULE_PROGRAM_NAME:
+ if (!lf->program_name) {
+ return (NULL);
+ }
+ if (!OS_DBSearch(list_holder, lf->program_name)) {
+ return (NULL);
+ }
+ break;
+ case RULE_STATUS:
+ if (!lf->status) {
+ return (NULL);
+ }
+ if (!OS_DBSearch(list_holder, lf->status)) {
+ return (NULL);
+ }
+ break;
+ case RULE_ACTION:
+ if (!lf->action) {
+ return (NULL);
+ }
+ if (!OS_DBSearch(list_holder, lf->action)) {
+ return (NULL);
+ }
+ break;
+ default:
+ return (NULL);
+ }
+
+ list_holder = list_holder->next;