]> git.ipfire.org Git - thirdparty/dhcp.git/commitdiff
- A bug where leases not in ACTIVE state would get billed to billed classes
authorDavid Hankins <dhankins@isc.org>
Thu, 15 Jun 2006 17:52:06 +0000 (17:52 +0000)
committerDavid Hankins <dhankins@isc.org>
Thu, 15 Jun 2006 17:52:06 +0000 (17:52 +0000)
  (classes with lease limitations) was fixed.  Non-active leases OFFERed
  to clients are no longer billed (but billing is checked before offering).
  [ISC-Bugs #16168]

RELNOTES
server/dhcp.c

index 93e61bcc900109e067c5f9f6ec45d5da5153cc06..5bfc9406eb4807b35866d0e62bdcff45b86cb42a 100644 (file)
--- a/RELNOTES
+++ b/RELNOTES
@@ -123,6 +123,10 @@ and for prodding me into improving it.
   misapplied to server values rather than client values.  The server no longer
   advertises 8-byte lease-time options when on 64-bit platforms.
 
+- A bug where leases not in ACTIVE state would get billed to billed classes
+  (classes with lease limitations) was fixed.  Non-active leases OFFERed
+  to clients are no longer billed (but billing is checked before offering).
+
                        Changes since 3.0.4rc1
 
 - The dhcp-options.5 manpage was updated to correct indentation errors
index 354eb86643688a1ea461efcbae2536d425c26e88..0b89dca32b67ae8f15d6ab5526ffd61e4c9a1a7c 100644 (file)
@@ -34,7 +34,7 @@
 
 #ifndef lint
 static char copyright[] =
-"$Id: dhcp.c,v 1.204 2006/06/01 20:23:17 dhankins Exp $ Copyright (c) 2004-2006 Internet Systems Consortium.  All rights reserved.\n";
+"$Id: dhcp.c,v 1.205 2006/06/15 17:52:06 dhankins Exp $ Copyright (c) 2004-2006 Internet Systems Consortium.  All rights reserved.\n";
 #endif /* not lint */
 
 #include "dhcpd.h"
@@ -1920,6 +1920,19 @@ void ack_lease (packet, lease, offer, when, msg, ms_nulltp, hp)
                                        return;
                                }
                        }
+
+                       /* If this is an offer, undo the billing.  We go
+                        * through all the steps above to bill a class so
+                        * we can hit the 'no available billing' mark and
+                        * abort without offering.  But it just doesn't make
+                        * sense to permanently bill a class for a non-active
+                        * lease.  This means on REQUEST, we will bill this
+                        * lease again (if there is a REQUEST).
+                        */
+                       if (offer == DHCPOFFER &&
+                           lease->billing_class != NULL &&
+                           lease->state != FTS_ACTIVE)
+                               unbill_class(lease, lease->billing_class);
                }
        }