예제 #1
0
void chk_iprange(char *value, struct s_ip **base)
{
	int32_t i = 0;
	char *ptr1, *ptr2, *saveptr1 = NULL;
	struct s_ip *fip, *lip, *cip;

	if(!cs_malloc(&cip, sizeof(struct s_ip)))
		{ return; }
	fip = cip;

	for(ptr1 = strtok_r(value, ",", &saveptr1); ptr1; ptr1 = strtok_r(NULL, ",", &saveptr1))
	{
		if(i == 0)
			{ ++i; }
		else
		{
			if(!cs_malloc(&cip, sizeof(struct s_ip)))
				{ break; }
			lip->next = cip;
		}

		if((ptr2 = strchr(trim(ptr1), '-')))
		{
			*ptr2++ = '\0';
			cs_inet_addr(trim(ptr1), &cip->ip[0]);
			cs_inet_addr(trim(ptr2), &cip->ip[1]);
		}
		else
		{
			cs_inet_addr(ptr1, &cip->ip[0]);
			IP_ASSIGN(cip->ip[1], cip->ip[0]);
		}
		lip = cip;
	}
	lip = *base;
	*base = fip;
	clear_sip(&lip);
}
예제 #2
0
static void serverip_fn(const char *token, char *value, void *setting, FILE *f)
{
	IN_ADDR_T srvip = *(IN_ADDR_T *)setting;
	if(value)
	{
		if(strlen(value) == 0)
		{
			set_null_ip((IN_ADDR_T *)setting);
		}
		else
		{
			cs_inet_addr(value, (IN_ADDR_T *)setting);
		}
		return;
	}
	if(IP_ISSET(srvip) || cfg.http_full_cfg)
		{ fprintf_conf(f, token, "%s\n", cs_inet_ntoa(srvip)); }
}