--- /dev/null
+diff -up dhcp-4.2.3/client/dhclient.c.decline-onetry dhcp-4.2.3/client/dhclient.c
+--- dhcp-4.2.3/client/dhclient.c.decline-onetry 2011-11-24 14:21:50.000000000 +0100
++++ dhcp-4.2.3/client/dhclient.c 2011-11-24 14:23:44.472893215 +0100
+@@ -1704,11 +1704,18 @@ void bind_lease (client)
+ if (script_go (client)) {
+ make_decline (client, client -> new);
+ send_decline (client);
+- destroy_client_lease (client -> new);
+- client -> new = (struct client_lease *)0;
+- client -> state = S_DECLINED;
+- state_init (client);
+- return;
++ if (onetry) {
++ if (!quiet)
++ log_info ("Unable to obtain a lease on first try.%s",
++ " Exiting.");
++ exit (2);
++ } else {
++ destroy_client_lease (client -> new);
++ client -> new = (struct client_lease *)0;
++ client -> state = S_DECLINED;
++ state_init (client);
++ return;
++ }
+ }
+
+ /* Write out the new lease if it has been long enough. */