Lines Matching +full:low +full:- +full:to +full:- +full:high
2 * Copyright (c) 1997-2007 Kungliga Tekniska Högskolan
18 * may be used to endorse or promote products derived from this software
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
59 * AF_INET - aka IPv4 implementation
68 a->addr_type = KRB5_ADDRESS_INET; in ipv4_sockaddr2addr()
69 memcpy (buf, &sin4->sin_addr, 4); in ipv4_sockaddr2addr()
70 return krb5_data_copy(&a->address, buf, 4); in ipv4_sockaddr2addr()
78 *port = sin4->sin_port; in ipv4_sockaddr2port()
92 memcpy (&tmp.sin_addr, a->address.data, 4); in ipv4_addr2sockaddr()
120 a->addr_type = KRB5_ADDRESS_INET; in ipv4_h_addr2addr()
122 return krb5_data_copy(&a->address, buf, 4); in ipv4_h_addr2addr()
134 if (sin4->sin_addr.s_addr == INADDR_ANY) in ipv4_uninteresting()
145 if ((ntohl(sin4->sin_addr.s_addr) >> 24) == IN_LOOPBACKNET) in ipv4_is_loopback()
169 memcpy (&ia, addr->address.data, 4); in ipv4_print_addr()
183 if(strncasecmp(address, "ip:", p - address) != 0 && in ipv4_parse_addr()
184 strncasecmp(address, "ip4:", p - address) != 0 && in ipv4_parse_addr()
185 strncasecmp(address, "ipv4:", p - address) != 0 && in ipv4_parse_addr()
186 strncasecmp(address, "inet:", p - address) != 0) in ipv4_parse_addr()
187 return -1; in ipv4_parse_addr()
191 return -1; in ipv4_parse_addr()
192 addr->addr_type = KRB5_ADDRESS_INET; in ipv4_parse_addr()
193 if(krb5_data_alloc(&addr->address, 4) != 0) in ipv4_parse_addr()
194 return -1; in ipv4_parse_addr()
195 _krb5_put_int(addr->address.data, ntohl(a.s_addr), addr->address.length); in ipv4_parse_addr()
201 unsigned long len, krb5_address *low, krb5_address *high) in ipv4_mask_boundary() argument
211 m = m << (32 - len); in ipv4_mask_boundary()
213 _krb5_get_int(inaddr->address.data, &ia, inaddr->address.length); in ipv4_mask_boundary()
218 low->addr_type = KRB5_ADDRESS_INET; in ipv4_mask_boundary()
219 if(krb5_data_alloc(&low->address, 4) != 0) in ipv4_mask_boundary()
220 return -1; in ipv4_mask_boundary()
221 _krb5_put_int(low->address.data, l, low->address.length); in ipv4_mask_boundary()
223 high->addr_type = KRB5_ADDRESS_INET; in ipv4_mask_boundary()
224 if(krb5_data_alloc(&high->address, 4) != 0) { in ipv4_mask_boundary()
225 krb5_free_address(context, low); in ipv4_mask_boundary()
226 return -1; in ipv4_mask_boundary()
228 _krb5_put_int(high->address.data, h, high->address.length); in ipv4_mask_boundary()
235 * AF_INET6 - aka IPv6 implementation
245 if (IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr)) { in ipv6_sockaddr2addr()
248 a->addr_type = KRB5_ADDRESS_INET; in ipv6_sockaddr2addr()
253 #define IN6_ADDR_V6_TO_V4(x) ((const struct in_addr *)&(x)->s6_addr[12]) in ipv6_sockaddr2addr()
256 memcpy (buf, IN6_ADDR_V6_TO_V4(&sin6->sin6_addr), 4); in ipv6_sockaddr2addr()
257 return krb5_data_copy(&a->address, buf, 4); in ipv6_sockaddr2addr()
259 a->addr_type = KRB5_ADDRESS_INET6; in ipv6_sockaddr2addr()
260 return krb5_data_copy(&a->address, in ipv6_sockaddr2addr()
261 &sin6->sin6_addr, in ipv6_sockaddr2addr()
262 sizeof(sin6->sin6_addr)); in ipv6_sockaddr2addr()
271 *port = sin6->sin6_port; in ipv6_sockaddr2port()
285 memcpy (&tmp.sin6_addr, a->address.data, sizeof(tmp.sin6_addr)); in ipv6_addr2sockaddr()
311 a->addr_type = KRB5_ADDRESS_INET6; in ipv6_h_addr2addr()
312 return krb5_data_copy(&a->address, addr, sizeof(struct in6_addr)); in ipv6_h_addr2addr()
323 const struct in6_addr *in6 = (const struct in6_addr *)&sin6->sin6_addr; in ipv6_uninteresting()
333 const struct in6_addr *in6 = (const struct in6_addr *)&sin6->sin6_addr; in ipv6_is_loopback()
354 if(inet_ntop(AF_INET6, addr->address.data, buf, sizeof(buf)) == NULL) in ipv6_print_addr()
358 unsigned char *p = addr->address.data; in ipv6_print_addr()
360 for(i = 0; i < addr->address.length; i++) { in ipv6_print_addr()
380 if(strncasecmp(address, "ip6:", p - address) == 0 || in ipv6_parse_addr()
381 strncasecmp(address, "ipv6:", p - address) == 0 || in ipv6_parse_addr()
382 strncasecmp(address, "inet6:", p - address) == 0) in ipv6_parse_addr()
388 addr->addr_type = KRB5_ADDRESS_INET6; in ipv6_parse_addr()
389 ret = krb5_data_alloc(&addr->address, sizeof(in6.s6_addr)); in ipv6_parse_addr()
391 return -1; in ipv6_parse_addr()
392 memcpy(addr->address.data, in6.s6_addr, sizeof(in6.s6_addr)); in ipv6_parse_addr()
395 return -1; in ipv6_parse_addr()
400 unsigned long len, krb5_address *low, krb5_address *high) in ipv6_mask_boundary() argument
412 if (inaddr->address.length != sizeof(addr)) { in ipv6_mask_boundary()
418 memcpy(&addr, inaddr->address.data, inaddr->address.length); in ipv6_mask_boundary()
423 m = 0xff << (8 - sub_len); in ipv6_mask_boundary()
429 len -= 8; in ipv6_mask_boundary()
434 low->addr_type = KRB5_ADDRESS_INET6; in ipv6_mask_boundary()
435 if (krb5_data_alloc(&low->address, sizeof(laddr.s6_addr)) != 0) in ipv6_mask_boundary()
436 return -1; in ipv6_mask_boundary()
437 memcpy(low->address.data, laddr.s6_addr, sizeof(laddr.s6_addr)); in ipv6_mask_boundary()
439 high->addr_type = KRB5_ADDRESS_INET6; in ipv6_mask_boundary()
440 if (krb5_data_alloc(&high->address, sizeof(haddr.s6_addr)) != 0) { in ipv6_mask_boundary()
441 krb5_free_address(context, low); in ipv6_mask_boundary()
442 return -1; in ipv6_mask_boundary()
444 memcpy(high->address.data, haddr.s6_addr, sizeof(haddr.s6_addr)); in ipv6_mask_boundary()
457 #define KRB5_ADDRESS_ARANGE (-100)
460 krb5_address low; member
461 krb5_address high; member
474 return -1; in arange_parse_addr()
485 return -1; in arange_parse_addr()
486 buf[p - address] = '\0'; in arange_parse_addr()
492 return -1; in arange_parse_addr()
495 address += p - address + 1; in arange_parse_addr()
500 return -1; in arange_parse_addr()
510 krb5_addresses low, high; in arange_parse_addr() local
512 strsep_copy(&address, "-", buf, sizeof(buf)); in arange_parse_addr()
513 ret = krb5_parse_address(context, buf, &low); in arange_parse_addr()
516 if(low.len != 1) { in arange_parse_addr()
517 krb5_free_addresses(context, &low); in arange_parse_addr()
518 return -1; in arange_parse_addr()
521 strsep_copy(&address, "-", buf, sizeof(buf)); in arange_parse_addr()
522 ret = krb5_parse_address(context, buf, &high); in arange_parse_addr()
524 krb5_free_addresses(context, &low); in arange_parse_addr()
528 if(high.len != 1 || high.val[0].addr_type != low.val[0].addr_type) { in arange_parse_addr()
529 krb5_free_addresses(context, &low); in arange_parse_addr()
530 krb5_free_addresses(context, &high); in arange_parse_addr()
531 return -1; in arange_parse_addr()
534 ret = krb5_copy_address(context, &high.val[0], &high0); in arange_parse_addr()
536 ret = krb5_copy_address(context, &low.val[0], &low0); in arange_parse_addr()
540 krb5_free_addresses(context, &low); in arange_parse_addr()
541 krb5_free_addresses(context, &high); in arange_parse_addr()
546 krb5_data_alloc(&addr->address, sizeof(*a)); in arange_parse_addr()
547 addr->addr_type = KRB5_ADDRESS_ARANGE; in arange_parse_addr()
548 a = addr->address.data; in arange_parse_addr()
551 a->low = low0; in arange_parse_addr()
552 a->high = high0; in arange_parse_addr()
554 a->low = high0; in arange_parse_addr()
555 a->high = low0; in arange_parse_addr()
564 a = addr->address.data; in arange_free()
565 krb5_free_address(context, &a->low); in arange_free()
566 krb5_free_address(context, &a->high); in arange_free()
567 krb5_data_free(&addr->address); in arange_free()
579 outaddr->addr_type = KRB5_ADDRESS_ARANGE; in arange_copy()
580 ret = krb5_data_alloc(&outaddr->address, sizeof(*o)); in arange_copy()
583 i = inaddr->address.data; in arange_copy()
584 o = outaddr->address.data; in arange_copy()
585 ret = krb5_copy_address(context, &i->low, &o->low); in arange_copy()
587 krb5_data_free(&outaddr->address); in arange_copy()
590 ret = krb5_copy_address(context, &i->high, &o->high); in arange_copy()
592 krb5_free_address(context, &o->low); in arange_copy()
593 krb5_data_free(&outaddr->address); in arange_copy()
606 a = addr->address.data; in arange_print_addr()
614 ret = krb5_print_address (&a->low, str + size, len - size, &l); in arange_print_addr()
618 if (len - size > l) in arange_print_addr()
623 l = strlcat(str + size, "-", len - size); in arange_print_addr()
625 if (len - size > l) in arange_print_addr()
630 ret = krb5_print_address (&a->high, str + size, len - size, &l); in arange_print_addr()
647 if(addr1->addr_type == KRB5_ADDRESS_ARANGE) { in arange_order_addr()
648 a = addr1->address.data; in arange_order_addr()
651 } else if(addr2->addr_type == KRB5_ADDRESS_ARANGE) { in arange_order_addr()
652 a = addr2->address.data; in arange_order_addr()
654 sign = -1; in arange_order_addr()
660 if(a2->addr_type == KRB5_ADDRESS_ARANGE) { in arange_order_addr()
661 struct arange *b = a2->address.data; in arange_order_addr()
662 tmp1 = krb5_address_order(context, &a->low, &b->low); in arange_order_addr()
665 return sign * krb5_address_order(context, &a->high, &b->high); in arange_order_addr()
666 } else if(a2->addr_type == a->low.addr_type) { in arange_order_addr()
667 tmp1 = krb5_address_order(context, &a->low, a2); in arange_order_addr()
670 tmp2 = krb5_address_order(context, &a->high, a2); in arange_order_addr()
672 return -sign; in arange_order_addr()
675 return sign * (addr1->addr_type - addr2->addr_type); in arange_order_addr()
690 sp = krb5_storage_from_data((krb5_data*)rk_UNCONST(&addr->address)); in addrport_print_addr()
715 ret = krb5_print_address(&addr1, str + size, len - size, &l); in addrport_print_addr()
719 if (len - size > l) in addrport_print_addr()
724 ret = snprintf(str + size, len - size, ",PORT=%u", port); in addrport_print_addr()
820 if (af == a->af) in find_af()
831 if (atype == a->atype) in find_atype()
841 * @param sa a struct sockaddr to extract the address from
842 * @param addr an Kerberos 5 address to store the address in.
853 struct addr_operations *a = find_af(sa->sa_family); in krb5_sockaddr2address()
857 sa->sa_family); in krb5_sockaddr2address()
860 return (*a->sockaddr2addr)(sa, addr); in krb5_sockaddr2address()
868 * @param sa a struct sockaddr to extract the port from
869 * @param port a pointer to an int16_t store the port in.
881 struct addr_operations *a = find_af(sa->sa_family); in krb5_sockaddr2port()
885 sa->sa_family); in krb5_sockaddr2port()
888 return (*a->sockaddr2port)(sa, port); in krb5_sockaddr2port()
895 * address. In case of the sa is too small to fit the whole address,
896 * the up to *sa_size will be stored, and then *sa_size will be set to
900 * @param addr the address to copy the from
902 * @param sa_size pointer to length of sa, and after the call, it will
919 struct addr_operations *a = find_atype(addr->addr_type); in krb5_addr2sockaddr()
925 addr->addr_type); in krb5_addr2sockaddr()
928 if (a->addr2sockaddr == NULL) { in krb5_addr2sockaddr()
931 N_("Can't convert address type %d to sockaddr", ""), in krb5_addr2sockaddr()
932 addr->addr_type); in krb5_addr2sockaddr()
935 (*a->addr2sockaddr)(addr, sa, sa_size, port); in krb5_addr2sockaddr()
955 max_sockaddr_size = max(max_sockaddr_size, a->max_sockaddr_size); in krb5_max_sockaddr_size()
965 * @param sa pointer to struct sockaddr that might be interesting.
975 struct addr_operations *a = find_af(sa->sa_family); in krb5_sockaddr_uninteresting()
976 if (a == NULL || a->uninteresting == NULL) in krb5_sockaddr_uninteresting()
978 return (*a->uninteresting)(sa); in krb5_sockaddr_uninteresting()
984 struct addr_operations *a = find_af(sa->sa_family); in krb5_sockaddr_is_loopback()
985 if (a == NULL || a->is_loopback == NULL) in krb5_sockaddr_is_loopback()
987 return (*a->is_loopback)(sa); in krb5_sockaddr_is_loopback()
1002 * @param port port to set in sa.
1022 (*a->h_addr2sockaddr)(addr, sa, sa_size, port); in krb5_h_addr2sockaddr()
1051 return (*a->h_addr2addr)(haddr, addr); in krb5_h_addr2addr()
1055 * krb5_anyaddr fills in a "struct sockaddr sa" that can be used to
1056 * bind(2) to. The argument sa_size should initially contain the size
1064 * @param port for to fill into sa.
1086 (*a->anyaddr)(sa, sa_size, port); in krb5_anyaddr()
1091 * krb5_print_address prints the address in addr to the string string
1096 * @param addr address to be printed
1097 * @param str pointer string to print the address into
1098 * @param len length that will fit into area pointed to by "str".
1110 struct addr_operations *a = find_atype(addr->addr_type); in krb5_print_address()
1113 if (a == NULL || a->print_addr == NULL) { in krb5_print_address()
1119 l = snprintf(s, len, "TYPE_%d:", addr->addr_type); in krb5_print_address()
1123 len -= l; in krb5_print_address()
1124 for(i = 0; i < addr->address.length; i++) { in krb5_print_address()
1125 l = snprintf(s, len, "%02x", ((char*)addr->address.data)[i]); in krb5_print_address()
1128 len -= l; in krb5_print_address()
1132 *ret_len = s - str; in krb5_print_address()
1135 ret = (*a->print_addr)(addr, str, len); in krb5_print_address()
1144 * krb5_parse_address returns the resolved hostname in string to the
1166 addresses->len = 0; in krb5_parse_address()
1167 addresses->val = NULL; in krb5_parse_address()
1174 if (addresses->val == NULL) { in krb5_parse_address()
1179 addresses->val[0] = addr; in krb5_parse_address()
1196 for (a = ai; a != NULL; a = a->ai_next) in krb5_parse_address()
1200 if (addresses->val == NULL) { in krb5_parse_address()
1207 addresses->len = 0; in krb5_parse_address()
1208 for (a = ai, i = 0; a != NULL; a = a->ai_next) { in krb5_parse_address()
1209 if (krb5_sockaddr2address (context, ai->ai_addr, &addresses->val[i])) in krb5_parse_address()
1211 if(krb5_address_search(context, &addresses->val[i], addresses)) { in krb5_parse_address()
1212 krb5_free_address(context, &addresses->val[i]); in krb5_parse_address()
1216 addresses->len = i; in krb5_parse_address()
1228 * @param addr1 krb5_address to compare
1229 * @param addr2 krb5_address to compare
1245 a = find_atype(addr1->addr_type); in krb5_address_order()
1249 addr1->addr_type); in krb5_address_order()
1252 if(a->order_addr != NULL) in krb5_address_order()
1253 return (*a->order_addr)(context, addr1, addr2); in krb5_address_order()
1254 a = find_atype(addr2->addr_type); in krb5_address_order()
1258 addr2->addr_type); in krb5_address_order()
1261 if(a->order_addr != NULL) in krb5_address_order()
1262 return (*a->order_addr)(context, addr1, addr2); in krb5_address_order()
1264 if(addr1->addr_type != addr2->addr_type) in krb5_address_order()
1265 return addr1->addr_type - addr2->addr_type; in krb5_address_order()
1266 if(addr1->address.length != addr2->address.length) in krb5_address_order()
1267 return addr1->address.length - addr2->address.length; in krb5_address_order()
1268 return memcmp (addr1->address.data, in krb5_address_order()
1269 addr2->address.data, in krb5_address_order()
1270 addr1->address.length); in krb5_address_order()
1278 * @param addr1 address to compare
1279 * @param addr2 address to compare
1299 * @param addr address to search for.
1300 * @param addrlist list of addresses to look in for addr.
1314 for (i = 0; i < addrlist->len; ++i) in krb5_address_search()
1315 if (krb5_address_compare (context, addr, &addrlist->val[i])) in krb5_address_search()
1325 * @param address addresss to be freed.
1336 struct addr_operations *a = find_atype (address->addr_type); in krb5_free_address()
1337 if(a != NULL && a->free_addr != NULL) in krb5_free_address()
1338 return (*a->free_addr)(context, address); in krb5_free_address()
1339 krb5_data_free (&address->address); in krb5_free_address()
1349 * @param addresses addressses to be freed.
1361 for(i = 0; i < addresses->len; i++) in krb5_free_addresses()
1362 krb5_free_address(context, &addresses->val[i]); in krb5_free_addresses()
1363 free(addresses->val); in krb5_free_addresses()
1364 addresses->len = 0; in krb5_free_addresses()
1365 addresses->val = NULL; in krb5_free_addresses()
1371 * inaddr to outaddr.
1374 * @param inaddr pointer to source address
1375 * @param outaddr pointer to destination address
1387 struct addr_operations *a = find_af (inaddr->addr_type); in krb5_copy_address()
1388 if(a != NULL && a->copy_addr != NULL) in krb5_copy_address()
1389 return (*a->copy_addr)(context, inaddr, outaddr); in krb5_copy_address()
1395 * inaddr to outaddr.
1398 * @param inaddr pointer to source addresses
1399 * @param outaddr pointer to destination addresses
1412 ALLOC_SEQ(outaddr, inaddr->len); in krb5_copy_addresses()
1413 if(inaddr->len > 0 && outaddr->val == NULL) in krb5_copy_addresses()
1415 for(i = 0; i < inaddr->len; i++) in krb5_copy_addresses()
1416 krb5_copy_address(context, &inaddr->val[i], &outaddr->val[i]); in krb5_copy_addresses()
1421 * krb5_append_addresses adds the set of addresses in source to
1426 * @param source adresses that are going to be added to dest
1441 if(source->len > 0) { in krb5_append_addresses()
1442 tmp = realloc(dest->val, (dest->len + source->len) * sizeof(*tmp)); in krb5_append_addresses()
1448 dest->val = tmp; in krb5_append_addresses()
1449 for(i = 0; i < source->len; i++) { in krb5_append_addresses()
1451 if(krb5_address_search(context, &source->val[i], dest)) in krb5_append_addresses()
1454 &source->val[i], in krb5_append_addresses()
1455 &dest->val[dest->len]); in krb5_append_addresses()
1458 dest->len++; in krb5_append_addresses()
1469 * @param addr address to use
1470 * @param port port to use
1482 size_t len = addr->address.length + 2 + 4 * 4; in krb5_make_addrport()
1491 (*res)->addr_type = KRB5_ADDRESS_ADDRPORT; in krb5_make_addrport()
1492 ret = krb5_data_alloc (&(*res)->address, len); in krb5_make_addrport()
1500 p = (*res)->address.data; in krb5_make_addrport()
1503 *p++ = (addr->addr_type ) & 0xFF; in krb5_make_addrport()
1504 *p++ = (addr->addr_type >> 8) & 0xFF; in krb5_make_addrport()
1506 *p++ = (addr->address.length ) & 0xFF; in krb5_make_addrport()
1507 *p++ = (addr->address.length >> 8) & 0xFF; in krb5_make_addrport()
1508 *p++ = (addr->address.length >> 16) & 0xFF; in krb5_make_addrport()
1509 *p++ = (addr->address.length >> 24) & 0xFF; in krb5_make_addrport()
1511 memcpy (p, addr->address.data, addr->address.length); in krb5_make_addrport()
1512 p += addr->address.length; in krb5_make_addrport()
1531 * them in `low' and `high'.
1536 * @param low lowest address
1537 * @param high highest address
1548 krb5_address *low, in krb5_address_prefixlen_boundary() argument
1549 krb5_address *high) in krb5_address_prefixlen_boundary() argument
1551 struct addr_operations *a = find_atype (inaddr->addr_type); in krb5_address_prefixlen_boundary()
1552 if(a != NULL && a->mask_boundary != NULL) in krb5_address_prefixlen_boundary()
1553 return (*a->mask_boundary)(context, inaddr, prefixlen, low, high); in krb5_address_prefixlen_boundary()
1557 inaddr->addr_type); in krb5_address_prefixlen_boundary()