示例#1
0
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;
}
示例#2
0
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;
	
	
}
示例#3
0
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;
}
示例#4
0
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;
}