From 0688503f7092a87d31b961eb43e2ff6282bc8930 Mon Sep 17 00:00:00 2001 From: Daniel Stefan Haischt Date: Mon, 22 Jan 2007 00:24:04 +0000 Subject: * allow NFS options per export * split NFS daemon options and export options into two different tabs * allow NFS related daemons to bind to a particular IP address --- packages/freenas/pkg/freenas_services.inc | 64 +++++++++++++++---------------- 1 file changed, 32 insertions(+), 32 deletions(-) (limited to 'packages/freenas/pkg/freenas_services.inc') diff --git a/packages/freenas/pkg/freenas_services.inc b/packages/freenas/pkg/freenas_services.inc index 1bd9b980..e32ff24f 100644 --- a/packages/freenas/pkg/freenas_services.inc +++ b/packages/freenas/pkg/freenas_services.inc @@ -399,6 +399,9 @@ function services_nfs_configure() { if (isset($freenas_config['nfs']['enable'])) { if ($g['booting']) { echo "Starting NFS... "; } + + $nfsconf = ""; + $a_nfsconf = array(); /* If no share configured, exit */ if (!is_array($freenas_config['mounts']['mount'])) { return 1; } @@ -412,47 +415,44 @@ function services_nfs_configure() { } $a_mount = &$freenas_config['mounts']['mount']; - - /* TODO: ATM network authorization does not work on a per mount basis */ - if (is_array($freenas_config['nfs']['nfsnetwork'])) { - $a_nfsnetworks = array(); - $pfnetworks = array(); - - foreach ($freenas_config['nfs']['nfsnetwork'] as $netel) { - list($network,$subnet) = - explode('/', $netel); - $subnet = gen_subnet_mask($subnet); - $a_nfsnetworks[] = "-network {$network} -mask {$subnet}"; - $pfnetworks[] = $network; - } - - $nfsnetworks_str = implode(' ', $a_nfsnetworks); - services_setup_transparency_for("nfs", implode(" ", $pfnetworks)); - } - foreach ($a_mount as $mount) { /* -mapall and -maproot mutually exclusive */ - $mapping = $freenas_config['nfs']['mapall'] == "yes" ? "-mapall=root" : "-maproot=root"; + $mapping = $mount['nfs']['mapall'] == "yes" ? "-mapall=root" : "-maproot=root"; + $networks = isset($mount['nfs']['networks']) ? $mount['nfs']['networks'] : ""; - $nfsconf .= << "") { + $pfnetworks = array(); + + foreach (explode(",", $networks) as $netel) { + list($network,$subnet) = + explode('/', $netel); + + $subnet = gen_subnet_mask($subnet); + $pfnetworks[] = $network; + + $tmp_nfsconf .= "{$nfsconf} -network {$network} -mask {$subnet}\n"; + } + + $nfsconf = $tmp_nfsconf; + } else { + $nfsconf .= "\n"; + } + } - fwrite($fd, $nfsconf); fclose($fd); + $nfsdbindto = $freenas_config['nfs']['bindto'] = "(ANY)" ? " -a" : " -h {$freenas_config['nfs']['bindto']}"; + $rpcbbindto = $freenas_config['nfs']['bindto'] = "(ANY)" ? "" : " -h {$freenas_config['nfs']['bindto']}"; + $servetcp = isset($freenas_config['nfs']['servetcp']) ? " -t" : ""; + $serveudp = isset($freenas_config['nfs']['serveudp']) ? " -u" : ""; + /* run rpcbind, nfsd and mountd */ - mwexec("/usr/sbin/rpcbind -h {$freenas_config['nfs']['bindto']}"); - mwexec("/usr/sbin/nfsd -h {$freenas_config['nfs']['bindto']} -u -t -n 4"); + mwexec("/usr/sbin/rpcbind{$rpcbbindto}"); + mwexec("/usr/sbin/nfsd{$nfsdbindto}{$serveudp}{$servetcp} -n 4"); mwexec("/usr/sbin/mountd -r {$g['varetc_path']}/exports"); mwexec("/usr/sbin/rpc.lockd"); mwexec("/usr/sbin/rpc.statd"); -- cgit v1.2.3