diff options
Diffstat (limited to 'config/avahi/avahi.inc')
-rw-r--r-- | config/avahi/avahi.inc | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/config/avahi/avahi.inc b/config/avahi/avahi.inc new file mode 100644 index 00000000..a95eaaf0 --- /dev/null +++ b/config/avahi/avahi.inc @@ -0,0 +1,167 @@ +<?php + +/* + $Id$ + avahi.inc + part of pfSense (http://www.pfSense.com) + Copyright (C) 2009 Scott Ullrich + 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. +*/ + +function start_avahi() { + mwexec_bg("sh /usr/local/etc/rc.d/avahi-daemon.sh start"); +} + +function stop_avahi() { + mwexec_bg("sh /usr/local/etc/rc.d/avahi-daemon.sh stop"); +} + +function setup_avahi() { + global $g, $config; + + // Extract out libraries and avahi-daemon + if(file_exists("/tmp/avahi.tgz")) { + exec("/usr/bin/tar xzPf /tmp/avahi.tgz -C /"); + unlink("/tmp/avahi.tgz"); + } + + // Make sure everthing was extracted + if(!file_exists("/usr/local/sbin/avahi-daemon")) { + log_error("Sorry, something went wrong while extract avahi binaries. Please try the operation again"); + return; + } + + // Pull some various values out of config.xml + $hostname = $config['system']['hostname']; + $domain = $config['system']['domain']; + $enable = $config['installedpackages']['avahi']['config'][0]['enable']; + $browsedomains = $config['installedpackages']['avahi']['config'][0]['browsedomains']; + $denyif = $config['installedpackages']['avahi']['config'][0]['denyinterfaces']; + + // Is package disabled? + if(!$enable) { + delete_avahi(); + return; + } + + // Add needed users and groups + exec("/usr/sbin/pw useradd avahi"); + exec("/usr/sbin/pw groupadd avahi"); + + // No supplied domains? Use the defaults. + if(!$browsedomains) + $browsedomains = "local, 0pointer.de, zeroconf.org"; + + // Never pass along WAN. Bad. + $denyinterfaces = $config['interfaces']['wan']['if']; + + // Process interfaces defined by user to deny. + if($denyif) { + $if = split(",", $denyif); + foreach($if as $i) { + $ifreal = convert_friendly_interface_to_real_interface_name($i); + if($ifreal) + $denyinterfaces .= ", " . $ifreal; + } + } + + // Construct the avahi configuration + $avahiconfig = <<<EOF + +# avahi.conf - This file was automatically generated by the pfSense pacakge +# manager. Do not edit this file, it will be overwritten automatically. +# See /usr/local/pkg/avahi.inc to make changes to this file! + +[server] +host-name={$hostname} +domain-name={$domain} +browse-domains={$browsedomains} +deny-interfaces={$denyinterfaces} +use-ipv4=yes +use-ipv6=no +enable-dbus=no +#check-response-ttl=no +#use-iff-running=no +#disallow-other-stacks=no +#allow-point-to-point=no + +[wide-area] +enable-wide-area=yes + +[publish] +#disable-publishing=no +#disable-user-service-publishing=no +#add-service-cookie=no +#publish-addresses=yes +#publish-hinfo=yes +#publish-workstation=yes +#publish-domain=yes +#publish-dns-servers=192.168.50.1, 192.168.50.2 +#publish-resolv-conf-dns-servers=yes +#publish-aaaa-on-ipv4=yes +#publish-a-on-ipv6=no + +[reflector] +enable-reflector=yes +#reflect-ipv=no + +[rlimits] +rlimit-core=0 +rlimit-data=4194304 +rlimit-fsize=0 +rlimit-nofile=300 +rlimit-stack=4194304 +rlimit-nproc=3 +#rlimit-as= + +EOF; + + // Make image RW + conf_mount_rw(); + /* Write out .conf file */ + safe_mkdir("/usr/local/etc/avahi"); + $fd = fopen("/usr/local/etc/avahi/avahi-daemon.conf", "w"); + fwrite($fd, $avahiconfig); + fclose($fd); + /* Write out rc.d startup file */ + $start = "/etc/rc.conf_mount_rw\n"; + $start .= "if [ ! -d /proc/0 ]; then\n"; + $start .= " mkdir -p /proc\n"; + $start .= " mount -t procfs procfs /proc\n"; + $start .= "fi\n"; + $start .= "/usr/local/sbin/avahi-daemon -D\n"; + $start .= "/etc/rc.conf_mount_ro\n"; + $stop = "/usr/bin/killall avahi-daemon"; + write_rcfile(array( + "file" => "avahi-daemon.sh", + "start" => $start, + "stop" => $stop + ) + ); + // Make image RO + conf_mount_ro(); + start_avahi(); +} + +?> |