X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-network%2Fsd-dhcp-lease.c;h=3e43ab635f00ab787e8c7890f27f1ae38e2040ec;hb=f4e884dd1c4cc4bc6d5f068f96b14ceda46f3962;hp=648e6e2159b9f45a11ef775cc4a9613b0a148e10;hpb=109731eb250705e055b98b844d7c0dfb74bcf728;p=elogind.git diff --git a/src/libsystemd-network/sd-dhcp-lease.c b/src/libsystemd-network/sd-dhcp-lease.c index 648e6e215..3e43ab635 100644 --- a/src/libsystemd-network/sd-dhcp-lease.c +++ b/src/libsystemd-network/sd-dhcp-lease.c @@ -126,7 +126,10 @@ int sd_dhcp_lease_get_router(sd_dhcp_lease *lease, struct in_addr *addr) { assert_return(lease, -EINVAL); assert_return(addr, -EINVAL); - addr->s_addr = lease->router; + if (lease->router != INADDR_ANY) + addr->s_addr = lease->router; + else + return -ENOENT; return 0; } @@ -297,6 +300,7 @@ int dhcp_lease_new(sd_dhcp_lease **ret) { if (!lease) return -ENOMEM; + lease->router = INADDR_ANY; lease->n_ref = REFCNT_INIT; *ret = lease; @@ -330,12 +334,13 @@ static int deserialize_addresses(struct in_addr **addresses, size_t *size, const new_addresses = realloc(*addresses, (*size + 1) * sizeof(struct in_addr)); if (!new_addresses) return -ENOMEM; + else + *addresses = new_addresses; r = inet_aton(word, &(new_addresses[*size])); if (r < 0) continue; - *addresses = new_addresses; (*size)++; } @@ -369,18 +374,16 @@ int dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) { "# This is private data. Do not parse.\n" "ADDRESS=%s\n", inet_ntoa(address)); - r = sd_dhcp_lease_get_router(lease, &address); - if (r < 0) - goto finish; - - fprintf(f, "ROUTER=%s\n", inet_ntoa(address)); - r = sd_dhcp_lease_get_netmask(lease, &address); if (r < 0) goto finish; fprintf(f, "NETMASK=%s\n", inet_ntoa(address)); + r = sd_dhcp_lease_get_router(lease, &address); + if (r >= 0) + fprintf(f, "ROUTER=%s\n", inet_ntoa(address)); + r = sd_dhcp_lease_get_server_identifier(lease, &address); if (r >= 0) fprintf(f, "SERVER_ADDRESS=%s\n", @@ -473,11 +476,13 @@ int dhcp_lease_load(const char *lease_file, sd_dhcp_lease **ret) { lease->address = addr.s_addr; - r = inet_pton(AF_INET, router, &addr); - if (r < 0) - return r; + if (router) { + r = inet_pton(AF_INET, router, &addr); + if (r < 0) + return r; - lease->router = addr.s_addr; + lease->router = addr.s_addr; + } r = inet_pton(AF_INET, netmask, &addr); if (r < 0)