예제 #1
0
int OS_DBSearch(ListRule *lrule, char *key)
{
    //XXX - god damn hack!!! Jeremy Rossi
    if (lrule->loaded == 0)
    {
        lrule->db = OS_FindList(lrule->filename);
        lrule->loaded = 1;
    }
    switch(lrule->lookup_type)
    {
        case LR_STRING_MATCH:
            //debug1("LR_STRING_MATCH");
            if(OS_DBSeachKey(lrule, key) == 1)
                return 1;
            else
                return 0;
            break;
        case LR_STRING_NOT_MATCH:
            //debug1("LR_STRING_NOT_MATCH");
            if(OS_DBSeachKey(lrule, key) == 1)
                return 0;
            else
                return 1;
            break;
        case LR_STRING_MATCH_VALUE:
            //debug1("LR_STRING_MATCH_VALUE");
           if (OS_DBSearchKeyValue(lrule, key) == 1)
                return 1;
            else
                return 0;
            break;
        case LR_ADDRESS_MATCH:
            //debug1("LR_ADDRESS_MATCH");
            return OS_DBSeachKeyAddress(lrule, key);
            break;
        case LR_ADDRESS_NOT_MATCH:
            //debug1("LR_ADDRESS_NOT_MATCH");
            if (OS_DBSeachKeyAddress(lrule, key) == 0)
                return 1;
            else
                return 0;
            break;
        case LR_ADDRESS_MATCH_VALUE:
            //debug1("LR_ADDRESS_MATCH_VALUE");
            if (OS_DBSearchKeyAddressValue(lrule, key) == 0)
                return 1;
            else
                return 0;
            break;
        default:
            debug1("lists_list.c::OS_DBSearch should never hit default");
            return 0;
    }
    return 0;
}
예제 #2
0
void OS_ListLoadRules()
{
    ListRule *lrule = global_listrule;
    while (lrule != NULL) {
        if (!lrule->loaded) {
            lrule->db = OS_FindList(lrule->filename);
            lrule->loaded = 1;
        }
        lrule = lrule->next;
    }
}
예제 #3
0
ListRule *OS_AddListRule(ListRule *first_rule_list,
                         int lookup_type,
                         int field,
                         const char *dfield,
                         char *listname,
                         OSMatch *matcher)
{
    ListRule *new_rulelist_pt = NULL;
    new_rulelist_pt = (ListRule *)calloc(1, sizeof(ListRule));
    if (!new_rulelist_pt) {
        return (NULL);
    }

    new_rulelist_pt->field = field;
    new_rulelist_pt->next = NULL;
    new_rulelist_pt->matcher = matcher;
    new_rulelist_pt->lookup_type = lookup_type;
    new_rulelist_pt->filename = listname;
    new_rulelist_pt->dfield = field == RULE_DYNAMIC ? strdup(dfield) : NULL;
    if ((new_rulelist_pt->db = OS_FindList(listname)) == NULL) {
        new_rulelist_pt->loaded = 0;
    } else {
        new_rulelist_pt->loaded = 1;
    }
    if (first_rule_list == NULL) {
        debug1("Adding First rulelist item: filename: %s field: %d lookup_type: %d",
               new_rulelist_pt->filename,
               new_rulelist_pt->field,
               new_rulelist_pt->lookup_type);
        first_rule_list = new_rulelist_pt;
    } else {
        while (first_rule_list->next) {
            first_rule_list = first_rule_list->next;
        }
        debug1("Adding rulelist item: filename: %s field: %d lookup_type: %d",
               new_rulelist_pt->filename,
               new_rulelist_pt->field,
               new_rulelist_pt->lookup_type);
        first_rule_list->next = new_rulelist_pt;
    }
    return first_rule_list;
}