diff --git a/src/etc/inc/plugins.inc b/src/etc/inc/plugins.inc index 51945897f..2fbe2e5b3 100644 --- a/src/etc/inc/plugins.inc +++ b/src/etc/inc/plugins.inc @@ -26,14 +26,39 @@ * POSSIBILITY OF SUCH DAMAGE. */ -foreach (glob('/usr/local/etc/inc/plugins.inc.d/*.inc') as $plugin) { - require_once $plugin; +function plugin_scan() +{ + $path = '/usr/local/etc/inc/plugins.inc.d/'; + $ext = '.inc'; + + $ret = array(); + + $plugins = glob($path . '*' . $ext); + if (!is_array($plugins)) { + return $ret; + } + + sort($plugins); + + foreach ($plugins as $plugin) { + $name = preg_replace('/' . preg_quote($path, '/') . '/', '', $plugin); + $name = preg_replace('/' . preg_quote($ext, '/') . '/', '', $name); + $ret[$name] = $plugin; + } + + return $ret; } -/* XXX must be reworked to work dynamically, not by name */ -function plugins_hook_xxx($name) +function plugins_configure() { - if (function_exists($name)) { - return $name(); + foreach (plugin_scan() as $name => $path) { + require_once $path; + $func = sprintf('%s_configure', $name); + if (function_exists($func)) { + $workers = $func(); + foreach ($workers as $worker) { + $worker(); + } + } } } diff --git a/src/etc/inc/plugins.inc.d/vpn.inc b/src/etc/inc/plugins.inc.d/vpn.inc index 4c07107ee..5cb53f897 100644 --- a/src/etc/inc/plugins.inc.d/vpn.inc +++ b/src/etc/inc/plugins.inc.d/vpn.inc @@ -29,6 +29,15 @@ POSSIBILITY OF SUCH DAMAGE. */ +function vpn_configure() +{ + return array( + 'vpn_pptpd_configure', + 'vpn_pppoes_configure', + 'vpn_l2tp_configure' + ); +} + function vpn_netgraph_support() { $iflist = get_configured_interface_list(); foreach ($iflist as $iface) { diff --git a/src/etc/rc.bootup b/src/etc/rc.bootup index 76dd1e1b2..95d6ef74d 100755 --- a/src/etc/rc.bootup +++ b/src/etc/rc.bootup @@ -315,14 +315,8 @@ configd_run("dyndns reload"); /* Run a filter configure now that most all services have started */ filter_configure_sync(); -/* start pptpd */ -plugins_hook_xxx('vpn_pptpd_configure'); - -/* start pppoe server */ -plugins_hook_xxx('vpn_pppoes_configure'); - -/* setup l2tp */ -plugins_hook_xxx('vpn_l2tp_configure'); +/* Run all registered plugins */ +plugins_configure(); /* start IPsec tunnels */ $ipsec_dynamic_hosts = ipsec_configure();