コード例 #1
0
ファイル: util.c プロジェクト: mosconi/openbsd
int
inet_net_ptosa(sa_family_t af, const char *buf, struct sockaddr *sa,
    struct sockaddr *ma)
{
	struct sockaddr_in *sin = (struct sockaddr_in *)sa;
	struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sa;
	int i, plen;

	switch (af) {
	case AF_INET:
		memset(sin, 0, sizeof(*sin));
		sin->sin_family = af;
		sin->sin_len = sizeof(*sin);
		plen = inet_net_pton(af, buf, &sin->sin_addr,
		    sizeof(sin->sin_addr));
		if (plen == -1 || ma == NULL)
			break;

		sin = (struct sockaddr_in *)ma;
		memset(sin, 0, sizeof(*sin));
		sin->sin_len = sizeof(*sin);
		sin->sin_family = 0;
		in_prefixlen2mask(&sin->sin_addr, plen);
		break;
	case AF_INET6:
		memset(sin6, 0, sizeof(*sin6));
		sin6->sin6_family = af;
		sin6->sin6_len = sizeof(*sin6);
		plen = inet_net_pton(af, buf, &sin6->sin6_addr,
		    sizeof(sin6->sin6_addr));
		if (plen == -1 || ma == NULL)
			break;

		sin6 = (struct sockaddr_in6 *)ma;
		memset(sin6, 0, sizeof(*sin6));
		sin6->sin6_len = sizeof(*sin6);
		sin6->sin6_family = 0;
		for (i = 0; i < plen / 8; i++)
			sin6->sin6_addr.s6_addr[i] = 0xff;
		i = plen % 8;
		if (i)
			sin6->sin6_addr.s6_addr[plen / 8] = 0xff00 >> i;
		break;
	default:
		plen = -1;
	}

	return (plen);
}
コード例 #2
0
ファイル: parser.c プロジェクト: darksoul42/bitrig
int
parse_addr(const char *word, int *family, union eigrpd_addr *addr)
{
	struct in_addr		 ina;
	struct addrinfo		 hints, *r;
	struct sockaddr_in6	*sa_in6;

	if (word == NULL)
		return (0);

	memset(addr, 0, sizeof(union eigrpd_addr));
	memset(&ina, 0, sizeof(ina));

	if (inet_net_pton(AF_INET, word, &ina, sizeof(ina)) != -1) {
		*family = AF_INET;
		addr->v4.s_addr = ina.s_addr;
		return (1);
	}

	memset(&hints, 0, sizeof(hints));
	hints.ai_family = AF_INET6;
	hints.ai_socktype = SOCK_DGRAM; /*dummy*/
	hints.ai_flags = AI_NUMERICHOST;
	if (getaddrinfo(word, "0", &hints, &r) == 0) {
		sa_in6 = (struct sockaddr_in6 *)r->ai_addr;
		*family = AF_INET6;
		addr->v6 = sa_in6->sin6_addr;
		freeaddrinfo(r);
		return (1);
	}

	return (0);
}
コード例 #3
0
int
parse_addr(const char *word, struct bgpd_addr *addr)
{
	struct in_addr	ina;
	struct addrinfo	hints, *r;

	if (word == NULL)
		return (0);

	bzero(addr, sizeof(struct bgpd_addr));
	bzero(&ina, sizeof(ina));

	if (inet_net_pton(AF_INET, word, &ina, sizeof(ina)) != -1) {
		addr->aid = AID_INET;
		addr->v4 = ina;
		return (1);
	}

	bzero(&hints, sizeof(hints));
	hints.ai_family = AF_INET6;
	hints.ai_socktype = SOCK_DGRAM; /*dummy*/
	hints.ai_flags = AI_NUMERICHOST;
	if (getaddrinfo(word, "0", &hints, &r) == 0) {
		sa2addr(r->ai_addr, addr);
		freeaddrinfo(r);
		return (1);
	}

	return (0);
}
コード例 #4
0
void testValues() {
    f = 2;
    
    char cp[] = "a";
    char buf[] = "b";
    inet_net_pton(AF_INET, cp, buf, 1);

    //@ assert f == 2;
    //@ assert vacuous: \false;
}
コード例 #5
0
ファイル: config.c プロジェクト: mikeguidry/openbgpd
int
host_v4(const char *s, struct bgpd_addr *h, u_int8_t *len)
{
	struct in_addr		 ina;
	int			 bits = 32;

	bzero(&ina, sizeof(struct in_addr));
	if (strrchr(s, '/') != NULL) {
		if ((bits = inet_net_pton(AF_INET, s, &ina, sizeof(ina))) == -1)
			return (0);
	} else {
		if (inet_pton(AF_INET, s, &ina) != 1)
			return (0);
	}

	h->aid = AID_INET;
	h->v4.s_addr = ina.s_addr;
	*len = bits;

	return (1);
}
コード例 #6
0
ファイル: spamd-setup.c プロジェクト: SylvestreG/bitrig
int
parse_netblock(char *buf, struct bl *start, struct bl *end, int white)
{
	char astring[16], astring2[16];
	unsigned maskbits;
	struct cidr c;

	/* skip leading spaces */
	while (*buf == ' ')
		buf++;
	/* bail if it's a comment */
	if (*buf == '#')
		return (0);
	/* otherwise, look for a netblock of some sort */
	if (sscanf(buf, "%15[^/]/%u", astring, &maskbits) == 2) {
		/* looks like a cidr */
		memset(&c.addr, 0, sizeof(c.addr));
		if (inet_net_pton(AF_INET, astring, &c.addr, sizeof(c.addr))
		    == -1)
			return (0);
		c.addr = ntohl(c.addr);
		if (maskbits > 32)
			return (0);
		c.bits = maskbits;
		cidr2range(c, &start->addr, &end->addr);
		end->addr += 1;
	} else if (sscanf(buf, "%15[0123456789.]%*[ -]%15[0123456789.]",
	    astring, astring2) == 2) {
		/* looks like start - end */
		memset(&start->addr, 0, sizeof(start->addr));
		memset(&end->addr, 0, sizeof(end->addr));
		if (inet_net_pton(AF_INET, astring, &start->addr,
		    sizeof(start->addr)) == -1)
			return (0);
		start->addr = ntohl(start->addr);
		if (inet_net_pton(AF_INET, astring2, &end->addr,
		    sizeof(end->addr)) == -1)
			return (0);
		end->addr = ntohl(end->addr) + 1;
		if (start > end)
			return (0);
	} else if (sscanf(buf, "%15[0123456789.]", astring) == 1) {
		/* just a single address */
		memset(&start->addr, 0, sizeof(start->addr));
		if (inet_net_pton(AF_INET, astring, &start->addr,
		    sizeof(start->addr)) == -1)
			return (0);
		start->addr = ntohl(start->addr);
		end->addr = start->addr + 1;
	} else
		return (0);

	if (white) {
		start->b = 0;
		start->w = 1;
		end->b = 0;
		end->w = -1;
	} else {
		start->b = 1;
		start->w = 0;
		end->b = -1;
		end->w = 0;
	}
	return (1);
}
コード例 #7
0
void runFailure() {
    char buf[] = "b";
    inet_net_pton(AF_INET, NULL, buf, 1);
}
コード例 #8
0
void runSuccess() {
    char cp[] = "a";
    char buf[] = "b";
    inet_net_pton(AF_INET, cp, buf, 1);
}
コード例 #9
0
void runFailure2() {
    char cp[] = "a";
    char buf[] = "b";
    inet_net_pton(AF_INET, cp, buf, 120);
}
コード例 #10
0
void runFailure1() {
    char cp[] = "a";
    inet_net_pton(AF_INET, cp, NULL, anyint());
}
コード例 #11
0
ファイル: pbgp_actions.c プロジェクト: icsecurity/pbgp
int
parse_prefix_list(prefls_t **pfixlist,char *str,setup_params_t *setup)
{

	int nelem = 0;
	int i = 0,len =0,rv=0;
	char *token = NULL,*bck = NULL;
	prefls_t *p = NULL;

	if(!str || !setup) {
		errno = EINVAL;
		return -1;
	}

	len = strlen(str);
	bck = malloc(len);
	if(!bck) {
		pbgp_error("parse_prefix_list :: %s\n",strerror(errno));
		return -1;
	}
	strncpy(bck,str,len);
	//count tokens
	token = strtok(str,",");
	while(token != NULL) {
		nelem++;
		token = strtok(NULL,",");
	}
	strncpy(str,bck,len);

	rv = pfix_init(pfixlist,nelem,setup);
	if(rv < 0)
		goto out;

	p = *pfixlist;

	token = strtok(str,",");
	while((token != NULL) && (i < MAX_PFIX_NUM)) {
		/*rv = inet_pton(AF_INET,token,&(*pfixlist)->ina[i].sin_addr);*/
		//rv=host(token, &p->ina[i], &p->bitmask[i]);
		if (strrchr(token, '/') != NULL) {
				if ((p->netmask[i] = inet_net_pton(AF_INET, token, &p->ina[i], sizeof(struct in_addr))) == -1)
					rv =-1;
			} else {
				if (inet_pton(AF_INET, token, &p->ina[i]) != 1)
					rv=-1;
			}

		if(rv < 0) {
			pbgp_error("parse_prefix_list :: %s\n",strerror(errno));
			rv = -1;
			goto out;
		}

    	//char as[40];
		//inet_net_ntop (AF_INET, &p->ina[i], p->bitmask[i],as, 40);
    	//printf("addr:%s bitmask: %d\n",as,p->bitmask[i]);

		token = strtok(NULL,",");
		i++;
	}
    
out:
      free(bck);

      return rv;

}