//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; }
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; }
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; }
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; }