diff options
Diffstat (limited to 'packages/freenas/pkg/freenas_services.inc')
-rw-r--r-- | packages/freenas/pkg/freenas_services.inc | 2025 |
1 files changed, 0 insertions, 2025 deletions
diff --git a/packages/freenas/pkg/freenas_services.inc b/packages/freenas/pkg/freenas_services.inc deleted file mode 100644 index 71401211..00000000 --- a/packages/freenas/pkg/freenas_services.inc +++ /dev/null @@ -1,2025 +0,0 @@ -<?php -/* $Id$ */ -/* ========================================================================== */ -/* - freenas_services.inc - part of pfSense (http://www.pfSense.com) - Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name> - All rights reserved. - - Based on FreeNAS (http://www.freenas.org) - Copyright (C) 2005-2006 Olivier Cochard-Labbé <olivier@freenas.org>. - All rights reserved. - - Based on m0n0wall (http://m0n0.ch/wall) - Copyright (C) 2003-2006 Manuel Kasper <mk@neon1.net>. - All rights reserved. - */ -/* ========================================================================== */ -/* - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - */ -/* ========================================================================== */ - -define ("FTP_BACKEND_PAM", "pam"); -define ("FTP_BACKEND_PLAINTEXT", "plaintext"); -define ("NFS_SERVICE_PORTS", "111 2049 4711"); - -$freenas_config =& $config['installedpackages']['freenas']['config'][0]; - -/* Stop samba, Generate the samba configuration - * file and start samba Return 0 if OK, 1 or - * error code if error - */ -function services_samba_configure() { - global $freenas_config, $g; - - /* kill any running samba */ - killbyname("smbd"); - killbyname("winbindd"); - killbyname("nmbd"); - - if (isset($freenas_config['samba']['enable'])) { - if ($g['booting']) { echo "Starting Samba... "; } - - /* make sure any of the required dirs exist */ - if (! file_exists("{$g['varetc_path']}/private")) { - mkdir("{$g['varetc_path']}/private"); - } - if (! file_exists("{$g['varlog_path']}/samba")) { - mkdir("{$g['varlog_path']}/samba"); - } - - /* generate smb.conf */ - $fd = fopen("{$g['varetc_path']}/smb.conf", "w"); - - if (!$fd) { - printf("Error: cannot open smb.conf in services_samba_configure().\n"); - return 1; - } - - /* If no share configured, exit */ - if (!is_array($freenas_config['mounts']['mount'])) { return 0; } - - $gen_date = date("F j, Y, g:i a"); - $sambaconf = <<<EOD -# -# smb.conf generated by pfSense -# Generated at: {$gen_date} -# -[global] -encrypt passwords = yes -netbios name = {$freenas_config['samba']['netbiosname']} -workgroup = {$freenas_config['samba']['workgroup']} -server string = {$freenas_config['samba']['serverdesc']} -load printers = no -security = {$freenas_config['samba']['security']} -dns proxy = no -socket options = IPTOS_LOWDELAY TCP_NODELAY -EOD; - - if ($freenas_config['samba']['sndbuf']) { - /* below is a continuation of socket options! */ - $sambaconf .= <<<EOD - SO_SNDBUF={$freenas_config['samba']['sndbuf']} -EOD; - } else { - /* below is a continuation of socket options! */ - $sambaconf .= <<<EOD - SO_SNDBUF=16384 -EOD; - } // end if - - if ($freenas_config['samba']['rcvbuf']) { - /* below is a continuation of socket options! */ - $sambaconf .= <<<EOD - SO_RCVBUF={$freenas_config['samba']['rcvbuf']} -EOD; - } else { - /* below is a continuation of socket options! */ - $sambaconf .= <<<EOD - SO_RCVBUF=16384 -EOD; - } // end if - - if ($freenas_config['samba']['winssrv']) { - $sambaconf .= <<<EOD - -wins server = {$freenas_config['samba']['winssrv']} - -EOD; - } - - if (isset ($freenas_config['samba']['unixcharset'])) { - $sambaconf .= <<<EOD - -unix charset = {$freenas_config['samba']['unixcharset']} - -EOD; - } else { - $sambaconf .= <<<EOD - -unix charset = UTF-8 - -EOD; - - } // end if - - $sambaconf .= <<<EOD - -local master = {$freenas_config['samba']['localmaster']} -time server = {$freenas_config['samba']['timesrv']} -guest account = ftp -display charset = UTF-8 -max log size = 10 -syslog only = yes -syslog = {$config['samba']['loglevel']} -load printers = no -printing = bsd -printcap name = /dev/null -disable spoolss = yes -#Test: Try to improve samba performance under FreeBSD: -use sendfile = yes -strict locking = no -#End of performance section -log level = {$freenas_config['samba']['loglevel']} -dos charset = {$freenas_config['samba']['doscharset']} -smb passwd file = {$g['varetc_path']}/private/smbpasswd -private dir = {$g['varetc_path']}/private - -EOD; - - switch ($freenas_config['samba']['security']) { - case "share": - $sambaconf .= <<<EOD -create mask = 0666 -directory mask = 0777 -passdb backend = smbpasswd - -EOD; - - $guestmode = <<<EOD -guest ok = yes - -EOD; - - break; // end case "share" - case "domain": - $sambaconf .= <<<EOD -passdb backend = smbpasswd -allow trusted domains = No -dns proxy = No -ldap ssl = no -idmap backend = rid:{$freenas_config['samba']['workgroup']}=10000-20000 -idmap uid = 10000-20000 -idmap gid = 10000-20000 -winbind enum groups = yes -winbind enum users = yes -winbind use default domain = Yes -template homedir = /mnt -template shell = /bin/sh - -EOD; - - $guestmode = <<<EOD -guest ok = no - -EOD; - break; // end case "domain": - case "user": - $sambaconf .= <<<EOD -passdb backend = smbpasswd - -EOD; - - $guestmode = <<<EOD -guest ok = no - -EOD; - - break; // end case "user": - } // end switch - - foreach ($freenas_config['mounts']['mount'] as $mountent) { - /* Unmount filesystem if not booting mode*/ - $sambaconf .= <<<EOD - -[{$mountent['sharename']}] -comment = {$mountent['desc']} -path = /mnt/{$mountent['sharename']} -public = yes -writeable = yes -printable = no -veto files = /Network Trash Folder/Icon?/:2e*/.AppleDesktop/.AppleDB/.AppleDouble/TheFindByContentFolder/TheVolumeSettingsFolder/Temporary Items/.snap/ -hide dot files = yes -{$guestmode} - -EOD; - - if ( (is_array($freenas_config['samba']['hidemount']) && in_array($mountent['sharename'],$freenas_config['samba']['hidemount']))) { - $sambaconf .= <<<EOD -browseable = no - -EOD; - - } // end if - - if (isset($freenas_config['samba']['recyclebin'])) { - $sambaconf .= <<<EOD -vfs object = recycle -recycle:repository = Recycle Bin -recycle:keeptree = Yes -recycle:versions = Yes - -EOD; - } // end if - } // end foreach - - fwrite($fd, $sambaconf); - fclose($fd); - - /* run nmbd and nmbd */ - if (isset($freenas_config['ad']['enable'])) { - mwexec("/usr/local/bin/net rpc join -S {$freenas_config['ad']['ad_srv_name']} -U {$freenas_config['ad']['admin_name']}%{$freenas_config['ad']['admin_pass']}"); - } - - $result |= mwexec("/usr/local/sbin/nmbd -D -s {$g['varetc_path']}/smb.conf"); - - if (isset($freenas_config['ad']['enable'])) { - mwexec("/usr/local/sbin/winbindd -s {$g['varetc_path']}/smb.conf"); - //mwexec("/usr/local/sbin/wbinfo --set-auth-user {$freenas_config['ad']['admin_name']}%{$freenas_config['ad']['admin_pass']}"); - } - - $result |= mwexec("/usr/local/sbin/smbd -D -s {$g['varetc_path']}/smb.conf"); - - /* TEST: Wait for samba starting */ - sleep(2); - - /* Generate the samba password file */ - $result |= system_user_samba(); - - if ($g['booting']) { echo "done\n"; } - }// end if - - return $result; -} - -/* Stop rsync, Generate the rsync configuration file and start - * rsync Return 0 if OK, 1 or error code if error - */ -function services_rsyncd_configure() { - global $freenas_config, $g; - - /* kill any running rsync daemon */ - sigkillbypid("{$g['varrun_path']}/rsyncd.pid", "TERM"); - - if (isset($freenas_config['rsyncd']['enable'])) { - if ($g['booting']) { echo "Starting RSYNC daemon... "; } - - /* If no share configured, exit */ - if (!is_array($freenas_config['mounts']['mount'])) { return 1; } - - /* generate rsyncd.conf */ - $fd = fopen("{$g['varetc_path']}/rsyncd.conf", "w"); - - if (!$fd) { - printf("Error: cannot open rsyncd.conf in services_rsyncd_configure().\n"); - return 1; - } - - $rsyncdconf = <<<EOD -read only = {$freenas_config['rsyncd']['readonly']} -syslog facility = local4 -list = yes -port = {$freenas_config['rsyncd']['port']} -pid file = {$g['varrun_path']}/rsyncd.pid - -EOD; - - if (!empty($freenas_config['rsyncd']['maxcon'])) { - $rsyncdconf .= <<<EOD -max connections = {$freenas_config['rsyncd']['maxcon']} - -EOD; - } - - if (!empty($freenas_config['rsyncd']['motd'])) { - $rsyncdconf .= <<<EOD -motd file = {$g['varetc_path']}/rsyncd.motd - -EOD; - } - - if (isset($freenas_config['rsyncd']['rsyncd_user'])) { - $rsyncdconf .= <<<EOD -uid = {$freenas_config['rsyncd']['rsyncd_user']} - -EOD; - - } else { - $rsyncdconf .= <<<EOD -uid = ftp -gid = ftp - -EOD; - } // end if - - foreach ($freenas_config['mounts']['mount'] as $mountent) { - /* Unmount filesystem if not booting mode*/ - $rsyncdconf .= <<<EOD - -[{$mountent['sharename']}] -comment = {$mountent['desc']} -path = /mnt/{$mountent['sharename']} - -EOD; - } // end foreach - - fwrite($fd, $rsyncdconf); - fclose($fd); - - // Generate MOTD file if configured - if (!empty($freenas_config['rsyncd']['motd'])) { - $fd = fopen("{$g['varetc_path']}/rsyncd.motd", "w"); - - if (!$fd) { - printf("Error: cannot open rsyncd.motd in services_rsyncd_configure().\n"); - return 1; - } - - $motd = <<<EOD -{$freenas_config['rsyncd']['motd']} - -EOD; - - fwrite($fd, $motd); - fclose($fd); - } // end if - - /* run rsync Daemon */ - $result = mwexec("/usr/local/bin/rsync --daemon --config={$g['varetc_path']}/rsyncd.conf"); - - if ($g['booting']) { echo "done\n"; } - } // end if - - return $result; -} - -/* Stop nfs processes, Generate the nfs configuration file and - * start nfsd processes Return 0 if OK, 1 or error code if error - */ -function services_nfs_configure() { - global $freenas_config, $g; - - /* kill any running nfsd */ - killbyname("rpc.statd"); - killbyname("rpc.lockd"); - killbypid("{$g['varrun_path']}/mountd.pid"); - forcekillbyname("nfsd"); - killbyname("rpcbind"); - - 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; } - - /* generate exports */ - $fd = fopen("{$g['varetc_path']}/exports", "w"); - - if (!$fd) { - printf("Error: cannot open exports in services_nfs_configure().\n"); - return 1; - } - - $a_mount = &$freenas_config['mounts']['mount']; - $pfnetworks = array(); - - foreach ($a_mount as $mount) { - /* -mapall and -maproot mutually exclusive */ - $mapping = $mount['nfs']['mapall'] == "yes" ? "-mapall=root" : "-maproot=root"; - $networks = isset($mount['nfs']['networks']) ? $mount['nfs']['networks'] : ""; - - $nfsconf = "/mnt/{$mount['sharename']} -alldirs {$mapping}"; - - if ($networks <> "") { - 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"; - } - - services_setup_transparency_for("nfs", implode(" ", $pfnetworks)); - $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{$rpcbbindto}"); - mwexec("/usr/sbin/nfsd{$nfsdbindto}{$serveudp}{$servetcp} -n 4"); - mwexec("/usr/sbin/mountd -p 4711 -r {$g['varetc_path']}/exports"); - mwexec("/usr/sbin/rpc.lockd"); - mwexec("/usr/sbin/rpc.statd"); - - if ($g['booting']) { echo "done\n"; } - } else { - services_remove_transparency_for("nfs"); - }// end if - - return 0; -} - -function services_remove_transparency_for($whom) { - global $g; - - $service_result = mwexec ("pfctl -a \"passin-package-freenas-{$whom}\" -F rules"); - if($service_result <> 0) { - file_notice("FREENAS", "There were error(s) flushing the exclude table", "FREENAS", ""); - } - - unlink_if_exists("{$g['pkg_path']}/pf/freenas-{$whom}.sh"); -} - -function services_setup_transparency_for($whom, $networks) { - global $g, $config, $freenas_config; - - if ($whom == "" || $networks == "") { return; } - - $generatedLANSubnet = gen_subnet($config['interfaces']['lan']['ipaddr'], - $config['interfaces']['lan']['subnet']); - $aliases = ""; - - /* stolen from filter.inc */ - $real_wanif = get_real_wan_interface(); - $wanip = find_interface_ip($real_wanif); - - $wan_aliases = " " . link_ip_to_carp_interface($wanip); - - if (link_int_to_bridge_interface("wan")) - $wan_aliases .= " " . link_int_to_bridge_interface("wan"); - - if ($config['interfaces']['wan']['ipaddr'] == "pppoe" or $config['interfaces']['wan']['ipaddr'] == "pptp") { - $aliases .= "ng0 = \"{ {$config['interfaces']['wan']['if']} {$real_wanif} }\" \n"; - $aliases .= "wan = \"{ {$config['interfaces']['wan']['if']} {$wan_aliases} ng0 }\"\n"; - } else { - $aliases .= "wan = \"{ {$real_wanif} {$wan_aliases} }\"\n"; - } - - $trans_file = fopen("/tmp/freenas-{$whom}.rules","w"); - fwrite($trans_file, "{$aliases}\n"); - - switch ($whom) { - case "nfs": - $nfs_ports = explode(" ", NFS_SERVICE_PORTS); - - foreach ($nfs_ports as $port) { - fwrite($trans_file, "pass in quick on \$wan proto { tcp udp } from { {$networks} } to {$freenas_config['nfs']['bindto']} port = {$port} keep state label \"FreeNAS related rule for {$whom}-{$port}\"\n"); - } - break; - } - fclose($trans_file); - $service_result = mwexec ("pfctl -a \"passin-package-freenas-{$whom}\" -f /tmp/freenas-{$whom}.rules"); - if($service_result <> 0) { - file_notice("FREENAS", "There were error(s) loading the transparency rules", "FREENAS", ""); - } - - /* create a shell script to make sure our filter rules - * are getting loaded upon each filter realod cycle. - */ - $scriptstr = "#!/bin/sh\n\n"; - $scriptstr .= "case $1 in\n"; - $scriptstr .= " start)\n"; - $scriptstr .= " if [ -f /tmp/freenas-nfs.rules ]; then\n"; - $scriptstr .= " /sbin/pfctl -a \"passin-package-freenas-{$whom}\" -f /tmp/freenas-{$whom}.rules\n"; - $scriptstr .= " fi\n"; - $scriptstr .= " ;;\n"; - $scriptstr .= " *)\n"; - $scriptstr .= " echo \"Usage: $0 (start|stop|restart|status|log)\"\n"; - $scriptstr .= " exit 1\n"; - $scriptstr .= "esac\n"; - - file_put_contents("{$g['pkg_path']}/pf/freenas-{$whom}.sh", $scriptstr); - chmod("{$g['pkg_path']}/pf/freenas-{$whom}.sh", 0700); -} - -function services_ftpd_configure() { - global $freenas_config, $g; - // services_vsftpd_configure(); - // services_pureftpd_configure(); - services_wzdftpd_configure(); -} - -function services_wzdftpd_configure() { - global $freenas_config, $config, $g; - - /* kill any WZDFTPD */ - killbyname("wzdftpd"); - - if (isset($freenas_config['ftp']['enable'])) { - if ($g['booting']) { echo "Starting FTP server... "; } - - /* create missing dirs if necessary */ - if (! file_exists("/var/log/wzdftpd")) { mkdir("/var/log/wzdftpd"); } - if (! file_exists("/usr/local/etc/wzdftpd")) { mkdir("/usr/local/etc/wzdftpd"); } - - /* generate wzd.cfg */ - chmod("/usr/local/etc/wzdftpd/wzd.cfg", 0600); - $fd = fopen("/usr/local/etc/wzdftpd/wzd.cfg", "w"); - - if (!$fd) { - printf("Error: cannot open vsftpd.conf in services_vsftpd_configure().\n"); - return 1; - } - - $ftpconf = <<<EOD -[GLOBAL] -config version = 0.7.2 -backup config = true -port = {$freenas_config['ftp']['port']} - -EOD; - - if ($freenas_config['ftp']['pasv_min_port'] && $freenas_config['ftp']['pasv_max_port']) { - $ftpconf .= <<<EOD -pasv_low_range = {$freenas_config['ftp']['pasv_min_port']} -pasv_high_range = {$freenas_config['ftp']['pasv_max_port']} - -EOD; - } - - $ftpconf .= <<<EOD - -pasv_ip = {$freenas_config['ftp']['pasv_address']} -dir_message = .message -logfile = /var/log/wzdftpd/wzd.log -xferlog = /var/log/wzdftpd/xferlog -logdir = /var/log/wzdftpd -max_threads = {$freenas_config['ftp']['numberclients']} - -backend = /usr/local/share/wzdftpd/backends/libwzd{$freenas_config['ftp']['authentication_backend']}.so - -max_ul_speed = 0 -max_dl_speed = 0 -deny_access_files_uploaded = 1 - -tls_certificate = /usr/local/etc/wzdftpd/wzd.pem -sitefile_ginfo = /usr/local/etc/wzdftpd/file_ginfo.txt -sitefile_group = /usr/local/etc/wzdftpd/file_group.txt -sitefile_user = /usr/local/etc/wzdftpd/file_user.txt - -[pre_ip_check] -localhost = allow - -[perms] -site_addip = +O +G -site_adduser = +O +G -site_backend = +O -site_chacl = +O -site_change = +O +G -site_changegrp = +O +G -site_checkperm = +O -site_chgrp = +O -site_chmod = +O -site_chown = +O -site_chpass = * -site_chratio = +O +G -site_close = +O -site_color = !=guest * -site_delip = +O +G -site_deluser = +O +G -site_flags = -admin -site_free = * -site_ginfo = +O +G -site_give = * -site_group = +O -site_groups = +O -site_grpadd = +O -site_grpaddip = +O -site_grpchange = +O -site_grpdel = +O -site_grpdelip = +O -site_grpkill = +O -site_grpratio = +O -site_grpren = +O -site_gsinfo = +O +G -site_help = * - -EOD; - - if (! empty($freenas_config['ftp']['timeout'])) { - $ftpconf .= "site_idle ={$freenas_config['ftp']['timeout']}\n"; - } else { - $ftpconf .= "site_idle = *\n"; - } - - $ftpconf .= <<<EOD -site_invite = !=guest * -site_kick = +O -site_kill = +O -site_link = +O -site_msg = +O -site_perm = +O -site_purge = +O +G -site_readd = +O +G -site_reload = +O -site_reopen = +O -site_rules = * -site_rusage = +O -site_savecfg = +O -site_sections = +O -site_shutdown = +O -site_su = +O -site_swho = +O -site_tagline = !=guest * -site_take = +O -site_unlock = +O -site_uptime = * -site_user = +O +G -site_users = -admin -site_utime = * -site_vars = +O -site_vars_group = +O -site_vars_user = +O -site_version = +O -site_who = !=guest * -site_wipe = +O -site_vfsls = +O -site_vfsadd = +O -site_vfsdel = +O - -[modules] -/usr/local/share/wzdftpd/modules/libwzd_debug.so = deny -/usr/local/share/wzdftpd/modules/libwzd_test.so = deny -/usr/local/share/wzdftpd/modules/libwzd_sfv.so = allow -/usr/local/share/wzdftpd/modules/libwzd_tcl.so = deny -/usr/local/share/wzdftpd/modules/libwzd_perl.so = deny - -EOD; - - if (empty($config['system']['zeroconf_disable'])) { - $ftpconf .= <<<EOD -/usr/local/share/wzdftpd/modules/libwzd_zeroconf.so = allow - -[ZEROCONF] -zeroconf_port = {$freenas_config['ftp']['port']} -zeroconf_username = wzdftpd -zeroconf_password = wzdftpd -zeroconf_path = / - -EOD; - - } - - $ftpconf .= <<<EOD - -[sfv] -progressmeter = [WzD] - %3d%% Complete - [WzD] -del_progressmeter = \[.*] - ...% Complete - \[WzD] -incomplete_indicator = ../(incomplete)-%0 -other_completebar = [WzD] - ( %.0mM %fF - COMPLETE ) - [WzD] - -[plaintext] -param = /usr/local/etc/wzdftpd/users - -[sections] -ALL = /* ^([]\[A-Za-z0-9_.'() \\t+-])*\$ - -[cron] - -[events] - -[custom_commands] -site_rules = !/usr/local/etc/wzdftpd/file_rules.txt - -site_groups = !/usr/local/etc/wzdftpd/file_groups.txt -site_help = !/usr/local/etc/wzdftpd/file_help.txt -site_swho = !/usr/local/etc/wzdftpd/file_swho.txt -site_users = !/usr/local/etc/wzdftpd/file_users.txt -site_vfsls = !/usr/local/etc/wzdftpd/file_vfs.txt -site_who = !/usr/local/etc/wzdftpd/file_who.txt - -[vfs] - -[messages] - -EOD; - - if (isset($freenas_config['ftp']['banner'])) { - $ftpconf .= "200 = {$freenas_config['ftp']['banner']}"; - } else { - $ftpconf .= "200 = Welcome to pfSense FTP service"; - } - - fwrite($fd, $ftpconf); - fclose($fd); - chmod("/usr/local/etc/wzdftpd/wzd.cfg", 0400); - - /* now generate the plaintext users file (if applicable) */ - if ($freenas_config['ftp']['authentication_backend'] == FTP_BACKEND_PLAINTEXT) { - $ftpusers = "[GROUPS]\n"; - $a_group =& $config['system']['group']; - $a_user =& $config['system']['user']; - - for ($i = 0; $i < count($a_group); $i++) { - $group = $a_group[$i]; - $gid = $i + 1; - - $ftpusers .= <<<EOD - -privgroup {$group['name']} -gid={$gid} -default_home=/ - -EOD; - } // end foreach - - /* anonymous group */ - if (! empty($freenas_config['ftp']['anonymous'])) { - $ftpusers .= <<<EOD - -privgroup anonymous -max_idle_time=10 -gid=3 -default_home=/home - -EOD; - } - - /* same for users */ - $ftpusers .= "[USERS]\n"; - for ($i = 0; $i < count($a_user); $i++) { - $user = $a_user[$i]; - $ftpusers .= <<<EOD - -name={$user['name']} -pass={$user['password']} -home=/ -uid={$i} -groups={$user['groupname']} -rights=0xffffffff - -EOD; - } // end foreach - - /* anonymous user */ - if (! empty($freenas_config['ftp']['anonymous'])) { - $ftpusers .= <<<EOD - -name=guest -pass=% -home=/tmp -uid=200 -groups=anonymous -rights=0x10003 -ip_allowed=* -max_dl_speed=20480 -credits=0 -bytes_ul_total=0 -bytes_dl_total=1918812 -num_logins=2 - -EOD; - } // end if - - $ftpusers .= "[HOSTS]\nall = *\n"; - chmod("/usr/local/etc/wzdftpd/users", 0600); - file_put_contents("/usr/local/etc/wzdftpd/users", $ftpusers); - chmod("/usr/local/etc/wzdftpd/users", 0400); - } // end if - - /* run vsftpd */ - mwexec("/usr/local/sbin/wzdftpd -f /usr/local/etc/wzdftpd/wzd.cfg"); - - if ($g['booting']) { echo "done\n"; } - } // end if - - return 0; -} - -/* this function is currently not used */ -function services_vsftpd_configure() { - global $freenas_config, $g; - - /* kill any VSFTPD */ - killbyname("vsftpd"); - - if (isset($freenas_config['ftp']['enable'])) { - if ($g['booting']) { echo "Starting FTP server... "; } - - /* generate vfstpd.conf */ - $fd = fopen("{$g['varetc_path']}/vsftpd.conf", "w"); - - if (!$fd) { - printf("Error: cannot open vsftpd.conf in services_vsftpd_configure().\n"); - return 1; - } - - $ftpconf = <<<EOD -# Standalone mode -listen=YES -background=YES -listen_port={$freenas_config['ftp']['port']} -max_clients={$freenas_config['ftp']['numberclients']} -max_per_ip={$freenas_config['ftp']['maxconperip']} -xferlog_enable=YES -#vsftpd_log_file=/var/log/ftp.log -syslog_enable=YES -# Access rights -anonymous_enable={$freenas_config['ftp']['anonymous']} -local_enable={$freenas_config['ftp']['localuser']} -write_enable=YES -hide_file=.snap -anon_other_write_enable=YES -anon_upload_enable=YES -anon_mkdir_write_enable=YES -chroot_local_user=YES -local_umask=066 -anon_umask=066 -chmod_enable=YES -pasv_address={$freenas_config['ftp']['pasv_address']} -# Features -ls_recurse_enable=YES -# Performance -idle_session_timeout={$freenas_config['ftp']['timeout']} - -EOD; - if (isset($freenas_config['ftp']['banner'])) { - $ftpconf .= <<<EOD -ftpd_banner={$freenas_config['ftp']['banner']} - -EOD; - } else { - $ftpconf .= <<<EOD -ftpd_banner=Welcome to pfSense FTP service - -EOD; - } - - if ($freenas_config['ftp']['pasv_min_port'] && $freenas_config['ftp']['pasv_max_port']) { - $ftpconf .= <<<EOD -pasv_max_port={$freenas_config['ftp']['pasv_max_port']} -pasv_min_port={$freenas_config['ftp']['pasv_min_port']} - -EOD; - } - - if ($freenas_config['ftp']['pasv_address']) { - $ftpconf .= <<<EOD -pasv_address={$freenas_config['ftp']['pasv_address']} - -EOD; - } - - fwrite($fd, $ftpconf); - fclose($fd); - - /* run vsftpd */ - mwexec("/usr/local/sbin/vsftpd {$g['varetc_path']}/vsftpd.conf"); - - if ($g['booting']) { echo "done\n"; } - } - - return 0; -} - -function services_pureftpd_configure() { - global $freenas_config, $g; - - /* kill any Pure-FTPD */ - killbyname("pure-ftpd"); - - if (isset($freenas_config['ftp']['enable'])) { - if ($g['booting']) { echo "Starting FTP server... "; } - - /* Generate the banner file */ - $fd = fopen("/mnt/.banner", "w"); - - if (!$fd) { - printf("Error: cannot open .banner in services_pureftpd_configure().\n"); - return 1; - } - - if (empty($freenas_config['ftp']['banner'])) { - $banner = <<<EOD -Welcome to pfSense FTP service - -EOD; - } else { - $banner = <<<EOD -{$freenas_config['ftp']['banner']} - -EOD; - } // end if - - fwrite($fd, $banner); - fclose($fd); - - /* run pure-ftpd */ - $cmd = "/usr/local/sbin/pure-ftpd -S {$freenas_config['ftp']['port']} -c {$freenas_config['ftp']['numberclients']} -C {$freenas_config['ftp']['maxconperip']} -I {$freenas_config['ftp']['timeout']} -M U 077:077 -B -b "; - - if ( (isset($freenas_config['ftp']['anonymous'])) && (!isset($freenas_config['ftp']['localuser']))) { - $cmd .= "-e "; - } - - if ( (!isset($freenas_config['ftp']['anonymous'])) && (isset($freenas_config['ftp']['localuser']))) { - $cmd .= "-E "; - } - - if ($freenas_config['ftp']['pasv_min_port'] && $freenas_config['ftp']['pasv_max_port']) { - $cmd .= "-p {$freenas_config['ftp']['pasv_min_port']}:{$freenas_config['ftp']['pasv_max_port']} "; - } - - if ($freenas_config['ftp']['pasv_address']) { - $cmd .= "-P {$freenas_config['ftp']['pasv_address']} "; - } - - if ($freenas_config['ftp']['natmode']) { - $cmd .= "-N "; - } - - if ($freenas_config['ftp']['passiveip']) { - $cmd .= "-P {$freenas_config['ftp']['passiveip']} "; - } - - if ($freenas_config['ftp']['fxp']) { - $cmd .= "-W "; - } - - mwexec($cmd); - - if ($g['booting']) { echo "done\n"; } - } // end if - - return 0; -} - -/* Stop smartd, Generate the configuration file and start - * smartd Return 0 if OK, 1 or error code if error - */ -function services_smart_configure() { - global $config, $g; - - /* kill any running smartd */ - killbyname("smartd"); - - if (isset($config['system']['smart'])) { - if ($g['booting']) { echo "Starting smartd... "; } - - /* run smartd */ - mwexec("/usr/local/sbin/smartd --logfacility=local5"); - - if ($g['booting']) { echo "done\n"; } - } - - return 0; -} - -/* Generate the unison configuration - * Return 0 if OK, 1 or error code if error - */ -function services_unison_configure() { - global $freenas_config, $g; - $result = 0 ; - - if ($g['booting']) { echo "Configuring unison... \n"; } - - if (isset($freenas_config['unison']['enable'])) { - /* ensure unison workdir exists */ - $workdir = "/mnt/{$freenas_config['unison']['share']}/{$config['unison']['workdir']}"; - - if (isset($freenas_config['unison']['makedir']) && !file_exists($workdir)) { - if (!mkdir($workdir)) { - printf("Error: cannot mkdir $workdir in services_unison_configure().\n"); - } - - exec("/bin/chmod 775 $workdir"); - } - - if (!file_exists($workdir)) { - printf("Error: cannot open $workdir in services_unison_configure().\n"); - $result = 1 ; - } - - /* add workdir to login.conf UNISON environment variable */ - $logfile = "{$g['etc_path']}/login.conf"; - - if (!file_exists("$logfile")) { - printf("Error: $logfile doesn't exist, in services_unison_configure().\n"); - $result = 1 ; - } - - $tmp = file_get_contents("$logfile"); - $search = "/UNISON=.*?(?=[,:])/"; - - if (!preg_match($search, $tmp)) { - printf("Error: cannot find UNISON in $logfile, in services_unison_configure().\n"); - $result = 1 ; - } - - $tmp = preg_replace($search, "UNISON=$workdir", $tmp); - - if (!file_put_contents($logfile, $tmp)) { - printf("Error: couldn't write $logfile, in services_unison_configure().\n"); - $result = 1 ; - } - } // end if - - $tmp = ""; - - return $result; -} - -/* Stop and start ushare - * Return 0 if OK, 1 or error code if error - */ -function services_ushare_configure() { - global $freenas_config, $g; - - $result = 0 ; - - /* Kill any running uShare */ - killbyname("ushare"); - - /* Delete multicast route. */ - mwexec("/sbin/route delete -net 239.0.0.0"); - - if(isset($freenas_config['upnp']['enable'])) { - if($g['booting']) { echo "Starting UPnP server... "; } - - /* Setup a multicast route for UPnP messages. */ - // TODO: where to get the upnp iface? - $result = mwexec("/sbin/route add -net 239.0.0.0 -netmask 255.0.0.0 -interface " . escapeshellarg($freenas_config['upnp']['if'])); - - $content = ""; - foreach($freenas_config['upnp']['content'] as $contentv) { - $content .= " --content=$contentv"; - } - - /* Run uShare as daemon. */ - // TODO: where to get the upnp iface? - $result |= mwexec("/usr/local/bin/ushare --daemon --no-web --name={$freenas_config['upnp']['name']} --interface={$freenas_config['upnp']['if']} {$content}"); - } // end if - - return $result; -} - -function services_cron_configure() { - global $freenas_config, $g; - - /* kill any running cron */ - killbyname("cron"); - - /* ======================================================================= */ - /* = configure crontab item for rsyncclient = */ - /* ======================================================================= */ - if (isset($freenas_config['rsyncclient']['enable'])) { - if ($g['booting']) { echo "Configuring cron for rsync client... "; } - - if ($freenas_config['rsyncclient']['all_mins'] == "0") { - foreach ($freenas_config['rsyncclient']['minute'] as $minutev) { - if (strlen($cron_min) > 0) { - $cron_min = $cron_min . "," . $minutev; - } else { - $cron_min = $minutev; - } - } // end foreach - } else { - $cron_min = "*"; - } // end if - - if ($freenas_config['rsyncclient']['all_hours'] == "0") { - foreach ($freenas_config['rsyncclient']['hour'] as $hourv) { - if (strlen($cron_hour) > 0) { - $cron_hour = $cron_hour . "," . $hourv; - } else { - $cron_hour = $hourv; - } - } // end foreach - } else { - $cron_hour = "*"; - } // end if - - if ($freenas_config['rsyncclient']['all_days'] == "0") { - foreach ($freenas_config['rsyncclient']['day'] as $dayv) { - if (strlen($cron_day) > 0) { - $cron_day = $cron_day . "," . $dayv; - } else { - $cron_day = $dayv; - } - } // end foreach - } else { - $cron_day = "*"; - } // end if - - if ($freenas_config['rsyncclient']['all_months'] == "0") { - foreach ($freenas_config['rsyncclient']['month'] as $monthv) { - if (strlen($cron_month) > 0) { - $cron_month = $cron_month . "," . $monthv; - } else { - $cron_month = $monthv; - } - } // end foreach - } else { - $cron_month = "*"; - } // end if - - if ($freenas_config['rsyncclient']['all_weekday'] == "0") { - foreach ($freenas_config['rsyncclient']['weekday'] as $weekdayv) { - if (strlen($cron_weekday) > 0) { - $cron_weekday = $cron_weekday . "," . $weekdayv; - } else { - $cron_weekday = $weekdayv; - } - } // end foreach - } else { - $cron_weekday = "*"; - } // end if - - $cron_item = array(); - $cron_item['minute'] = "{$cron_min}"; - $cron_item['hour'] = "{$cron_hour}"; - $cron_item['mday'] = "{$cron_day}"; - $cron_item['month'] = "{$cron_month}"; - $cron_item['wday'] = "{$cron_weekday}"; - $cron_item['who'] = "root"; - $cron_item['command'] = "{$g['varrun_path']}/sync.sh"; - - $config['cron']['item'][] = $cron_item; - - if ($g['booting']) { echo "done\n"; } - } // end if - - /* Erase all variable used previously */ - unset ($cron_min, $cron_hour, $cron_day, $cron_month, $cron_weekday); - - /* ======================================================================= */ - /* = configure crontab item for rsync local part = */ - /* ======================================================================= */ - if (isset($freenas_config['rsync_local']['enable'])) { - if ($g['booting']) { echo "Configuring cron for local rsync... "; } - - if ($freenas_config['rsync_local']['all_mins'] == "0") { - foreach ($freenas_config['rsync_local']['minute'] as $minutev) { - if (strlen($cron_min) > 0) { - $cron_min = $cron_min . "," . $minutev; - } else { - $cron_min = $minutev; - } - } // end foreach - } else { - $cron_min = "*"; - } // end if - - if ($freenas_config['rsync_local']['all_hours'] == "0") { - foreach ($freenas_config['rsync_local']['hour'] as $hourv) { - if (strlen($cron_hour) > 0) { - $cron_hour = $cron_hour . "," . $hourv; - } else { - $cron_hour = $hourv; - } - } // end foreach - } else { - $cron_hour = "*"; - } // end if - - if ($freenas_config['rsync_local']['all_days'] == "0") { - foreach ($freenas_config['rsync_local']['day'] as $dayv) { - if (strlen($cron_day) > 0) { - $cron_day = $cron_day . "," . $dayv; - } else { - $cron_day = $dayv; - } - } // end foreach - } else { - $cron_day = "*"; - } // end if - - if ($freenas_config['rsync_local']['all_months'] == "0") { - foreach ($freenas_config['rsync_local']['month'] as $monthv) { - if (strlen($cron_month) > 0) { - $cron_month = $cron_month . "," . $monthv; - } else { - $cron_month = $monthv; - } - } // end foreach - } else { - $cron_month = "*"; - } // end if - - if ($freenas_config['rsync_local']['all_weekday'] == "0") { - foreach ($freenas_config['rsync_local']['weekday'] as $weekdayv) { - if (strlen($cron_weekday) > 0) { - $cron_weekday = $cron_weekday . "," . $weekdayv; - } else { - $cron_weekday = $weekdayv; - } - } // end foreach - } else { - $cron_weekday = "*"; - } - - $cron_item = array(); - $cron_item['minute'] = "{$cron_min}"; - $cron_item['hour'] = "{$cron_hour}"; - $cron_item['mday'] = "{$cron_day}"; - $cron_item['month'] = "{$cron_month}"; - $cron_item['wday'] = "{$cron_weekday}"; - $cron_item['who'] = "root"; - $cron_item['command'] = "{$g['varrun_path']}/sync.sh"; - - $config['cron']['item'][] = $cron_item; - - if ($g['booting']) { echo "done\n"; } - } - - /* Erase all variable used previously */ - unset ($cron_min, $cron_hour, $cron_day, $cron_month, $cron_weekday); - - /* ======================================================================= */ - /* = configure crontab item shutdown part = */ - /* ======================================================================= */ - if (isset($freenas_config['shutdown']['enable'])) { - if ($g['booting']) { echo "Configuring cron for shutdown... "; } - - if ($freenas_config['shutdown']['all_mins'] == "0") { - foreach ($freenas_config['shutdown']['minute'] as $minutev) { - if (strlen($cron_min) > 0) { - $cron_min = $cron_min . "," . $minutev; - } else { - $cron_min = $minutev; - } - } // end foreach - } else { - $cron_min = "*"; - } // end if - - if ($freenas_config['shutdown']['all_hours'] == "0") { - foreach ($freenas_config['shutdown']['hour'] as $hourv) { - if (strlen($cron_hour) > 0) { - $cron_hour = $cron_hour . "," . $hourv; - } else { - $cron_hour = $hourv; - } - } // end foreach - } else { - $cron_hour = "*"; - } // end if - - if ($freenas_config['shutdown']['all_days'] == "0") { - foreach ($freenas_config['shutdown']['day'] as $dayv) { - if (strlen($cron_day) > 0) { - $cron_day = $cron_day . "," . $dayv; - } else { - $cron_day = $dayv; - } - } // end foreach - } else { - $cron_day = "*"; - } // end if - - if ($freenas_config['shutdown']['all_months'] == "0") { - foreach ($freenas_config['shutdown']['month'] as $monthv) { - if (strlen($cron_month) > 0) { - $cron_month = $cron_month . "," . $monthv; - } else { - $cron_month = $monthv; - } - } // end foreach - } else { - $cron_month = "*"; - } // end if - - if ($freenas_config['shutdown']['all_weekday'] == "0") { - foreach ($freenas_config['shutdown']['weekday'] as $weekdayv) { - if (strlen($cron_weekday) > 0) { - $cron_weekday = $cron_weekday . "," . $weekdayv; - } else { - $cron_weekday = $weekdayv; - } - } // end foreach - } else { - $cron_weekday = "*"; - } // end if - - $cron_item = array(); - $cron_item['minute'] = "{$cron_min}"; - $cron_item['hour'] = "{$cron_hour}"; - $cron_item['mday'] = "{$cron_day}"; - $cron_item['month'] = "{$cron_month}"; - $cron_item['wday'] = "{$cron_weekday}"; - $cron_item['who'] = "root"; - $cron_item['command'] = "{$g['varrun_path']}/sync.sh"; - - $config['cron']['item'][] = $cron_item; - - if ($g['booting']) { echo "done\n"; } - } // end if - - /* call the pfSense configure_cron function */ - configure_cron(); - - /* run cron */ - mwexec("/usr/sbin/cron -s"); - - return 0; -} - -function services_rsyncclient_configure() { - global $freenas_config, $g; - - // Generate a shell script that is used by cron - // Generate crontab works - if (isset($freenas_config['rsyncclient']['enable'])) { - if ($g['booting']) { echo "Generating synchronizing cron script... "; } - - /* generate /var/run/sync.sh script */ - $fd = fopen("{$g['varrun_path']}/sync.sh", "w"); - - if (!$fd) { - printf("Error: cannot open /var/run/sync.sh in services_rsyncclient_configure().\n"); - return 1; - } - - $syncscript = <<<EOD -#!/bin/sh - -if [ -r /var/run/rsync-running ]; then -exit -fi -/usr/bin/touch /var/run/rsync-running - -EOD; - - $opt_delete=""; - if (isset($freenas_config['rsyncclient']['opt_delete'])) { - $opt_delete = "--delete --delete-after "; - } - - foreach ($freenas_config['rsyncclient']['sharetosync'] as $sharek => $sharev) { - $syncscript .= <<<EOD -/usr/local/bin/rsync -rtz {$opt_delete}rsync://{$freenas_config['rsyncclient']['rsyncserverip']}/{$sharev} /mnt/{$sharev} - -EOD; - } // end foreach - - $syncscript .= <<<EOD -/bin/rm -f /var/run/rsync-running - -EOD; - - fwrite($fd,$syncscript); - fclose($fd); - - /* Add exectutive right to the script */ - exec("/bin/chmod 770 {$g['varrun_path']}/sync.sh"); - - if ($g['booting']) { echo "done\n"; } - } // end if - - return 0; -} - -function services_rsync_local_configure() { - global $freenas_config, $g; - - // Generate a shell script that is used by cron - // Generate crontab works - if (isset($freenas_config['rsync_local']['enable'])) { - if ($g['booting']) { echo "Generating local rsync cron script... "; } - - /* generate /var/run/sync_local.sh script */ - $fd = fopen("{$g['varrun_path']}/sync_local.sh", "w"); - - if (!$fd) { - printf("Error: cannot open /var/run/sync_local.sh in services_rsync_local_configure().\n"); - return 1; - } - - $syncscript = <<<EOD -#!/bin/sh - -if [ -r /var/run/rsync_local-running ]; then -exit -fi -/usr/bin/touch /var/run/rsync_local-running - -EOD; - - $opt_delete=""; - if (isset($freenas_config['rsync_local']['opt_delete'])) { - $opt_delete = "--delete --delete-after "; - } - - $syncscript .= <<<EOD -/usr/local/bin/rsync -a {$opt_delete} /mnt/{$freenas_config['rsync_local']['source']} /mnt/{$freenas_config['rsync_local']['destination']} - -EOD; - - $syncscript .= <<<EOD -/bin/rm -f /var/run/rsync_local-running - -EOD; - - fwrite($fd,$syncscript); - fclose($fd); - - /* Add exectutive right to the script */ - exec("/bin/chmod 770 {$g['varrun_path']}/sync_local.sh"); - - if ($g['booting']) { echo "done\n"; } - } // end if - - return 0; -} - -function services_radius_configure() { - global $freenas_config, $g; - - if (isset($config['radius']['enable'])) { - /* generate radius.conf */ - $fd = fopen("{$g['varetc_path']}/radius.conf", "w"); - - if (!$fd) { - printf("Error: cannot open radius.conf in services_radius_configure().\n"); - return 1; - } - - $radiusconf = <<<EOD -auth {$config['radius']['radiusip']}:{$config['radius']['port']} {$config['radius']['secret']} {$config['radius']['timeout']} {$config['radius']['maxretry']} - -EOD; - - fwrite($fd, $radiusconf); - fclose($fd); - } // end if - - return 0; -} - -/* Stop, Generate the config file and start - * AFP Return 0 if OK, 1 or error code if error - */ -function services_afpd_configure() { - global $freenas_config, $config, $g; - - /* kill any afpd */ - killbyname("afpd"); - - if (isset($freenas_config['afp']['enable'])) { - /* If no share configured, exit */ - if (!is_array($freenas_config['mounts']['mount'])) { return 1; } - if ($g['booting']) { echo "Starting AFP server... "; } - - if (empty($freenas_config['afp']['afpname'])) { - $afpname="-"; - } else { - $afpname=$freenas_config['afp']['afpname']; - } - - /* generate afpd.conf */ - $fd = fopen("{$g['varetc_path']}/afpd.conf", "w"); - - if (!$fd) { - printf("Error: cannot open afpd.conf in services_afpd_configure().\n"); - return 1; - } - - $afpconf = <<<EOD -{$afpname} -transall -uamlist -EOD; - - if (empty($config['system']['zeroconf_disable'])) { - $afpconf .= <<<EOD - -noslp -fqdn {$config['system']['hostname']}.{$config['system']['domain']} -uamlist -EOD; - } else { - $afpconf .= <<<EOD - -noslp -nozeroconf -uamlist -EOD; - } // end if - - if (isset($freenas_config['afp']['guest']) && isset($freenas_config['afp']['local']) ) { - $afpconf .= <<<EOD - uams_guest.so,uams_clrtxt.so,uams_dhx.so -EOD; - } else if (isset($freenas_config['afp']['guest'])) { - $afpconf .= <<<EOD - uams_guest.so -EOD; - } else if (isset($freenas_config['afp']['local'])) { - $afpconf .= <<<EOD - uams_clrtxt.so,uams_dhx.so -EOD; - } - - $afpconf .= <<<EOD - -nosavepassword -defaultvol {$g['varetc_path']}/AppleVolumes.default -systemvol {$g['varetc_path']}/AppleVolumes.system -uampath /etc/uams -guestname ftp - -EOD; - - fwrite($fd, $afpconf); - fclose($fd); - - /* generate AppleVolumes.default */ - $fd = fopen("{$g['varetc_path']}/AppleVolumes.default", "w"); - - if (!$fd) { - printf("Error: cannot open AppleVolumes.default in services_afpd_configure().\n"); - return 1; - } - - $a_mount = &$freenas_config['mounts']['mount']; - - foreach ($a_mount as $mount) { - $AppleVolumes .= <<<EOD -/mnt/{$mount['sharename']} "{$mount['sharename']}" - -EOD; - - } // end foreach - - fwrite($fd, $AppleVolumes); - fclose($fd); - - /* run afpdpd */ - mwexec("/usr/local/sbin/afpd -F {$g['varetc_path']}/afpd.conf"); - - if ($g['booting']) { echo "done\n"; } - } // end if - - return 0; -} - -function services_nis_configure() { - global $freenas_config, $g; - - return 0; -} - -/* Start iscsi initiator - * Return 0 if Ok, 1 or error code if problem - */ -/* TODO: NEED TO STOP IT TOO ??? */ -function services_iscsi_configure() { - global $freenas_config, $g; - - if (isset($freenas_config['iscsi']['enable'])) { - if ($g['booting']) { echo "Starting iSCSI driver... "; } - - $result = mwexec("/sbin/kldload kdload /boot/kernel/iscsi_initiator.ko"); - $result |= mwexec("/sbin/sysctl debug.iscsi=0"); - $result |= mwexec("/usr/local/sbin/iscontrol targetaddress={$freenas_config['iscsi']['targetaddress']} TargetName={$freenas_config['iscsi']['targetname']}"); - - if ($g['booting']) { echo "done\n"; } - } - - if (isset($result)) { return $result; } - return 0; -} - -function services_zeroconf_configure() { - //services_mdnsresponder_configure(); - //services_howl_configure(); - return services_avahi_configure(); -} - -function services_avahi_configure() { - global $freenas_config, $config, $g; - - $service_template = <<<EOD -<?xml version="1.0" standalone='no'?> -<!DOCTYPE service-group SYSTEM "avahi-service.dtd"> -<service-group> - - <name replace-wildcards="yes">@SERVICE_DESC@ on %h</name> - - <service> - <type>@TYPE@</type> - <port>@PORT@</port> - @TXT_RECORDS@ - </service> - -</service-group> - -EOD; - - /* kill any running dbus daemon */ - sigkillbypid("{$g['varrun_path']}/dbus/dbus.pid", "TERM"); - - unlink_if_exists("{$g['varrun_path']}/dbus/dbus.pid"); - - /* kill any running avahi daemons */ - mwexec("/usr/local/sbin/avahi-daemon -k"); - - /* simply return if zeroconf isn't enabled */ - if (isset($config['system']['zeroconf_disable'])) { return 0; } - - /* configure Avahi and it's dependencies */ - if (! file_exists("/usr/local/etc/avahi/services")) { - mwexec("mkdir -p /usr/local/etc/avahi/services"); - } - - /* add HTTP service type */ - $webproto = $config['system']['webgui']['protocol']; - - if (isset($config['system']['webgui']['port'])) { - $webservice = str_replace("@PORT@", - $config['system']['webgui']['port'], - $service_template); - $webservice = str_replace("@TYPE@", - "_{$webproto}._tcp", - $webservice); - $webservice = str_replace("@SERVICE_DESC@", - "pfSense webGUI", - $webservice); - $webservice = str_replace("@TXT_RECORDS@", - "", - $webservice); - - file_put_contents("/usr/local/etc/avahi/services/http.service", $webservice); - } else { - $webservice = str_replace("@PORT@", - "80", - $service_template); - $webservice = str_replace("@TYPE@", - "_{$webproto}._tcp", - $webservice); - $webservice = str_replace("@SERVICE_DESC@", - "pfSense webGUI", - $webservice); - $webservice = str_replace("@TXT_RECORDS@", - "", - $webservice); - - file_put_contents("/usr/local/etc/avahi/services/http.service", $webservice); - } // end if - - /* afp is announcing itself */ - if (isset($freenas_config['afp']['enable'])) { - /* NOP */ - } - - /* add rsync service type */ - if (isset($freenas_config['rsyncd']['enable'])) { - $rsyncservice = str_replace("@PORT@", - $freenas_config['rsyncd']['port'], - $service_template); - $rsyncservice = str_replace("@TYPE@", - "_rsync._tcp", - $rsyncservice); - $rsyncservice = str_replace("@SERVICE_DESC@", - "Remote Sync Daemon", - $rsyncservice); - $rsyncservice = str_replace("@TXT_RECORDS@", - "", - $rsyncservice); - - file_put_contents("/usr/local/etc/avahi/services/rsync.service", $rsyncservice); - } // end if - - /* add ntp service type */ - if ($config['ntpd']['mode'] == "server") { - $ntpdservice = str_replace("@PORT@", - "123", - $service_template); - $ntpdservice = str_replace("@TYPE@", - "_ntp._udp", - $ntpdservice); - $ntpdservice = str_replace("@SERVICE_DESC@", - "Network Time Daemon", - $ntpdservice); - $ntpdservice = str_replace("@TXT_RECORDS@", - "", - $ntpdservice); - - file_put_contents("/usr/local/etc/avahi/services/ntpd.service", $ntpdservice); - } // end if - - if (isset($config['system']['ssh']['enable'])) { - $sshservice = str_replace("@PORT@", - "22", - $service_template); - $sshservice = str_replace("@TYPE@", - "_ssh._tcp", - $sshservice); - $sshservice = str_replace("@SERVICE_DESC@", - "Remote Terminal", - $sshservice); - $sshservice = str_replace("@TXT_RECORDS@", - "", - $sshservice); - - file_put_contents("/usr/local/etc/avahi/services/ssh.service", $sshservice); - - /* do the same for sftp, cause we do enable it by dfeault */ - $sftpservice = str_replace("@PORT@", - "22", - $service_template); - $sftpservice = str_replace("@TYPE@", - "_ssh._tcp", - $sftpservice); - $sftpservice = str_replace("@SERVICE_DESC@", - "Remote Terminal", - $sftpservice); - $sftpservice = str_replace("@TXT_RECORDS@", - "", - $sftpservice); - - file_put_contents("/usr/local/etc/avahi/services/ssh-sftp.service", $sftpservice); - } // end if - - /* we are using wzdftpd, which has the ability to announce itself */ - if (isset($freenas_config['ftp']['enable'])) { - /* NOP */ - } - - if (isset($freenas_config['samba']['enable'])) { - $cifsservice = str_replace("@PORT@", - "139", - $service_template); - $cifsservice = str_replace("@TYPE@", - "_smb._tcp", - $cifsservice); - $cifsservice = str_replace("@SERVICE_DESC@", - "Samba Server", - $cifsservice); - $cifsservice = str_replace("@TXT_RECORDS@", - "", - $cifsservice); - - file_put_contents("/usr/local/etc/avahi/services/cifs.service", $cifsservice); - } - - if (isset($freenas_config['nfs']['enable'])) { - /* If no share configured, exit */ - if (!is_array($freenas_config['mounts']['mount'])) { break; } - - $a_mount = &$freenas_config['mounts']['mount']; - - foreach ($a_mount as $mount) { - $sharename = str_replace(" ", "", $mount['sharename']); - $sharename = strtolower($sharename); - - $nfsservice = str_replace("@PORT@", - "2049", - $service_template); - $nfsservice = str_replace("@TYPE@", - "_nfs._tcp", - $nfsservice); - $nfsservice = str_replace("@SERVICE_DESC@", - "NFS Mount: {$mount['sharename']}", - $nfsservice); - $nfsservice = str_replace("@TXT_RECORDS@", - "path=/mnt/{$mount['sharename']}", - $nfsservice); - - file_put_contents("/usr/local/etc/avahi/services/{$sharename}_nfs.service", $nfsservice); - } // end foreach - } // end if - - /* run dbus */ - mwexec("/usr/local/bin/dbus-daemon --system"); - /* run avahi */ - mwexec("/usr/local/sbin/avahi-daemon -D"); - - if ($g['booting']) { echo "done\n"; } - - return 0; -} - -/* this function is currently not used */ -function services_howl_configure() { - global $freenas_config, $config, $g; - - /* kill any mDNSResponder */ - killbyname("mDNSResponder"); - - if (isset($config['system']['zeroconf_disable'])) { return 0; } - - $fd = fopen("{$g['varetc_path']}/mDNSResponder.conf", "w"); - - if (!$fd) { - printf("Error: cannot open mDNSResponder.conf in services_howl_configure().\n"); - return 1; - } - - if ($config['system']['webgui']['port']) { - $mDNSResponder = <<<EOD -"{$config['system']['hostname']} Web Admin" _http._tcp local. {$config['system']['webgui']['port']} - -EOD; - } else { - $mDNSResponder = <<<EOD -"{$config['system']['hostname']} Web Admin" _http._tcp local. 80 - -EOD; - } // end if - - if (isset($freenas_config['afp']['enable'])) { - $mDNSResponder .= <<<EOD -"{$config['system']['hostname']} AFP Server" _afpovertcp._tcp local. 548 - -EOD; - } - - if (isset($freenas_config['rsyncd']['enable'])) { - $mDNSResponder .= <<<EOD -"{$config['system']['hostname']} RSYNC Server" _rsync._tcp. local. {$freenas_config['rsyncd']['port']} - -EOD; - } - - if (isset($config['sshd']['enable'])) { - $mDNSResponder .= <<<EOD -"{$config['system']['hostname']} SSH Server" _ssh._tcp local. {$config['sshd']['port']} - -EOD; - } - - if (isset($freenas_config['ftp']['enable'])) { - $mDNSResponder .= <<<EOD -"{$config['system']['hostname']} FTP Server" _ftp._tcp local. {$freenas_config['ftp']['port']} - -EOD; - } - - if (isset($freenas_config['samba']['enable'])) { - $mDNSResponder .= <<<EOD -"{$config['system']['hostname']} Samba Server" _smb._tcp local. 139 - -EOD; - } - - if (isset($freenas_config['nfs']['enable'])) { - /* If no share configured, exit */ - if (!is_array($freenas_config['mounts']['mount'])) { break; } - - $a_mount = &$freenas_config['mounts']['mount']; - - foreach ($a_mount as $mount) { - $mDNSResponder .= <<<EOD -"{$config['system']['hostname']} NFS: {$mount['sharename']}" _nfs._tcp local. 2049 path=/mnt/{$mount['sharename']} - -EOD; - } // end foreach - } // end if - - fwrite($fd, $mDNSResponder); - fclose($fd); - - - /* run mDNSResponder */ - mwexec("/usr/local/sbin/mDNSResponder -f {$g['varetc_path']}/mDNSResponder.conf"); - - if ($g['booting']) { echo "done\n"; } - - return 0; -} - -/* this function is currently not used */ -function services_mdnsresponder_configure() { - global $freenas_config, $config, $g; - - /* kill any running snmpd */ - sigkillbypid("{$g['varrun_path']}/mDNSResponder.pid", "TERM"); - - if (isset($config['system']['zeroconf_disable'])) { return 0; } - - $fd = fopen("{$g['varetc_path']}/mDNSResponder.conf", "w"); - - if (!$fd) { - printf("Error: cannot open mDNSResponder.conf in services_bonjour_configure().\n"); - return 1; - } - - if ($config['system']['webgui']['port']) { - $mDNSResponder = <<<EOD -"{$config['system']['hostname']} Web Admin" -_http._tcp local. -{$config['system']['webgui']['port']} - -EOD; - } else { - $mDNSResponder = <<<EOD -"{$config['system']['hostname']} Web Admin" -_http._tcp local. -80 - -EOD; - } // end if - - if (isset($freenas_config['afp']['enable'])) { - $mDNSResponder .= <<<EOD - -"{$config['system']['hostname']} AFP Server" -_afpovertcp._tcp local. -548 - -EOD; - } - - if (isset($freenas_config['rsyncd']['enable'])) { - $mDNSResponder .= <<<EOD - -"{$config['system']['hostname']} RSYNC Server" -_rsync._tcp. local. -{$freenas_config['rsyncd']['port']} - -EOD; - } - - if (isset($config['sshd']['enable'])) { - $mDNSResponder .= <<<EOD - -"{$freenas_config['system']['hostname']} SSH Server" -_ssh._tcp local. -{$config['sshd']['port']} - -EOD; - } - - if (isset($freenas_config['ftp']['enable'])) { - $mDNSResponder .= <<<EOD - -"{$config['system']['hostname']} FTP Server" -_ftp._tcp local. -{$freenas_config['ftp']['port']} - -EOD; - } - - if (isset($freenas_config['samba']['enable'])) { - $mDNSResponder .= <<<EOD - -"{$config['system']['hostname']} Samba Server" -_smb._tcp local. -139 - -EOD; - } - - if (isset($freenas_config['nfs']['enable'])) { - /* If no share configured, exit */ - if (!is_array($freenas_config['mounts']['mount'])) { break; } - - $a_mount = &$freenas_config['mounts']['mount']; - - foreach ($a_mount as $mount) { - $mDNSResponder .= <<<EOD - -"{$config['system']['hostname']} NFS: {$mount['sharename']}" -_nfs._tcp local. -2049 path=/mnt/{$mount['sharename']} - -EOD; - } // end foreach - } - - fwrite($fd, $mDNSResponder); - fclose($fd); - - - /* run mDNSResponder */ - mwexec("/usr/local/sbin/mDNSResponderPosix -b -f {$g['varetc_path']}/mDNSResponder.conf"); - - if ($g['booting']) { echo "done\n"; } - - return 0; -} -?>
\ No newline at end of file |