示例#1
0
static int check_proctable_entry(MPIR_PROCDESC *e)
{
   int i;
   char *c;
   if (e->pid == 0)
      return 0;
   if (e->host_name == NULL || *e->host_name == '\0')
      return 0;
   if (e->executable_name == NULL)
      return 0;
   
   for (i = 0, c = e->host_name; i < 255 && *c != '\0'; i++, c++) {
      if (!IS_HOSTCHAR(*c))
         return 0;
   }
   if (i == 255)
      return 0;

   return 1;
}
示例#2
0
static const char *syslog_parse_structured_data(nx_logdata_t *logdata, const char *string)
{
    const char *ptr = string;
    char sd_name[40];
    int i;
    int sd_namelen;

    for ( ; *ptr != '\0'; ptr++ )
    {
	for ( ; *ptr == ' '; ptr++ ); // skip space
	if ( *ptr != '[' )
	{ // no SD-ELEMENT found
	    return ( ptr );
	}
	ptr++;
	for ( ; *ptr == ' '; ptr++ ); // skip space

	sd_namelen = 0;
	for ( i = 0; *ptr != '\0'; i++, ptr++ )
	{
	    if ( i >= (int) sizeof(sd_name) - 1 )
	    {
		break;
	    }
	    if ( (*ptr == '=') || (*ptr == ' ') || (*ptr == '"') || (*ptr == ']') )
	    {
		if ( sd_namelen == 0 )
		{
		    sd_namelen = i;
		}
		break;
	    }
	    if ( *ptr == '@' )
	    { // ignore enterprise number and the at mark 
		sd_namelen = i;
		sd_name[i] = '\0';
	    }
	    else if ( IS_HOSTCHAR(*ptr) )
	    {
		sd_name[i] = *ptr;
	    }
	    else
	    {
		sd_name[i] = '_';
	    }
	}
	sd_name[i] = '\0';

	if ( *ptr == '\0' )
	{
	    return ( string );
	}
	ptr++;

	if ( strcmp(sd_name, "NXLOG") == 0 )
	{
	    sd_name[0] = '\0';
	    sd_namelen = 0;
	}

	if ( (ptr = syslog_parse_sd_params(logdata, sd_name, (size_t) sd_namelen, ptr)) == NULL )
	{
	    return ( string );
	}
	for ( ; *ptr == ' '; ptr++ ); // skip space
	if ( *ptr != ']' )
	{ // missing closing bracket, invalid SD-ELEMENT
	    return ( string );
	}
    }

    return ( ptr );
}
示例#3
0
static const char *syslog_parse_sd_params(nx_logdata_t *logdata,
					  const char *sd_name,
					  size_t sd_namelen,
					  const char *string)
{
    nx_string_t *param_value = NULL;
    char param_name[80];
    const char *ptr = string;
    int i;
    nx_value_t *value;

    if ( sd_namelen > 0 )
    {
	ASSERT(sd_namelen < sizeof(param_name) / 2);
	memcpy(param_name, sd_name, sd_namelen);
	param_name[sd_namelen] = '.';
	sd_namelen++;
    }
    for ( ; *ptr != '\0'; ptr++ )
    {
	for ( ; *ptr == ' '; ptr++ ); // skip space

	if ( *ptr == ']' )
	{
	    break;
	}

	// parse param-name
	for ( i = (int) sd_namelen; *ptr != '\0'; i++, ptr++ )
	{
	    if ( i >= (int) sizeof(param_name) - 1 )
	    {
		break;
	    }
	    if ( (*ptr == '=') || (*ptr == ' ') || (*ptr == '"') || (*ptr == ']') )
	    {
		break;
	    }
	    if ( IS_HOSTCHAR(*ptr) )
	    {
		param_name[i] = *ptr;
	    }
	    else
	    {
		param_name[i] = '_';
	    }
	}
	param_name[i] = '\0';
	if ( *ptr != '=' )
	{
	    return ( NULL );
	}
	ptr++;
	if ( *ptr != '"' )
	{
	    return ( NULL );
	}
	ptr++;

	param_value = nx_string_new_size(50);

	// parse param-value
	for ( i = 0; *ptr != '\0'; i++, ptr++ )
	{
	    //FIXME: this needs to be utf-8 aware
	    if ( *ptr == '\\' )
	    {
		if ( (ptr[1] == '\\') || (ptr[1] == '"') || (ptr[1] == ']') )
		{
		    ptr++;
		    nx_string_append(param_value, ptr, 1);
		}
	    }
	    else if ( *ptr == '"' )
	    {
		break;
	    }
	    else
	    {
		nx_string_append(param_value, ptr, 1);
	    }
	    if ( param_value->len >= 1024*64 )
	    { // 64K limit
		nx_string_free(param_value);
		return ( NULL );
	    }
	}

	if ( *ptr != '"' )
	{
	    if ( param_value != NULL )
	    {
		nx_string_free(param_value);
	    }
	    return ( NULL );
	}

	value = nx_value_new(NX_VALUE_TYPE_STRING);
	value->string = param_value;
	nx_logdata_set_field_value(logdata, param_name, value);
    }
    
    return ( ptr );
}
示例#4
0
boolean nx_syslog_parse_rfc3164(nx_logdata_t *logdata,
				const char *string,
				size_t stringlen)
{
    boolean retval = TRUE;
    const char *ptr, *hoststart = NULL, *hostend = NULL;
    const char *appstart = NULL, *append = NULL;
    const char *msgstart = NULL, *msgend = NULL;
    const char *pidstart = NULL, *pidend = NULL;
    apr_time_t date;
    boolean got_date = FALSE;
    boolean got_pri = FALSE;

    ASSERT(logdata != NULL);
    ASSERT(string != NULL);

    if ( stringlen <= 0 )
    {
	stringlen = strlen(string);
    }

    msgend = string + stringlen;
    ptr = parse_syslog_priority(string, logdata, &retval);
    got_pri = retval;
    msgstart = ptr;
    
    if ( nx_date_parse(&date, ptr, &ptr) != APR_SUCCESS )
    {
	nx_logdata_set_datetime(logdata, "EventTime", apr_time_now());
	for ( appstart = ptr; IS_TAGCHAR(*ptr); ptr++ );
	append = ptr;
    }
    else
    { // date ok
	got_date = TRUE;
	for ( ; *ptr == ' '; ptr++ ); // skip space
	msgstart = ptr;
	for ( hoststart = ptr; IS_HOSTCHAR(*ptr); ptr++ );

	if ( hoststart == ptr )
	{ //no host
	    hoststart = NULL;
	}
	else if ( *ptr == '\0' )
	{ // line ends after host
	    msgstart = NULL;
	    hostend = ptr;
	}
	else if ( *ptr == '[' )
	{ //app instead of host
	    hoststart = NULL;
	    appstart = msgstart;
	}
	else if ( (*ptr != ' ') && (*ptr != ':') )
	{
	    msgstart = hoststart;
	    hoststart = NULL;
	}
	else
	{ // got host
	    hostend = ptr;
	    msgstart = ptr;
	    
	    if ( *ptr == ':' )
	    { // no host
		appstart = hoststart;
		hoststart = NULL;
		append = hostend;
		hostend = NULL;
	    }
	    else
	    {
		for ( ; *ptr == ' '; ptr++ ); // skip space
		for ( appstart = ptr; IS_TAGCHAR(*ptr); ptr++ );
		msgstart = ptr;
	    }
	}
    }

    if ( (got_date == TRUE) || (got_pri = TRUE) )
    {
	if ( (appstart != NULL) && (*appstart == '[') )
	{
	    appstart = NULL;
	}
	else if ( appstart == NULL )
	{
	    // ignore pid
	}
	else if ( *ptr == '[' )
	{ // pid
	    append = ptr;
	    
	    ptr++;
	    pidstart = ptr;
	    for ( ; *ptr != '\0'; ptr++ )
	    {
		if ( (*ptr == ']') || (*ptr == ' ') )
		{
		    break;
		}
	    }
	    
	    msgstart = appstart;
	    
	    if ( *ptr == ']' )
	    {
		pidend = ptr;
		ptr++;
	    }
	    else
	    {
		pidend = NULL;
	    }

	    if ( *ptr == ':' )
	    {
		ptr++;
	    }
	    else
	    {
		pidend = NULL;
	    }
	    if ( *ptr == ' ' )
	    {
		ptr++;
	    }
	    if ( pidend == NULL )
	    {
		appstart = NULL;
		append = NULL;
	    }
	    if ( appstart != NULL )
	    {
		msgstart = ptr;
	    }
	}
	else if ( *ptr == ':')
	{
	    append = ptr;
	    ptr++;
	    if ( *ptr == ' ' )
	    {
		ptr++;
	    }
	    if ( appstart != NULL )
	    {
		msgstart = ptr;
	    }
	}
	else
	{
	    msgstart = appstart;
	    appstart = NULL;
	}
    }
    else
    {
	appstart = NULL;
    }

    set_syslog_hostname(logdata, hoststart, hostend);
    if ( got_date == TRUE )
    {
	nx_date_fix_year(&date);
	set_syslog_timestamp(logdata, date);
    }
    set_syslog_appname(logdata, appstart, append);
    set_syslog_procid(logdata, pidstart, pidend);
    set_syslog_message(logdata, msgstart, msgend);

    return ( retval );
}