chiark / gitweb /
Add missing includes in header files
[elogind.git] / src / libsystemd-network / sd-dhcp-lease.c
index e5ffa90d7f8b51d6078f9c49113b0e1e7033e4a0..34aa36c6e6629c9331d6230ae8fccb57804194b6 100644 (file)
@@ -193,7 +193,7 @@ sd_dhcp_lease *sd_dhcp_lease_ref(sd_dhcp_lease *lease) {
 }
 
 sd_dhcp_lease *sd_dhcp_lease_unref(sd_dhcp_lease *lease) {
-        if (lease && REFCNT_DEC(lease->n_ref) <= 0) {
+        if (lease && REFCNT_DEC(lease->n_ref) == 0) {
                 free(lease->hostname);
                 free(lease->domainname);
                 free(lease->dns);
@@ -497,11 +497,20 @@ int dhcp_lease_parse_options(uint8_t code, uint8_t len, const uint8_t *option,
         case DHCP_OPTION_DOMAIN_NAME:
         {
                 _cleanup_free_ char *domainname = NULL;
+                char *e;
 
                 r = lease_parse_string(option, len, &domainname);
                 if (r < 0)
                         return r;
 
+                /* Chop off trailing dot of domain name that some DHCP
+                 * servers send us back. Internally we want to store
+                 * host names without trailing dots and
+                 * host_name_is_valid() doesn't accept them. */
+                e = endswith(domainname, ".");
+                if (e)
+                        *e = 0;
+
                 if (!hostname_is_valid(domainname) || is_localhost(domainname))
                         break;
 
@@ -514,11 +523,16 @@ int dhcp_lease_parse_options(uint8_t code, uint8_t len, const uint8_t *option,
         case DHCP_OPTION_HOST_NAME:
         {
                 _cleanup_free_ char *hostname = NULL;
+                char *e;
 
                 r = lease_parse_string(option, len, &hostname);
                 if (r < 0)
                         return r;
 
+                e = endswith(hostname, ".");
+                if (e)
+                        *e = 0;
+
                 if (!hostname_is_valid(hostname) || is_localhost(hostname))
                         break;
 
@@ -685,7 +699,7 @@ int sd_dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) {
 
 finish:
         if (r < 0)
-                log_error_errno(-r, "Failed to save lease data %s: %m", lease_file);
+                log_error_errno(r, "Failed to save lease data %s: %m", lease_file);
 
         return r;
 }
@@ -725,8 +739,7 @@ int sd_dhcp_lease_load(sd_dhcp_lease **ret, const char *lease_file) {
                 if (r == -ENOENT)
                         return 0;
 
-                log_error_errno(-r, "Failed to read %s: %m", lease_file);
-                return r;
+                return log_error_errno(r, "Failed to read %s: %m", lease_file);
         }
 
         r = inet_pton(AF_INET, address, &addr);