//Jesse struct subnet_record *make_normal_subnet( struct iface *iface )
struct subnet_record *make_normal_subnet( struct MIB_DHCP_s *iface )
{
	struct subnet_record *subrec;
	struct name_record *namerec;
	struct in_addr myip;
	struct in_addr bcast_ip;
	struct in_addr mask_ip;
	struct in_addr myip_temp;

//Jesse	myip.s_addr = iface->addr;
//Jesse	bcast_ip.s_addr = iface->broadcast;
//Jesse	mask_ip.s_addr = iface->netmask;
	myip.s_addr = iface->IPAddr;
	bcast_ip.s_addr = INADDR_BROADCAST;
	mask_ip.s_addr = iface->SubnetMask;
	myip_temp.s_addr = inet_address(iface->IPAddr);
	
//Jesse	subrec = make_subnet( (char *)inet_ntoa(iface->addr), NORMAL_SUBNET,
//Jesse			     myip, bcast_ip, mask_ip );
	subrec = make_subnet( (char *)inet_ntoa( myip_temp ), NORMAL_SUBNET,
							myip, bcast_ip, mask_ip );
	if(subrec)
		add_subnet(subrec);
	return subrec;
}
Esempio n. 2
0
struct subnet_record *make_normal_subnet(struct interface *iface)
{
	struct subnet_record *subrec;

	subrec = make_subnet(inet_ntoa(iface->ip), NORMAL_SUBNET,
			     iface->ip, iface->bcast, iface->nmask);
	if (subrec) {
		add_subnet(subrec);
	}
	return subrec;
}
Esempio n. 3
0
struct subnet_record *make_normal_subnet(const struct interface *iface)
{

	struct subnet_record *subrec;
	const struct in_addr *pip = &((const struct sockaddr_in *)&iface->ip)->sin_addr;
	const struct in_addr *pbcast = &((const struct sockaddr_in *)&iface->bcast)->sin_addr;
	const struct in_addr *pnmask = &((const struct sockaddr_in *)&iface->netmask)->sin_addr;

	subrec = make_subnet(inet_ntoa(*pip), NORMAL_SUBNET,
			     *pip, *pbcast, *pnmask);
	if (subrec) {
		add_subnet(subrec);
	}
	return subrec;
}
Esempio n. 4
0
File: pf.c Progetto: benjdag/openvpn
static struct pf_set *
pf_init(const struct buffer_list *bl, const char *prefix, const bool allow_kill)
{
#define MODE_UNDEF   0
#define MODE_CLIENTS 1
#define MODE_SUBNETS 2
    int mode = MODE_UNDEF;
    int line_num = 0;
    int n_clients = 0;
    int n_subnets = 0;
    int n_errors = 0;
    struct pf_set *pfs = NULL;
    char line[PF_MAX_LINE_LEN];

    ALLOC_OBJ_CLEAR(pfs, struct pf_set);
    if (bl)
    {
        struct pf_cn_elem **cl = &pfs->cns.list;
        struct pf_subnet **sl = &pfs->sns.list;
        struct buffer_entry *be;

        for (be = bl->head; be != NULL; be = be->next)
        {
            ++line_num;
            strncpynt(line, BSTR(&be->buf), sizeof(line));
            rm_trailing_chars(line, "\r\n\t ");
            if (line[0] == '\0' || line[0] == '#')
            {
            }
            else if (line[0] == '+' || line[0] == '-')
            {
                bool exclude = (line[0] == '-');

                if (line[1] =='\0')
                {
                    msg(D_PF_INFO, "PF: %s/%d: no data after +/-: '%s'", prefix, line_num, line);
                    ++n_errors;
                }
                else if (mode == MODE_CLIENTS)
                {
                    if (add_client(&line[1], prefix, line_num, &cl, exclude))
                    {
                        ++n_clients;
                    }
                    else
                    {
                        ++n_errors;
                    }
                }
                else if (mode == MODE_SUBNETS)
                {
                    if (add_subnet(&line[1], prefix, line_num, &sl, exclude))
                    {
                        ++n_subnets;
                    }
                    else
                    {
                        ++n_errors;
                    }
                }
                else if (mode == MODE_UNDEF)
                {
                }
                else
                {
                    ASSERT(0);
                }
            }
            else if (line[0] == '[')
            {
                if (!strcasecmp(line, "[clients accept]"))
                {
                    mode = MODE_CLIENTS;
                    pfs->cns.default_allow = true;
                }
                else if (!strcasecmp(line, "[clients drop]"))
                {
                    mode = MODE_CLIENTS;
                    pfs->cns.default_allow = false;
                }
                else if (!strcasecmp(line, "[subnets accept]"))
                {
                    mode = MODE_SUBNETS;
                    pfs->sns.default_allow = true;
                }
                else if (!strcasecmp(line, "[subnets drop]"))
                {
                    mode = MODE_SUBNETS;
                    pfs->sns.default_allow = false;
                }
                else if (!strcasecmp(line, "[end]"))
                {
                    goto done;
                }
                else if (allow_kill && !strcasecmp(line, "[kill]"))
                {
                    goto kill;
                }
                else
                {
                    mode = MODE_UNDEF;
                    msg(D_PF_INFO, "PF: %s/%d unknown tag: '%s'", prefix, line_num, line);
                    ++n_errors;
                }
            }
            else
            {
                msg(D_PF_INFO, "PF: %s/%d line must begin with '+', '-', or '[' : '%s'", prefix, line_num, line);
                ++n_errors;
            }
        }
        ++n_errors;
        msg(D_PF_INFO, "PF: %s: missing [end]", prefix);
    }
    else
    {
        msg(D_PF_INFO, "PF: %s: cannot open", prefix);
        ++n_errors;
    }

done:
    if (bl)
    {
        if (!n_errors)
        {
            if (!genhash(&pfs->cns, prefix, n_clients))
            {
                ++n_errors;
            }
        }
        if (n_errors)
        {
            msg(D_PF_INFO, "PF: %s rejected due to %d error(s)", prefix, n_errors);
        }
    }
    if (n_errors)
    {
        pf_destroy(pfs);
        pfs = NULL;
    }
    return pfs;

kill:
    pf_destroy(pfs);
    ALLOC_OBJ_CLEAR(pfs, struct pf_set);
    pfs->kill = true;
    return pfs;
}