Re: [pfSense Support] PATCH: Add custom DHCP configuration

2010-07-28 Thread Chris Buechler
On Mon, Jul 12, 2010 at 9:33 AM, Jonathan Dieter jdie...@lesbg.com wrote:
 In current 2.0BETA3, it seems that there's no way to write one's own
 configuration settings into dhcpd.conf.  For example, if I want to
 chain-load gPXE, there's nowhere to put the following:

 if exists user-class and option user-class = gPXE {
        filename http://www.lesaz.loc/netboot/pxelinux.0;;
 } else {
        filename gpxe.pxe;
 }

 I've added a Custom DHCP configuration that will be inserted at the
 end of the subnet declaration.  To be honest, this feels a bit hackish
 (why at that location), but I'm not sure of any better place to put it.

 I did modify xmlparse.inc to make any name that ends as _cdata a CDATA
 type, as that was the most logical way that I could think of to maintain
 newlines.  If there's a better way, please correct it (or let me know
 and I'll correct it).


This one should use base64 rather than cdata, to be consistent with
all other similar fields.

-
To unsubscribe, e-mail: support-unsubscr...@pfsense.com
For additional commands, e-mail: support-h...@pfsense.com

Commercial support available - https://portal.pfsense.org



Re: [pfSense Support] PATCH: Add custom DHCP configuration

2010-07-28 Thread Jonathan Dieter
On Wed, 2010-07-28 at 13:38 -0400, Chris Buechler wrote:
 On Mon, Jul 12, 2010 at 9:33 AM, Jonathan Dieter jdie...@lesbg.com wrote:
  I did modify xmlparse.inc to make any name that ends as _cdata a CDATA
  type, as that was the most logical way that I could think of to maintain
  newlines.  If there's a better way, please correct it (or let me know
  and I'll correct it).
 
 
 This one should use base64 rather than cdata, to be consistent with
 all other similar fields.

Thanks, I couldn't work out what the right way was to do that.  I'll
fix that up and submit the updated patch on the ticket.

Jonathan


signature.asc
Description: This is a digitally signed message part


[pfSense Support] PATCH: Add custom DHCP configuration

2010-07-12 Thread Jonathan Dieter
In current 2.0BETA3, it seems that there's no way to write one's own
configuration settings into dhcpd.conf.  For example, if I want to
chain-load gPXE, there's nowhere to put the following:

if exists user-class and option user-class = gPXE {
filename http://www.lesaz.loc/netboot/pxelinux.0;;
} else {
filename gpxe.pxe;
}

I've added a Custom DHCP configuration that will be inserted at the
end of the subnet declaration.  To be honest, this feels a bit hackish
(why at that location), but I'm not sure of any better place to put it.

I did modify xmlparse.inc to make any name that ends as _cdata a CDATA
type, as that was the most logical way that I could think of to maintain
newlines.  If there's a better way, please correct it (or let me know
and I'll correct it).

Jonathan
diff -urb new/etc/inc/services.inc custom/etc/inc/services.inc
--- new/etc/inc/services.inc	2010-07-12 13:25:12.450445328 +0300
+++ custom/etc/inc/services.inc	2010-07-12 16:17:42.112987836 +0300
@@ -315,11 +315,13 @@
   		}
 		}
 		
+		/* Custom dhcp data goes here */
+		$dhcpdconf .= $dhcpifconf['custom_cdata'];
+
 		$dhcpdconf .= EOD
 }
 
 EOD;
-
 		/* add static mappings */
 		if (is_array($dhcpifconf['staticmap'])) {
 
diff -urb new/etc/inc/xmlparse.inc custom/etc/inc/xmlparse.inc
--- new/etc/inc/xmlparse.inc	2010-07-12 15:21:49.444916086 +0300
+++ custom/etc/inc/xmlparse.inc	2010-07-12 15:20:23.244665781 +0300
@@ -261,7 +261,7 @@
 		$xmlconfig .= str_repeat(\t, $indent);
 		if((is_bool($cval)  $cval == true) || ($cval === )) {
 			$xmlconfig .= $ent/\n;
-		} else if (substr($ent, 0, 5) == descr) {
+		} else if (substr($ent, 0, 5) == descr or substr($ent, -6) == _cdata) {
 			$xmlconfig .= $ent![CDATA[ . htmlentities($cval) . ]]/$ent\n;
 		} else {
 			$xmlconfig .= $ent . htmlentities($cval) . /$ent\n;
@@ -285,7 +285,7 @@
 $xmlconfig .= $ent/\n;
 			} else if (!is_bool($val)) {
 $xmlconfig .= str_repeat(\t, $indent);
-if (substr($ent, 0, 5) == descr)
+if (substr($ent, 0, 5) == descr or substr($ent, -6) == _cdata)
 	$xmlconfig .= $ent![CDATA[ . htmlentities($val) . ]]/$ent\n;
 else
 	$xmlconfig .= $ent . htmlentities($val) . /$ent\n;
diff -urb new/usr/local/www/services_dhcp.php custom/usr/local/www/services_dhcp.php
--- new/usr/local/www/services_dhcp.php	2010-07-12 13:56:38.907508685 +0300
+++ custom/usr/local/www/services_dhcp.php	2010-07-12 16:21:51.00498 +0300
@@ -155,6 +155,7 @@
 	$pconfig['rootpath'] = $config['dhcpd'][$if]['rootpath'];
 	$pconfig['failover_peerip'] = $config['dhcpd'][$if]['failover_peerip'];
 	$pconfig['netmask'] = $config['dhcpd'][$if]['netmask'];
+	$pconfig['custom_cdata'] = $config['dhcpd'][$if]['custom_cdata'];
 	$pconfig['numberoptions'] = $config['dhcpd'][$if]['numberoptions'];
 	if (!is_array($config['dhcpd'][$if]['staticmap']))
 		$config['dhcpd'][$if]['staticmap'] = array();
@@ -321,6 +322,7 @@
 		$config['dhcpd'][$if]['next-server'] = $_POST['nextserver'];
 		$config['dhcpd'][$if]['filename'] = $_POST['filename'];
 		$config['dhcpd'][$if]['rootpath'] = $_POST['rootpath'];
+		$config['dhcpd'][$if]['custom_cdata'] = $_POST['custom_cdata'];
 
 		// Handle the custom options rowhelper
 		if(isset($config['dhcpd'][$if]['numberoptions']['item']))
@@ -457,6 +459,12 @@
 		aodiv = document.getElementById('shownetboot');
 		aodiv.style.display = block;
 	}
+
+	function show_custom_config() {
+		document.getElementById(showcustombox).innerHTML='';
+		aodiv = document.getElementById('showcustom');
+		aodiv.style.display = block;
+	}
 /script
 
 body link=#CC vlink=#CC alink=#CC
@@ -793,6 +801,18 @@
 /td
 			/tr
 			tr
+			td width=22% valign=top class=vncellCustom DHCP configuration/td
+			td width=78% class=vtable
+div id=showcustombox
+input type=button onClick=show_custom_config() value=Advanced/input - Show custom DHCP configuration/a
+/div
+div id=showcustom style=display:none
+textarea name=custom_cdata cols=65 rows=4 class=formpre id=custom_cdata?=htmlspecialchars($pconfig['custom_cdata']);?/textareabr
+Use this to input any ISC DHCP settings that don't fit in the above settings.  If you don't know what this means, don't use this.  Settings here are not checked for validity, so you may break your DHCP setup.  The contents of this box will be inserted into dhcpd.conf as part of the subnet.
+/div
+/td
+			/tr
+			tr
 			td width=22% valign=topnbsp;/td
 			td width=78%
 input name=if type=hidden value=?=$if;?


signature.asc
Description: This is a digitally signed message part