sd-dhcp-lease.c | sd-dhcp-lease.c | |||
---|---|---|---|---|
skipping to change at line 71 | skipping to change at line 71 | |||
assert_return(mtu, -EINVAL); | assert_return(mtu, -EINVAL); | |||
if (lease->mtu) | if (lease->mtu) | |||
*mtu = lease->mtu; | *mtu = lease->mtu; | |||
else | else | |||
return -ENOENT; | return -ENOENT; | |||
return 0; | return 0; | |||
} | } | |||
int sd_dhcp_lease_get_dns(sd_dhcp_lease *lease, struct in_addr **addr, size _t *addr_size) { | int sd_dhcp_lease_get_dns(sd_dhcp_lease *lease, const struct in_addr **addr ) { | |||
assert_return(lease, -EINVAL); | assert_return(lease, -EINVAL); | |||
assert_return(addr, -EINVAL); | assert_return(addr, -EINVAL); | |||
assert_return(addr_size, -EINVAL); | ||||
if (lease->dns_size) { | if (lease->dns_size) { | |||
*addr_size = lease->dns_size; | ||||
*addr = lease->dns; | *addr = lease->dns; | |||
return lease->dns_size; | ||||
} else | } else | |||
return -ENOENT; | return -ENOENT; | |||
return 0; | return 0; | |||
} | } | |||
int sd_dhcp_lease_get_ntp(sd_dhcp_lease *lease, struct in_addr **addr, size _t *addr_size) { | int sd_dhcp_lease_get_ntp(sd_dhcp_lease *lease, const struct in_addr **addr ) { | |||
assert_return(lease, -EINVAL); | assert_return(lease, -EINVAL); | |||
assert_return(addr, -EINVAL); | assert_return(addr, -EINVAL); | |||
assert_return(addr_size, -EINVAL); | ||||
if (lease->ntp_size) { | if (lease->ntp_size) { | |||
*addr_size = lease->ntp_size; | ||||
*addr = lease->ntp; | *addr = lease->ntp; | |||
return lease->ntp_size; | ||||
} else | } else | |||
return -ENOENT; | return -ENOENT; | |||
return 0; | return 0; | |||
} | } | |||
int sd_dhcp_lease_get_domainname(sd_dhcp_lease *lease, const char **domainn ame) { | int sd_dhcp_lease_get_domainname(sd_dhcp_lease *lease, const char **domainn ame) { | |||
assert_return(lease, -EINVAL); | assert_return(lease, -EINVAL); | |||
assert_return(domainname, -EINVAL); | assert_return(domainname, -EINVAL); | |||
skipping to change at line 174 | skipping to change at line 172 | |||
int sd_dhcp_lease_get_next_server(sd_dhcp_lease *lease, struct in_addr *add r) { | int sd_dhcp_lease_get_next_server(sd_dhcp_lease *lease, struct in_addr *add r) { | |||
assert_return(lease, -EINVAL); | assert_return(lease, -EINVAL); | |||
assert_return(addr, -EINVAL); | assert_return(addr, -EINVAL); | |||
addr->s_addr = lease->next_server; | addr->s_addr = lease->next_server; | |||
return 0; | return 0; | |||
} | } | |||
int sd_dhcp_lease_get_routes(sd_dhcp_lease *lease, struct sd_dhcp_route **r | int sd_dhcp_lease_get_routes(sd_dhcp_lease *lease, struct sd_dhcp_route **r | |||
outes, | outes) { | |||
size_t *routes_size) { | ||||
assert_return(lease, -EINVAL); | assert_return(lease, -EINVAL); | |||
assert_return(routes, -EINVAL); | assert_return(routes, -EINVAL); | |||
assert_return(routes_size, -EINVAL); | ||||
if (lease->static_route_size) { | if (lease->static_route_size) { | |||
*routes = lease->static_route; | *routes = lease->static_route; | |||
*routes_size = lease->static_route_size; | return lease->static_route_size; | |||
} else | } else | |||
return -ENOENT; | return -ENOENT; | |||
return 0; | return 0; | |||
} | } | |||
sd_dhcp_lease *sd_dhcp_lease_ref(sd_dhcp_lease *lease) { | sd_dhcp_lease *sd_dhcp_lease_ref(sd_dhcp_lease *lease) { | |||
if (lease) | if (lease) | |||
assert_se(REFCNT_INC(lease->n_ref) >= 2); | assert_se(REFCNT_INC(lease->n_ref) >= 2); | |||
skipping to change at line 520 | skipping to change at line 516 | |||
lease_parse_u8(option, len, &lease->ttl, 1); | lease_parse_u8(option, len, &lease->ttl, 1); | |||
break; | break; | |||
case DHCP_OPTION_BOOT_FILE_SIZE: | case DHCP_OPTION_BOOT_FILE_SIZE: | |||
lease_parse_u16(option, len, &lease->boot_file_size, 0); | lease_parse_u16(option, len, &lease->boot_file_size, 0); | |||
break; | break; | |||
case DHCP_OPTION_DOMAIN_NAME: | case DHCP_OPTION_DOMAIN_NAME: | |||
r = lease_parse_string(option, len, &lease->domainname); | { | |||
_cleanup_free_ char *domainname = NULL; | ||||
r = lease_parse_string(option, len, &domainname); | ||||
if (r < 0) | if (r < 0) | |||
return r; | return r; | |||
break; | if (!hostname_is_valid(domainname) || is_localhost(domainna | |||
me)) | ||||
break; | ||||
free(lease->domainname); | ||||
lease->domainname = domainname; | ||||
domainname = NULL; | ||||
break; | ||||
} | ||||
case DHCP_OPTION_HOST_NAME: | case DHCP_OPTION_HOST_NAME: | |||
r = lease_parse_string(option, len, &lease->hostname); | { | |||
_cleanup_free_ char *hostname = NULL; | ||||
r = lease_parse_string(option, len, &hostname); | ||||
if (r < 0) | if (r < 0) | |||
return r; | return r; | |||
break; | if (!hostname_is_valid(hostname) || is_localhost(hostname)) | |||
break; | ||||
free(lease->hostname); | ||||
lease->hostname = hostname; | ||||
hostname = NULL; | ||||
break; | ||||
} | ||||
case DHCP_OPTION_ROOT_PATH: | case DHCP_OPTION_ROOT_PATH: | |||
r = lease_parse_string(option, len, &lease->root_path); | r = lease_parse_string(option, len, &lease->root_path); | |||
if (r < 0) | if (r < 0) | |||
return r; | return r; | |||
break; | break; | |||
case DHCP_OPTION_RENEWAL_T1_TIME: | case DHCP_OPTION_RENEWAL_T1_TIME: | |||
lease_parse_u32(option, len, &lease->t1, 1); | lease_parse_u32(option, len, &lease->t1, 1); | |||
skipping to change at line 590 | skipping to change at line 606 | |||
lease->n_ref = REFCNT_INIT; | lease->n_ref = REFCNT_INIT; | |||
*ret = lease; | *ret = lease; | |||
return 0; | return 0; | |||
} | } | |||
int dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) { | int dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) { | |||
_cleanup_free_ char *temp_path = NULL; | _cleanup_free_ char *temp_path = NULL; | |||
_cleanup_fclose_ FILE *f = NULL; | _cleanup_fclose_ FILE *f = NULL; | |||
struct in_addr address; | struct in_addr address; | |||
struct in_addr *addresses; | const struct in_addr *addresses; | |||
size_t addresses_size; | ||||
const char *string; | const char *string; | |||
uint16_t mtu; | uint16_t mtu; | |||
struct sd_dhcp_route *routes; | struct sd_dhcp_route *routes; | |||
size_t routes_size; | ||||
int r; | int r; | |||
assert(lease); | assert(lease); | |||
assert(lease_file); | assert(lease_file); | |||
r = fopen_temporary(lease_file, &f, &temp_path); | r = fopen_temporary(lease_file, &f, &temp_path); | |||
if (r < 0) | if (r < 0) | |||
goto finish; | goto finish; | |||
fchmod(fileno(f), 0644); | fchmod(fileno(f), 0644); | |||
skipping to change at line 638 | skipping to change at line 652 | |||
inet_ntoa(address)); | inet_ntoa(address)); | |||
r = sd_dhcp_lease_get_next_server(lease, &address); | r = sd_dhcp_lease_get_next_server(lease, &address); | |||
if (r >= 0) | if (r >= 0) | |||
fprintf(f, "NEXT_SERVER=%s\n", inet_ntoa(address)); | fprintf(f, "NEXT_SERVER=%s\n", inet_ntoa(address)); | |||
r = sd_dhcp_lease_get_mtu(lease, &mtu); | r = sd_dhcp_lease_get_mtu(lease, &mtu); | |||
if (r >= 0) | if (r >= 0) | |||
fprintf(f, "MTU=%" PRIu16 "\n", mtu); | fprintf(f, "MTU=%" PRIu16 "\n", mtu); | |||
r = sd_dhcp_lease_get_dns(lease, &addresses, &addresses_size); | fputs("DNS=", f); | |||
r = sd_dhcp_lease_get_dns(lease, &addresses); | ||||
if (r >= 0) | if (r >= 0) | |||
serialize_in_addrs(f, "DNS", addresses, addresses_size); | serialize_in_addrs(f, addresses, r); | |||
fputs("\n", f); | ||||
r = sd_dhcp_lease_get_ntp(lease, &addresses, &addresses_size); | fputs("NTP=", f); | |||
r = sd_dhcp_lease_get_ntp(lease, &addresses); | ||||
if (r >= 0) | if (r >= 0) | |||
serialize_in_addrs(f, "NTP", addresses, addresses_size); | serialize_in_addrs(f, addresses, r); | |||
fputs("\n", f); | ||||
r = sd_dhcp_lease_get_domainname(lease, &string); | r = sd_dhcp_lease_get_domainname(lease, &string); | |||
if (r >= 0) | if (r >= 0) | |||
fprintf(f, "DOMAINNAME=%s\n", string); | fprintf(f, "DOMAINNAME=%s\n", string); | |||
r = sd_dhcp_lease_get_hostname(lease, &string); | r = sd_dhcp_lease_get_hostname(lease, &string); | |||
if (r >= 0) | if (r >= 0) | |||
fprintf(f, "HOSTNAME=%s\n", string); | fprintf(f, "HOSTNAME=%s\n", string); | |||
r = sd_dhcp_lease_get_root_path(lease, &string); | r = sd_dhcp_lease_get_root_path(lease, &string); | |||
if (r >= 0) | if (r >= 0) | |||
fprintf(f, "ROOT_PATH=%s\n", string); | fprintf(f, "ROOT_PATH=%s\n", string); | |||
r = sd_dhcp_lease_get_routes(lease, &routes, &routes_size); | r = sd_dhcp_lease_get_routes(lease, &routes); | |||
if (r >= 0) | if (r >= 0) | |||
serialize_dhcp_routes(f, "ROUTES", routes, routes_size); | serialize_dhcp_routes(f, "ROUTES", routes, r); | |||
r = 0; | r = 0; | |||
fflush(f); | fflush(f); | |||
if (ferror(f) || rename(temp_path, lease_file) < 0) { | if (ferror(f) || rename(temp_path, lease_file) < 0) { | |||
r = -errno; | r = -errno; | |||
unlink(lease_file); | unlink(lease_file); | |||
unlink(temp_path); | unlink(temp_path); | |||
} | } | |||
skipping to change at line 753 | skipping to change at line 771 | |||
if (next_server) { | if (next_server) { | |||
r = inet_pton(AF_INET, next_server, &addr); | r = inet_pton(AF_INET, next_server, &addr); | |||
if (r < 0) | if (r < 0) | |||
return r; | return r; | |||
lease->next_server = addr.s_addr; | lease->next_server = addr.s_addr; | |||
} | } | |||
if (dns) { | if (dns) { | |||
r = deserialize_in_addrs(&lease->dns, &lease->dns_size, dns ); | r = deserialize_in_addrs(&lease->dns, dns); | |||
if (r < 0) | if (r < 0) | |||
return r; | return r; | |||
lease->dns_size = r; | ||||
} | } | |||
if (ntp) { | if (ntp) { | |||
r = deserialize_in_addrs(&lease->ntp, &lease->ntp_size, dns ); | r = deserialize_in_addrs(&lease->ntp, ntp); | |||
if (r < 0) | if (r < 0) | |||
return r; | return r; | |||
lease->ntp_size = r; | ||||
} | } | |||
if (mtu) { | if (mtu) { | |||
uint16_t u; | uint16_t u; | |||
if (sscanf(mtu, "%" SCNu16, &u) > 0) | if (sscanf(mtu, "%" SCNu16, &u) > 0) | |||
lease->mtu = u; | lease->mtu = u; | |||
} | } | |||
if (routes) { | if (routes) { | |||
r = deserialize_dhcp_routes(&lease->static_route, &lease->s tatic_route_size, | r = deserialize_dhcp_routes(&lease->static_route, &lease->s tatic_route_size, | |||
End of changes. 29 change blocks. | ||||
26 lines changed or deleted | 49 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |