diff -uNr dhcp-4.0.0.ORIG/client/clparse.c dhcp-4.0.0/client/clparse.c
--- dhcp-4.0.0.ORIG/client/clparse.c	2008-09-01 11:38:51.000000000 +0100
+++ dhcp-4.0.0/client/clparse.c	2008-09-01 11:48:17.000000000 +0100
@@ -37,7 +37,7 @@
 
 struct client_config top_level_config;
 
-#define NUM_DEFAULT_REQUESTED_OPTS	9
+#define NUM_DEFAULT_REQUESTED_OPTS	10
 struct option *default_requested_options[NUM_DEFAULT_REQUESTED_OPTS + 1];
 
 static void parse_client_default_duid(struct parse *cfile);
@@ -98,15 +98,20 @@
 				dhcp_universe.code_hash, &code, 0, MDL);
 
 	/* 8 */
-	code = D6O_NAME_SERVERS;
+	code = DHO_NTP_SERVERS;
 	option_code_hash_lookup(&default_requested_options[7],
-				dhcpv6_universe.code_hash, &code, 0, MDL);
+				dhcp_universe.code_hash, &code, 0, MDL);
 
 	/* 9 */
-	code = D6O_DOMAIN_SEARCH;
+	code = D6O_NAME_SERVERS;
 	option_code_hash_lookup(&default_requested_options[8],
 				dhcpv6_universe.code_hash, &code, 0, MDL);
 
+	/* 10 */
+	code = D6O_DOMAIN_SEARCH;
+	option_code_hash_lookup(&default_requested_options[9],
+				dhcpv6_universe.code_hash, &code, 0, MDL);
+
 	for (code = 0 ; code < NUM_DEFAULT_REQUESTED_OPTS ; code++) {
 		if (default_requested_options[code] == NULL)
 			log_fatal("Unable to find option definition for "
diff -uNr dhcp-4.0.0.ORIG/client/scripts/bsdos dhcp-4.0.0/client/scripts/bsdos
--- dhcp-4.0.0.ORIG/client/scripts/bsdos	2008-09-01 11:38:51.000000000 +0100
+++ dhcp-4.0.0/client/scripts/bsdos	2008-09-01 11:39:30.000000000 +0100
@@ -29,6 +29,26 @@
 
     mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
   fi
+  # If we're making confs, may as well make an ntp.conf too
+  make_ntp_conf
+}
+
+make_ntp_conf() {
+  if [ x$PEER_NTP = x ] || [ x$PEER_NTP = xyes ]; then
+    if [ x$new_ntp_servers != x ]; then
+      conf="# Generated by dhclient for interface $interface\n"
+      conf="${conf}restrict default noquery notrust nomodify\n"
+      conf="${conf}restrict 127.0.0.1\n"
+      for ntpserver in $new_ntp_servers; do
+        conf="${conf}restrict $ntpserver nomodify notrap noquery\n"
+        conf="${conf}server $ntpserver\n"
+      done
+      conf="${conf}driftfile /var/lib/ntp/ntp.drift\n"
+      conf="${conf}logfile /var/log/ntp.log\n"
+      printf "${conf}" > /etc/ntp.conf
+      chmod 644 /etc/ntp.conf
+    fi
+  fi
 }
 
 # Must be used on exit.   Invokes the local dhcp client exit hooks, if any.
diff -uNr dhcp-4.0.0.ORIG/client/scripts/freebsd dhcp-4.0.0/client/scripts/freebsd
--- dhcp-4.0.0.ORIG/client/scripts/freebsd	2008-09-01 11:38:51.000000000 +0100
+++ dhcp-4.0.0/client/scripts/freebsd	2008-09-01 11:39:30.000000000 +0100
@@ -73,6 +73,26 @@
       fi
     fi
   fi
+  # If we're making confs, may as well make an ntp.conf too
+  make_ntp_conf
+}
+
+make_ntp_conf() {
+  if [ x$PEER_NTP = x ] || [ x$PEER_NTP = xyes ]; then
+    if [ "x$new_ntp_servers" != x ]; then
+      conf="# Generated by dhclient for interface $interface\n"
+      conf="${conf}restrict default noquery notrust nomodify\n"
+      conf="${conf}restrict 127.0.0.1\n"
+      for ntpserver in $new_ntp_servers; do
+        conf="${conf}restrict $ntpserver nomodify notrap noquery\n"
+        conf="${conf}server $ntpserver\n"
+      done
+      conf="${conf}driftfile /var/lib/ntp/ntp.drift\n"
+      conf="${conf}logfile /var/log/ntp.log\n"
+      printf "${conf}" > /etc/ntp.conf
+      chmod 644 /etc/ntp.conf
+    fi
+  fi
 }
 
 # Must be used on exit.   Invokes the local dhcp client exit hooks, if any.
diff -uNr dhcp-4.0.0.ORIG/client/scripts/linux dhcp-4.0.0/client/scripts/linux
--- dhcp-4.0.0.ORIG/client/scripts/linux	2008-09-01 11:38:51.000000000 +0100
+++ dhcp-4.0.0/client/scripts/linux	2008-09-01 11:39:30.000000000 +0100
@@ -55,6 +55,26 @@
 
     mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
   fi
+  # If we're making confs, may as well make an ntp.conf too
+  make_ntp_conf
+}
+
+make_ntp_conf() {
+  if [ x$PEER_NTP = x ] || [ x$PEER_NTP = xyes ]; then
+    if [ "x$new_ntp_servers" != x ]; then
+      conf="# Generated by dhclient for interface $interface\n"
+      conf="${conf}restrict default noquery notrust nomodify\n"
+      conf="${conf}restrict 127.0.0.1\n"
+      for ntpserver in $new_ntp_servers; do
+        conf="${conf}restrict $ntpserver nomodify notrap noquery\n"
+        conf="${conf}server $ntpserver\n"
+      done
+      conf="${conf}driftfile /var/lib/ntp/ntp.drift\n"
+      conf="${conf}logfile /var/log/ntp.log\n"
+      printf "${conf}" > /etc/ntp.conf
+      chmod 644 /etc/ntp.conf
+    fi
+  fi
 }
 
 # Must be used on exit.   Invokes the local dhcp client exit hooks, if any.
diff -uNr dhcp-4.0.0.ORIG/client/scripts/netbsd dhcp-4.0.0/client/scripts/netbsd
--- dhcp-4.0.0.ORIG/client/scripts/netbsd	2008-09-01 11:38:51.000000000 +0100
+++ dhcp-4.0.0/client/scripts/netbsd	2008-09-01 11:39:30.000000000 +0100
@@ -29,6 +29,26 @@
 
     mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
   fi
+  # If we're making confs, may as well make an ntp.conf too
+  make_ntp_conf
+}
+
+make_ntp_conf() {
+  if [ x$PEER_NTP = x ] || [ x$PEER_NTP = xyes ]; then
+    if [ "x$new_ntp_servers" != x ]; then
+      conf="# Generated by dhclient for interface $interface\n"
+      conf="${conf}restrict default noquery notrust nomodify\n"
+      conf="${conf}restrict 127.0.0.1\n"
+      for ntpserver in $new_ntp_servers; do
+        conf="${conf}restrict $ntpserver nomodify notrap noquery\n"
+        conf="${conf}server $ntpserver\n"
+      done
+      conf="${conf}driftfile /var/lib/ntp/ntp.drift\n"
+      conf="${conf}logfile /var/log/ntp.log\n"
+      printf "${conf}" > /etc/ntp.conf
+      chmod 644 /etc/ntp.conf
+    fi
+  fi
 }
 
 # Must be used on exit.   Invokes the local dhcp client exit hooks, if any.
diff -uNr dhcp-4.0.0.ORIG/client/scripts/openbsd dhcp-4.0.0/client/scripts/openbsd
--- dhcp-4.0.0.ORIG/client/scripts/openbsd	2008-09-01 11:38:51.000000000 +0100
+++ dhcp-4.0.0/client/scripts/openbsd	2008-09-01 11:39:30.000000000 +0100
@@ -29,6 +29,26 @@
 
     mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
   fi
+  # If we're making confs, may as well make an ntp.conf too
+  make_ntp_conf
+}
+
+make_ntp_conf() {
+  if [ x$PEER_NTP = x ] || [ x$PEER_NTP = xyes ]; then
+    if [ "x$new_ntp_servers" != x ]; then
+      conf="# Generated by dhclient for interface $interface\n"
+      conf="${conf}restrict default noquery notrust nomodify\n"
+      conf="${conf}restrict 127.0.0.1\n"
+      for ntpserver in $new_ntp_servers; do
+        conf="${conf}restrict $ntpserver nomodify notrap noquery\n"
+        conf="${conf}server $ntpserver\n"
+      done
+      conf="${conf}driftfile /var/lib/ntp/ntp.drift\n"
+      conf="${conf}logfile /var/log/ntp.log\n"
+      printf "${conf}" > /etc/ntp.conf
+      chmod 644 /etc/ntp.conf
+    fi
+  fi
 }
 
 # Must be used on exit.   Invokes the local dhcp client exit hooks, if any.
diff -uNr dhcp-4.0.0.ORIG/client/scripts/solaris dhcp-4.0.0/client/scripts/solaris
--- dhcp-4.0.0.ORIG/client/scripts/solaris	2008-09-01 11:38:51.000000000 +0100
+++ dhcp-4.0.0/client/scripts/solaris	2008-09-01 11:39:30.000000000 +0100
@@ -17,6 +17,26 @@
 
     mv /etc/resolv.conf.dhclient /etc/resolv.conf
   fi
+  # If we're making confs, may as well make an ntp.conf too
+  make_ntp_conf
+}
+
+make_ntp_conf() {
+  if [ x$PEER_NTP = x ] || [ x$PEER_NTP = xyes ]; then
+    if [ "x$new_ntp_servers" != x ]; then
+      conf="# Generated by dhclient for interface $interface\n"
+      conf="${conf}restrict default noquery notrust nomodify\n"
+      conf="${conf}restrict 127.0.0.1\n"
+      for ntpserver in $new_ntp_servers; do
+        conf="${conf}restrict $ntpserver nomodify notrap noquery\n"
+        conf="${conf}server $ntpserver\n"
+      done
+      conf="${conf}driftfile /var/lib/ntp/ntp.drift\n"
+      conf="${conf}logfile /var/log/ntp.log\n"
+      printf "${conf}" > /etc/ntp.conf
+      chmod 644 /etc/ntp.conf
+    fi
+  fi
 }
 
 # Must be used on exit.   Invokes the local dhcp client exit hooks, if any.
