static variable_t* parse_listitem(char *line, group_t *head) { int found_comma = false; variable_t *listitem; variable_t *subitem; char *p; listitem = new_variable(NULL, VT_LISTITEM); if (listitem == NULL) return NULL; p = line +1; /* skip past { */ do { /* Skip whitespace before identifier */ skip_whitespace(&p); subitem = parse_keyvalue(&p,head); add_to_listitem(listitem, subitem); skip_whitespace(&p); if (*p == ',') { p++; found_comma = true; } if (*p == '}') { p++; break; } } while( found_comma ); return listitem; }
static int set_record(struct _std_event *ev_ptr, char *response,struct _firewall_info *fw_info){ if(fw_info){ /* equals to NULL means its a key value firewall * else a regular expression firewall */ if(fw_info->fw_regex == NULL) { //printf(" key value type log \n"); if(parse_keyvalue(ev_ptr,response,fw_info->un.kv)<0){ //printf("Not able to parse kv_pair\n"); return -1; } }else{ #ifdef REGEX if( regex_event_count++ < MAX_REGEX_EVENTS ){ char logid[50]; //int i_log_id; struct _log_info *found_log_info=NULL; //printf(" regex type log $log=%s\n",response); sv_setpvf(sv , "$log='%s'" , response); eval_sv(sv , G_SCALAR); /* Apply fw_info->regex and get log id * use that log id to get log_info struct from log_info_hash */ if(SvIV(eval_pv(fw_info->fw_regex,TRUE))){ strncpy(logid,SvPV(get_sv("logtype" , FALSE) , n_a), sizeof(logid)-1); //printf(" logtype = -%s-\n" , logid); //i_log_id=atoi(logid); HASH_FIND_STR(fw_info->un.log_hash, logid , found_log_info); if(found_log_info==NULL){ printf(" no log info found for logid %s\n",logid); return -1; } if( parse_regex( ev_ptr, response, found_log_info )<0 ){ printf(" parsing regex error %s\n",logid); return -1; } }else{ printf("fw_regex did not work \n"); } }else{ regex_event_count=0; perl_reset(); } #endif } }else{ printf("fw_info for given ip address is blank.%s\n",response); return -1; } return 1; }
static gboolean add_remote_to_keyfile (GKeyFile *new_keyfile, const char *key, const char *url, GPtrArray *branches, GError **error) { gboolean ret = FALSE; char **iter; g_key_file_set_string (new_keyfile, key, "url", url); for (iter = opt_set; iter && *iter; iter++) { const char *keyvalue = *iter; gs_free char *subkey = NULL; gs_free char *subvalue = NULL; if (!parse_keyvalue (keyvalue, &subkey, &subvalue, error)) goto out; g_key_file_set_string (new_keyfile, key, subkey, subvalue); } if (branches->len > 0) g_key_file_set_string_list (new_keyfile, key, "branches", (const char *const *)branches->pdata, branches->len); if (opt_no_gpg_verify) g_key_file_set_boolean (new_keyfile, key, "gpg-verify", FALSE); ret = TRUE; out: return ret; }
group_t* cfg_load(FILE *fp) { char line[MAXLINELEN]; group_t *head = NULL, *curr = NULL; if (fp == NULL) return NULL; rewind(fp); lineno = 0; while(fgets(line, sizeof(line), fp)) { char *p = line; ++lineno; /* Skip any whitespace at start of line */ skip_whitespace(&p); /* Skip line if only whitespace */ if (!*p) continue; switch(*p) { case '[': /* parse config group */ { group_t *newgrp = parse_group(p); if (curr == NULL) { head = curr = newgrp; } else { curr->next = newgrp; curr = newgrp; } } break; case '{': /* parse list item */ { variable_t *var = parse_listitem(p,head); if (curr != NULL) { add_var_to_group(curr, var); } else { fprintf(stderr, "%s:%d: Found list item but no current group!\n", __func__, lineno); } } break; default: /* check for simple key/value */ if (isalpha(*p)) { variable_t *var = parse_keyvalue(&p,head); if (curr != NULL) { add_var_to_group(curr, var); } else { fprintf(stderr, "%s:%d: Found variable but no current group!\n", __func__, lineno); } } else { fprintf(stderr, "%s:%d: unknown line: %s\n", __func__, lineno, line); } break; } } //fclose(fp); return head; }